Devoxx 2014, Day 4

First of all a small notice on the Ignite sessions at Devoxx. The 5 minute talks with 20 slides were very entertaining and I am glad that Roland kind of talked us into this. The sessions take place during lunch break but it is definitely worth taking the time and listening to the talks.

Now let’s go through the talks of day 4 in Antwerp.

“Modern Enterprise Java Architectures with Spring 4.1” by Jürgen Höller (christian)

Being an active Spring developer myself, I visited Jürgen Höller’s talk to get up to date with the latest Spring release 4.1. In our project we are currently still using version 3.2 but plan to upgrade to 4.1 shortly.

The talk itself was a no-frills, informative presentation of some of the new features which were made possible due to Java 8 features. I’ll summarize the most important ones.

Dependency injection now takes into consideration generic types of bean declaration:

Example

@Configuration
public class AppConfig {

// definition of two beans with the same raw type CustomProxy
@Bean
CustomProxy<String> stringWrapper...

@Bean
CustomProxy<Integer> integerWrapper...   }

public class someClass{
...
/**
* This would throw an exception in Spring 3.x since
* there are two beans of type CustomProxy. In Spring 4.x
* the Generics Type is taken into account for autowiring,
* hence there is only one autowiring candidate.
**/
@Autowired
public void doSomething(CustomProxy<Integer> wrapper) { ... } }

Multiple annotations of the same type can be applied to the same method (actually this is a Java feature and is not Spring specific, but still very handy).

Example

@Scheduled(cron_job_def_1)
@Scheduled(cron_job_def_2)
public void someMethod(){...}

Next cool thing is the support for Websockets (with @SubscribeMapping) as well as the support for JCache annotations in addition to Spring’s own annotations (@Cacheable). The two are not exactly equal in functionality but can also be used in parallel.

To sum things up, Spring has solid work going on to improve its framework foundation and to incorporate the latest Java features and APIs. This makes me confident in upgrading our project to the latest Spring release.

“Busy Java Developer’s Guide to Apple’s Swift” by Ted Neward (christoph)

Ted Neward talks about Swift. Unfortunately I personally never had the chance to try out objectiveC - Apple’s previous language for writing iOS/OSX applications. But I have heard so much people complaining about the syntax pain that you are facing while writing objectiveC code. Ted Neward and most of the audience in the room definitely aggree with this opinion.

So now with Swift Apple created a new language that might solve things here. What’s needed to write Swift and run code? Mac OSX, of course and Apple’s IDE XCode. In case you intend to write native Mac OSX applications using Swift you need Yosemite Mac OSX installed on your machine. For iOS applications this is not the case.

So Ted walks through the Swift syntax and language features. By going over the basic language look and feel he shows the development experience within XCode and adds a very cool sense of humor to that. Maybe one thing to stress is that Swift emphasises the usage of immutable values. The rest is pretty much exactly what you as a developer can expect from a programming language nowadays.

The presentation on Swift makes me (again) curios and excited on writing a iOS/OSX application on my own. Maybe I am lucky some time to come accross this experience.

“15 JavaScript Tools” by Romain Linsolas (julian)

On Day 4 Romain Linsolas presented 15 JavaScript Tools in 15 Minutes. For me as a JS-Developer it was interesting to see if there are any tools out there I havent’t tried out yet and can improve my work. And I was not disappointed that’s for sure.

This is not the full list of all 15 Tools because some were obvious like IntelliJ and Sonar. But I will try to highlight the tools:

  • NodeJS: Server-side JavaScript platform, with its own package manager npm with gives access to about 105000 packages
  • Yeoman: Project Scaffolder - it creates project structures for you with about 1000 generators.
    yo webapp, yo angular, yo ember, …
    When you us this you get a complete project structure with dependency management and build automation.
  • Bower: This is a package manager which manages your js dependencies.
    bower install angular – save
  • Grunt: A JavaScript task runner. It’s like ant for JS with about 3600 plugins
  • CasperJS: This is a headless scripting testing utility based on phantomJs.
  • JsLint, JsHint, Google Closure Linter: These are JS code quality tools which are available as IDE plugins
  • Gulp: It is a stream based build system with about 1000 plugins.

Example

gulp.task(‘minify’, function() {
     return gulp.src(‘<PATH_TO_SRC>’).pipe(plugins.concat(‘myApp.js’)
                .pipe(pluings.uglyfy())
                .pipe(plugins.gulp.dest(‘dist/myApp.js’));
}

“Pushing Java EE outside the Enterprise Space: Home Automation and IoT” by David Delabassee (ana)

David defined home automation as devices in a home that should be controlled in an easy way.

He has said that the market is already crowded and that is why there are a lot of technologies for home automation. And this is just the beginning!

He has spoken only about the Z-Wavee and KNX technologies. Z-Wavee is cheap, simple, not intrusive and not standard. KNX is used more for industrial purposes, not user friendly, expensive, ISO Standar and more reliable. For a normal home automation, the first one would be enough.

He has the experience of “playing” with KNX at home (so I assume that Oracle has to pay good enough, because this is the expensive one!). With a HTML&JS app he was able to turn the lights on and off.

About Java EE he has said briefly something about: Java API for Web Socket, JSON-P, Java API for RESTful Web Services 2.0, CDI events, Message Drive Bean, etc.

I found this talk a good introduction to know where to start if you want to learn more about “Home Automation”.

“Have startup. Need money” by Jan Vorstermans (torsten)

Jan Vorstermans is the managing director of the investment company Qunova that is focused on early stage technology start-ups. His talk was about a lot of aspects that are important for an entrepreneur that is looking for money to get his/her business running and becoming successful.

Statistics

62% tech startups fail in the first 4 years. The top failure reasons are:
* 40% No market need
* 29% Running out of cash
* 23% Team
* ?% outcompeted
* …

Facts on successful entrepreneurs

  • Average age of successful entrepreneurs is 40
  • 99% are from the middle class
  • They worked in other companies for more than 6 years
  • There standard work environment as an employee did not fit them

Advice from Mr. Vorstermans

  • Forget the stats!
  • Take a problem that really bothers you. Chances are higher that there is a market for your product.
  • Make sure to have the skills.
  • Find the team with which you’d want to go to war.
  • Define your strategy and funding requirements upfront.

On Business Angels and VCs

  • Stages of your business
  • idea - incubate - trials - MVP -launch - scale - global - growth
  • Funding possibilities:
  • friends, fools, family
  • government: 10-100K
  • business angels: few 100K
  • early stage VCs (very few in Europe): 100-2000K
  • venture capital
  • crowdfunding

Do you need external investors?

Depends on: business, market, ambition, (your own) means
* Investors do not grow on trees
* growth & comfort don’t co-exist
* people matter
* get the right type of funding

What do inverstors look for?

  • strategy, business plan: what business are you in, merket dynamics, product, go-to- market
  • Team
  • Financials (5 year plan): Tells the VC something about your assumptions and what your thinking is (optimistic, conservative,…)
  • Exits and returns: long term liquidity, X-factor

how to raise funding?

  • Likely investor?? Somebody has to introduce you
  • Get noticed
  • Who would YOU like to be an investor in your company
  • Explain your business - BRIEFLY
  • Differentiators
  • Know your facts
  • Be persistent
  • First pitch to investors who are likely to be negative

don’t ..

  • Focus on your technology only
  • Be a CEO rock star
  • Present a huge spending budget
  • Focus only on product milestones
  • Let your people choose their own job titles
  • Let your board members become very hands-on

Expectations in the first two years

  • 98% fall short of meeting projections
  • 80% fail to see projected returns
  • 40% lose most or all investments

Things to remember

  • don’t spend time beating on a wall, hoping to transform it into a door
  • success = product x market x team x L(uck)
  • network like crazy
  • a good traveler is always ready to change his plan
  • don’t forget to dream

never loose your…

cool … stamina is not to have energy to keep going, it is to keep going when you have no energy left.

sense of humor - past, present and future walk into a bar. it was tense.

I found it very refreshing to listen to a non technical talk and to hear from an expert about the “have startup. need money” thing. This years new “startup” series is a really good addition to the Devoxx and I really appreciate that Devoxx is still developing.

“OnConnectionLost: Challenges of an offline web application” by Birgitta Bckeler and Lukasz Plotnicki (julian)

Building and running a JavaScript Client which consumes REST-Services and is always online like the most websites and customer portals out there can be difficulty enough. But when you have to build such applications with the requirement to run off- and online, then you have to conquer some new challenges.

Birgitta Bckeler and Lukasz Plotnicki talked about their experience they got while facing such requirements and how they solved them.

How to make the client offline available?

  • use €œapplication-cache€ and make it hold the HTML, JS and CSS files locally
  • manifest declaration in the HTML tag needed
  • the client can listen to browser event: e.g. CHECKING, DOWNLOADING, PROGRESS, UPDATEREADY
  • it is an additional cache not the normal browser cache
  • more information here: http://www.html5rocks.com/de/tutorials/appcache/beginner/

How to hold offline data?

  • use “web storage” which basically is a key/value storage
  • has an synchronous api
  • there are two types: local storage and the session storage

But there is a problem when the user wants to work with different browser tabs, the data can get asynchronous.

  • use the local database the browser provides, in case of chrome it is IndexDB.
  • this is a document database
  • it is schema-less but you have to deal with different versions of data models in case of client updates

What if you have to handle file up- and downloads?

There is an api called “File-API” which provides a way to upload, download and save files locally.
Chrome provides 50% of the available storage for its offline applications and gives each application 20% of it.

How to handle data changes?

  • capture changes
  • queue changes, e.g. in the IndexDB
  • synchronize next time server is available

How to handle conflicts?

  • this can be difficult to handle, so verify if conflicts are really possible and how important this is for the application!
  • solution: just ask the users to choose the correct version

Question you should try to answer when you are going to build an offline web application:

  • Which and how many storage is available?
  • What is the data structure?
  • Do you have sensitive data?
  • Are there potential data conflicts?
  • Which browsers do you have to support?
  • What is the amount of functionality that has to work offline?
Author: Christoph Deppisch
Categories: devoxx, development