quarta-feira, 19 de dezembro de 2018

O Apache Kafka®


O Apache Kafka® é uma plataforma de streaming distribuída. O que exatamente isso significa?

Uma plataforma de streaming tem três recursos principais:

    Publique e inscreva-se em fluxos de registros, semelhantes a uma fila de mensagens ou sistema de mensagens corporativo.
    Armazene fluxos de registros de uma maneira durável e tolerante a falhas.
    Processe fluxos de registros conforme eles ocorrem.

 
O Kafka é geralmente usado para duas classes amplas de aplicações:

    Construindo pipelines de dados de fluxo em tempo real que confiantemente obtêm dados entre sistemas ou aplicativos
    Construindo aplicativos de streaming em tempo real que transformam ou reagem aos fluxos de dados

Para entender como Kafka faz essas coisas, vamos mergulhar e explorar os recursos de Kafka de baixo para cima.

Primeiro alguns conceitos:

    O Kafka é executado como um cluster em um ou mais servidores que podem abranger vários datacenters.
    O cluster Kafka armazena fluxos de registros em categorias denominadas tópicos.
    Cada registro consiste em uma chave, um valor e um registro de data e hora.

Kafka tem quatro APIs principais:

    A Producer API permite que um aplicativo publique um fluxo de registros em um ou mais tópicos do Kafka.
    A API do Consumidor permite que um aplicativo assine um ou mais tópicos e processe o fluxo de registros produzidos para eles.
    A API do Streams permite que um aplicativo atue como um processador de fluxo, consumindo um fluxo de entrada de um ou mais tópicos e produzindo um fluxo de saída para um ou mais tópicos de saída, transformando efetivamente os fluxos de entrada em fluxos de saída.
    A Connector API permite criar e executar produtores ou consumidores reutilizáveis ​​que conectam tópicos do Kafka a aplicativos ou sistemas de dados existentes. Por exemplo, um conector para um banco de dados relacional pode capturar todas as alterações em uma tabela.

quarta-feira, 5 de dezembro de 2018

NoSQL - Ravendb


A Hibernating Rhinos, uma fornecedora global de soluções de infra-estrutura de banco de dados, capacita empresas e empresas da Fortune 500 em todo o mundo a processar transações on-line por meio de uma plataforma de código aberto. O RavenDB é o primeiro banco de dados NoSQL ACID totalmente transacional do setor que combina escalabilidade, alta disponibilidade, velocidade e desempenho. A empresa produz duas ferramentas ORM, NHibernate e Entity Framework Profilers, que inspecionam, analisam e sugerem melhorias nos padrões de acesso a bancos de dados em aplicativos. A Hibernating Rhinos está sediada em Hadera, Israel, com escritórios nos EUA e na Polônia, e amplia seu alcance em mais de 1500 clientes em todo o mundo.

https://ravendb.net/

Apache OpenNLP

Biblioteca Apache OpenNLP é um kit de ferramentas baseado em aprendizado de 
máquina para o processamento de texto em linguagem natural.
A biblioteca Apache OpenNLP é um kit de ferramentas baseado em aprendizado 
de máquina para o processamento de texto em linguagem natural. 
Ele suporta as tarefas mais comuns da PNL, como tokenização, segmentação 
de sentenças, marcação de partes de fala, extração de entidades nomeadas, 
fragmentação, análise e resolução de referência. Essas tarefas geralmente 
são necessárias para criar serviços de processamento de texto mais avançados. 
O OpenNLP também incluiu aprendizado de máquina baseado em entropia máxima e 
perceptron.


https://opennlp.apache.org/

terça-feira, 4 de dezembro de 2018

Comandos uteis para Iniciar com Angular e Ionic com Linux

sudo npm install -g ionic cordova

+ ionic@4.5.0
+ cordova@8.1.2



cd /home/raydacosta/ProjetoMDWAngular

//blank: Aplicação em branco.
//tabs: Aplicação no formato de abas.
//sidemenu: Aplicação com menu lateral.
sudo ionic start mdwhippurus sidemenu -ts

sudo chmod 777 /home/raydacosta/ProjetoMDWAngular -R

cd ./mdwhippurus

sudo npm install rxjs

sudo ionic platform android

sudo ionic generate service leitor

sudo ionic generate service Rest


//export ANDROID_HOME="/home/raydacosta/Android/Sdk"
//export PATH="$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools"
//echo $ANDROID_HOME
//cordova-android@7.1.4


sudo ionic cordova platform

sudo cordova plugin add cordova-plugin-whitelist
sudo prepare
sudo ionic cordova build android
sudo ionic cordova platform add android
sudo ionic cordova platform rm android
///home/raydacosta/ProjetoMDWAngular/mdwhippurus/platforms/android/app/build/outputs/apk/debug/app-debug.apk


sudo cordova platform add android --save

sudo ionic cordova platform add ios
sudo cordova platform add ios --save

sudo ionic cordova emulate android
sudo ionic cordova emulate ios

// criar pagina
sudo ionic g page sobre

sudo ionic serve


segunda-feira, 3 de dezembro de 2018

java httpserver too many bytes to write to stream





Solução para esta exception é:


         try {
                byte[] bs = response.getBytes("UTF-8");
                t.sendResponseHeaders(200, bs.length);
                OutputStream os = t.getResponseBody();
                os.write(bs);

            } catch (IOException ex) {
                ex.printStackTrace();
            }

terça-feira, 6 de novembro de 2018

Totorial AngularJS



View and Template

No AngularJS, a visão é uma projeção do modelo através do template HTML. Isso significa que sempre que o modelo é modificado, o AngularJS atualiza os pontos de ligação apropriados, o que atualiza a visão.
A visão é construída pelo AngularJS a partir desse modelo.
app/index.html:

<html ng-app="phonecatApp">
<head>
  ...
  <script src="bower_components/angular/angular.js"></script>
  <script src="app.js"></script>
</head>
<body ng-controller="PhoneListController">

  <ul>
    <li ng-repeat="phone in phones">
      <span>{{phone.name}}</span>
      <p>{{phone.snippet}}</p>
    </li>
  </ul>

</body>
</html>


Model and Controller

O modelo de dados (uma matriz simples de telefones na notação literal do objeto) é agora instanciado no controlador PhoneListController. O controlador é simplesmente uma função construtora que usa um parâmetro $ scope:

app/app.js:


// Define the `phonecatApp` module
var phonecatApp = angular.module('phonecatApp', []);

// Define the `PhoneListController` controller on the `phonecatApp` module
phonecatApp.controller('PhoneListController', function PhoneListController($scope) {
  $scope.phones = [
    {
      name: 'Nexus S',
      snippet: 'Fast just got faster with Nexus S.'
    }, {
      name: 'Motorola XOOM™ with Wi-Fi',
      snippet: 'The Next, Next Generation tablet.'
    }, {
      name: 'MOTOROLA XOOM™',
      snippet: 'The Next, Next Generation tablet.'
    }
  ];
});







https://docs.angularjs.org/tutorial

segunda-feira, 5 de novembro de 2018

Filtro and e or em JSON com Java

// ver em java o JSON do filtro


List<Bson> lx = new ArrayList<Bson>();
              for (Iterator<String> iterator = campo.iterator(); iterator.hasNext();) {
                  String f = iterator.next();
                  lx.add(
                          Filters.eq(f,campoValor.get(index))
                  );
                  index++;
              }



Bson filter = Filters.and(Filters.eq("IdEmpresa",idEmpresa),Filters.or(lx)) ;


BsonDocument bsonDocument = filter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());
System.out.println(bsonDocument);

terça-feira, 30 de outubro de 2018

Passar atributos para Controller no JavaFX




Passar atributos entre telas no JavaFX

try {
                FXMLLoader loader = new FXMLLoader(getClass().getResource("/com/raysystem/guimetricasscrum/GUIGraficoBarraHorasDiaFXML.fxml"));
                Parent root = (Parent)loader.load();
                GUIGraficoBarraHorasDiaFXMLController contr = (GUIGraficoBarraHorasDiaFXMLController)loader.getController();
                contr.setNome("Oi Mundo....");
                painelHorizontal.getChildren().add(root);
               
            } catch (IOException ex) {
                ex.printStackTrace();
            }

           

quinta-feira, 4 de outubro de 2018

Tuning Wildfly - EJB Pool!!!! Caro ou nao matar EJB?



A criação e a destruição de beans podem ser uma operação cara, especialmente se 
elas adquirem recursos externos. Para reduzir esse custo, o contêiner EJB cria um 
pool de beans que, portanto, não precisa ser reinicializado toda vez que são necessários.
O pool de EJBs e MDBs sem estado são usados ​​para fornecer serviços de negócios sem estado 
a seus clientes, adquirindo beans do conjunto quando eles são solicitados e liberando o 
bean para o pool assim que forem concluídos.


          <pools>
                <bean-instance-pools>
                    <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20"  derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                    <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" derive-size="from-worker-pools" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                </bean-instance-pools>
          </pools>

quinta-feira, 20 de setembro de 2018

[Java] - Dimencionar imagem com Java




ImageIcon image = new ImageIcon(getClass().getResource("/com/raysystem/tngmostruariodigital/img/quarto_vazio.jpg"));
            CenarioFundo.setIcon(new ImageIcon(image.getImage().getScaledInstance(GUIDesktop.W,GUIDesktop.H, Image.SCALE_DEFAULT)));
            CenarioFundo.setBounds(0,0,GUIDesktop.W,GUIDesktop.H);
            setBounds(0,0,GUIDesktop.W,GUIDesktop.H);




terça-feira, 18 de setembro de 2018

[Java] - Ordenação de Lista








List<ItemLocal> lx = new ArrayList<ItemLocal>();
lx.add(new ItemLocal(SKU1));
lx.add(new ItemLocal(SKU2));
lx.add(new ItemLocal(SKU3));
lx.add(new ItemLocal(SKU4));

Collections.sort(lx, new Comparator() {
                public int compare(Object o1, Object o2) {
                    ItemLocal p1 = (ItemLocal) o1;
                    ItemLocal p2 = (ItemLocal) o2;
                    return p1.getSku().compareTo(p2.getSku());
                }
            });



[Java] - Atributos transientes e voláteis


Atributos transientes

Um atributo transiente significa que ele não será serializado ou desserializado juntamente com os demais atributos de um determinado objeto.
Serialização é o processo no qual os atributos de um objeto (estado) são convertidos, um a um, numa sequência de bytes. Desserialização é o processo inverso, onde bytes são lidos e um novo objeto é construído.

Atributos voláteis

Um atributo volátil tem garantia de que o valor atualizado estará sempre disponível para outras threads, sendo gravados na memória principal assim que atualizados, de forma atômica.
Isso significa que, sempre que o valor for modificado em um processador, ocorrerá um flush para a memória principal, portanto as outras threads vão ver sempre o valor mais atualizado e não um possível valor defasado.

[Java 3D] - Ogre




Lib para desenvolver em 3D com Java: OCRE - Object-Oriented Graphics Rendering Engine



Fonte: https://ogrecave.github.io/ogre/api/latest/tut__first_scene.html

quarta-feira, 29 de agosto de 2018

[Java] - java.util.concurrent.Future

Future representa um resultado futuro de uma computação assíncrona - um resultado que eventualmente aparecerá no Futuro depois que o processamento for concluído.

https://www.baeldung.com/java-future

ReadWriteLock do EJB


Um ReadWriteLock mantém um par de locksoperações associadas , uma para operações somente leitura e uma para gravação. O read lockpode ser realizado simultaneamente por vários segmentos de leitores, desde que não existam gravadores. O write locké exclusivo.
Todas as implementações de ReadWriteLock devem garantir que os efeitos de sincronização de memória das operações writeLock (conforme especificado na Lockinterface) também sejam válidos em relação ao readLock associado . Ou seja, um encadeamento que obtiver com êxito o bloqueio de leitura verá todas as atualizações feitas na liberação anterior do bloqueio de gravação.

Um bloqueio de leitura / gravação permite um nível maior de simultaneidade no acesso a dados compartilhados do que o permitido por um bloqueio de exclusão mútua. Ele explora o fato de que, embora apenas um único encadeamento por vez (um encadeamento do gravador ) possa modificar os dados compartilhados, em muitos casos, qualquer número de encadeamentos pode ler os dados simultaneamente (portanto, encadeamentos do leitor ). Em teoria, o aumento da simultaneidade permitido pelo uso de um bloqueio de leitura / gravação levará a melhorias de desempenho em relação ao uso de um bloqueio de exclusão mútua. Na prática, esse aumento na simultaneidade só será totalmente realizado em um multiprocessador, e somente se os padrões de acesso para os dados compartilhados forem adequados.

O fato de um bloqueio de leitura / gravação melhorar ou não o desempenho em relação ao uso de um bloqueio de exclusão mútua depende da freqüência com que os dados são lidos comparados à modificação, da duração das operações de leitura e gravação e da contenção dos dados. é, o número de threads que tentará ler ou gravar os dados ao mesmo tempo. Por exemplo, uma coleção que é inicialmente preenchida com dados e, posteriormente, modificada com pouca frequência, enquanto é pesquisada com frequência (como um diretório de algum tipo) é um candidato ideal para o uso de um bloqueio de leitura / gravação. No entanto, se as atualizações se tornarem frequentes, os dados passam a maior parte do tempo exclusivamente bloqueados e há pouco ou nenhum aumento na simultaneidade. Mais distante, se as operações de leitura forem muito curtas, a sobrecarga da implementação de bloqueio de leitura-gravação (que é inerentemente mais complexa que um bloqueio de exclusão mútua) pode dominar o custo de execução, particularmente porque muitas implementações de bloqueio de leitura-gravação ainda serializam todos os segmentos através de uma pequena seção de código. Por fim, apenas o perfil e a medição determinarão se o uso de um bloqueio de leitura / gravação é adequado para sua aplicação.

Embora a operação básica de um bloqueio de leitura / gravação seja direta, há muitas decisões de política que uma implementação deve tomar, o que pode afetar a eficácia do bloqueio de leitura / gravação em um determinado aplicativo. Exemplos dessas políticas incluem:

Determinar se deve conceder o bloqueio de leitura ou o bloqueio de gravação, quando os leitores e gravadores estão aguardando, no momento em que um gravador libera o bloqueio de gravação. A preferência do escritor é comum, pois espera-se que as gravações sejam curtas e pouco frequentes. A preferência do leitor é menos comum, pois pode levar a longos atrasos para uma gravação, se os leitores forem frequentes e duradouros, como esperado. Implementações justas ou "em ordem" também são possíveis.
Determinar se os leitores que solicitam o bloqueio de leitura enquanto um leitor está ativo e um gravador está aguardando, recebem o bloqueio de leitura. A preferência pelo leitor pode atrasar o autor indefinidamente, enquanto a preferência pelo gravador pode reduzir o potencial de simultaneidade.
Determinar se os bloqueios são reentrantes: um thread com o bloqueio de gravação pode readquiri-lo? Pode adquirir um bloqueio de leitura enquanto segura o bloqueio de gravação? O bloqueio de leitura é reentrante?
O bloqueio de gravação pode ser rebaixado para um bloqueio de leitura sem permitir um gravador intermediário? Um bloqueio de leitura pode ser atualizado para um bloqueio de gravação, em vez de outros leitores ou gravadores de espera?
Você deve considerar todas essas coisas ao avaliar a adequação de uma determinada implementação para sua aplicação.

Fonte: https://docs.oracle.com/javase/7

sábado, 25 de agosto de 2018

Itens do Scrum

Product Backlog: Conjunto total de funcionalidades que será desenvolvido durante o projeto.

Sprint Backlog: Conjunto de funcionalidade que será desenvolvido em uma determinada Sprint.

Sprint Review: Reunião de validação das funcionalidades. Caso não sejam aprovadas, elas retornam para o Product Backlog.

Daily Meeting: Reunião diária para colocar em dia o que foi feito.

Papeis do Scrum


Scrum Master: Responsável por liderar a equipe, e principal elo entre Procuct Owner e o resto da equipe. É imprescindível que ele assegure o cumprimento dos valores e regras do Scrum durante a execução.

Product Owner: É o dono do produto, e investidor. É o principal tomador de decisões do projeto.

Development Team: Responsáveis pela concepção, construção técnica e testes do produto. Em um desenvolvimento de aplicativo, por exemplo, o Development Team pode ser formado pelo programador e pelo designer.

sábado, 11 de agosto de 2018

Abrir multiplas telas no JavaFX




...
......
........

private void init(Stage primaryStage) {
        Group root = new Group();
        primaryStage.setScene(new Scene(root));
        //create a button for initializing our new stage
        Button button = new Button("Create a Stage");
        button.setStyle("-fx-font-size: 24;");
        button.setDefaultButton(true);
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override public void handle(ActionEvent t) {
                final Stage stage = new Stage();
                //create root node of scene, i.e. group
                Group rootGroup = new Group();
                //create scene with set width, height and color
                Scene scene = new Scene(rootGroup, 200, 200, Color.WHITESMOKE);
                //set scene to stage
                stage.setScene(scene);
                //center stage on screen
                stage.centerOnScreen();
                //show the stage
                stage.show();
                //add some node to scene
                Text text = new Text(20, 110, "JavaFX");
                text.setFill(Color.DODGERBLUE);
                text.setEffect(new Lighting());
                text.setFont(Font.font(Font.getDefault().getFamily(), 50));
                //add text to the main root group
                rootGroup.getChildren().add(text);
            }
        });
        root.getChildren().add(button);
    }
    @Override public void start(Stage primaryStage) throws Exception {
        init(primaryStage);
        primaryStage.show();
    }
.......
.....
...