Banco de Dados Baseado em Grafos e suas Principais Características

O banco de dados baseado em grafos é relativamente simples de ser desenhado, diferente do banco relacional onde o modelo básico são tabelas e as suas relações, o modelo básico desse tipo de banco são os grafos, onde podemos inserir um dado sem se preocupar quais relacionamentos ele possuirá, pois, essa relação acontece de forma mais simples.

Esse tipo de modelo representa de forma mais explícita os relacionamentos entre os dados, fornecendo uma modelagem mais simples, com melhor performance e maior naturalidade na linguagem para escrever as consultas.  Os grafos contêm vértices (nós), arestas (relacionamentos), que são usados para representar e armazenar os dados. Na figura os vértices são representados pelos círculos e as setas são as arestas.

Imagem 2 – Representação de grafos

Por que armazenar dados em grafos?

O banco de dados de grafos facilita o armazenamento de dados que possuem muitos conteúdos associados e a representação de como esses dados se conectam ou se correlacionam com outros dados.   

Para facilitar o entendimento podemos usar como exemplo uma rede social. Os usuários na rede seriam os nós e as linhas conectando os usuários indicariam as suas relações. Podemos ligar um usuário a outro pelo relacionamento de adicionar amigo ou podemos adicionar vértices de outro tipo como as publicações, onde o usuário se relaciona através de uma curtida ou compartilhando a publicação.  

Imagem 3 – Exemplo de relacionamento de uma rede social

Modelos para implementar o banco de dados de grafos

No banco de dados baseado em grafos existem alguns modelos para que esses grafos possam ser implementados. Os modelos mais conhecidos são grafo de propriedade e o RDF. O primeiro foca em análises e em consultas já o grafo RDF destaca a integração dos dados.

  • Grafos de propriedades – são usados para modelar relacionamentos entre dados e com base nos relacionamentos permitem a consulta e a análise desses dados.
  • Grafo RDF – Os grafos RDF (Resource Description Framework) podem representar metadados complexos e instruções. Permite a troca de informações através de um formato padrão com estrutura bem definida.

Exemplo de banco de dados de grafos e linguagem de consulta

O exemplo de banco de dados baseado em grafos mais famoso é o Neo4j, que foi criado para oferecer suporte a grandes estruturas de grafos e retornar centenas de milhares de relacionamentos. Ele possui versão open-source e outra paga, que pode ser adquirida por empresas.

Uma das linguagens de consulta bastante utilizada é a Cypher, que inicialmente foi desenvolvida para o Neo4j, mas ela passou a ser desenvolvida como um projeto separado e muitas outras empresas adotaram essa linguagem como um sistema de consulta.

O banco de dados de grafo possui uma grande usabilidade e é uma potente ideia onde é possível interligar dados e descobrir conhecimento.

Referências:

https://imasters.com.br/banco-de-dados/graphdb-series-o-que-e-um-banco-de-dados-de-grafos/?trace=1519021197&source=single

https://www.oracle.com/br/big-data/what-is-graph-database/

Autora: Reginara Ferreira Borges

5 Bibliotecas open source para reconhecimentos de objetos e OCR

Quando desejamos extrair informações de imagens ou vídeos, a maior dificuldade está no reconhecimento das informações, separar um texto com uma imagem no fundo pode parecer uma tarefa muito difícil. Porém não é, hoje possuímos muitas bibliotecas que podem nos auxiliar nestas tarefas e fazer isto com apenas algumas linhas de código. E o melhor de tudo, de graça.

OCR

OCR é um acrónimo para o inglês Optical Character Recognition, é uma tecnologia para reconhecer caracteres a partir de uma imagem. Com estudos desde 1950 hoje ele possui um estágio de evolução bem avançado, possuindo algumas ferramentas bem consolidadas.

Muito importante na utilização destas bibliotecas é o tratamento das imagens, é comum surgirem ruídos após a extração, este podem ser reduzidos seguindo algumas práticas abordadas pelas próprias documentações, como por exemplo, deixar a imagem em tons de cinza e aumentar o Canal Alfa dos elementos.

1 – Tesseract OCR

Originalmente desenvolvido pela Hewlett-Packard e por um tempo mantido pelo Google. Atualmente o projeto está hospedado no GitHub. Sua primeira versão esteve disponível para utilização na linguagem C, hoje ele já possui sua versão em Python. Com ele é possível transformar imagens de múltiplos formatos para um texto de saída simples.

2 – GOCR

Desenvolvido por Jörg Schulenburg em meados dos anos 2000. O GOCR pode ser usado como um aplicativo de linha de comando independente ou como back-end para outros programas. Ele vem com uma interface gráfica gocr.tcl.

3 – Kraken

Projeto mais modesto porém com muito potencial para crescimento. Uma de suas principais características é a análise de layout totalmente treinável e o suporte para reconhecimento de multi-script.

Reconhecimento de objetos

O reconhecimento de objetos consiste no conceito de visão computacional, permitir que os computadores interpretem visualmente informações, neste caso, ser capaz de reconhecer objetos pré-definidos ou não. Este campo de pesquisa permite reconstruções de cena, detecção de eventos, reconhecimento de objetos, aprendizagem de máquina, restauração de imagens entre outros.

4 – OpenCv

Desenvolvida pela Intel, em 2000. É totalmente livre ao uso acadêmico e comercial, para o desenvolvimento de aplicativos na área de Visão computacional. Possui módulos de Processamento de Imagens e Video I/O, Estrutura de dados, Álgebra Linear, GUI, além de mais de 350 algoritmos de Visão computacional como: Filtros de imagem, calibração de câmera, reconhecimento de objetos, análise estrutural e outros.

5 – BoofCV

Suas funcionalidades cobrem uma variedade de assuntos, processamento de imagem de baixo nível, calibração de câmera, detecção / rastreamento de recursos, estrutura de movimento, detecção fiducial e reconhecimento.

Conclusão

Hoje, diferente de apenas alguns anos atrás, possuímos a disponibilidade de diversas ferramentas para realizarmos ideias que por muito achamos não realistas, por serem muito avançadas tecnologicamente ou acharmos que não possuímos os recursos necessários.

Se trata apenas de uma ilusão criada por nós mesmos, temos uma gama enorme de possibilidades disponibilizadas gratuitamente e que podemos até mesmo contribuir para melhorias de código e performance. Bibliotecas de reconhecimento de objetos e OCR são aplicáveis em diversos projetos de variadas áreas e cada vez mais estarão presentes em nossas vidas.

Autor: Fernando Waldow Martens

Referencias

https://www.hitechnectar.com/blogs/open-source-ocr-tools/#:~:text=A9T9-,Tesseract,available%20open-source%20systems%20available

https://medium.com/data-hackers/ocr-da-introdu%C3%A7%C3%A3o-%C3%A0-aplica%C3%A7%C3%A3o-359c9aff56f3

https://pt.wikipedia.org/wiki/Reconhecimento_%C3%B3tico_de_caracteres

https://pt.wikipedia.org/wiki/OpenCV

https://github.com/tesseract-ocr/tesseract

Ferramentas para acelerar o desenvolvimento front-end

Com tecnologias cada vez mais visuais, o desenvolvedor front-end precisa se reinventar para sempre entregar softwares com mais qualidade e velocidade. Para isso muitas tecnologias são lançadas a todo tempo, facilitando a vida dos programadores e acelerando o processo de programação.

Editores de texto

Talvez sejam a principal ferramenta de um programador.
Características como layout, funcionalidades, atalhos e até mesmo cores podem fazer a diferença na escolha. Outro detalhe importante é a linguagem de programação que será desenvolvida, muitos dos editores são otimizados e/ou feitos para determinada linguagem.

  • VSCode

Ou Visual Studio Code, é um editor desenvolvido pela Microsoft, multiplataforma, que pode ser instalado em Windows, Linux e MacOS.
Características: extensível, suporte nativo ao git, IntelliSense, depuração direta no editor.

  • Sublime Text

É um editor que busca simplicidade e facilidade em sua utilização. Multiplataforma, funciona em em Windows, Linux e MacOS.
Características: ampla comunidade, grande gama de plugins, coloração de sintaxe personalizável.

  • Atom

Desenvolvido pelo GitHub, é um editor de código open source multiplataforma.
Caraterísticas: ampla comunidade, suporte nativo ao git, instalador de pacotes integrado, interface simples.

Frameworks

Framework são conjuntos de códigos fonte genéricos agrupados, que facilitam a criação de algum sistema.
Eles podem facilitar o desenvolvimento de uma aplicação, tanto individualmente quanto coletivamente, uma vez que em alguns casos podem fragmentar o código fonte em pequenas partes melhorando o desempenho em equipe.

  • Bootstrap

O Bootstrap é uma biblioteca que visa facilitar o desenvolvimento web, com uma série de estilos e componentes. Ele traz uma padronização de layout, com um sistema de grid que é amplamente utilizável. O framework é tão grande, que vários outros frameworks derivados são criados a partir deles.

  • React

React é um framework Javascript do Facebook para construção de interfaces de usuário. Ele tem como premissa a componentização de blocos e páginas, assim dividindo as partes lógicas e responsabilidades de cada parte, isso tem grande impacto no trabalho em equipe pois cada programador pode focar em um componente diferente de forma mais individual, com menor dependência.

  • Angular

É um framework Javascript para construir páginas web dinâmicas. Ele fornece tecnologia para construir aplicativos para web baseados em uma única página dinâmica. Também permite ao desenvolvedor fazer uso da linguagem de marcação HTML para definir dados associados, validações, e response handlers para ações do usuário.

Ferramentas e plugins

  • Sass

Sass é um compilador CSS que permite escrever os estilos web de forma mais inteligente e rápida. Ele transforma o código escrito de forma hierárquica em CSS interpretado pelos navegadores. Também funciona modularizado e contém várias funções para facilitar a escrita.

  • Emmet

É uma extensão que facilita a digitação do código em diversos editores. Ele funciona como autocomplete e também possui diversas palavras chaves que aumentam a rapidez na escrita. Também é altamente customizável, possibilitando atalhos customizáveis.

  • ESLint

O Eslint funciona como uma forma scanner no código que procura por problemas e más práticas. Também é possível indentar o código, de forma que a aplicação toda use o mesmo padrão e regras. Ele é muito customizável, isso permite que as equipes definam suas próprias regras de codificação, e se os ajustes ocorrem de forma automática ou manual.

Como pode se notar, o desenvolvimento de software está crescendo cada vez mais. Programadores e empresas precisam buscar soluções que facilitem a codificação e interações entre a equipe. Muitas ferramentas estão nascendo e é preciso escolher com sabedoria.

Autor: Leandro Santos

IDEs para desenvolvimento em Java Script

Introdução

Os IDEs vêm com muitos recursos extras, como por exemplo o preenchimento automático de texto, podendo dar mais flexibilidade ao usuário. Com a ajuda de IDEs, é possível aumentar a produtividade. Existem diversos IDEs na Internet e muitos deles são de código aberto.  

Desenvolvimento

Nesta lista de IDE Javascript, selecionei 4 de código aberto e 4 premium (pagos). Todos eles estão no top 10 da lista de IDEs para JavaScrip cujos dowloads foram mais procurados entre 2020 e 2021, conforme a pesquisa anual da Github. 

Características de uma IDE 

Muitas são as características presentes em uma IDE, as mais comuns são: 

  • Editor de código-fonte: podendo escrever comandos suportados por uma determinada linguagem de programação; 
  • Preenchimento inteligente: recurso de uma IDE no qual permite o preenchimento de trechos de códigos com a finalidade de agilizar o desenvolvimento; 
  • Compilador ou interpretador: é necessário que toda IDE possua um compilador (ou um interpretador), que transforme todo o código-fonte escrito em linguagem de máquina; 
  • Debbuger: mais utilizado para encontrar e corrigir erros no código-fonte; 
  • Geração automática de código: recurso no qual permite a criação de trechos de códigos predefinidos, trazendo agilidade aos diversos processos de desenvolvimento; 
  • Refatoração: ferramenta que, em conjunto com testes automatizados, garantam uma melhoria constante do código-fonte e erradicação de bugs. 

 Vantagens e desvantagens de uma IDE 

Apesar da facilidade de criação de aplicações, as IDEs possuem diversas vantagens e desvantagens em sua utilização. Dentre elas é possível citar: 

Vantagens de uma IDE 

 Aumento da produtividade: Por possuir diversas ferramentas que auxiliam na criação de aplicações, o desenvolvedor só utilizará esta ferramenta, aumentando assim sua produtividade; 

  • Diminuição gastos: Por ser uma solução completa, muitas vezes esta é a única ferramenta que o desenvolvedor precisa adquirir para a construção de suas aplicações; 
  • Mede desempenho: IDEs possuem ferramentas para medição de desempenho da execução de aplicações; 
  • Geração automática de códigos: é o recurso que permite a criação de trechos de códigos predefinidos; 
  • Facilidade em fazer verificações e correção de erros: Diversas IDEs possuem ferramentas que analisam o código que está sendo desenvolvido, permitindo que possíveis erros sejam corrigidos no momento do seu desenvolvimento; 
  • Completa: Com um único software o desenvolvedor consegue desenvolver, testar e corrigir uma aplicação. 

Desvantagens de uma IDE

  • Pagas: Muitas IDEs são pagas, o que dificulta sua utilização pela comunidade; 
  • Facilidade no desenvolvimento: Sendo possível prover diversas facilidades na hora do desenvolvimento (como a geração automática de códigos), mas podem também contribuir para que muitos desenvolvedores se tornem “mal acostumados” na hora de desenvolver, se tornando dependentes da IDE; 
  • Ambiente lento: Apesar de possuir uma solução completa, isso tem um custo. A maioria das IDEs consomem muito mais recursos de hardware do computador que um simples editor de texto. 

 IDE´s java script  

  • Eclipse 
  • Visual Studio Code 
  • NetBeans 
  • Atom, um IDE Javascript 

 IDE Javascript Premium 

  • Visual Studio 
  • WebStorm – IDE Javascript 
  • Sublime Text 

 Considerações Finais 

A utilização de uma IDE não é obrigatória, podendo também ser possível desenvolver aplicações sem que o desenvolver utilize a mesma. Em certas situações o desenvolvedor poderá a escolher por diversas vantagens que sua utilização prove aos usuários, nada melhor que analisar todas estas questões a fim de escolher aquela que mais se adequa a sua forma de desenvolvimento.  

 Referências 

MARIANA, Paldoam. 7 Ide´s java script. São Paulo: Geek Hunter, 2021. 

RED HAT, O que é a IDE?. São Paulo: Red Hat, 2021. 

Autora: Brenda Andrade Ribeiro

Os Diagramas Comportamentais da UML


Diagramas comportamentais são aqueles onde existe alguma alteração de comportamento das classes. Os principais diagramas comportamentais da UML são: Diagrama de Caso de Uso, Diagrama de Seqüência e Diagrama de Atividade. Este artigo tem o objetivo de descrever as principais características destes diagramas.

A UML permite que os desenvolvedores visualizem os produtos de seus trabalhos em diagramas padronizados propiciando uma notação gráfica facilmente entendível com a um explicação significativa. Continue lendo “Os Diagramas Comportamentais da UML”

Maus cheiros no desenvolvedor de software

Mau Cheiro Desenvolvimento SoftwarePara os que se interessaram pelo tema, pois tem algum colega com dificuldades sérias de higienização: sinto muito. Não é minha intenção fazer devaneios sobre o número máximo de dias que um desenvolvedor pode utilizar a mesma camiseta. A expressão ‘maus cheiros’ (em inglês ‘bad smells’) é utilizada em software como indicativo para alguma coisa que pode não estar bem.

Martin Fowler e Kent Beck introduziram o conceito de ‘mau cheiro’ no código fonte: código duplicado, métodos longos, muitos parâmetros e outros. Gerard Meszaros fez o mesmo para testes: testes obscuros, lógica de testes em produção, para citar alguns. O mau cheiro não indica que, efetivamente, existe algum problema, mas serve como um indicativo que certamente vale a pena examinar. Continue lendo “Maus cheiros no desenvolvedor de software”

UML e os Diagramas Estruturais

Entre os conjuntos de diagramas da UML (Unified Modeling Language) estão os diagramas estruturais, utilizados para visualizar, especificar, construir e documentar os aspectos estáticos de um sistema. Este artigo tem como objetivo, introduzir de forma simplificada cada um dos diagramas estruturais da UML 2.0. São eles os diagramas de Classe, Objetos, Componentes, Implantação, Pacotes e Estrutura. Continue lendo “UML e os Diagramas Estruturais”

Engenharia de Requisitos: Por onde começo?

Por mais que as empresas digam que utilizam um método para definir os requisitos de seu software, a maior parte delas não aplica os conceitos dessa parte importante do processo.

A aplicabilidade da engenharia de requisitos mostra-se falha dentro das empresas. Mas onde as empresas estão errando? O que pode ser alterado no processo das empresas para que isso seja ajustado? Antes de elencar o que deve ser modificado, temos que entender o que é a engenharia de requisitos. Continue lendo “Engenharia de Requisitos: Por onde começo?”

Princípios da Gerência de Configuração de Software

Hoje em dia constatamos que as mudanças ocorrem em uma velocidade espantosamente rápida, isso não é diferente no desenvolvimento de um software: a legislação, o entendimento dos usuários sobre suas necessidades, o ambiente ao qual o sistema vai operar, os requisitos, tudo muda. Devido a tantas mudanças, é necessária alguma forma de gerenciamento para que o desenvolvimento não seja catastrófico.

Durante o desenvolvimento de software, uma grande quantidade de informações é produzida, tais como: especificações, planos de projeto, arquivos de código fonte, casos e planos de testes, manuais, arquivos de dados, entre outros. Cada um desses documentos produzidos poderá ser considerado um item de configuração de software. A configuração de software é composta pelos itens de configuração produzidos durante o processo de engenharia de software, ou seja, no processo de desenvolvimento disciplinado de sistemas. Continue lendo “Princípios da Gerência de Configuração de Software”

Treze práticas para desenvolvimento de software (Boas Práticas)

Para o desenvolvimento de softwares de qualidade é necessário dominar um conjunto de habilidades e conhecimentos que fazem com que o este processo se mantenha organizado e com crescimento constante, esse conjunto de técnicas quando utilizado de forma saudável pode ser descrito como boas práticas.  Se todas estas técnicas forem documentadas podem render um bom guia para esta mítica tarefa de criar softwares. Neste artigo abordo de maneira simplificada treze tópicos que podem auxiliar no entendimento do que envolve o desenvolvimento de software e serem adotados como boas práticas. Continue lendo “Treze práticas para desenvolvimento de software (Boas Práticas)”

TDD (Test Driven Development) e a batalha das opiniões

Uma técnica ágil pouco usada e proporcionalmente conhecida, o TDD(Test Driven Development) ou Desenvolvimento orientado a testes, pode ser enxergado como um vilão aos olhos de algumas empresas, mas para outras esta técnica veio como um heroi. Descubra lendo esse artigo o porquê dessa guerra de opiniões e também um pouco de sua história. Continue lendo “TDD (Test Driven Development) e a batalha das opiniões”

Usabilidade. Você pensa nisso? (Boas práticas para desenvolver páginas fáceis de navegar)

Usabilidade é a simplicidade e facilidade com que uma interface, um programa de computador ou um website pode ser utilizado. Em outras palavras, é uma interface fácil de usar, fácil de aprender e que faz com que o usuário não cometa erros.

Você já teve dificuldade para navegar em algum website? Já desistiu de algum website por ser difícil de navegar? Pois é… Isso é muito é comum quando as páginas não priorizam a usabilidade.

Às vezes, desenvolver um website com uma navegação diferenciada e fora do comum é interessante e pode render resultados muito bons. Porém, é importante pensar no público-alvo e seguir algumas boas práticas para desenvolvimento de interfaces. Continue lendo “Usabilidade. Você pensa nisso? (Boas práticas para desenvolver páginas fáceis de navegar)”

Coding Dojo: Treinamento e transferência de conhecimento tecnológico

Segundo o http://codingdojo.org/: “Um Coding Dojo é um encontro onde um grupo de programadores se reúne para trabalhar em conjunto em um desafio de programação. Eles estão lá para se divertir, e, através de uma metodologia pragmática, melhorar suas habilidades de programação e de trabalho em grupo.”

Na Wikipédia encontramos: “Dojo (em japonês: 道場 sítio do caminho?, Dōjō) é o local onde se treinam artes marciais japonesas. Muito mais do que uma simples área, o dojo deve ser respeitado como se fosse a casa dos praticantes”. Mas no nosso contexto, o treinamento é da arte da construção de software e codificação. Continue lendo “Coding Dojo: Treinamento e transferência de conhecimento tecnológico”