Author Archives: sidroniolima

Javascript is awesome

Javascript logo.

I’m very excited about studying Javascript on the mission of expand my knowledges at front-end. The principal goal is use Javascript at my Java back-end projects.

So, two things I really liked on javascript so far is:

  1. template string;
  2. spread operator.

The first concept lets a array be used as params of methods, on a very easy and functional way.

The second one helps on format messages that uses dynamics values, as variables. We can just reference the value inside a string pattern, marked with the ` character.

See the example…

Continue reading

Machine Learning – Classification

How it works?

Tthere’s a input x, like sentence from review, a classified MODEL that generates the output, y. The predicted class, like positive or negative reviews.

Applications:

Multiclass Classifier: input (x) webpages and classifiers (y) like education, sport, health, IT and so on.

Spam filtering: by model classification of email input variables like text of email, ip, sender, etc. To output of classifying into not spam or spam.

Image classification: predictions through analysis of pixel images.

Personalized medical diagnosis: input of indicators like temperature, x-ray analysis, medical tests, for a disease classifier model, that predicts healthy, cold, flu, pneumonia etc.

And the last, the application for reading minds, with brain images that, applied to a model classifier it is possible to discover which image is seeing by the person.

Lambdas Oracle MOOC

Java 8 Lambda

Section 1

– Need changes to Java to simplify parallel coding.
– Lambda expressions simplify how to pass behavior as a parameter.

-Show the differences through Java basic code, inner classes and lambdas.

Non-functional (imperative) programming style versus functional.

Problem: external iteration.
After: more functional with inner classes;
And then: lambda approach, more concise, less code (error-prone), client logic is stateless, thread-safe.

The lambda expression provides the implementation of the abstract method. The type is the abstract method.

@FunctionalInterface -> Functional Interface = an interface with one abstract method; default doesn’t count. The equals also doesn’t count in therms of abstract method.

Variable assignment: Callable c = () -> process();

Method parameter: mew Thread(() -> process()).start();

Lambda expressions can be used anywhere the type is a functional interface.

– A functional interface has only one abstract method.

The lambda expression provides the implementation of the single abstract method of the functional interface.

java.util.function Package

Consumer<T>

Operation that takes a single value and return no result: String s -> System.out.println(s) .

Example: String s -> System.out.println(s);

BiConsumer<T,U>

Takes two values and returns no result.

Example: (k,v) -> System.out.println(“key: ” + k + “, value: ” + v);

Supplier

The opposite of a Consumer. Doesn’t take any parameter and returns a value.

Example: ( ) -> createLogMessage();

Function<T,R>

Takes one argument, do something and returns a result.

Example: Student s -> s.getName();

BiFunction<T,U,R>

Takes two arguments and returns a result.

Example: (String name, Student s) -> new Teacher(name, student);

UnaryOperator<T>

Kind function: single argument and result of the same type.

  • T apply(T a)

Example: String s -> s.toLowerCase();

BinaryOperartor<T>

Specialised form of BiFunction: two arguments and a result, all of the same type.

  • T apply(T a, T b)

Example: (String x, String y) -> { if (x.length() > y.length()) return x; return y; }

Predicate

A boolean valued function of one argument:

Example: Student s -> s.graduationYear() == 2011

BiPredicate

Takes two arguments

Example: (Student s, int minGrade) -> s.grade <= minGrade

Method and constructor references

FileFilter x = (File f) -> f.canRead();

FileFilter x = File::canRead;

External variables

Final or effective final.

Link to the on line free Oracle course.

10 Rules for Writing Safety Critical Code

In the current issue of Java Magazine the from editor column talks about the size of classes. The benefits of class with lines of code (LOCs) less than 60. But also some challenges that comes with.

What I found curious was a reference to 10 rules for writing safety critical code, that’s language agnostic. So it can be applied on actual Java projects without constraints. Other curious thing is that these rules are used by NASA, as describes the article.

The link for the rules is here.

The rule of limiting classes (functions at the original) to 60 lines of code is challenger and the article explain it very well.

Other important rules is the 10th: compile with all warnings enabled, and use one or more source code analyzers. Very actual.

So I thought that it was interesting and could open deeper discussions.

Infinitest

 

Mais uma ferramenta para otimizar o desenvolvimento e evitar a identificação tardia de bugs.

O Infinitest faz isso da seguinte forma: ao salvar uma alteração em um código na IDE ele dispara os testes, avalia e marca os que não passaram. Assim garante a verificação de erros on time.

No meu caso instalei-o no Eclipse (Mars.2 Release (4.5.2)), bem rápido e tranquilo pelo Marketplace.

Ainda pode ser configurado para excluir pacotes, classes ou padrões específicos criando um arquivo na raiz do projeto chamado infinitest.filters.

A documentação do projeto está aqui em https://infinitest.github.io/.

E a fonte deste post está no blog da Caelumn, aqui.

Até!

Apache Cassandra on Ubuntu

Cassandra logo

 

So I decided to test the NoSql Cassandra database. But to install was a non-trivial proccess on Ubuntu 16 release.

After some googling I found this link inside the Download area of the oficial Cassandra site. And then it works!

It was necessary to change the first key number for the one that is showing on the error after the apt-get update. I skipped the add of the other two keys and it works.

Now I can test the Cassandra with Spring Boot, via this link on Dzone.

Hope this can help…

Microservices boundaries

Fronteira entre serviços

Sob a nova perspectiva de softwares como microservices surge um desafio em identificar as fronteiras entre estes que compõem a aplicação.

Duas abordagens podem ser consideradas, ambas baseadas no princípio da Single Responsible Principle (Princípio da Responsabilidade Única):

A primeira estabelece que os microservices devem ser identificados por meio do verbo de execução de sua responsabilidade. Por exemplo, em uma aplicação de Gerência de Estoques, como a twarehouse em tetraTI, ao analisarmos as ações de entrada de produtos, o cadastro e análise daqueles com baixa em estoque, teríamos assim 3 candidatos a microservices: Entrada de Produtos Service, Cadastro de Produtos Service e Analisador de Baixa Service.

A outra abordagem é a de definir fronteiras por meio da identificação das entidades ou recursos oferecidos pelo sistema. Dessa forma e utilizando o exemplo acima teríamos serviços como Movimentação Service, responsável por todas as operações de movimentação. Ou Analisador de Estoque Service, que forneceria informações em tempo real sobre o estoque.

É muito sutil a escolha ou identificação de serviços por meio de suas fronteiras, que juntos definem a aplicação em si. Para enfrentar este desafio deste novo conceito de SaaS e usufruir de suas vantagens será necessário bom senso e experiência por parte do arquiteto.

Fonte: Devmedia e Building Microservices Book.

Sai JSF, entra AngularJS

AngularJS-large

Atualmente utilizo JSF para o front-end mas percebo que nem de perto é tão produtiva quanto Angular. A ideia deste post é mostrar como substituir tags jsf de uma página xhtml que consome dados de um backend em java pelo AngularJS.

Isso implicará na troca da arquitetura monolítica onde a back e front são tratados na própria aplicação para uma onde estarão separados.

Segue um video para introdução ao Angular como sugestão de tutorial para início com o framework javascript MVC AngularJS.

Mais sobre o processo de substituição dos JSF pelo Angular nos próximos posts. Até.

Conteúdo estático no Wildfly em produção

upload-cloud

Neste Post demonstrarei como utilizar de forma eficiente imagens como conteúdo estático em uma aplicação Java Web com JSF que rode em um ambiente Linux e num servidor WildFly 8.x.

A ideia é utilizar imagens no cadastro de produtos, fazendo seu upload e exibindo-as em diversas partes.

upload_1

As ferramentas necessárias são o PuTTy para criação do diretório no servidor e um editor xml para configuração do Handler no arquivo de configuração do WildFly. No meu caso utilizei o próprio Eclise IDE. Claro que assumindo que já exista uma aplicação com as devidas configurações e rodando. Disponibilizarei a classe que utilizo para tratar o upload da imagem também.

Criando a estrutura de diretório: a aplicação está hospedada num servidor integrator.com.br, portanto definia a seguinte estrutura:

upload_2

Para criação dos diretório é necessário pelo PuTTy criar os diretórios a partir da pasta home, assim: /home/<<usuário>>/var/static/images/pecas.

Configurando o handler no WildFly: agora que as pastas estão criadas é necessário mapear esta estrutura no servidor de aplicação para que possamos acessá-lo. Para isso configuramos o arquivo de configuração, standalone.xml, da seguinte forma:

upload_3

O handler mapeará o caminho definido em /imagens/meu-espaco. Para acessar o conteúdo do diretório basta acessar a url http://<<endereço_do_servidor>>/imagens/meu-espaco.  A opção directory-listing permite que seu conteúdo seja listado:

upload_4

A classe para upload da imagem: o mecanismo de upload é simples graças ao componente Upload da biblioteca PrimeFaces. Sua utilização é simples:
upload_5

A classe FotoProdutoBean encaminhará a ação à Camada de Serviço de produto, que utilizará a classe FotoHelper para escrever o conteúdo do download para o diretório definido.

upload_6

A constante CAMINHO_DAS_FOTOS contém o caminho para o nosso diretório de conteúdo estático, isto é, nossas fotos de produtos (peças): /home/meuvisua/var/static/images/pecas/.

Exibindo as imagens: Enfim, para exibir a imagem basta uma tab <img> html com o mapeamento. Desta forma:

upload_7

Só isso! Ao utilizarmos o handler para mapear um diretório fora do servidor de aplicação tornamos nosso conteúdo estático independente. Num cenário de atualização ou substituição do servidor nada será afetado. Ainda, assim evitamos também salvarmos essas imagens direto no banco, impactando a performance.

Se alguém tiver uma solução melhor ou alternativa, comentem.

Até o próximo.