Friday, September 11, 2015

Some tips on continuous integration, delivery and deployment

Here are some tips about continuous integration, continuous delivery and continuous deployment, after some experience in the area.

Nowadays, there is an increasing need to deploy as soon as possible the developed features, in order to reduce time to market and provide earlier more added value. 

To achieve this objective, we must follow some techniques to simplify and automate the full process, from development to production running code. 

Sunday, August 23, 2015

About NodeJS

NodeJS is a Javascript core interpreter which is executed at the server side. The core of NodeJS is the V8 Google Chrome's open source Javascript engine (which is written in C++).  


Tuesday, February 18, 2014

SUCODE Java Development Environment

SUCODE has released a Java development environment, to simplify and increase productivity of Java (web and library) projects. 

  • Why do we need another development environment for Java?

There are many good IDEs for Java development (Eclipse, STS, Netbeans...), and there are also lots of plugins to support multiple tools on them (Git, SVN, Ant, Maven, Gradle...).

One of the main purpose of this Java development environment is providing a cross-platform and cross-IDE Java development environment. This means that you could use it on Windows, Linux, Mac... and then you could develop with Eclipse, STS, Netbeans, Notepad... You can freely choose your favourite OS and IDE, because the development lifecycle is managed by standard tools that you could use also from command line: Ant, Maven and Gradle.

The key concept here is giving the standard (and open source) build management tools (Ant, Maven, Gradle) a main role within the development environment.

  • Why do we need 3 different tools for the same purpose?

It's true that most of development environments use only one of the build lifecycle management tools (Ant, Maven or Gradle), but it's also true that each of them has strengths and weaknesses:

  • Ant is great for creating customized tasks (copy directories, filter files, package contents, etc) but it is not so great for dependency management (despite the Ivy support).
  • Maven is great for dependency management (with public library repositories) but it is not so great if you want to modify the directory layout or tune some goals to perform some kind of pre / post goal task.
  • Gradle provides a great domain specific language (DSL), defined with Groovy, that easies and simplifies tasks definition (enhancing Ant's tasks). It can bypass calls to Ant tasks and provides a plug-in for Maven (despite it can't call Maven goals directly, it can create the pom.xml file with the Gradle dependencies configuration).

The development environment takes advantage from Ant, Maven and Gradle strengths and orchestrates collaboration between them in order to provide an easy to use, portable and productive development environment for Java standalone and web applications.

Here is a brief summary of the development environment functionalities:
  • Cross operating system Java development environment.
    • You can use your favourite operating system (Windows, Mac, Linux, etc).
    • The SJDE is built on Java tools, so you can use it wherever you can have a JDK.
  • Cross IDE Java development environment.
    • You can use your favourite IDE (Eclipse, STS, Netbeans.... or even cloud editors!).
    • Tools used for software development support have a main role versus the old plug-in role orientation.
    • Code edition and automatic tasks for building and testing are clearly separated.
  • Manage the software development lifecycle with your favourite tool (Ant, Maven or Gradle):
    • Clean generated stuff.
    • Compile project sources.
    • Execute tests to check your project functional correctness.
    • Pack the project to deploy it to an execution environment.
    • Generate Javadocs to obtain some automatic documentation of your code, available for other developers, API users, etc.
  • Enhance the software development experience with additional tasks:
    • Static code analysis with PMD, Checkstyle and Findbugs.
    • Execute scripts to a local or remote database (define schemas, load config or test data, apply patches, ... )
    • Manage project dependencies:
      • Generate the Maven pom.xml file from project dependencies and obtain libraries from public repositories.
      • Obtain the project dependencies list from the Maven effective pom.xml file.
      • Import dependencies to a local directory (simplifying the Maven repository directory structure in our workspace).
    • Deploy the generated package to a local server for testing.





Tuesday, December 24, 2013

New website with responsive design

 
After a rebranding process, we have released a new website, with responsive design, implemented with Twitter Bootstrap and jQuery. 

A new logo has been designed, to simplify  and unify all products under the same image. 

The new website follows the thin server architecture (TSA) and single page application (SPA) principles, ensuring scalability through cloud deployment or a CDN, maximizing availability and increasing rendering performance (versus content managers such as Joomla, Drupal, Wordpress, etc). 

The responsive design provides portability of the user interface through most of the available browsers (Chrome, Firefox, IE, Safari,...) and multiple devices (smartphones, tablets, SmartTVs ... no matter if they are running Android, iOS, etc).

With some of the most beautiful Barcelona places as a background, this new corporate image is the first step to continue growing. 


Saturday, July 13, 2013

SUCODE SHOP

SUCODE software has released the lightest, open source, e-commerce tool

One of the main problems with existing e-commerce tools is that they are very big platforms for small companies. This means a lot of effort (economical resources) to obtain an online platform for selling. 

A lot of small companies just want to offer their products, show their prices, manage orders,... but they don't want to spend months adapting an enormous platform (even if it is open source). 

SUCODE shop is a single page (responsive designed) products grid which offers a simple way to checkout products. It has been developed with the following technologies: SimpleCartJS, H5BP/Initialzr, jQuery UI and a product grid layout. Because of it's simplicity, it has been released as open source and you can download source code from github




Friday, June 7, 2013

Services virtualization

SUCODE software has recently released a set of virtualized (open source) services which provide a scalable cloud execution environment, as well as a ready to use development environment to help in the software engineering process. 

Virtualization has increased (and simplified) horizontal and vertical scalability, as well as portability, reliability  and availability of services. 

The added value comes from evaluating, selecting, installing and configuring the open source services over the most used virtualization hypervisors: VirtualBox and VMware

The services catalog covers the following areas: 
  • Support for development. The software development process can be extremely improved with support for source control management, packages repository management and continuous integration
    • Source control management has been virtualized for the two most extended types: centralized repository (Subversion) and distributed repository (Git). 
    • Packages repository management has been virtualized using Artifactory, which suits Maven, Ivy (Ant extension) and Gradle needs. 
    • Continuous integration has been virtualized using Jenkins (open source Hudson fork), which provides a full featured list of plug-ins for integration with other source analysis tools (Sonar, PMD, Checkstyle, FindBugs...). 
  • Project management. There are few (but quite good) open source tools to support project management. For maintainance, evolutive or corrective projects, Mantis Bug Tracker may be enough. It is implemented with PHP  (lightweight hosting)   On the other hand, a more complete tool for managing projects may be Redmine, which is implemented with Ruby. 
  • Content management systems (CMS)
    • MediaWiki allows collaborative edition of web contents (usually for private or internal company information, such as projects, configuration info, etc). It is implemented with PHP (lightweight hosting over a XAMPP server).
    • Joomla and Drupal are two of the most famous open source HTML content managers (both implemented with PHP). Joomla is strongly oriented to build dynamic websites, but Drupal is better oriented for building dynamic websites with functionality support (forms, etc). 
    • Alfresco is a content management system specially oriented to collaborative document edition (workflow for editing, reviewing, approving contents, etc). It is implemented with Java. 
    • Liferay is more than a content management system, it is implemented with Java and provides a portal for contents and applications (portlets). 
  • Cloud execution environment. A cloud execution environment is composed by a set of nodes of multiple types: 
    • Proxies/balancers. This kind of nodes allow proxying or balancing requests. They usually are the entry point to (or the first line of) a cloud environment. Two of the most extended software proxies/balancers are Apache Web Server (older, more complete, a reference implementation) and Nginx (newer, with better performance). 
    • Application Servers. Application servers are the responsible of managing the lifecycle of applications. For PHP language, a LAMPP server may be used. For Java, we must distinguish between a Servlet container, such as Tomcat (reference implementation), and an EJB and Servlet container, such as JBoss (open source and very complete, but property of RedHat). 
    • Database Management Systems. DBMS are the responsible of managing data, and we must distinguish between two great types: 
      • Relational databases: MySQL, PostgreSQL
      • NoSQL databases (better scalability under big data environment): MongoDB, CouchDB, Redis
    • CRM. One of the most complete and robust open source customer-relationship-manager is SugarCRM, which is implemented with PHP.  
    • ERP. One of the only open source enterprise-resource-planning is Dolibarr, which is implemented with PHP and is suitable for a little or medium company, but not for big companies (there is a gap here, because all the other available tools are not free). 
    • Scripting. This kind of nodes allow the execution of scripts in many programming languages: NodeJS, Python, Ruby, Groovy... They can implement services as well as an application server can do, but in a lighter way. 
    • Reporting. If we want to centralize reporting in an unique node within the cloud, we can provide a virtualized JasperReports server (implemented with Java),which is one of the most complete and robust open source tools for reporting. 
    • Business Intelligence. If we need to centralize business intelligence in an unique node within the cloud, we can provide a virtualized Pentaho instance (implemented with Java), which is one of the few open source business intelligence suites available. 
    • Message Oriented Middleware (MoM). This kind of virtualized nodes are responsible of message receive and delivery in a cloud environment. Two of the most complete, open source tools that implement multi-protocol message exchanges are Mirth (very common in Health environments, because it supports the HL7 protocol) and RabbitMQ

  • Monitoring. In a cloud environment, monitoring nodes are the responsible of control ling the health of other nodes (resources usage control):
    • Nagios. One of the first open source monitoring tools available for controlling infrastructure resources in a cloud environment. Offers a basic (poor) web interface. Requires agents for collecting data. 
    • Hyperic. This open source monitoring tool provides a better web interface than Nagios and provides a lot of plug-ins to integrate with additional tools. It is property of VMware and it is implemented with Java. Requires agents for collecting data. 
    • Observium. This open source monitoring tool provides a responsive web interface and monitors data from other cloud nodes using the SNMP protocol (lighter), something that makes Observium an agentless monitoring tool (only and SNMP daemon is needed in the monitored nodes). This tool is still in an early phase of development. 
    • JavaMelody. Despite JavaMelody is a library that intercepts and monitors requests within a Java Servlet container environment, it can also be configured in a single node within the cloud to act as a global data collector. 
You can find here some slides explaining in few words what the virtualized services offer. If you are interested in virtualizing your systems, you can contact us.