Middleware as code with Ballerina

Let’s assume that we need to facilitate the integration of several systems. What options do we have?

There are quite a few options for performing our integration, such as Enterprise Service Bus (ESB) or other frameworks like Spring and NodeJS.

Existing approaches

Enterprise Service Bus

Let’s start by looking at the ESB, one of the ways of integrating systems. ESB provides a range of services using a standard method of communication such as REST or SOAP.

It also helps monitor all the messages passing through it and ensures they are delivered to the right place by controlling the routing of each message.

You can use code to create the service logic, but service configuration (routing, users and passwords) doesn’t need to be hard coded, because the ESB provides ways to configure services outside the code. It also helps control deployments and versioning of services.

You need to take into account that this approach has a single point of failure and requires high configuration and maintenance.

Some approaches appear to have ESBs in containers, in order to be more ‘cloud-native’, but they still require a lot of configuration, not being very agile.

Spring and NodeJS frameworks

To achieve a more agile approach, we can use frameworks such as NodeJS or Spring to create our integration, however, to work with communication (endpoints, messages and payloads data) they require libraries and plugins and a lot of boilerplate code to deal with the payload type and make simple calls to services.

There is a new language dancing around to try to mitigate these problems between ESBs and frameworks like Spring and NodeJS. Let’s take a look at Ballerina.


Ballerina is a new language that is being created with the communication paradigm in mind. Ballerina allows concurrent work to be done and has transactional functions where the data is either all successfully altered or none of it is.

It has both a graphical syntax as well as a textual one. So, if you write the code with the textual syntax, you are helped by the graphical information generated afterwards. This graphical information can also be used as documentation, because it represents the flow of messages and intervenients in the service. You can check a comparison of the syntaxes in the following image (in the left the textual syntax and in the right the graphical syntax):

Since Ballerina is constructed with communication in mind, you can count on network data types to be fully supported. This way you don’t need to add libraries to manipulate json or xml.

Ballerina is built upon integration patterns, providing a QoS where the communication is resilient, transactional, secure and observable.

To get a better idea of how Ballerina works you can check the following page https://ballerina.io/philosophy/

Service and proxy example

If you want to try the following example in your machine, please follow the guide on how to install Ballerina on your computer under the next link: https://ballerina.io/learn/getting-started/#download-the-ballerina-distribution .

In this example we will check how to create two services. One will work as a resource provider, and the other as a proxy that will convert the resources from xml to json.

Let’s start with the first service and call it service1.

Service 1

To create the service, first we create a file named service1.bal and write the following code:

import ballerina/http;
import ballerina/log;
service service1 on new http:Listener(9090) {
    resource function getCars(http:Caller caller, http:Request req) {
        var page = xml `<response>
        http:Response res = new;
        var result = caller->respond(res);
        if (result is error) {
            log:printError("Error sending response", err = result);

In this service we have the function getCars with our logic: first we start to create the response as an xml and set it in the response payload. Evetually we respond to the caller, checking if there is an error responding.

To run the service we use the following command:

ballerina run service1.bal


This will create the service in port 9090 with the function getCars. We can check the response of the function in the address http://localhost:9090/service1/getCars in the browser or using curl.


Now let’s create the proxy!

First we create another file with the name proxy.bal and then we write the following code:

import ballerina/http;
import ballerina/io;
import ballerina/log;
http:Client clientEndpoint = new("http://localhost:9090/service1");
service proxy on new http:Listener(9091) {
    resource function getCars(http:Caller caller, http:Request req) {
        //Get the xml response from getCars
        var responseGetCars = clientEndpoint->get("/getCars");
        if (responseGetCars is http:Response) {
            var msg = responseGetCars.getXmlPayload();
            if (msg is xml) {
                var responseJson = msg.toJSON({});
                //Create the response for this service
                http:Response res = new;
                res.setPayload(untaint responseJson);
                var result = caller->respond(res);
                if (result is error) {
                    log:printError("Error sending response", err = result);
            else {
                io:println("Invalid payload received:" , msg.reason());
        else {
            io:println("Error when calling the backend: ", responseGetCars.reason());

In the code you can see that we’ve created a service named proxy on port 9091 using a function called getCars. We have an endpoint for service1 (no plugins or libraries ), and in the function getCars, the first thing we do is call the function getCars from service1. Afterwards, we check whether the payload from the response of service1 is an xml; and if it is, we convert it to json using just one function! In the end we respond to the caller usng the json from the conversion.

To test the proxy we can use curl or to have a visual of the json, use your browser and the following address: http://localhost:9091/proxy/getCars

You can compare the output from service1 and the proxy and check that the information is the same in both.


In conclusion we can see that Ballerina is shaping quite well to be a promising language the integration of services, with an agile approach and less boilerplate code required for handling communication between services.

But do proceed with caution, because it hasn’t yet achieved a stable release, so syntax and semantics are still subject to change. The first stable release is expected at the end of this year.

Daniel AmadoMiddleware as code with Ballerina
read more

Single-page applications

These days, web applications are taking over old desktop applications, and bringing with them advantages such as decoupling from any device, and convenience of use. The demand of rich, complex and yet user-friendly web applications is growing every day. Along with this demand and also gaining more and more popularity in web development trends are single-page applications.

A single-page application (SPA) is a web application that interacts with the user by dynamically rewriting the current page rather than loading an entire new page from a server. This results in a more comfortable experience for the user, and one that is not continually interrupted with successive page navigations.

Background – traditional multi-page applications

Multi-page applications (MPA) are the ‘traditional’ web applications that reload and render an entire new page as the result of an interaction between the user and the web app. Every user interaction – like clicking a link or changing the URL – and every data exchange from and to the server will make another request for the new page to be rendered. This process takes time and can have a not-so-positive effect on user experience if you’re aiming for an interactive, responsive application.

This default behaviour from MPAs can be worked around by taking advantage of AJAX, which allows refreshing just part of a page. However, we have to be aware of the complexity added to the development process by this solution.

An MPA will most likely use JavaScript (JS) at the front end to add some interactivity to the application, but does not depend on it for the rendering and delivery of the page content. This makes MPA an architecture that is well suited to supporting legacy browsers that usually offer more limited JS functionality.

MPA’s big advantage relies on search engine optimisation (SEO). When a request is made to the server to render a new page, the response is the final content for that page. Search engine crawlers will be able to see exactly what the user sees, so the application will perform well on the search engine. This is one of the big reasons why some major web sites, like Amazon and The New York Times, are still using this architecture.

On the other hand, applications built using this architecture tend to be bigger and slower, constantly loading pages from the server, which affects the user experience negatively. From the development perspective, the process tends to be more complex and will result in a coupled back and front end.

The rise of single-page applications

Like the name says, an SPA has only a single page. All the necessary code to render the application is retrieved in a single page load. After this initial load, no page reload is triggered, there is no new html file being fetched from the server. Instead, the application re-renders parts of the page as a result of any navigation in the browser. All the following communications between the application and the server are aimed at retrieving or posting data from and to the server and occur behind the scenes using well defined APIs from the back-end services.

SPAs rely heavily on JS to be able to listen to events and re-render parts of the page. Everything happens through JS, this kind of architecture is dependent on it and there is no way around it. Because of this, SPAs favour modern browsers that offer vast, more up-to-date JS support.

The behaviour from an SPA makes it a super-fast, responsive application, offering the user an interactive experience resembling that using a mobile or desktop. From the development perspective, we achieve a decoupled back and front end. The back end will no longer be responsible for rendering the view and the communication between the two modules will only comprise of data exchanges. We also simplify the deployment process greatly.

The problem with SPAs resides in the challenge posed by making the application SEO friendly. Given that most of the page content is loaded asynchronously, search engine crawlers have no way of knowing that more data is coming to the page. There is no single standard solution to handle this drawback, but there are some tools that can be used to create an SEO-friendly SPA. It is also probable that in time SPA frameworks will evolve to make it easier for search engines to crawl and index application content.

Are single-page applications the future of the web?

These type of applications have been around for years, but they are only now becoming widespread in the developer world. This is mainly due to the appearance and increasing popularity of web frameworks and libraries that allow developing SPAs out of the box quickly and efficiently, such as Angular and React. If we compare the trend evolution in these terms, we can see that the popularity of SPAs, Angular and React evolved proportionately over time.

SPAs have been getting more and more popular and it looks as if they are not going anywhere in the near future. The technical and functional benefits of SEO-friendly SPAs cannot be ignored and it is expected these type of applications will become available more frequently, especially with the evolution of the technologies involved and hopefully the resolution of some of the SPA pitfalls. However, we need to acknowledge that right now a SPA may not be the correct solution to every project.

Some MPA characteristics make this approach best suited to applications that serve a lot of content in different categories, and where search engine performance is highly important, such as online stores or marketplaces. SPAs are a good fit for dynamic platforms, possibly with a mobile component where a complex interface and a satisfying and reactive user experience are key factors to be considered, such as social networks or closed communities. A third possibility exists for those who like SPAs and their characteristics but cannot fit the application onto a single page: by considering an hybrid application you can make the best of both approaches.

No architecture is super right or super wrong, you just need to know your necessities and choose the best solution for you and your application.

Patrícia PereiraSingle-page applications
read more

Tableau 2019.3 Beta is out; let’s take a quick look!

Tableau is a software that helps people see and understand data, transforming the way it’s used to solve their problems. It makes analysing data fast and easy, beautiful and useful, to ensure that data makes an impact.

This is Tableau’s goal: translate data into value for business with a positive impact.

There’s a new version being launched, Tableau 2019.3 Beta, and installing this version we can see an interesting set of new capabilities. Using the new version, we were able to improve on our goals. Below we’ve highlighted the features we liked the most:

  • Explain Data— A new feature to help you understand the ‘why’ behind unexpected values in your data;
  • Tableau Catalog — A new capability of the Data Management Add-on to ensure you are using the right data in the right way.

Explain Data

Explain Data provides explanations, using Bayesian statistical methods, for unexpected values in data. With this feature is possible to identify causes and see new relationships between data and it’s enabled on all the existing workbooks for Creators and Explorers. No data prep or setup is required.

It’s very simple: select a mark and learn more about it.

The figure below presents a possible example of an explain data from a selected mark.

In this example, we are analysing a visualisation of products and their average profits. We can see that the product Copiers has a profit way higher than the others. With Explain Data, we learn that this happened because in the product records there is a really high value that increases this measure. This feature also displays a few visualisations related to this explanation, such as the first table that shows the record with this higher value.

The panel displayed by this feature presents the following components:

  1. Selected Mark Information – indicates what mark is being described and analysed;
  2. Measure Selection – shows the measures available to select the one in use for explanation;
  3. Expected Range Summary – describes whether the value is unexpected or not given the other marks in the visualisation;
  4. Explanation List – displays a list of the possible explanations for the value in the selected mark. Selection an explanation in the list will display more details in the Explanation Pane on the right;
  5. Explanation Pane – displays the selected explanation using a combination of text and visualisations.

Tableau Catalog

This new feature aims to help organisations manage their data better, because we are facing a time where is very hard for users to find and trust that they’re using the right data in the right way. This feature will be available for Tableau Server and Tableau Online.

With Tableau Catalog it’s easy to get a complete view of all of the data being used in Tableau, and how it’s connected to the analytics. Data owners can automatically track information about the data, including user permissions, usage metrics and lineage, as shown in the figure below.

In this example, the view with this feature is as though we’re looking into a catalog of data on this database. We can see the warnings that appear when there are errors in data quality (a), such as missing fields, and we can see the lineage of the data (b), such as which tables are related, and the workbooks and sheets the data is being used in.

Tableau Catalog also helps to build trust in the data across an organisation, creating a panel with data details (shown in the figure below):

  • Data Quality Warnings is where users can quickly see when there’s an issue with data being used in a dashboard – such as a missing field or maintenance interruption.
  • Definitions and additional metadata can be added in order for users to have a better understanding of the data itself.

These data details are included alongside the dashboard, enabling users and viewers to understand the source and lineage of data from within a visualisation.

In conclusion, with these new features, Tableau aims to:

  • Eliminate duplicate content, time wasting and prevent analysis based on bad data with Tableau Catalog. With the data quality warning, you may be more aware when there is something wrong with the data values and resolve them. One of the biggest changes is being able to see all the data sources that are being used, helping to avoid publishing duplicate data;
  • Provide faster explanations for unexpected values in data with Explain Data. This feature provides more detail about the data, especially outliers, and lets you explore other scenarios that can be further explored/investigated, saving data exploration time, especially when there is a data set with lots of data.

With these new features, Tableau is getting stronger in the market, bringing unique characteristics to bear against its competitors. This is an advantage because nowadays there are many solutions levelling up, and it is necessary to try to make a difference.

For more information and further details on the new features of Tableau 2019.3, click on the following link.

Carina MartinsTableau 2019.3 Beta is out; let’s take a quick look!
read more

Iniciativas 2º semestre: onde vamos estar?

O 2º semestre começa em setembro e nós, apesar de ainda estarmos em julho, já estamos a preparar a nossa presença em alguns eventos de referência. Como é hábito, a Xpand IT faz questão de participar em eventos organizados por outras empresas de referência, porque demonstrar o nosso expertise é um dos nossos grandes objetivos ao longo do ano. Para além disso, queremos sempre estar onde está a inovação. Por isso é importante para nós compreender as novas tendências, discutir novas tecnologias com os nossos pares e descobrir novas abordagens.

DSPA Insights: 19 e 20 de setembro

O primeiro evento no qual estaremos presentes será o DSPA Insights 2019. Este é um evento organizado pela Associação Portuguesa de Data Science, cujo foco principal é debater o que de melhor se faz nas áreas de data science e de inteligência artificial, tanto a nível nacional como a nível internacional. Esta será a segunda edição desta conferência, que se irá realizar no campus da Nova SBE, nos dias 19 e 20 de setembro.

Porque este ano lançámos a nova unidade de Data Science, faz sentido para a Xpand IT marcar presença neste evento, abordar diferentes formas de encarar diferente projetos que tem vindo a desenvolver e apresentar alguns pontos de vista em relação a esta nova área de atuação, através de uma apresentação com o título: Operationalize Dara Science Solutions – How to tackle Enterprise Challenges.

IDC Directions 2019: 17 de outubro

A segunda conferência externa na qual iremos participar será organizada pela IDC e é, hoje em dia, um evento de referência na área das tecnologias de informação em Portugal. O IDC Directions 2019 decorrerá no dia 17 de outubro, no Centro de Congressos do Estoril – à semelhança das edições dos anos anteriores – e, para 2019, o mote é: Multiplied Innovation: Scaling a Technology Revolution.

São esperados mais de 1400 participantes, e cerca de 30 oradores de várias empresas de referência em Portugal, entre os quais Serge Findling, Vice President of Research, Digital Transformation da IDC; Heath Salwner, Start with Why Igniter (Simon Sinek Disciple).

Como habitual, a Xpand IT estará presente enquanto Silver Expositor, e terá um stand no piso superior, no qual garantirá dinâmicas sempre voltadas para as áreas tecnológicas em que atua.

Web Summit 2019: 4 a 7 de novembro

A Web Summit é já uma conferência de referência mundial, na qual as maiores tecnológicas se juntam para inspirar, apresentar inovações, e fomentar negócio. Este é um evento que se caracteriza por juntar alguns dos melhores oradores do mundo, provenientes de várias áreas, mas também grandes investidores e empresários, que procuram apostar em novas tecnologias ou em start-ups promissoras.

A Xpand IT estará, mais uma vez, presente nesta conferência, este ano com um espaço maior, mais interativo, e com a promessa de novas dinâmicas. Visitem-nos no stand, conheçam os nossos projetos, e levem convosco os nossos brindes!

Ana PaneiroIniciativas 2º semestre: onde vamos estar?
read more

O Tableau 2019.3 está lançado, vamos ver as novidades!

O Tableau é um software que ajuda as pessoas a ver e entender os dados, transformando a forma como é utilizado para ajudar a resolver os seus problemas. Torna a análise de dados rápida e simples, esteticamente mais apelativa e útil, para que seja possível que os dados tenham verdadeiro impacto.

Este é o objetivo de Tableau: transformar dados em valor nos negócios, para que possa revelar um impacto positivo nos mesmos.

Existe agora uma nova versão a ser lançado, o Tableau 2019.3 Beta, e, ao instalar esta versão, podemos ver novas e interessantes capacidades. Ao utilizar esta nova versão conseguimos melhorar os nossos objetivos. Em baixo, distingui as características mais interessantes:

  • Explain Data – uma nova característica que nos ajuda a entender o “porquê” de existirem valores inesperados nos dados;
  • Tableau Catalog – uma nova característica no Add-on Data Management que nos ajuda a garantir que estamos a utilizar os dados certos, no momento certo.

Explain Data

O Explain Data existe para nos fornecer explicações, através do método estatístico Bayesian, para valores inesperados nos dados. Com esta nova função é possível identificar causas e ver novas relações entre os dados, e encontra-se disponível em todos os workbooks existentes, tanto para Creators como para Explorers. Não é necessário preparar os dados ou efetuar qualquer instalação.

É muito simples: selecione uma marca e aprenda mais sobre ela.

A figura abaixo apresenta uma possível explicação dos dados, extraída de uma marca selecionada.

Neste exemplo, estamos a analisar uma visualização sobre determinados produtos e o seu lucro médio. Podemos verificar que o produto Copiers apresenta um lucro muito superior aos restantes produtos. Com o Explain Data, percebemos que isto acontece porque existe um valor muito elevado nos registos deste produto que fazem aumentar estas medidas. Esta característica também apresenta algumas visualizações sobre relacionadas com esta explicação, como a primeira tabela que apresenta o registo onde se verifica um valor superior.

O painel apresentado nesta nova feature apresenta os seguintes componentes:

  1. Selecionar a Informação Marcada – indica que marca está a ser descrita e analisada;
  2. Medir a Seleção – mostra as medidas disponíveis para selecionar a que está a ser utilizada para a explicação;
  3. Resumo do intervalo esperado – descreve se o valor é inesperado ou não, tendo em conta as outras Marcas na visualização;
  4. Lista de Explicação – exibe uma lista das possíveis explicações para o valor alterado na Marca Selecionada. A seleção de uma explicação na lista irá mostrar mais detalhes no painel Explicação, à direita;
  5. Painel Explicação – mostra a explicação selecionada com uma combinação de texto e visualizações.

Tableau Catalog

Esta nova característica pretende ajudar as organizações a melhorar a forma como gerem os seus dados, porque, atualmente, é muito difícil para os utilizadores perceber se estão a utilizar os dados certos, no momento certo. Esta é uma nova feature que estará disponível no Tableau Server e no Tableau Online.

Com o Tableau Catalog é fácil ter uma visualização completa de todos os dados que estão a ser utilizados no Tableau, e como estão contactados com o analytics. Os detentores dos dados conseguem automaticamente identificar informação nos dados, incluindo permissões, métricas e lineares, como mostrado na figura abaixo.

Neste exemplo, podemos ver que com esta característica é como se olhássemos para um catálogo de dados, sobre uma base de dados. Podemos ver avisos, que aparecem caso existam erros na qualidade dos dados (a), tais como campos ausentes, e podemos também ver lineares sobre os dados (b), tais como que tabelas estão relacionadas, e em que workbooks e sheets estão esses dados a ser utilizados.

O Tableau Catalog permite, ainda, construir uma relação de confiança nos dados utilizados por toda a empresa, já que cria um painel de com detalhes dos dados (como podemos ver na figura abaixo):

  • Avisos sobre a qualidade dos dados, que permite aos utilizadores perceberem quando existe um problema com os dados presentes num dashboard – como um campo ausente ou uma interrupção de manutenção;
  • Definições e metadados adicionais podem ser utilizados, permitindo aos utilizadores um melhor entendimento dos dados em si.

Estes detalhes dos dados estão incluídos nos dashboards, permitindo, por sua vez, aos utilizadores e viewers entenderem a fonte e a linearidade dos dados dentro de uma visualização.

Em conclusão, com estas novas features, o Tableau pretende:

  • Eliminar conteúdo duplicado, perdas de tempo e a prevenção de análises efetuadas com base em dados errados (através do Tableau Catalog). Com os avisos sobre a qualidade dos dados, o utilizador consegue controlar a existência de erros nos valores e resolver o possível problema. Uma das maiores mudanças é a possibilidade de ver todas as fontes de dados que estão a ser utilizadas, o que evita a publicação duplicada dos dados;
  • Garantir explicações rápidas para valores inesperados nos dados através do Explain Data. Esta característica oferece maior detalhe sobre os dados, especialmente sobre os outliers, e permite a exploração de outros cenários que podem ser futuramente investigados ou analisados, reduzindo tempo de análise – especialmente quando existe um data set com um enorme volume de dados.

Com estas novas features, o Tableau evolui, tornando-se mais forte no mercado, trazendo características únicas, quando comparado com os seus competidores. Isto é, sem dúvida, uma vantagem porque, hoje em dia, existem inúmeras soluções que se encontram a evoluir, tornando-se necessário fazer efetivamente a diferença.

Para mais informação e mais detalhes sobre as novas características do Tableau 2019.3, aceda ao link.

Carina MartinsO Tableau 2019.3 está lançado, vamos ver as novidades!
read more

Single Page Applications

Atualmente, as aplicações web estão a tomar conta das velhas aplicações de ambiente de trabalho e trazem consigo vantagens, tais como a dissociação de qualquer dispositivo e a conveniência de utilização. A procura de aplicações web ricas, complexas, mas de fácil utilização, cresce todos os dias. Em par com esta procura e também a ganhar cada vez mais popularidade nas tendências de desenvolvimento web estão as aplicações de página única.

Uma aplicação de página única (sigla em inglês: SPA) é uma aplicação que interage com o utilizador ao reescrever a página atual de forma dinâmica em vez de carregar uma página completamente nova a partir de um servidor. Tal resulta numa experiência mais confortável para o utilizador e que não é constantemente interrompida pela sucessiva navegação entre páginas.

Contexto – aplicações tradicionais de várias páginas

As aplicações de várias páginas (sigla em inglês: MPA) são as aplicações web “tradicionais” que recarregam e apresentam uma página completamente nova como o resultado de uma interação entre o utilizador e a app. Todas as interações do utilizador – tais como clicar num link ou trocar um URL – e todas as trocas de dados de e para o servidor formam um novo pedido para uma nova página a ser apresentada. Este processo demora tempo e pode ter efeitos pouco positivos na experiência de utilização, se pretender uma aplicação interativa e de rápida resposta.

Este comportamento predefinido das MPA pode ser resolvido ao tirar partido do AJAX, que permite que apenas uma parte da página seja atualizada. No entanto, temos de ter em atenção a complexidade adicionada por esta solução ao processo de desenvolvimento.
Uma MPA costuma utilizar JavaScript (JS) em front end para adicionar interatividade à aplicação, mas não depende de JS para apresentar o conteúdo da página. Tal torna uma MPA numa arquitetura que é adequada ao suporte de navegadores legados que costumam oferecer uma funcionalidade de JS mais limitada.

A grande vantagem de uma MPA assenta na otimização de motores de busca (sigla em inglês: SEO). Quando um pedido é feito ao servidor para apresentar uma nova página, a resposta é o conteúdo final para essa página. As ferramentas dos motores de busca conseguem ver exatamente o que o utilizador vê, por isso, a aplicação vai ter um bom desempenho no motor de busca. Esta é uma das grandes razões para alguns dos grandes websites, como a Amazon e o The New York Times, ainda utilizarem esta arquitetura.

Por outro lado, as aplicações desenvolvidas com esta arquitetura tendem a ser maiores e mais lentas, ao carregar constantemente páginas a partir do servidor, o que afeta a experiência de utilização de forma negativa. De uma perspetiva de desenvolvimento, o processo tende a ser mais complexo e pode resultar numa dissociação entre back end e front end.

O crescimento das aplicações de página única

Como o nome indica, uma SPA só tem uma única página. O Código necessário para apresentar a aplicação é encontrado em apenas um carregamento. Após este carregamento inicial, não é acionada qualquer atualização da página, não existem novos ficheiros HTML a serem transferidos do server. Em vez disso, a aplicação reapresenta partes da página enquanto resultado de qualquer navegação no navegador. Toda a comunicação que se segue entre a aplicação e o servidor tem apenas o objetivo de encontrar e publicar dados de e no servidor, e acontece tudo nos bastidores utilizando API bem definidos dos serviços de back end.

As SPA assentam fortemente em JS para conseguirem ouvir os eventos e reapresentar partes da página. Acontece tudo através de JS. Este tipo de arquitetura é dependente de JS e não há volta a dar. Por causa disto, as SPA privilegiam navegadores modernos que oferecem um suporte de JS mais vasto e atualizado.

O comportamento de uma SPA torna uma aplicação muito rápida e de rápida resposta, oferecendo ao utilizador uma experiência interativa semelhante utilizando um dispositivo móvel ou um computador. Da perspetiva do desenvolvimento, conseguimos dissociar o back end e o front end. O back end já não é responsável por apresentar a visão, e a comunicação entre os dois módulos abrange apenas as trocas de dados. O processo de deploy também é muito mais simplificado.

O problema com as SPA prende-se no desafio colocado ao desenvolver a aplicação SEO-friendly. Dado que a maioria do conteúdo da página é carregado assincronamente, as ferramentas dos motores de busca não têm maneira de saber que mais dados vão ser adicionados à página. Não existe uma única solução predefinida para resolver este obstáculo, mas existem algumas ferramentas que podem ser utilizadas para criar uma SPA que seja SEO-friendly. Também é provável que as estruturas de SPA vão evoluir com o tempo para que seja mais fácil para as ferramentas dos motores de busca encontrarem e organizarem o conteúdo da aplicação.

As aplicações de página única são o futuro da web?

Este tipo de aplicações existe há anos, mas só agora está a tornar-se mais comum do mundo dos programadores. Isto deve-se principalmente à aparência e à crescente popularidade das estruturas e bibliotecas web que permitem desenvolver SPA fora do comum de forma rápida e eficiente, tais como Angular e React. Se compararmos a evolução de tendências nestes termos, é possível ver que a popularidade das SPA, Angular e React, evoluíram proporcionalmente ao longo do tempo.

As SPA têm vindo a tornar-se cada vez mais populares, e parece que não vão desaparecer tão cedo. As vantagens técnicas e funcionais das SPA serem SEO-friendly não podem ser ignoradas, e espera-se que este tipo de aplicações se torne disponível mais frequentemente, especialmente com a evolução das tecnologias envolvidas e, com sorte, a resolução de alguns dos obstáculos das SPA. No entanto, precisamos de reconhecer que, de momento, uma SPA pode não ser a solução certa para todos os projetos.

Algumas características das MPA tornam este método mais adequado para aplicações que tenham muito conteúdo em categorias diferentes e onde o desempenho de um motor de busca seja muito importante, tal como em lojas online ou marketplaces. As SPA são adequadas para plataformas dinâmicas, possivelmente com uma componente móvel onde uma interface complexa e uma experiência de utilização satisfatória e reativa sejam fatores essenciais a ser considerados, tais como em redes sociais ou comunidades fechadas. Existe uma Terceira possibilidade para quem gosta das SPA e das suas características, mas não consegue encaixar a sua aplicação uma só página: considerando uma aplicação híbrida, pode tirar o melhor dos dois métodos.

Nenhuma arquitetura é certa ou errada. Só precisa de saber as suas necessidades e escolher a melhor solução para si e para a sua aplicação.

Patrícia PereiraSingle Page Applications
read more

Apache Spark: como criar um processamento distribuído eficiente?

No dia 30 de maio a XTech Community promoveu uma sessão hands-on para explicar à comunidade como criar um processamento distribuído eficiente com Spark, demonstrando as suas vantagens em relação a Hadoop MapReduce.

Mas antes de mais, o que é Spark? É uma framework de processamento paralelo e distribuído, que nos últimos anos tem sido um dos projetos mais ativos na área de Big Data, tanto na utilização como contribuição pela comunidade open source.

As Funcionalidades de Apache Spark

Como principais vantagens em relação ao Hadoop MapReduce foram apresentadas a facilidade da escrita de jobs compostos por múltiplos passos, através da API de Spark baseada em programação funcional bem como a capacidade de guardar os dados intermédios em memória.

Apache Spark

As funcionalidades oferecidas pelo Apache Spark foram introduzidas através das suas bibliotecas embutidas, implementadas por cima do Spark Core Engine, e pela possibilidade de usar bibliotecas externas disponíveis no repositório de Spark Packages.

Apache Spark

Conceitos de Spark Core

Após à introdução, o foco da apresentação passou para os conceitos importantes de Spark Core, tendo-se explicado:

  • em que consiste o programa Driver escrito pelos developers,
  • a abstração de RDD que permite paralelizar a execução de operações sobre datasets distribuídos
  • os tipos de operações aplicáveis sobre os RDDs: actions e

Através de um exemplo de word count em Spark, demonstrou-se a facilidade da escrita de um primeiro job e quais os componentes envolvidos.

Apache Spark

Foi também apresentado o resultado da execução do word count na Spark UI –  interface web disponibilizada para monitorizar a execução de aplicações Spark, que permitiu explicar o significado das unidades de execução física em quais uma aplicação de Spark se divide: Job, Stage e Task.

Apache Spark


O seguinte tópico abordado no meetup Spark Intro and Beyond foi o particionamento do Apache Spark. O número de partições de um RDD depende diretamente do particionamento dos dados na origem e de algumas possíveis parametrizações.

É importante perceber como funciona o particionamento uma vez que o número de partições de um RDD determina o paralelismo da execução das operações distribuídas e o seu controlo permite escrever aplicações mais eficientes, utilizando da melhor forma maneira os recursos do cluster.

Apache Spark

Abordámos quatro técnicas para aumentar o paralelismo da execução:

  • Através do 2º parâmetro da função sc.textFile(“hdfs://…”, 120)
  • Aumentando o número de partições do tópico de Kafka lido
  • Através do 2º parâmetro das wide transformations, e.g rdd.reduceByKey(_ + _, 100)
  • Através da função rdd.repartition(120)

Redução do Shuffle Data

Por fim, mostrámos 3 técnicas que minimizam a quantidade de dados que são enviados entre dois Stages de um Job, que se designa por shuffle data, e permite aumentar a desempenho da aplicação.

Shuffles em Spark são muito pesados porque os dados são enviados em rede entre os Executors de Spark que residem em diferentes nós do cluster, e escritos para e lidos de disco pelos Executors do mesmo nó.

As técnicas apresentadas para reduzir shuffle data foram:

  • Uso de operações com pré-agregação, e.g reduceByKey vs groupByKey
  • Aplicar operações sobre RDDs previamente particionados e cached
  • Broadcast Joins


No final, para além de serem esclarecidas algumas dúvidas sobre a apresentação, foram também discutidos vários pontos relevantes como:

  • Data locality e a integração do Spark em clusters Hadoop
  • Cenários nos quais faz sentido aplicar processamento em Spark
  • Possíveis razões de um Spark job ter um elevado tempo de execução e como diagnosticar através da Spark UI

Mais informações sobre o meetup Spark Intro and Beyond.

Andriy Zabolotnyy

Big Data expert, Xpand IT

Andriy ZabolotnyyApache Spark: como criar um processamento distribuído eficiente?
read more

Novo mercado estratégico: chegámos à Suécia!

A Xpand IT é uma empresa portuguesa, com capital português, e a dimensão nacional que já atingiu é, de facto, extraordinária. Terminou o ano de 2018 com um crescimento de 45% e uma faturação a rondar os 15 milhões de euros, o que levou à distinção alcançada no ano de 2019 no Ranking do Financial Times (FT1000: Europe’s Fastest Growing Companies). A Xpand IT foi uma das três tecnológicas portuguesas a estar presente neste importante Ranking.

No entanto, na Xpand IT queremos crescer sempre mais. Queremos partilhar o nosso expertise pelos quatro cantos do mundo e levar um pouco da nossa cultura a todos os nossos clientes. E a verdade é que a participação internacional da Xpand IT tem também crescido substancialmente, tendo fechado o ano anterior com um total de 46,5% das suas receitas provenientes de clientes internacionais.

Este crescimento tem sido sustentado por dois fortes eixos de atuação: a exploração de mercados estratégicos, como por exemplo, Alemanha e Reino Unido (onde já temos uma subsidiária e escritório) mas também pela forte alavancagem a nível de produto que se tem registado. O Xray e o Xporter, ambos bastante associados ao ecossistema Atlassian, são utilizados por mais de 5000 clientes, em mais de 90 países! Para este ano estão previstos lançamentos de novos produtos, em áreas como Inteligência Artificial (Digital Xperience) ou Business Intelligence.

Este ano, a estratégia de internacionalização da Xpand IT passa por apostar em novos mercados estratégicos na Europa: os países nórdicos. A Suécia será o primeiro país a estar sob foco, mas o objetivo é alargar as iniciativas aos restantes: Noruega, Dinamarca e Finlândia.

Esta aposta prende-se com o facto de já existirem diversas iniciativas comerciais neste mercado, e pelo incentivo de alguns dos nossos parceiros, como a Microsoft, Hitachi Vantara ou Cloudera, que já se encontram bem estabelecidos em países como a Suécia. Para além disso, o facto de as barreiras culturais e diferença horária não serem significativas, faz com que esta seja uma das nossas apostas para o ano de 2019.

Para Paulo Lopes, CEO & Senior Partner da Xpand IT: “Temos um enorme orgulho no crescimento que a empresa tem alcançado nos últimos anos e a nossa expectativa é que este sucesso se continue a verificar. O processo de internacionalização da Xpand IT já conta com alguns anos, sendo estamos a entrar numa 2ª fase, onde iremos apostar mais fortemente novos mercados onde sabemos que a nossa expertise tecnológica, aliada a uma equipa e cultura únicas, podem realmente fazer a diferença. Acreditamos que a Suécia é a aposta certa para a entrada no mercado dos países nórdicos. Em breve iremos dar mais novidades sobre esta aposta!…”

Ana LamelasNovo mercado estratégico: chegámos à Suécia!
read more

A new strategic market: we’ve arrived in Sweden!

Xpand IT is a Portuguese company supported by Portuguese investment, and it is extraordinary how quickly we have expanded within Portugal. At the end of 2018, the company realised a growth of 45% and a revenue of around 15 million euros, which led Xpand IT to be distinguished in the Financial Times’ Ranking of 2019 (FT1000: Europe’s Fastest Growing Companies). Xpand IT was one of just three Portuguese technology companies to be featured in this ranking.

However, Xpand IT always seeks to grow further. We want to share our expertise with all four corners of the world and deliver a little bit of our culture to all our customers. It is true that Xpand IT’s international involvement has been increasing substantially, with 46.5% of our revenue coming from international customers at the end of last year.

This growth has been supported by two main focal points: exploring strategic markets such as Germany and the United Kingdom (where we now have a branch and an office), and strong leverage of the product we register. Xray and Xporter, both associated with Atlassian ecosystems, are used by more than 5 thousand customers in more than 90 countries! And new products are expected this year, in both artificial intelligence (Digital Xperience) and business intelligence.

This year, Xpand IT’s internationalisation strategy is to invest in new strategic markets in Europe: namely the Nordic countries. Sweden will be the first country focused on, but the goal is to expand our initiatives to the rest of them: Norway, Denmark and Finland.

There are already various commercial initiatives in this market, and we can count on support from partners such as Microsoft, Hitachi Vantara and Cloudera, all already well-established in countries like Sweden. Moreover, cultural barriers and different time zones do not represent a significant impact, which make this strategy an attractive investment prospect for 2019.

In the words of Paulo Lopes, CEO & Senior Partner at Xpand IT: “We are extremely proud of the growth the company has experienced in recent years and expect this success to keep on going. Xpand IT has been undergoing its internationalisation process for a few years now. However, we are presently entering a 2nd phase, where we will actively invest in new markets where we know that our technological expertise paired with a unique team and unique culture can definitely make a difference. We believe that Sweden makes the right starting point for investment in the Nordic market. Soon we will be able to give you even more good news about this project!…”

Ana LamelasA new strategic market: we’ve arrived in Sweden!
read more

Zwoox – Simplifica a ingestão de dados

O Zwoox é uma ferramenta de ingestão de dados, desenvolvida pela Xpand IT, e que facilita a importação e estruturação de dados para um cluster Hadoop.

Esta é uma ferramenta altamente escalável dado que se encontra totalmente integrada no Cloudera Enterprise Data Hub e tira total proveito de várias tecnologias Hadoop, como Spark, Hbase e Kafka. Com o Zwoox a necessidade de codificar data pipelines “à mão” é eliminada, qualquer que seja a fonte de dados.

Uma das maiores vantagens do Zwoox é o facto de acelerar a ingestão de dados, oferecendo inúmeras opções no que à importação de dados diz respeito permitindo inclusive replicar RDBMS DML em near real-time para estruturas de dados Hadoop.

Apesar de existirem várias ferramentas que permitem a importação de dados para clusters Hadoop, só com o Zwoox é possível efetuar esta importação de forma acessível, eficiente e altamente escalável, persistindo os dados em HDFS (com tabelas Hive) ou Kudu.

Algumas das possibilidades que o Zwoox oferece:

  • Automação de particionamento em HDFS;
  • Tradução de data types;
  • Carregamento total ou por deltas;
  • Tabelas de audit (com full history) sem impactos na performance;
  • Derivação de novas colunas de funções pré-definidas ou código “pluggable”;
  • Integração operacional com o Cloudera Manager.

Esta ferramenta encontra-se disponível no Cloudera Solutions Center e estará brevemente no site da Xpand IT. Por enquanto, pode também consultar o documento informativo sobre o produto.

Se precisa de saber mais sobre o Zwoox ou sobre ingestão de dados, contacte-nos.

Ana LamelasZwoox – Simplifica a ingestão de dados
read more