Sunday, March 10, 2013

Coding Tools

Foreword

It took me over a year coming from a PHP and ROR background to find the right Frameworks in Java. Learning a new language and a new Framework just takes it's time. Especially with Java. I was spoiled with extremely good documentation with PHP and especially ROR. With Java I have learnt that it can be very difficult to find documentation and especially examples. But now that I got used to it I wouldn't develop in any other language anymore...... apart from Javascript which is needed when wanting to develop modern decoupled web clients.

Hosting / Cloud Solution

I have been looking at different kind of Cloud solutions such as:
During comparing the prices I have discovered that prices especially for the Cloud based offerings can be very intransparent. Especially when looking at the AppEngine offering I discovered that if an application is not very streamlined to their environment or has small bugs there can be cost increases which could get painful if something goes wrong. That doesn't mean that it's bad and it can make sense for larger corporations that want to outsource the infrastructure management to save costs.

Since MongoDB that makes the life of database administrators quite easy however I have decided to go for Virtual Linux Servers with Rackspace or Amazon. My current environment is hosted on Rackspace, since I like the support they provide.

Development Environment

Editor: Intellij Idea

IntelliJ IDEA Community Edition is the open source version of IntelliJ IDEA, a premier IDE for Java, Groovy and other programming languages.
Website

Why Intellij Idea

  • Fast and reliable
  • Integrated Subversion
  • Spend time coding rather then to bug resolve and configure the IDE
  • Many plugins that actually work as intended

Web Framework environment

Development Language: Java

Java has an active community (also commercial community) and has been around for a long time. Many Enterprises like Banks, Insurance Companies and other Companies rely on it.
Website

Why Java

  • Well established in all kinds of businesses especially also large corporations
  • Scalable in different kind of ways
  • One of the most secure and long lasting development languages
  • Commercial Support available

Build Tool: Maven

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
Website

Why Maven

  • License (Apache 2.0)
  • De-facto build tool for Java

Web Framework (Server Side): Spring (MVC)

Spring is the most popular application development framework for enterprise Java™. Millions of developers use Spring to create high performing, easily testable, reusable code without any lock-in.
Website

Why Spring

  • License (Apache 2.0)
  • Well known stable and robust framework
  • Used by many Enterprises
  • Adapters for most popular databases
  • J2EE compatible
  • REST Support 

Web Framework for Clients: Angularjs (Javascript)

HTML is great for declaring static documents, but it falters when we try to use it for declaring dynamic views in web-applications. AngularJS lets you extend HTML vocabulary for your application. The resulting environment is extraordinarily expressive, readable, and quick to develop.
Website
  • License (MIT License)
  • Extends HTML rather then manipulating DOM
  • Relatively low learning curve
  • Makes use of dependency injection
  • Full featured client with support for i18n, templates and REST
  • Unit tests and e2e testing

Database: Mongodb

MongoDB (from "humongous") is a scalable, high-performance, open source NoSQL database. Written in C++, MongoDB features:
Website

Why MongoDB

  • Licensing (AGPL) Reference 1, Reference 2 The license can be used for free also for commercial projects.
  • Well documented
  • Low learning curve
  • Provides solution for general data and large data (GridFS) in a distributed environment
  • Supported by Spring
  • Includes large file support with GridFS

Resources

Java Application Server: Jetty

Jetty provides an HTTP server, HTTP client, and javax.servlet container. These components are open source and available for commercial use and distribution.
Website

Why Jetty

  • Dual Licensed (Apache, Eclipse)
  • Lightweight and fast
  • Used by Google and Yahoo for their Cloud solutions
  • Enterprise scalable