UI Design Patterns

O que é UI Design

O User Interface Design (Design de Interface do Usuário), é aonde ocorre a interação e controle de um dispositivo, software, aplicativos ou sites por parte do usuário. Esta interação pode ocorrer através de botões, menus e demais componentes da interface.

Projetos de UI podem ser utilizados para garantir as necessidades que o usuário irá utilizar, e assim criando uma interface que contenha elementos de fácil utilização e acesso, para que seja alcançado um bom nível de experiencia amigável ao usuário e não cause frustações ao utilizar um sistema.

Atualmente é muito importante entender que User Interface não é apenas como uma aplicação se parece e quais cores foram utilizadas para tal processo, também se baseia como uma aplicação irá funcionar e como a interação do usuário será realizada indo além da aparência. Para que possa ser alcançado devemos utilizar a User Experience (UX Design) que por mais que os nomes sejam parecidos são abordagens bem diferentes, já que UX estará relacionado com a experiencias e os sentimentos do usuário e a UI será a maneira com que este usuário alcançara a experiencia.

Diferença entre UI Design e UX Design

UI é quando falamos de criação de interfaces para que o usuário final possa interagir com a aplicação, utilizando as melhores práticas para que seja criado uma interface de fácil utilização e visualização de todas informações.

UX normalmente confundido com UI por serem apresentados juntamente na interface, mas a verdade, é que UX se encaixa na sensação que um usuário irá ter ao navegar por uma interface. Assim a UX é responsável por criar um sentimento bom ao usuário enquanto os mesmos utilizam a aplicação tornando esta experiencia em algo inesquecível. UX também está relacionada com a forma que as funções principais serão utilizadas pelo usuário, usabilidade criação de novos cadastros, e pesquisas.

 

 

Preocupações com a Usabilidade

É necessário que um usuário consiga identificar elementos de interface e o que os mesmos realizam de uma forma clara. Por isso a criatividade ao compor um elemento é muito importante, mas deve se levar em conta os padrões que os usuários já estão acostumados a utilizar e reconhecer facilmente.

Um exemplo fácil de utilizar e a cor de botões que estamos acostumados a utilizar e ver aplicações. Aonde a maioria utiliza a cor verde para ações positivas como salvar, adicionar, e a cor vermelha para ações de negação com deletar. Se trocar as cores para as ações podem acontecer confusões durantes processos simples deixando o usuário frustrado com a situação.

A utilização de palavras abreviadas ou apenas uma palavra em um botão e a utilização de ícones poderá dar ao usuário uma mensagem mais clara e adequada sobre as funcionalidades de tomar uma ação.

Acessos Facilitados

É muito importante que a interface seja redundante, deixando mais de um caminho possível para que o usuário chegue em seu objetivo ou desfaça alguma ação errada, este papel de guiar de forma fácil o usuário é do profissional de UI Design.

Um exemplo que podemos utilizar e a tela de cadastro que muitos sites utilizam quando um usuário arrasta o mouse pra fora da área de trabalho do browser e a janela modal de fotos do facebook, que podem ser facilmente fechadas utilizando um clique em qualquer parte da tela fora do modal, clique na opção fechar no canto superior e ou apertando o ESC do teclado.

Interação com o usuário

A importância de interação com o usuário é muito importante, a interface deve realizar esta tarefa com muita frequência para que seja mostrado informações sobre ações tomadas e os processos realizados pela aplicação. Exemplos muito simples são as barras de carregamento que podem deixar o usuário esperando o seu carregamento ou finalizar um processo por não ser se o mesmo será carregado.

Prototipagem

A utilização de protótipos, rascunho e wirefrmaes é muito comum para o profissional de UI, para que possa ser desenhado a estrutura inicial do projeto. É a parte essencial, pois através da prototipagem começara a ter uma visão geral do layout e das hierarquias de todo conteúdo da aplicação, a disposição dos elementos da interface e pontos de interação.

 

 

Para trabalhos com HTML, CSS e aplicativos mobile não é aconselhado a criação de interfaces sem que antes o cliente tenha aprovado todo projeto, pois para realizar modificações torna-se muito trabalhoso e demorado.

Referências

Lovi, Rafael. O Que é User Interface (UI)?. Disponível em: < https://www.raffcom.com.br/blog/o-que-e-ui/>. Acesso em  25 abril de 2018.

As Diferenças entre UI Designer e UX Designer. Disponível em: < http://multiad.com.br/design/as-diferencas-entre-ui-designer-e-ux-designer/>. Acesso em 27 abril de 2018.

Rodrigues, Raianne. 5 Dicas: UX e UI design. Disponível em: < https://blog.novatics.com.br/5-dicas-ux-e-ui-design-d787ef46b6b8 >. Acesso em 27 abril de 2018.

Matiola, Willian. O Que é UI Design e UX Design?. Disponível em: < http://designculture.com.br/o-que-e-ui-design-e-ux-design>. Acesso em 28 abril de 2018.

Matiola, Willian. O Que é UI Design e UX Design?. Disponível em: < http://designculture.com.br/o-que-e-ui-design-e-ux-design>. Acesso em 28 abril de 2018.

Firebase: O Que é e Como Funciona

Criar um aplicativo de sucesso não é fácil. Além de fazer o aplicativo funcionar da forma desejada em vários tipos de dispositivos diferentes, o desenvolvedor deve pensar na infraestrutura, possíveis falhas, atualizações que não causem novos problemas, segurança nas transferências de dados, e tudo isso enquanto tenta alcançar o maior número de usuários possível e garantir uma experiência satisfatória para os mesmos. Pensando nisso, foi construído o Firebase, uma solução que possuí todas as ferramentas necessárias para a construção de um aplicativo de sucesso.

Continue lendo “Firebase: O Que é e Como Funciona”

O que é Machine Learning?

O Machine Learning é a ciência que faz com que os computadores exerçam suas funções sem que pareçam explicitamente programados para tal. O Machine Learning foi responsável pelo aprofundamento do desenvolvimento dos carros automáticos, recursos de reconhecimento de fala, buscas na web e possibilitou um avanço na compreensão do genoma humano. É um método de análise de dados que automatiza o desenvolvimento de modelos analíticos. Usando algoritmos que aprendem interativamente a partir de dados, o aprendizado de máquinas permite que os computadores encontrem respostas sem serem explicitamente programados para procurar algo específico.

 

Para que fins é utilizado?

 

  • Detecção de fraudes.
  • Resultados de pesquisa na Web.
  • Anúncios em tempo real em páginas da web e dispositivos móveis.
  • Análise de sentimento baseada em texto.
  • Pontuação de crédito e próximas melhores ofertas.
  • Previsão de falhas em equipamento.
  • Novos modelos de precificação.
  • Detecção de invasão na rede.
  • Reconhecimento de padrões e imagem.
  • Filtragem de spams no e-mail.

 

Métodos de Machine Learning

 

  • Supervisionado:

É usado sempre que o programa é “treinado” sobre um conjunto de dados pré-definido. Baseado no treinamento com os dados pré-definidos, o programa pode tomar decisões precisas quando recebe novos dados. Exemplo: Por exemplo, uma peça de equipamento pode ter pontos de dados rotulados com “F” (com falha) ou “R” (em funcionamento). O algoritmo de aprendizagem recebe um conjunto de entradas junto com as saídas corretas correspondentes, e o algoritmo aprende comparando a saída real com as saídas corretas para encontrar erros. Em seguida, ele modifica o modelo de acordo. Por meio de métodos como a classificação, regressão e previsão o aprendizado supervisionado usa padrões para prever os valores do rótulo em dados adicionais não rotulados.

  • Não Supervisionado:

É usado contra a dados que não possuem rótulos históricos. O sistema não sabe a resposta certa. O algoritmo deve descobrir o que está sendo mostrado. O objetivo é explorar os dados e encontrar alguma estrutura neles. O aprendizado não supervisionado funciona bem em dados transacionais. Por exemplo, ele pode identificar segmentos de clientes com atributos semelhantes que podem ser tratados de modo semelhante em campanhas de marketing. Ou ele pode encontrar os principais atributos que separam os segmentos de clientes uns dos outros. As técnicas mais populares incluem   decomposição de valores singulares, para segmentar tópicos de texto, recomendar itens e identificar os valores discrepantes dos dados.

  • Semisupervisionado:

É usado tanto contra dados rotulados quanto não marcados para o treinamento, normalmente uma pequena quantidade de dados rotulados com uma grande quantidade de dados não rotulados. Esse tipo de aprendizagem pode ser usado com métodos como a classificação, regressão e previsão. O aprendizado semisupervisionado é útil quando o custo associado à rotulagem é muito elevado para permitir um processo de treinamento totalmente rotulado. Os primeiros exemplos disso incluem a identificação do rosto de uma pessoa.

  • Por Reforço:

É muitas vezes usado para a robótica, jogos e navegação. Com o aprendizado por reforço, o algoritmo descobre pela tentativa e erro quais ações geram as maiores recompensas. Este tipo de aprendizagem tem três componentes principais: o agente (o aluno ou tomador de decisões), ambiente (tudo com o qual o agente interage) e ações (o que o agente pode fazer). O objetivo é que o agente escolha ações que maximizem a recompensa esperada ao longo de um determinado período de tempo. O agente atingirá o objetivo muito mais rápido seguindo uma boa política. Assim, o objetivo do aprendizado por reforço é aprender a melhor política.

 

Exemplos de algoritmos

 

  • Árvores de Decisão:

É um algoritmo de apoio que utiliza um gráfico ou modelo de decisões e suas possíveis consequências, incluindo resultados de eventos futuros, custos de recursos e utilidade. Do ponto de vista da decisão de negócios, uma árvore de decisão é o número mínimo de perguntas que devem ser respondidas para avaliar a probabilidade de tomar uma decisão correta, na maioria das vezes. Como um método, permite-lhe abordar o problema de uma forma estruturada e sistemática para chegar a uma conclusão lógica.

 

  • Classificação Naïve Bayes:

São uma família de classificadores probabilísticos simples com base na aplicação Bayes ‘teorema com forte independência entre as características.

 

  • Regressão Linear de Mínimos Quadrados:

É um método para a realização de regressão linear. Você pode pensar em regressão linear como a tarefa de encaixar uma linha reta através de um conjunto de pontos. Existem várias estratégias possíveis para isso e a de “mínimos quadrados comuns” é assim: você pode desenhar uma linha e, em seguida, para cada um dos pontos de dados, medir a distância vertical entre o ponto e a linha e somá-los. A linha ajustada seria aquela em que esta soma de distâncias é a menor possível. Linear refere-se ao tipo de modelo que você está usando para ajustar os dados, enquanto mínimos quadrados refere-se ao tipo de métrica de erro que você está minimizando.

 

  • Regressão logística:

É uma poderosa forma estatística de modelar um resultado binomial com uma ou mais variáveis explicativas. Ela mede a relação entre a variável dependente categórica e uma ou mais variáveis independentes, estimando as probabilidades usando uma função logística, que é a distribuição logística cumulativa.

 

  • Support Vector Machine:

É um algoritmo binário da classificação. Dado um conjunto de pontos de 2 tipos em lugar N dimensional, o algoritmo gera um hiperplano (N – 1) dimensional para separar esses pontos em 2 grupos. Digamos que você tem alguns pontos de 2 tipos em um papel que são linearmente separáveis. O algoritmo encontrará uma linha reta que separa esses pontos em 2 tipos e situados o mais longe possível de todos esses pontos.

 

  • Ensemble Methods

São algoritmos de aprendizagem que constroem um conjunto de classificadores e, em seguida, classificam novos pontos de dados, tendo um ponderado voto de suas previsões. O método de conjunto original é a média bayesiana, mas os algoritmos mais recentes incluem codificação de saída, correção de erros e reforço.

 

  • Algoritmos de Agrupamento:

A tarefa de agrupar um conjunto de objetos de tal forma que os do mesmo grupo são mais semelhantes uns aos outros do que aqueles em outros grupos.

 

 

AUTOR: Ricardo José Boff

Novembro de 2017

 

FONTES

https://www.sas.com/pt_br/insights/analytics/machine-learning.html

http://www.cienciaedados.com/conceitos-fundamentais-de-machine-learning/

https://br.udacity.com/course/intro-to-machine-learning–ud120

http://www.semantix.com.br/10-algoritmos-de-machine-learning/

https://www.coursera.org/learn/machine-learning#

Integração Contínua

“Integração Contínua é uma pratica de desenvolvimento de software onde os membros de um time integram seu trabalho frequentemente, …” Martin Fowler.

A Integração Contínua surgiu como parte das práticas da metodologia ágil XP (Extreme Programming), tendo como foco o desenvolvimento de software em ciclos menores, proporcionando melhor resposta a alterações e inclusão de novos requisitos. Mas a prática da Integração Contínua não se limita apenas a equipes utilizando a metodologia XP ou metodologias ágeis, trata-se de um conjunto de boas práticas que também podem ser adotadas em metodologias de desenvolvimento convencionais.
Devido ao grande impacto que vem ocorrendo com as metodologias ágeis, tais como eXtreme Programming, Scrum, entre outras, a integração contínua vem ganhando mais espaço e se tornando cada vez mais importante quando se fala em desenvolvimento de software.
A maior causa desse ganho de espaço da integração contínua ocorre pelo simples fato de que usando ela você tem um feedback instantâneo.
A grosso modo, a integração contínua funciona da seguinte forma: cada mudança que é feita no sistema, é feito o build automaticamente, todos os testes são feitos de forma automática e todas as falhas são detectadas nesse momento. Se alguma falha for detectada, toda a equipe fica sabendo, seja por email ou outras formas de comunicação.
Identificando os erros logo no início, a equipe pode tomar alguma ação para corrigi-los e assim não causar mais nenhum incomodo e/ou evitar que esses erros passe por eventuais testes e vão para as versões que posteriormente iriam para os cliente.
Claro que esses testes poderiam ser rodados manualmente, mas para isso teriam que ser usadas algumas horas de um integrante do projeto que poderia estar desenvolvendo, apenas para fazer essas validações.
Existem algumas ferramentas que podem ser utilizadas para fazer uso da integração continua:
• CruiseControl.rb: desenvolvida pela ThoughtWorks
• Selenium: desenvolvida pela ThoughtWorks
• Jenkios
• Hudson

 

Willian Marcolin

Banco de dados relacionais

Um banco de dados é uma aplicação que lhe permite armazenar e obter de volta dados com eficiência. O relacionamento se dá pela maneira como os dados são armazenados e organizados no banco de dados através de tabelas, com colunas e linhas. Estas tabelas são usadas para gravar os dados referentes ao objeto ou entidade relacionado. Onde cada linha representa os valores do objeto enquanto suas colunas definem tipos de dados a serem gravados que definem o objeto, ou seja, seus atributos.

Algumas definições importantes que devem ser apresentadas de um banco de dados relacional, como sua interface de comunicação o SQL, a sua integridade de dados, ou seja, a forma em que os bancos mantem sua precisão e consistência de dados, assegurada principalmente pelo seu sistema de transações que garantem que “tudo ou nada” seja gravado.

SQL

O SQL, ou Structured Query Language, tornou-se padrão do American Nacional Standards Institute (ANSI) em 1986, e este padrão de SQL é seguido por todos mecanismos populares de banco de dados relacionais, e alguns tem como padrão funções específicas referentes a ele, como adicionar, atualizar ou excluir linhas, ou mesmo recuperar dados para processamento de transação, além de analisar e gerenciar aspectos do banco.

Integridade de Dados

A integridade de dados se deve as várias constraints que ajudam nas regras de negócio evitando a gravação de campos importantes sem dados ou com dados errados, algumas dessas constraints são chaves primárias, chaves estrangeiras entre outras. Outra forma que os bancos têm para manter sua integridade é a transação, que deve ser completa como uma só e caso não aconteça nada é gravado e tudo volta como estava anteriormente.

As transações em bancos de dados devem estar em conformidade com o ACID, ou seja, atômicas, consistentes, isoladas e duráveis para que possam garantir a integridades dos dados no banco. A atomicidade prevê que toda transação deva ser executada com êxito, e no caso de falha seja invalidada. A consistência prevê que os dados gravados em banco por meio de uma transação devem aderir a todas regras definidas e suas restrições. O isolamento garante que cada transação seja independente por si só. A Durabilidade garante que toda alteração feita no banco seja permanente assim que a transação seja concluída com êxito.

Comparação

Tendo em vista o conteúdo abordado alguns bancos de dados serão comparados em alguns quesitos. Funcionalidades fundamentais que são implementadas nativamente em um SGBD, limites de tamanho de dados, recursos do banco de dados, são alguns dos dados que serão comparados.

  • Funcionalidades fundamentais:

As funcionalidades principais que contenham em cada banco comparado são: ACID, Transações e que tipo de interface é usada em cada um dos bancos.

  • Limites

Informações sobre os limites de tamanhos de dados.

  • Recursos do banco de dados

Alguns recursos utilizados pelos bancos de dados para consultas em suas tabelas.

Pode-se perceber que com os dados comparados todos seguem um mesmo caminho, apenas algumas funcionalidades e recursos divergentes que dependendo da aplicação que irá utilizar pode gerar uma vantagem ou desvantagem.

Felipe Modesto

Links

https://elias.praciano.com/2013/09/o-que-e-um-banco-de-dados-relacional/

https://aws.amazon.com/pt/relational-database/

https://www.postgresql.org/docs/devel/static/explicit-locking.html

https://mariadb.com/kb/en/mariadb/mariadb-10122-release-notes/

https://dev.mysql.com/doc/relnotes/mysql/5.7/en/

http://www.oracle.com/technetwork/database/rdb/learnmore/rdb-pmatrix-rdb-086351.html

https://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

Padrões de Codificação no Desenvolvimento de Sistemas

Como os idiomas reais, cada linguagem de programação tem suas respectivas regras, pontuações, pausas e pontos, sendo necessário conhecer esses padrões para manter o código organizado e com fácil entendimento. Nas linguagens de programação precisamos seguir alguns padrões básicos para que o código não vire uma bagunça no meio de um desenvolvimento.

Exemplos de padronização em Java

Java é umas das linguagens mais utilizadas hoje no mundo do desenvolvimento e os programadores costumam utilizar alguns padrões definidos pela comunidade que serão descritos abaixo.

Convenção de Nomes

Mantenha o tamanho dos nomes grande o bastante para transmitir o que eles representam. Exemplo: primeiroNome, sobrenome, ordemServico.

Nomes de Classes e Interfaces

Os nomes de classe devem ser substantivos e, em caso de nomes compostos, utilize nomes com a primeira letra de cada palavra interna maiúscula. Use palavras inteiras evitando acrônimos e abreviaturas. Exemplo: Cliente ou ContaCliente.

Nomes de Métodos

Os nomes dos métodos devem ser verbos, em casos compostos com o primeiro nome minúsculo, e com a primeira letra de cada palavra interna em maiúsculo. Exemplo: calcularPagamento().

Nomes de Variáveis

Os nomes de variáveis devem estar com uma primeira letra minúscula e, em caso de nomes compostos, com a primeira letra de cada palavra interna em maiúsculo. Exemplo: contraPeso, primeiroNome.

Nomes de Constantes

Os nomes de constantes para tipos de dados ordinais devem ter todas as letras em maiúsculo, separadas por underline. Exemplo:

1

2

public static final int MAX_POLICY_AMOUNT; ou

public static final char PROCESS_INFO_COMMAND;

Comentários

Adicione comentários para facilitar a compreensão do código. Mantenha o comentário simples e separe-os de tal forma o código fique limpo e legível. Escreva também os comentários onde alguma explanação é necessária. Não escreva comentários para as coisas óbvias.

Use Linhas em Branco

Forneça linhas em branco entre as seções do código para melhorar a legibilidade. Use uma linha em branco nas seguintes circunstâncias:

  • Para separar as definições de classes das definições de métodos;
  • Para separar as variáveis locais de um método;
  • Para separar blocos de código;
  • Para separar comentários das seções lógicas do código.

Espaços em Branco e Tabulação

Use o espaço em branco para melhorar a legibilidade do código nas seguintes circunstâncias: Entre uma palavra-chave e um parêntese. Exemplo:

1

2

while (condicao) {

}

Após vírgulas na lista entre parênteses. Exemplo:

1 operacao(param1, param2, param3);

Entre um operador binário e seu operando. Exemplos:

1

2

x += y + z;

a = (a + b) / (c * d);

Variáveis Locais

Declare uma variável local por linha do código e adicione um comentário que identifique a variável. Exemplo:

1 int contador = 0; // contador para número de referências

Atributos

Para declarar atributos utilize os seguintes padrões:

  • Finalidade: Documente a finalidade do atributo;
  • Visibilidade: Mantenha a visibilidade tão baixo quanto possível;
  • Iniciação: Certifique-se de que todos os atributos estão inicializados antes que sejam alcançados. Inicialize todos os atributos no momento da criação do objeto. A inicialização posterior pode ser usada para os campos que não são acessados regularmente.

Métodos

Para declarar métodos de membro utilize os seguintes padrões:

  • Nomenclatura: use get/set como um prefixo do nome do campo para todos os métodos de ascensão, a menos que forem do tipo booleano. Use o prefixo “is” para nomes de métodos que referenciem campos booleanos. Utilize também a primeira palavra do nome do método de membro como um verbo forte, ativo. Exemplo: getPotenciaMotor(), setPotenciaMotor(), isAutomatico(), reduzirMarcha().
  • Visibilidade: Mantenha a visibilidade de funções de membro tão restritiva quanto possível para minimizar o acoplamento entre as classes;
    Documentação: Inclua um cabeçalho para especificar as seguintes informações da função de membro:

    • O propósito da função;
    • Seu valor de retorno;
    • Os parâmetros;
    • As mudanças nas versões do código.

Declarações ou Comandos

Cada linha deve conter no máximo um comando.

Chaves ou Blocos

Siga um esquema consistente para a abertura e fechamento de chaves. Alinhe a abertura e fechamento das chaves verticalmente. Isto facilitará a identificação do começo e término dos blocos. Exemplo:

1

2

3

4

5

6

7

8

9

class Cliente

{

    public void operacaoParaCliente()

    {

        if(condicao)

        {

        }

    }

}

Utilização de Chaves

Sempre utilize chaves para delimitar blocos de comandos, mesmo que estes tenham apenas uma instrução:

1

2

3

4

5

6

if(determinadaCondicao) // EVITE ISSO!

    realizaOperacao();

 

if(determinadaCondicao){ // OK

    realizaOperacao();

}

 

Quando utilizamos padrões e boas práticas, garantimos que todos da equipe conseguirão ter o mínimo de entendimento do código que está sendo desenvolvido. Em linguagens como o Java já temos padrões indicados e definidos pela comunidade de forma documentada para que os desenvolvedores adotem um padrão universal de codificação, facilitando assim o entendimento de qualquer código desenvolvido na linguagem. Visto isso é indicado adotar sempre o padrão de codificação da linguagem utilizada.

 

Autor: Ricardo José Boff

 

Referências

Padrões de Codificação, por Tadeu Pereira, acesso em: <http://www.devmedia.com.br/padroes-de-codificacao/16529>

Introdução a Padrões de Codificação, por Diego Eis, acesso em: <https://tableless.com.br/introducao-a-padroes-de-codificacao/>

Dicas de Boas Práticas de Codificação, por Luiz Gustavo S. de Souza, acesso em: <https://luizgustavoss.wordpress.com/2010/09/09/dicas-de-boas-praticas-de-codificacao/>

Convenções de Código Java, por Carlos Eduardo, acesso em: <http://www.devmedia.com.br/convencoes-de-codigo-java/23871>

Tipos de bancos de dados NoSQL

Banco de dados não relacionais ou distribuídos, tem como princípio básico não possuírem o conceito de modelagem por tabelas como o relacional, diferenciam-se pela sua utilização horizontal, através da distribuição de dados em diferentes servidores. São indicados para aplicações projetadas com alta carga de dados, onde o modelo relacional não consegue atender. Para a maioria das aplicações de grande escala, a disponibilidade e a tolerância são mais importantes que a consistência, sendo as características BASE mais fáceis de serem alcançadas do que as ACID. Um caso importante a ser citado foi o Banco NoSQL CassandraDB, que inicialmente foi desenvolvido para um recurso do Facebook.

Os bancos de dados NoSQL não são todos iguais. Há grandes diferenças no que se refere como a forma de armazenamento e conceitos de modelagem. Basicamente se subdividem em técnicas de armazenamento diferentes. Há 4 tipos básicos de bancos de dados NoSQL, a seguir eles são descritos.

NoSQL orientado a documento: consiste em uma estrutura baseada em uma coleção de documentos, sendo um documento um objeto que contém um código único com um conjunto de informações, podendo ser strings, documentos aninhados ou ainda listas. Inicialmente pode ser semelhante ao modelo de chave-valor(Key-value), no entanto, diferencia-se m ter um conjunto de documentos e cada um destes recebe um identificador único, assim como as chaves, dentro da coleção. Ao se armazenar os dados em JSON, o desenvolvimento é facilitado, pois há suporte a vários tipos de dados. Exemplos destes são o MongoDB e CouchBase.

Figura 1 – organização de um NoSQL orientado a documento.

 

NoSQL Key-Value (chave-valor): consiste em uma modelagem que indexa os dados a uma chave. Ao se armazenar os dados, sua forma de procura se dá por uma base similar a um dicionário, onde estes possuem uma chave. Esta forma de armazenamento é livre de “schema”, permite a inserção de dados em tempo de execução, sem conflitar o banco e não influenciando na disponibilidade, pois seus valores são isolados e independentes entre si. Alguns exemplos são: Oracle NoSQL, Riak, Azure Table Storage, BerkeleyDB e Redis.

Figura 2 – Exemplo de organização de um banco de dados NoSQL chave-valor.

 

NoSQL representado por Grafos: Este modelo armazenamento utiliza três componentes básicos: um grafo para representar um dado, arrestas ou ligações para representar a associação entre os grafos e os atributos (ou propriedades) dos nós e relacionamentos. Modelo altamente usado onde exijam dados fortemente ligados. Este modelo é vantajoso onde há consultas complexas frente aos outros modelos, pois seu diferencial é o ganho de performance. Alguns exemplos são: Neo4J, OrientedDB, GraphBase e InfiniteGraph.

Figura 3 – Exemplo de organização de um banco de dados NoSQL orientado a grafos.

 

NoSQL modelo Colunar: Este modelo foi inicialmente desenvolvido baseado no Big Table da Google. Basicamente consiste em uma Tabela, onde nela possui várias famílias de colunas, e dentro destas famílias, colunas onde estão as propriedades.  Neste modelo, as entidades são representadas por tabelas e os dados gravados em disco modelo caracteriza-se por indexar um dado por uma Tripla, que consiste em linha, coluna e timestramp, sendo este o que permite verificar as diferentes versões de um dado. Os valores das propriedades das colunas podem são semelhantes ao modelo “Key-Value”.  São bancos de dados indicados para mídias sociais e problemas que envolvem consultas complexas.

Figura 4 – Exemplo de organização de um banco de dados NoSQL orientado a Colunas.

 

Há também o Hadoop, que é um framework paralelo no processamento de dados que tem sido usado para redução de mapas e Jobs. Diferentemente do Spark que armazena os dados em memória, o Hadoop armazena em disco e utiliza a técnica de replicação para garantir tolerância a falhas. Foi projetado para funcionar desde um único servidor até um cluster com milhares de máquinas. È uma solução comcebida para detectar e tartar falhas na camada de aplicação, fornecendo um serviço de alta disponibilidade baseado em um grid de computadores. No entanto o Hadoop possui uma grande latência para as consultas. Há dois componentes principais do Hadoop: Hadoop Distributed File System (HDFS) e o Mapreduce.

Figura 5 – Exemplo de funcionamento do Hadoop.

 

Referências Bibliográficas.

https://pt.slideshare.net/Celio12/trabalho-no-sql-aricelio-de-souza – acessado 17/04/2017

Nosql Essencial – Um Guia Conciso Para o Mundo Emergente da Persistência Poliglota – Martin Fowler, Pramod J. Sadalage – ISBN: 978-85-7522-338-3 – Ano: 2013

https://dzone.com/articles/a-primer-on-open-source-nosql-databases – acessado 17/04/2017

http://aptuz.com/blog/is-apache-spark-going-to-replace-hadoop/ – acessado em 13/05/2017

https://www.ibm.com/developerworks/br/data/library/techarticle/dm-1209hadoopbigdata/   acessado em 12/05/2017

Hospedando aplicação em Laravel em servidor Linux Compartilhado

Neste artigo irei explicar como realizar a publicação de uma aplicação desenvolvida em Laravel em um servidor Linux compartilhado (neste caso utilizarei como exemplo a hospedagem compartilhada da GoDaddy). Iremos realizar o upload da aplicação para o Github, configurar o acesso ssh no servidor Linux compartilhado, criar os dados de acesso a banco de dados e o banco de dados em si.

Continue lendo “Hospedando aplicação em Laravel em servidor Linux Compartilhado”

IDE’s Apache Cordova: Intel XDK, PhoneGap e Evothings

Devido ao crescimento do uso de smartphones e outros dipositivos móveis, a demanda de desenvolvimento nesse seguimento cresceu enormente, logo programadores habituados a softwares e sistemas para desktops foram migrando aos poucos para essa categoria. O apache cordova acabou facilitando essa transição, com desenvolvimento nas linguagens web (HTML, CSS e Javascript) diversos programadores viram nele uma boa saída para programar para os novos dispositivos.

Continue lendo “IDE’s Apache Cordova: Intel XDK, PhoneGap e Evothings”

Projetos de interface e usabilidade – Web x Mobile

Antigamente era raro pessoas terem computadores pessoais ou ainda celulares, com a globalização e a evolução da tecnologia hoje praticamente todas as pessoas tem computadores pessoais e smartphones disponíveis com acesso à internet, o que gerou um problema de como as páginas de internet e aplicações iriam ser exibidas e interagir nos computadores e em aparelhos portáteis.  Continue lendo “Projetos de interface e usabilidade – Web x Mobile”

Frameworks para desenvolvimento móvel multiplataforma

Com a concorrência acirrada e cada vez menos tempo para desenvolver novos produtos, os frameworks tem a finalidade de minimizar o tempo de desenvolvimento e maximizar os recursos já existentes, ou seja, os desenvolvedores ao invés de criar tudo do zero utilizam recursos prontos que irão facilitar o seu desenvolvimento e tendo como principal vantagem de serem multiplataformas. Continue lendo “Frameworks para desenvolvimento móvel multiplataforma”