Sonntag, 4. Dezember 2011


It was a cool experience at the Devoxx.
Somebody said, "Devoxx is not so much about learning, but about getting passionate".

It definitely hits the nail on the head. Of course, I did hear a lot. My personal major keywords would be: the Cloud, NoSQL(MongoDB), Android, HTML5!
There were excellent talks presented by fascinating people. The presentations and the many live demos on the interesting themes, really motivates one to test and try out the cool "newbies"!

Fazit: See you next year! :)

Some more reasons to attend Devoxx:

P.S Unfortunately those trees on the main avenue near Centraal Station didn't make it :(

Day 5 - where does time go?

Friday was the last day of the DEVOXX 2011.
Lots of people had already left but there were still enough to fill a few rooms to hear the technical discussion panel.

The talk on the "Evolution of Java: Past, Present and the Future" by Joshua Bloch was of course also very well attended. Joshua Bloch presented his views on basically all the major changes in Java since 1995, from assertions to serialization to Project Coin.

Cool talk :)))

Day 4 - on Cloud nine

So, as you may have noticed, this is a way overdue entry about day 4 at DEVOXX 2011 :)

As I still haddn't gotten enough, I decided to hear another session about the Cloud.

Cloud is such stuff that dream are made on
(Patrick Chanezon, Guillaume Laforge and Ludovic Cahmpenois)

Overview of:
- Saas (Software as a service)
- Iaas (Infrastructure as a service)
- Paas (Platform as a service)
- Cloud Foundry, Google AppEngine, Cloudbees,Microsoft Azure

-- Google AppEngine
- easy to build
- easy to manage
- Admin Console "Appstart"
- secure
- SLA (99% uptime guarantee)
- easy to scale

- lightweight Groovy Toolkit on top of Google App Engine

“Don’t be a Google Bitch, don’t be a Facebook Bitch, and don’t be a Twitter Bitch. Be your own Bitch.”
Fred Wilson

--> Look at open source/open standards aspects of the platforms and services you use


Html5 with Play,Scala Coffeescript and Jade
(Matt Raible)

Matt Raible in a entertaining talk, went about on his adventure on building a app using these technologies.

Check out his slides:
Html5 with Play,Scala Coffeescript and Jade

Cool talk! :))

The jQuery Essentials
(Addy Osmani)

In a completely packed room, this talk presented some jQuery essentials.

Why use jQuery?
- well documented
- well tested
- large community
- it is lightweight

In the top million sites, over 60% use jQuery!

Version 1.7 just released!

Check out his talk here

(Andrew Swan and James Tyrrell)
- Spring Roo is a shell based next-generation rapid application development tool for Java developers

The speakers demonstrated live how to use Spring Roo to very quickly create an application.

_It is useful for rapid prototyping or experimenting with supported technologies.
_even allows DB reverse engineering
_can create repositories, services on demand.

Cool talk, but the shell based aspect, does turn me off :p

Donnerstag, 17. November 2011

Some quotes heard

Some quotes from the speakers' quotes

"What's the difference between Ant and Maven?
The creator of Ant has apologized."

"Give a man a fish; and you have fed him for today. Teach a man to fish; and you will be answering fishing related questions forever."

Mittwoch, 16. November 2011

Day 2: a bit more of Android if you please :)

Building Android Applications for performance usability
(Bruno Oliveira)

4 billion mobile devices!!

- 550000 daily activations!
- 250000 apps!

Bruno's plan
users are our friends!
-making apps faster is the plan (because users are our friends!)

What don't the users know they want?

How do you impress the user? Quality is essential!

2 Kinds of Apps:
- apps that love the user
-apps that hate the user

Apps without users have no bugs.

>>Interface/usability design
-no surprises

easy to learn X easy to use

Who will design your app?
You? Would you trust a designer to program your app?!
Hire a designer to design your app!

- use the action bar!
- use "home" (icon or logo)
- when items are selected show actions available
- use fragments
- make the "hero" screen awesome -> it's the page the user will show his friends
- always worry about compatibility (system version, screen size, keyboard,...)

So use:
_different resource folders
_android manifest file: use
_different layouts for different screen sizes
_"dp"(for images) and "sp"(for text) instead of pixels
_match_parent and wrap_content for flexibility
_never use AbsoluteLayout
_supply bitmaps for different resolutions

UI/UX Tipps
# apps adapted to each platform
# make your app present (or else your users will forget the app)
-intents, content providers,live wallpapers,...
# NOT every device is a phone!
# use the best of every device, let the user configure input
# the user isn't always online
# instead of constantly pinging the server, use C2DM for push notifications
# use broadcast receivers to know about connectivity
# allow te user to configure the app
# Don't mess with the back button!! Really.
# smart users read instruction. NOT true!
# always allow the user to undo an operation
# users change their minds so... always let the user cancel/postpone an operation (and be quick about it!)
# do NOT ignore rotations/flips
# users have infinitely small fingers. Also NOT true! Users have big and imprecise fingers!
# users want simplicity.False! users want clarity

-try to prevent the "sorry screen"
- performance
- don't block the UI thead, use Async Task
- entertain the user (via spinners, process dialog,...)
- allow the user to cancel/postpone

Common causes for slowness:
-heavy math
Do not allow this on the UI Thread!

How to work in the background? -> asyncTask, IntentService

Improving app performance
premature optimization is the root of all evil! (Donald Knuth)
-optimize code in the right place

If you cannot improve performance, fake it! If you have slow apps, you have angry users.
Remember the most important is..:

Super cool session!! One of my favourites so far, and I am not even that into app programming! There is of course much more to say, but this session you HAVE to see on parleys.
Presented in a cool way but definitely to the point :))))

Day 3 HTML 5 rocks!!

Death of the slow: 7 Reasons to love JBoss AS7
(Dan Allen and Andrew Rubinger)

#1 - Speed
#2 - Modular Design
#3 - Exceptionally lightweight
- define servlet-configuration to trim for ex. servlet container
#4 - Domain Management
- keyword: Domain Controller, Server group
#5 - Elegant administration
#6 - First class components
ex.: Ruby on JBoss (TorqueBox for Java and Ruby!)
#7 - Developer productivity
-JBoss Forge

Bleeding Edge HTML5
(Paul Kinlan)

- < details > / < summary > - to expand and collapse content
- < output > - no need for onclick or onchange
- < mark > - for highlights
- speech input - x-webkit-speech

>> Intelligent Web Apps
- smarter animations (browser gets more control, on how often call back functions are called) -> window.requestAnimation
- Page visibility API/Rendering -> detect if user is on the page tab or not
- know when you are connected -> so you can do diferent things accordingly

Some other keywords:
- Web Intents (see android intents)
- Rich Media: full screen API
- Web RTC

Basically from what I saw, I have to agree with the speaker, it is just Craaaazy cool!! I want it too!
Great speaker! :))))

Performance anti-patterns in Hibernate
(Patrycja Wegrzynowicz)

#1 - premature optimization
#2 - lost proxy on owning sid -> prefer field access mappings
#3 - temporary changes -> flush to database
#4 - inadequate collection type on the owning side
one-to-many relationships
- bag semantic :(
- set semantic :)
- list semantic :(
#5 - OneToMany as owning side
-> use ManyToOne as the owning side and OneToMany as the inverse side
#6 - inadequate collection onb the inverse side
#7 - OneByOne processing

Conclusion: read the documentation!

Interesting and scary were some examples she showed about how many updates hibernate does in the background if one uses inadequate types. Eeeeeerie!

Productivity enhancements in Spring 3.1
(Costin Leau)

>> Spring 3.1
> Environment abstraction: Bean Profiles
- group objects by target environment (ex. test,dev,prod,..)
- activate profiles - when beans are not active, they are not validated :)

> Java based App Config (for those who curse XML)
- can use it instead of XML or alongside it
XML JavaConfig
Namespaces @enable*
FactoryBean Builder
GenericXMLContextLoader AnnotationContextLoader

> c: namespace (analogue to p: namespace)

> Cache Abstraction

> @MVC improvements
- was introduced in 2.5 - improvements in 3 for REST

> Consumers and producers

> Refined JPA support

- RC1 out in October
- RC2 next week
- GA soon after

Day 3: Conference Days start

Today marks the beginning of the "conference days". The first 2 days were the so called "Student days". Plus the exhibition started only yesterday. Lots of more people, and I mean A LOT more people.

Stephan Janssen, organizer of the DEVOXX, started with some anouncements and then keynotes by some "java guys from Oracle"(not my words! :))
Henrik Stahl(on Java SE) and Cameron Purdy(on Java EE). I am not going to present the notes here, but here are just some keywords:
Java 7 EE: Cloud, Modularity (jigsaw), HTML5, Elasticity, multi-tenancy,JMS 2.0

Stephan Janssen presented some quite impressive numbers.
Attending the DEVOXX this year are 3350 people from 40 countires!! Wow!

He also revealed a secret... next year 18-20 April there will be a DEVOXX in Paris,France! Cool I thought, .. but 75 percent will be in french :/

Another note, the DEVOXX sessions from 2010 are now available on Parleys FOR FREE!!

My first session of today:
In "Java: the good,the bad,the ugly" Joshua Bloch presented his own very personal view on ALL the packages of Java 1.0!

Day 2: Goodbye to SQL??

There is a new hype out there... a scary one called NoSQL.
I've read a bit about NoSQL and definitely wanted to attend at least one session about this theme.

Building Web Applications with MongoDB
(Brendan McAdams)

- MongoDB is schema-less
- For some problems "SQL sucks" and ORM becomes complicated.
- Joins are great but potencially messy
- instead of a "table", MongoDB has a "collection"
_id - primary key. if you don't specify one, driver will generate an unique ObjectId
- JSON Data
- $set -> update

>> NoSQL
- nonrelational
- horizontal scalibility
- no joins, no transactions
- best use-cases: caching, "scaling out"
- less suited for ad hoc BI, highly transactional applications, problems which require SQL

MongoDB revolves around memory mapped files
- operating swstem maps files on the file system to virtual memory
- 200GB MongoDB files creates 200GB of virtual memory
- when a fault occurs, it goes to the disk, hence slowing it down!
- deployment trick: "prewarm" your DB

>> OS Choice
- For production: use a 64bit OS for a 64bit MongoDB Build!
- 32 bit has a 2GB limit imposed by the OS for memory mapped files

>> Filesystem
-MongoDB is filesystem neutral BUT look out for posix_fallocate() because allocation of 2GB takes tile otherwise!

-BSON encoding
- Extent allocation
- Record allocation: padding because of document growth

>>Modeling Schemas
- think documents not rows
- docs arranged in collections
- favor embedding oer refrencing (FK consistency NOT checked)
- no datasource enforced FK relationships
- documents can be 16Mb

-There is a kind of query language that uses $operators
-Commands: drop, count, copydb, findAndModify
- Cursors
- Indexing and query optimization: you can specify hint to force a specific index

MongoDB and Java
- DBObject (like Map interface)
- ObjectId
- BasicDBList - toString() returns well defined JSON representation

>> ODM - Object Document Mappers
relationship: embed or reference
- in Java: Morphia, Spring Data Document
- in Scala: Lift MongoDB Record; Salat

>> Scaling
- read scaling: add replicas
- write scaling: add shards

- data model affects performance
- embedding vs. linking
- partial vs. full document writes
- partial vs. full document reads
Schema and schema usage critical for scaling and performance

-index common queries
-not over index: more indexes mean less data!

- consistent hashing
- range based partitioning

MongoDB Sharding _ automatic partitioning and management
_ fully consistent
_ convert top sharded system with no downtime
_ automatically balanced

MongoDB Backup: dump; restore; or journaling (snapshot)
Regular expressions can be used in searches, but are limited due to the indexes

Very interesting stuff!! And no, it's not goodbye to SQL :)
NoSQL is interesting and there are places where it fits, but it can never replace SQL.
Cooool session :))))

Dienstag, 15. November 2011

Day 1: Android again

Android Tools in Action
(Tor Norbye and Xavier Ducrohet)

- Half an hour session on some tipps on the Android Tools

Ok, so if you are not yet developing Android apps, not so much you can retain here. And 30 minutes is quite short.

Continuous Code Inspection with Sonar
(Olivier Gaudin)

Sonar basically presents the 7 deadly sins of the developer on a dashboard!
Cool: eclipse plug-in

This session presented Sonar live demo. Very cool to see how much information Sonar gives you.
Liked this session alot :)))

Code Review with Git and Gerrit
(Matthias Sohn)

Git: distribuited revision control system
- no central authority
- easy to branch
- easy offline usage
JGit: Java library implementing the
EGit: Git in eclipse

Code Review is not about fault finding or pointing fingers!
+ 4 eyes catch more bugs
+ learn without breaking
+ helps enforcing coding standards

>> Gerrit Code Review
notion of virtual branch
-code review before changes reachj the code base
-only completed changes reach the project history
-code reviews take time and implies paralel workflow
-every team member should do code review
- BUT it does take weeks or months to learn :(

Well, Gerrit Code Review does seem interesting...a bit. As pointed out by the speaker, it does take a lot of time to get used to. SAP does use Gerrit (about 700 developers). The code review does take some time, so the developer has to wait(!) until code gets reviewed. But each member in the team has to spend 1 hour reviewing someone else's code. Matthias Sohn pointed out, that this time invested is definitely worth it? because it does save time in the long run.
Somehow, I am missing the WOW effect...

Day 1: Spring into the cloud!

The next session I definitely wanted to see was about the cloud...

Spring into the Cloud
(Josh Long, Chris Richardson)

This sessions basically covered Spring and Cloud Foundry and described why they are a match made in heaven.
Concept "rent a cloud" eg. Amazon Web Services(AWS)
cloud computing defines IT as a service and pay per use

>> Layers:
- Saas(Software as a service)
- Paas (Platform as a service)
- Iaas (Infrastructure as a service)

- Clouds are a good option for startups -> scale up and scale down easily

>> Computing Types
- public cloud
- private cloud
- hybrid cloud

There is also the "micro cloud" -> cloud on your own computer
Search for a Framework: early attempts were for example Corba and EJB -> inflexible

Some topics:
- complete application lifecycle management
- cloud controller
- health manager
- router
- Droplet Execution Agents (DEAs)
- possible to use command line: vmc

>> Auto-Reconfiguration
- deploy Spring applicatiosn to the cloud without changing code!
- Cloud Foundry installs a BeanFactoryPostProcessor into your application context during staging
- adds jars to the application
- changes web.xml

- namespace for use in Spring app context
- - Scans all services bound to the application and creates a bean of an appropriate type for each
- - exposes basis info qbout services that can be consumed
with Spring's poperty holder
Spring 3.1
- Profile: beans definitions for a specific environment
- Cloud Foundry installs a custom ApplicationContextInitializer during staging
- Adds “cloud” as an active profile

Relational Databases are great:
- ACID semantics
- well suported(JPA, Hibernate)
- well understood

- complicated to map rich domain model to relational schema
- dificult to handle varying attributes
- schema changes
- poor performance in some cases
- impossible to scale horizontally

>> NoSQL

- higher performance
- high scalibility
- richer datamodel
- it is schemaless
- no transactions

->> Redis
- advanced key-value

- very fast
- optional persistence
Use cases:
- handling tasks that overload a RDBMS
- users:

->> MongoDB
- document oriented
- JSON style documents

- limited transactions
- rich query language
- very fast
Use cases:
- high volume writes (because its async)
- complex data
- users: SourceForge

Other NoSQL Databases: Neo4j, CouchDB,...

>> Spring Data (for NoSQL)
- template classes
- Java <-> NoSQL Mapping
- Cross Store persistence: in a class through annotation, it is possible to use JPA AND Mongo. So in one class; some attributes get saved in RDBMS and other in Mongo!

Cloud Foundry also offers MySQL, Redis, and MongoDB data services, as well as RabbitMQ messaging service.

Very interesting session! :))
Presented well and containing code examples. NoSQL seems cool but I DO like my SQL! :) There will be more on NoSQL..

Montag, 14. November 2011

Day 1: Android and more

There I was in in the cinema theatre, waiting for the session on Android to start when the anouncement came that there would be a ten minute delay because of some scanner problems at the registration. Phew, glad I registered yesterday :))
In the meantime, on the screen in front, you can follow the Devoxx Twitter.
Everybody in the theatre seems to have a laptop or a tablet or some smart phone.
First session today is packed. I mean really packed. People ended up sitting on the stairs!
Why? The first presentation I chose to attend is...:

Android Jumpstart - Introduction to Android App Development
Speaker: Lars Vogel (

This sessions aims to present the basic architecture of Android, and demonstrate the Android Development Tools for Eclipse as well as some basic concepts.
First of all, the latest super duper version of Android is 4.0

- "Almost Open Source"

Android Architecture

The lowest level is basically a Linux Kernel changed a tad. Diferent libraries, e.g power management etc.

Overview of API capabilities
- subset of Java SE
- Android specific API
- rich UI components, full network stack, database functionality
less memory and CPU boundaries -> it is after all a phone!

- Every Android application runs in its own process, with its own instance of the Dalvik virtual machine.
- you program in Java, and tool "dx" converts Java Bytecode into .dex format

Android Development Tools (ADT) for eclipse
- eclipse bqsed tooling
- provides the emulator (which can be SLOW)
- Android manifest file
- contains all components
- contains the minimum SDK version
- Resources Folder - may contain various resources for diferent resolutions
- Activity - is a single focused thing the user can do
- Views - Layouts are XML based

!Android is allowed to kill your app to save memory!!
-> so it is important to understand Lifecycle e.g states of activity.

There are two methods almost all subclasses of Activity will implement:
- onCreate(Bundle) - where you initialize your activity
- onPause() - where you deal with the user leaving your activity...and where you should save the user data

Topics and things to keep in mind:
- Menus: important to use the flag "ifRoom"
- Intents (explicit and implicit)
- Context (Activity extends Context)
- Preferences
- ListView - gets the data from the adapter(adapter defines the data and how
listItem should be presented)
- ListActivity: provides some nice hooks
- use "convertView" -> if the view is NOT null, we can simple re-use the convertView
as the new View -> good for performance
- findViewById -> NOT good for performance
- holder pattern -> good for performance
- when testing your app, remember to "flip" the device!
- Fragments: supports more dynamic and flexible UI Designs on large screens
- for each device define a layout: easily done in the resources folder

>> Services and Receivers
- allows real multitasking and background processing
- decoupled from activity lifecycle
- services run in the background without interactivity with the user (eg.
NotificationService, VibratorService, LocationService)
-> you can define your own services that should be done in background

>> Broadcast Receiver
- registered as a receiver and only valid within the onReceive() method

>> Security
- "application sandbox": every app is run as its own linux user
- access permission to android functionality is definde in android manifest file
- when installing an app, you can see this information and choose wheter to proceed
or not and so prevent malicious apps from being installed

Other features:
- pull/push to device
- live wallpapers
- simple ListHandling
- animations and styling
- (multi-) touch
- NFC (Near Field Communication)

>> Testing
- Robojuice
- Monkey: basically presses all buttons and input fields randomly!

Definitely chose the right session to start my Devoxx experience!
Great speaker and really good introduction to someone not yet familiar with Android :))))

Devoxx - let the games begin!

So there I was, at my first Devoxx with me orange armband:)
Breakfast at the Devoxx basically means a large amount of sugar: croissants and sweet cakes. And coffee, lots of coffee (thank goodness for that!) :) There are also some fridges filled with drinks like coke,juice and water.
I headed into my first session...

Sonntag, 13. November 2011


After arriving at the Antwerpen Centraal Station, which is a monument on its own to visit (simpy magnificent building!), quickly found my way to the hotel.
Checked into the hotel, which seems quite nice. The lady at the reception told me the drinks in the mini-bar are free, and when I looked astounded she quickly added not to expect any champagne or fancy drinks :) Free coffee and tea all day in the lobby and free WIFI. Regarding breakfast, I will be taking my chances at the Devoxx and hope to rely on "Vers Brood en Kaas" ;)
I went to register at 18h, got my Devoxx bag and T-shirt. And my armband. I looked at the guy funny when he put it around my wrist. It looked like mere paper and I am supposed to wear it the whole week (you cannot take it off once it's on)?? The guy told me, it's like a rock festival, I must wear the armband the whole week, yes. Rock festival? Ok, note taken;) But ok, the armband is made of a kind of plastic, and is water proof (tested that already :p)
I strolled around the Central Station afterwards, looking for a place to eat when a lady with a notepad in her hands approached me. Well, to cut the story short, after a few hours of being in Antwerpen, I had already signed a petition so that they wont't cut all the trees(!) on the lane that leads from the station. Apparently the city thinks that the trees refrain people from seeing the station from further away. Or so it was explained to me. Does really seem silly to cut off all the trees (pretty big trees), doesn't it?

Anyhow, tomorrow it gets down to business.

Will keep you posted.

Getting there....

Ok. Call me crazy, but I travelled by train to Antwerpen! Nothing like supporting the DBahn and all ;) And yes; of course there was a delay. Wouldn't be the DBahn if not; now would it. Anyway, my trip took me to Brussels via Köln. Still had time to take a snapshot of the Dom. Then after the delay, I finally continued to Brussels. With a good book and some chocolate chip cookies, the trip isn't THAT long... just about 6 hours ;)
Well, in Brussels the most people speak French, though the names appear in both french and Flemish. But I think never before did I hear so many diferent languages or see so many people of diferent nationalities in such a short period of time!
Naturally I could not refrain myself from also trying moules et pommes frite accompanied with belgian beer. I actually don't appreciate beer, but hey, in a city where they even have a beer museum, I go with the flow :) Seemed like everyone else was eating pommes frites, or standing in a queue to get some!
From Brussels to Antwerpen, it's only about 40 minutes by train. In Antwerpen I have to switch my "Merci" to "Dank u". Most people here speak Flemish, which is fun, because it's not hard to understand.

Devoxx 2011!

Welcome to the Devoxx 2011!
Michelle reporting to you from the city Antwerpen.

Stay tuned :)