This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Pair Programming experiment

nofun_nojava Some months ago we were asked if we want to participate a pair programming experiment. The guy who asked was "Code-Cop". Of course, this is not his real name but it's easier for you to understand what he does. He is fanatic about code quality. He likes his code being in order, e.g. nicely formatted, readable, proper named, designed, tested etc. And trust me, these are not just words for him.

Read the full story about Code-Cop and his craftsmanship tour on his blog.

My first thoughts

I did pair/xtreme programming in 2001 and thought it would be nice to do it again. But I thought it could be a risk because I found my own source style and defined my own quality standards over the years. I thought that my quality standard is very high and I'm a professional developer with a lot of experience. You could say that I have a lot of self-confidence... hm... not really bad. What I also learned over the years was that you can't be successful without changes. Every change is a risk because you learn/see something new and maybe you don't like it. But you don't know what you like until you've tried it. This is the most important experience - from my point of view.

So it was great to have this new opportunity and it's always cool to work with same minded people :)

The experiment

We planned to work 3 days with Code-Cop. It was not clear if one person or two persons should work with Code-Cop. We wanted to use the experiment as mechanism of getting input from "outside". The more different perspectives, the better. We had many different tasks for the 3 days, but not all were good because I'm researcher and love playing around with new technologies/frameworks and products. If you do pair programming, you should develop.

I had one task that was open for a while and it frustrated me that it was open. It was the optimization of our JVx build process and fixing some failed test cases. Don't misunderstand me... I hate red test cases and my tests are always green, but it's boring if your tests are green on your developer engine but fail on the build server (different encoding, different OS, ...). Another bad thing was that the build ran about 80 minutes!
The problem were our unit tests because we mixed manual (performance, timeouts, ...) and automatic tests. My plan was a build time around 10 minutes.

The optimization and tuning was the task for one day. Another task was the implementation of a new feature for our product VisionX (a very short task for about a half day). The rest of the time was hardcore coding with Martin, because we have one really complex model class in JVx. Its the MemDataBook class and it grew over the years. It's about 5000 lines with about 3000 LoC. It's a big class but it's not a monster. It's the biggest class in JVx and has the most logic. It was the right class for pair programming :)

How we worked together

We worked together on the same machine with a big external screen, two keyboards and two mice. The first day was a challenge because Code-Cop and I tried to find out who's the top dog :) Not that bad, but it was a big difference to work with another person on the same machine and the same problem (and it didn't help that we are ambitious and dominant). We had different ideas and sometimes different solutions for a problem. I tried to dominate the keyboard because I was used to. One tip: Don't do this, because you don't focus on the problem.

We had great discussions and smaller brainstormings about code quality. It was awesome.

From the second day, everything was in flow because the first day was to get to know the other person. We did our tasks and I had some extra tasks/ideas that could be useful.

pairprogramming The rest of the second day and the third day were reserved for Martin. It was funny to see them in action, because Martin got a "Mouser" and "Keyboarder". It was a long awaited dream of him - a person who understands what he think and can produce source code of his ideas. Of course, they had a tricky task and it wasn't possible to finish the task in two days, but Martin got some new ideas. And last but not least - they had fun!

All 3 days were awesome because Code-Cop was productive from the first minute. We didn't waste time to explain how our framework works. This only is possible if you work with geeks.

Lessons learned

  • It's great to try new things
  • Work with geeks who are professional and have a lot of experience (if you find someone)
  • Use the keyboard and learn most important shortcuts of your IDE. You save time!
  • Don't think you are professional enough. There's always space, but be solution and practice-oriented.

The experiement was awesome and Code-Cop is a pro' geek. We had a great time and I can recommend such experiments.

VisionX 1.2 - Preview II

We know that VisionX 1.2 will be #awesome because it has endless power under the hood. It'll combine productivity features with state-of-the-art technologies. The release is still planned for 2013. But we won't let you wait :)

The brand new preview version of VisionX 1.2 is available as trial and as cloud service. The preview version is not feature complete but contains a lot of new features and of course, many improvements.

A short intro

  • New html5 client based on VaadinUI
    vaadin It's awesome to design an application and see all changes live in your web application. One mouse click is enough to be amazed.
  • Mobile client support is on board

    VisionX has support for native iOS and Android apps. This is a killer feature, because you design your application and your native app is ready without additional steps. We're still working on our native apps because they aren't available in app stores. This needs some additional time. But our open source clients work without problems!

  • Super fast Oracle support

    The last VisionX versions had performance problems with (very) large databases. You had to wait about 10 minutes or more, to select a table. This was so frustrating. The performance is now better than ok. It works without delays!

  • New actions

    We have new actions for tabset and component handling, for environment access (web, desktop, mobile) and much more.

  • New events
    events event_tabs
    We have new events for work-screens and tabsets.
  • Extended reporting syntax

    Our old solution was loop oriented. Loops were used for iterating all records. You had no chance to get the value of a specific record. This is now possible. We now support following: [LOOP@storage#3][YEAR]/[MONTH][LOOP@storage#3]. This placeholder prints the value of YEAR and MONTH from the third record. The short syntax, for one single column is [storage#3!YEAR].

  • Self-joined trees

    It's now possible to create trees with self-joined tables.

  • Environment control
    environment
    It's now possible to hide specific screens on specific environments, e.g. You won't see the user-management screen with html5 mode, but it'll be available in your desktop application. Don't create new roles or new users for that, simply change environment flags via menu management.
  • New LIVE preview wizard
    preview The wizard allows html5, mobile or desktop preview and shows additional information for manually previewing applications.

    VisionX shows scannable QR Code for mobile preview mode.

  • New online help based on Vaadin

    Our new online help system supports full-text search and has a modern style.

Above list is not complete because we have about 250 changes in this version (most are new features).

Simply try the preview and send us your feedback. Every comment is welcome!

Our customers should check their download area!

VaadinUI 1.0

Our new vaadin UI is available. It's the first release and it's awesome.

Get the binaries from our project site. It's licensed under Apache 2.0 and free for all.

The installation is very simple:

  • Download jvxvaadin-1.0.zip
  • Unzip the archive
  • Add all files to your existing JVx application
  • Change Deployment descriptor (web.xml) and replace simpleapp with your application

Have fun ;-)

Vaadin OnlineHelp 1.0

Our new Online Help system is available. It's the first release with our new vaadin UI. It's fully compatible with our old, GXT based, help system.

Get the binaries from our project site. It's licensed under Apache 2.0 and free for all.

The installation is very simple:

  • Download jvxhelp-1.0.zip
  • Unzip the archive
  • Copy the new directory to your application server, e.g. /webapps/
  • Open http://yourserver:port/jvxhelp-1.0/help/

The help content is saved under /structure. The system reads all available files and directories from the structure directory and creates a table of contents.

W-JAX 2013 - JVx on stage

We'll be live on stage at W-JAX '13 in Munich.
Our session is scheduled for Tuesday, 5th November - 10:15 to 11:30.

We'll talk about UI independent application development in practice

Are there enough web and UI frameworks for us developers? Absolutely! There are really cool web UI frameworks like GXT or Vaadin. There are swing and JavaFX for desktop apps and many others. Don’t forget all web frameworks! Which UI framework is the best for your next project and works with browsers and OS‘ in 5 or 10 years? Which investment is future save? The only solution is a technology and UI independent framework. Such a solution is JVx (Apache 2.0). It is a full-stack app framework, designed as library. Develop UI independent and decide which UI technology is best for you. If you prefer Swing, start your app as Swing Application. If it’s Vaadin, use Vaadin. Don’t rewrite your application, just choose the preferred UI technology!

Come and talk with us

Project news [2]

This is an update of Project news.

We completely replaced our good old Java OnlineHelp (GXT version) with a new Vaadin implementation. It's based on Vaadin 7 and has some amazing new features, like full-text search. No worries, the new version supports the same file structure as our old version. The upgrade procedure is simple: Keep your structure directory and delete all other files. The binaries will be available in the next days.

We also removed all other GXT based projects because we switched the web technology. We think vaadin is the better choice and replaced our previous webUI with vaadinUI. Of course, it's not a 1:1 replacement but the first release is awesome. We'll release the binaries next week.

Our old webUI project is still alive because it contains our headlessUI. This project is still important and the base of our project JVx.mobile and some other projects that don't need a UI. This project makes it possible to start a JVx application on server-side. If you create REST or SOAP services, our headlessUI might be the right choice?

Our vaadinUI and headlessUI are sub projects of JVx!

That's all for today!

JVx 1.2 almost finished

The current version of JVx is 1.1 and it was released in January. It's still one of the best releases, but it's time for an update :)

We had about 90 tickets and a lot of smaller changes on the roadmap for 1.2. ALL functional tickets were implemented. There are still 5 open tickets but they are nice to have and doesn't change APIs or core code. Our internal tests with VisionX and other applications work without problems. The official release day will be Friday, 4th October.

You can look forward to the next great JVx. It's the base of our upcoming Vaadin UI and our new "native" mobile applications.

The full list of changes is available here.

Some highlights:

  • Simple environment (web, mobile, headless, ...) detection because launcher knows the environment
  • Work-screens now have notifyActivate. This will be used if an already opened screen will be activated(shown) again
  • Improved Javascript bridge
  • UI controls are now per factory. This allows different UI technologies (mobile, vaadin, headless) in one war file
  • Tab activated/deactivated events
  • Server-side SessionContext allows access to Master and Sub Session
  • Support for virtual application folders
  • Databooks are now very smart (improved datasource isolation level, save and restore with different data pages, ...)

Create CSV files of JVx storages

Our AbstractStorage implementations have a writeCSV feature already implemented and you can call this method via action call mechanism. But sometimes you need different CSV exports or ZIP archives with different CSV files. You simply need control over the export.

There's a small project with the name AES Storage Export that could help you solving CSV export problems. It has one simple class that takes one or more storages and exports data as UTF-8 CSV files. All CSV files will be added to a zip archive (optionally AES encrypted)

Simple use the class in an server action and create your custom CSV exports.

Test case:

StorageExport export = new StorageExport();

ICondition condFilter = new GreaterEquals("ID", BigDecimal.valueOf(10)).and(new LessEquals("ID", BigDecimal.valueOf(20)));

StorageEntry entryColumns = new StorageEntry("columns.csv", createStorage(), condFilter);
entryColumns.setColumnNames("ID", "VALUE");

StorageEntry entryColumnsStorage = new StorageEntry("columns_storage.csv", createStorage(), condFilter);
entryColumnsStorage.setColumnNames(createColumnStorage(), "NAME");

export.add(new StorageEntry("first.csv", createStorage()));
export.add(new StorageEntry("filtered.csv", createStorage(), condFilter));
export.add(entryColumns);
export.add(entryColumnsStorage);
export.setPassword("testcase");
export.setSeparator(",");

File fiTemp = new File(System.getProperty("java.io.tmpdir"), "aesarchive.zip");

RemoteFileHandle rfh = new RemoteFileHandle();
export.export(rfh.getOutputStream());

FileUtil.save(fiTemp, rfh.getInputStream());

System.out.println(fiTemp);

JVx Application Stack

We'll demonstrate the power of JVx in 3 minutes. One Application Framework, for all platforms.

You have never seen this before:


JVx Application Stack



Some details:

  • Simple deployment, because everything is contained in 1 war file
  • Developed with VisionX
  • Application runs as Java Desktop or Browser Application, as Web Application (HTML, CSS), on iOS or Android
  • Tested with iPhone, iPad, Android phone and tablet - as Web Application and native application

Do you know any other framework with comparable features. I think JVx is the only full stack application framework world-wide with single sourcing support for all platforms and devices - and it's open source.

JVx application with Vaadin launcher on iPad mini

For those, who don't know why the world needs single sourcing and only one framework for backend/frontend/mobile, we have a new use-case!

It's a new application that has different user groups. The first group sits in the backoffice and configures/crunches data. This user group needs a powerful backend application that supports fast (mass) data manipulation. The second user group are end users. This group needs a fancy web based application because an application must be cool and browser based (nowadays).

If you'll develop such an application with different UI frameworks and different technologies (Java, HTML, Javascript), different ORM tools, and for different browsers, clients, OS', you'll need time and a lot know how and maybe many developers.

Wouldn't it be great to use one framework that is powerful enough? The framework shouldn't be restrictive because we (software developers) want to be flexible and include our preferred libraries. No worries, JVx is flexible, small and is not restrictive.

If you develop your application with JVx, you have no problem with different platforms and devices. A JVx application runs as desktop application, in your browser as html application, on your mobile devices as html application and on your mobile devices as native application.

But enough advertising, lets look at the application. First, the backend application:

Video Backend

Video Backend

And the frontend, as video (video speed it's a little bit slow because it was recorded via Wi-Fi):


JVx frontend application

(The video shows our new maximize option, because mobile devices have limited space)

Above applications are not two separate applications. It's only one application with different users and roles. It looks different as desktop application than as web application. The only framework you need to know is JVx. It's not needed to be a html/javascript developer.

The framework is still simple and don't code multiple applications for different devices/platforms. Save time and be happy!