Link

Future.

A interface Java “Future” é utilizado para computação Assíncrona com muitas features para controle de execução.

Métodos que levam um grande tempo de processamento são fortes candidatos a implementarem computação assíncrona como o Future.

Tarefas matemáticas, algoritmos complexos, processamento de uma grande massa de dados, chamadas remotas como downloads de arquivos podem se beneficiar muito com a interface Future.

A interface Future ajuda a simplificar as chamadas a Thread’s que podem ser muito problemáticas em alguns casos.

Utilizando Future, podemos com algumas linhas de códigos fazer chamadas assíncronas de forma simples e limpa como vamos apresentar logo abaixo.

Acesse o artigo completo em: https://nakatech.herokuapp.com/article/future.html.

Apache Spark.

Processar uma grande massa de dados para extrair informações e armazenar como acontece em sistemas de Big Data pode ficar mais simples com a ajuda do Apache Spark.

O Apache Spark é uma ferramenta para Big Data que facilita esse trabalho com a proposta de ser bem rápida e eficaz.

A ferramenta também é bem flexível, ele pode ser executada em linguagens como Java, Scala, Clojure, R e Python.

Uma grande vantagem em utilizar o Spark em vez de outras ferramentas Big Data como Hadoop é a possibilidade de integrar ferramentas como:

  • Spark SQL: criando a capacidade de fazer consultas SQL sobre os dados;
  • Spark MLlib: onde possibilitamos criar uma capacidade de aprendizado de máquina para criação, filtragem e redução de dados;
  • Spark GraphX: Adiciona a capacidade de computação baseada em grafos e paralelas;
  • Spark Streaming: Possibilita o processamento de dados via stream em tempo real.

Uma característica do Apache Spark é evitar o deslocamento dos dados durante o processamento, movendo os dados para uma memória fazendo uma otimização no tempo de processamento.

Testes com Spark e Python.

O pré requisito para instalação é ter instalado na máquina um Python com a versão maior que 2.7 e o Pip.

Para instalar a PySpark digite no terminal:
$pip install pyspark

Vamos fazer alguns testes de mapeamento e transformação de dados com Apache Spark e Python.

Crie um arquivo com o texto abaixo e grave como “sucesso.txt” :

O sucesso é construído à noite! Durante o dia você faz o que todos fazem. Não conheço ninguém que conseguiu realizar seu sonho sem sacrificar feriados e domingos pelo menos uma centena de vezes.

Da mesma forma, se você quiser construir uma relação amiga com seus filhos, terá que se dedicar a isso, superar o cansaço, arrumar tempo para ficar com eles, deixar de lado o orgulho e o comodismo.

Se quiser um casamento gratificante, terá que investir tempo, energia e sentimentos nesse objetivo.

O sucesso é construído à noite! Durante o dia você faz o que todos fazem. Mas, para obter resultado diferente da maioria, você tem que ser especial. Se fizer igual a todo mundo, obterá os mesmos resultados.

Não se compare à maioria, pois infelizmente ela não é modelo de sucesso. Se você quiser atingir uma meta especial, terá que estudar no horário em que os outros estão tomando chope com batatas fritas. Terá de planejar, enquanto os outros permanecem à frente da televisão. Terá de trabalhar enquanto os outros tomam sol à beira da piscina.

A realização de um sonho depende de dedicação. Há muita gente que espera que o sonho se realize por mágica. Mas toda mágica é ilusão. A ilusão não tira ninguém de onde está. Ilusão é combustível de perdedores.

“Quem quer fazer alguma coisa, encontra um meio. Quem não quer fazer nada, encontra uma desculpa.”

(Roberto Shinyashiki)

Vamos importar o Apache Spark:
>>> import pyspark
>>> from pyspark import SparkContext
>>> sc = SparkContext()

Vamos carregar o texto em uma variável:
>>> sucessoRDD = sc.textFile("sucesso.txt")

Agora vamos conferir se o texto foi carregado:
>>> sucessoRDD.collect()

Vamos capturar o primeiro parágrafo:
>>> sucessoRDD.first()

Vamos capturar as 5 primeiras frases:
>>> sucessoRDD.take(5)

Vamos fazer uma transformação, separando cada palavra e armazenando em uma variável:
>>> flatMappedConfusion = sucessoRDD.flatMap(lambda line : line.split(" "))
>>> flatMappedConfusion.take(5)

Vamos contar o número de palavras:
>>> flatMappedConfusion.count()

Conclusão.

Com Apache Spark, trabalhos de coleta e processamento de dados ficam bem mais simples e rápido pois além de eficiente, o Spark tornam as tarefas muito mais rápidas e simples de implementar.

Java 12.

Dia 19 de Março de 2019 foi lançado a nova versão do Java, o JDK 12 já está liberado para download na Oracle.

Lembrando que essa versão ainda não é uma versão LTS(Long Term Support), caso prefira uma versão LTS é recomendado utilizar a versão JDK 11.

Apesar do Java 12 não ser uma versão LTS, existem muitas features que podem valer a pena, um exemplo é o novo GC, o “Z Garbage Collector” que otimiza muito o coletor de lixo.

Além de novas features, essa release contempla remoção e marcação de descontinuação de features das versões anteriores.

Toda versão lançada é dito que a performance foi melhorada, ainda não fiz um benchmark, mas já li em alguns artigos falando muito bem em relação a performance, com melhorias no tempo de inicialização e menor uso de memória.

Algumas melhorias na versão.

  • Suporte a Unicode 11: São 684 novos caracteres e dentro deles a inclusão de 66 emojis e 7 scripts;
  • Suporte ao Compact Number Formatting: Uma nova forma de compactar/Abreviar a apresentação dos números, por exemplo, podemos representar o número 1000 como 1K;
  • Z Garbage Collector: Melhoria no Z GC que libera mais rápido Classes, estruturas e dados que estão sem uso ou que não foram carregadas;
  • Novas JFR(Java Flight Recorder): Mais 4 eventos de JFR foram liberadas para bibliotecas de segurança, mas por default estão desabilitadas e devem ser habilitadas manualmente;
  • Chamadas de função dentro do Switch: Foi liberada uma nova capacidade onde é possível chamar chamar funções dentro do Switch;

Conclusão.

Apesar do lançamento do Java 12 não ser LTS, é muito provável que muita gente, principalmente usuários não comerciais irão migrar para a nova versão devido as grandes novidades e pelas notícias positivas que estão sendo escritas por artigos.

Link

JNA(Java Native Access).

O JNA ou Java Native Access é uma forma de acessar bibliotecas nativas como dll’s do Windows ou so do Unix.

Muito útil quando não queremos reescrever um código nativo e temos a possibilidade de acessar diretamente de uma aplicação Java.

Diferente do JNI ou Java Native Interface, o JNA não “polui” tanto o código pois tem uma abstração maior.

O JNA é muito menos invasivo e simples de utilizar que o JNI, pois no JNI ainda é necessário fazer alterações na biblioteca nativa, o que aumenta a complexidade.

Já no JNA só precisamos criar uma interface mapeada dos métodos da biblioteca nativa e fazer as chamadas na implementação.

Acesse o tutorial completo em: https://nakatech.herokuapp.com/article/jna.html.

Link

Apache Camel.

O Apache Camel é um framework de integração que reduz e abstrai as complexidades de tarefas de integrações.

Com Apache Camel não nos preocupamos com tarefas árduas de integração, utilizamos componentes que compõem framework’s com boas práticas.

Basicamente a tarefa do programador é configurar a origem e destino da mensagem por meio de um processo Builder que define o roteamento.

A facilidade de utilização do Domain Specific Languages (DSL) para integrar os componentes é uma das qualidades do framework.

Além disso podemos fazer por meio de um processo de Mediation aplicar regras de transformação.

Acesse o tutorial completo em: https://nakatech.herokuapp.com/article/camel.html.

Open JDK.

Vamos falar um pouco sobre Open JDK e as diferenças entre outras implementações de JDK no mercado.

Primeiro, precisamos entender que a maioria das implementações de JDK são baseados no Open JDK.

Apesar do Open JDK ser uma implementação Open source, ele não é mantida somente pela comunidade, mas sim em conjunto entre Oracle e a Comunidade.

As diferenças entre o Open JDK e outras implementações geralmente são as alterações em performance.

Qualquer pessoa pode baixar o fonte do Open JDK e fazer as modificações para adaptar ao Hardware que está utilizando.

Existem várias empresas que fazem as alterações e comercializam suas implementações.

Algumas implementações de JDK.

Existem inúmeras implementações do JDK, das versões gratuitas até às pagas.

Vamos listar as mais conhecidas e algumas características.

  • Oracle JDK: A implantação mais utilizada e mais conhecida no mercado, essa implementação gera muita controvérsia quanto ao tipo de licença paga ou não, mas o Oracle JDK só é pago, caso queira algum suporte personalizado;
  • AdoptOpenJDK: Diferente do Open JDK que é mantido em conjunto entre Oracle e a comunidade, essa implementação é mantida unicamente pela comunidade;
  • Azul Zulu JDK: O Zulu JDK é uma implementação da Azul Systems que promete uma ótima performance;
  • IBM J9: Implementação feita pela IBM, as novas versões do J9 são gratuitas;
  • JRockit: Implementação paga da Oracle que tem como a principal característica o desempenho e performance.

Conclusão.

A maior diferença entre as Implementações das JDK’s é a melhoria da performance e desempenho, são poucas implementações que colocam novas capacidades ao JDK.

Link

Scala.

Scala é uma linguagem de programação multi-paradigma onde podemos programar com Orientação a Objetos e Funcional.

Todo valor em Scala é um Objeto, além de comportamentos de Classes e Traits(interface), trabalhando com a visão de linguagem Orientada a Objetos.

Já na visão de linguagem funcional, o Scala oferece a possibilidade de criar funções anônimas, funções de primeira ordem e funções aninhadas.

Scala possui uma tipagem segura, sendo uma linguagem estaticamente tipada.

Rodando sobre uma JVM, o Scala é interoperável com Java, ou seja, é possível chamar classes Java a partir de uma classe Scala.

Acesse o artigo completo em: https://nakatech.herokuapp.com/article/scala.html.