1.000.000 million Dollars to win!

Dreamforce logosalesforce.com, the company behind Salesforce is offering a prize of 1.000.000$ (in words: one million dollars). As they say: “It is the biggest single hackathon prize in history.” What you have to do is to develop the best mobile app with salesforce.com technologies. If you want to start with creating a mobile app you can use technologies from salesforce.com, Heroku, ExactTarget Fuel and mobile ‘things’ from salesforce.com. The only problem you might have is, that you have to present your result at the Dreamforce fair, Ticket: 1.200$ πŸ™

More at: http://events.developerforce.com/dreamforce/hackathon

Subversion 1.6.23 and 1.7.10 released

The Apache Subversion Project has released two new versions of Subversion. Both versions are fixing the issues CVE-2013-2112 and CVE-2013-2088. Issue 2112 is a security issue and allows a DoS attac against the svnserve, which is the internal svn server. If Apache https is used as the server for remote accessent the repository this issue shouldn’t bringe you in trouble – otherwise it’s time for an update.

Apache Subversion 1.6 is still maintained, but because of the features of 1.7 you should think about an upgrade. Some of the new features are: metadata handling improvements, network performance improvements (http), new command svn patch to apply unidiff patches, … You can upgrade the server and use the old 1.6 clients.

The subversion project has also announced the rc2 of 1.8. It is the first public release candidate of Subversion 1.8.0 (rc1 was not publicly released). It is thought to be free of blocking issues, and if none are found will become the final release. “RC” stands for “Release Candidate”

Day 4: Scala

Scala is one of the most discussed languages in the past years. It covers the most urgent problems of programming and uses the java virtual machine as runtime environment so you can use all of your java code. Scala is functional and compatible to java bytecode.

Scala can become the next big thing, because Java is not working well in modern environments. Scala covers the problem of concurrency by using a functional paradigm. It is incredible easy to write applications with multiple threads without any headaches. If you want to write high scalable applications in a Java environment Scala is a good choice.

There are some drawbacks compared to a “real” functional language. Scala is like C++ – a programming language caught into two different worlds. As long Scala is creating new concepts in the JVM it’s simply great, but using the old Java stuff is so wrong… Let me give you an example – mutable variables. Let us asume that you have the following code:

val harry = new Person("Harry", "Webber")
harry.buyFromAmazon()
harry.playSmartphone()
harry.doWork()

As long as harry is immutable you can do the three methods in any order or at the same time! That is beautiful and functional programming languages are working like that. But because Scala want’s catch more Java developer it is also possible to have mutable variables. This breaks the whole concept :-/

Anyway Scala can become the next big language on the market like C++ became – also a language that was caught into two different worlds…

2nd and 3rd day: Io + Prolog

Oh – my brain is not made for them… Well, Io is pretty cool, but the lack of syntactic sugar kills my brain. It’s really important to understand the concept of messages. Of course we are all using messages in the object oriented languages (usually called methods) for the understanding of Io it seems to be important to take a closer look at this concept. The idea of using prototyping instead of having classes is similar to JavaScript.

Prolog is unbelievable impressive! And very different from writing programs in any other kind of language. With Prolog you can solve logical problems extremely fast – not fast in the meaning of execution time, but fast in the meaning of programming time. Let me explain it… Usually you are writing a program by telling the computer each step of what to do and how to do it, Prolog is different. If you want to solve a sudoku in C will probably use a backtracking algorithm. So you tell the computer what is a valid solution and then test each combination by using the algorithm and of course you have to give the computer the ‘unfinished’ solution as starting point.

With Prolog only tell the computer the rules and the starting point. No need to write any algorithm! This problem can fully be solved by the given rules. It’s like magic πŸ™‚

2nd day: Io

Yesterday it was harder than I thought. Two of the ten excercises in the book are were exert. It is a long time ago since I’ve developed my own tree data structure and meta programming was very new for me. But today I will learn Io!

Io is a very small and modern prototyping language – like JavaScript. I hope Io will help me to understand JavaScript much better, than I do today.

Five Languages in Five Days!

A few month ago I bought a book called “Seven Languages in Seven Days” written by the brilliant Bruce Tate. Bruce explains how to learn seven different computer languages in seven weeks. It turns out, that I was not able to find at least one hour a day for this book. Now I will give me a second and more competitive try: Five languages in five days.

I’m on holiday now and for that reason I’ve five days to learn new stuff and this will be: Ruby, Io, Prolog, Scala and Erlang. To be honest I know Ruby, but maybe it will give me a different view to this language – and it’s a nice and comfortable warm up.

So let’s start with day one: Ruby!

New Relic

New Relic is one of the cooles and best performance analyse tools at the internet. It analyses your running application and throws you performance bottlenecks. They call their tools β€œX-Ray Vision For Developers,” and that’s almost an understatement.

So what do they provide? At first a beautiful and comprehensive interface for all performance information you need. My favourite features are “end user performance analyse” and “profiling at runtime”. And “performance at runtime” does not mean during a testrun like it is usual, it means that you profile your deployed application! You can start to optimize your app very late, and that is great. The two golden rules of optimization are:

  1. Don’t do it.
  2. (only for experts) Don’t do it yet.

And as Donald Knuth said: “We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.” (Knuth, Donald. Structured Programming with go to Statements, ACM Journal Computing Surveys, Vol 6, No. 4, Dec. 1974. p.268.)

New Relic gives you the possibility to optimize only the parts which are bottlenecks in your delivered application, not on stupid testing cases. And it gives you the possibility to find bottlenecks wich are not in the test cases (or not as clear as they are in the running application). It is also possible to optimize very late after the deployment eg. if user starts to behave different.

The second feature I love is “end user performance analyse”. Usually if you have a Web-Application you are using some different server on different continents to test the load speed of your application. But does it help you really to know that your application hosted in Europe loads quite fast in a data centre in South Africa? How many users of your application are sitting in a data centre? Take a look at the following scenario:

You have a really cool application. A lot of images have to be load, but you have a great CDN setup. You website loads extremely quickly on your computer and mobile phone. You test servers at the data centres saying: “Incredible speed!”. The world loves your app. Now you have started do go to Africa: big marketing, … But no one cares about your application any you wasted a lot of money. Why? It is much too slow! How can it be? In Africa you have a lot of mobile users, but no LTE, HSUPA, HSDPA, … And you had no chance to figure out that issue. With New Relic you had seen this after the first few users and you could fix it very quickly.

This post is much longer than I wanted – I only wanted to show you this video πŸ˜‰

Offer to write a Hybris book

Today I got the offer to write a Hybris book. I don’t know if this is my business, but it sounds in interesting. At the moment it seems, that it isn’t more than just an idea. In my opinion the time frame is to short. A book with around 200 pages should take more than 8 weeks to write. In a few days I know more.

Tools I prefere at Hybris development (Part One)

Currently I’m learning Hybris, which is a “Multichannel e-Commerce Suite” – in other words: webshop. Okay, that’s only the half of the truth, but because this post is not about Hybris but about tools, it is okay to assume it is a simple webshop. Of course for the end-customers it is usually a webshop. You don’t need to care what it is in detail. For some reasons the company will not give you a trial version to play with it πŸ™ Because of the fact, that they are not using stuff from the bleeding edge, my tool decisions are reasonable for many projects

Before I start to describe my tools, let me describe Hybris from the developer perspective with a few words. Hybris is based on Java and Spring, and runs on an Apache Tomcat. A lot of XML files are used to generate Java files. Ant is used as a build tool.

Operating System: Linux

linux-logoI tried very hard to use Windows, but it is really unusable! For many reasons. I can not say how wired and strange this OS is. It is a pity to use it if you have to do a bit more than writing emails and office documents. I also tried a Mac, but there is no advantage over Linux. Of course the Desktop is much more beautiful, than XFCE on Linux, but the keyboard layout is really strange. An other problem with the Mac are security issues because of the update policy of Apple. In the end Linux wins πŸ™‚

The tools which are used for Java developing are developed under a Unix system. For that they feel very unnatural on Windows. A Mac seems to me a reasonable decision if you want some eye candy and it is okay to have some shortcomings in the usability.

Integrated Development Environment (IDE): Eclipse

Yes, I know, there is IntelliJ and it has some big advantages over Eclipse, but Eclipse is free, used from many people, it is easy to write plugins and there are many plugins to adapt.

eclipse-logoLet me say a few words about open source and why it is so great. At first you can try it at home without any limitations. You can change it to learn more about the software. You can take a look at the source and learn. You can be sure, that you can use this software in many years. And (the biggest advantage for me) you don’t need to handle all the licenses.

Back to Eclipse. Today Feb 2013 Eclipse 4.2 is out, but it is so incredible slow, that I’ve changed to the alpha version 4.3. It is much faster and not as unstable as you think. And it is much more stable than XCode on the Mac.

Version Control System: Subversion

subversion-logoOf course, Git is out there and sometimes I use it. It is not that I prefer Subversion over Git in general, but Subversion fits into our needs and it is used in the whole company. Subversion is good, reliable, stable, and widely used. No need to change it.

Collaboration Tools: Atlassian (Jira, Confluence)

github-logoA lot of people like Jira (Ticket Management) and the Confluence (Wiki), but I would choose GitHub. GitHub is much more simple and let you focus on you work. The Atlassian tools may be okay for the business guys, but for a poor developer they are not straight forward and so they break the work flow. I like simple tools that are helping to organize work, but they should not break your flow.

Part One

This was part one of this article. I will write updates and maybe a second part later. Maybe I will change my mind about some tools I use πŸ˜‰