Git Product home page Git Product logo

teste-e-qualidade-de-software's Introduction

Teste e Qualidade de Software

  • Algumas Atividades para Exercitar Programação com Testes Automatizados.
  • Repositório de onde os alunos devem efetuar Fork e Pull Request das atividades práticas.

Orientações

  • Efetue um Fork do repositório;
  • Faça um clone do seu fork git clone;
  • Escolha um dos dos arquivos de teste;
    • Observe que é preciso da gem Rspec para alguns executar alguns arquivos de teste;
    • Os outros podem ser executados com apenas Ruby;
    • Algumas pastas contém também arquivos de testes de linguagens como Java, C#, etc;
    • Sinta-se livre para contribuir com testes dessas e outras linguagens.
  • Copie ele para a pasta aaaa-s, por exemplo 2018-2 (ano-semestre);
  • Renomeie o(s) arquivo(s) com o seu nome;
  • Escreva seus testes nesse arquivo, não altere os arquivos originais;
  • Lembre-se de atualizar o caminho no require_relative em alguns casos;
  • Certifique-se de que seu arquivo está executando sem erros;
  • Faça um commit referenciando a Issue (Problema/Atividade).
    • Para isso use a hashtag, seguido do número da questão, na sua mensagem de commit.
    • Exemplo: Resolve Issue #32 | Adiciona Solução do Aluno Seu Nome ou Username
    • Adicione apenas os arquivos da sua solução criados dentro da pasta mencionada no item 4.
    • Cuidado ao usar git add ., git add *, git add --all ou git add -A
  • Crie um Pull Request nesse repositório
    • Lembre-se que não é necessário abrir um segundo Pull Request se efetuar um commit enquanto seu primeiro Pull Request não foi aceito ou fechado.

teste-e-qualidade-de-software's People

Contributors

andersonfb avatar andrealonso avatar br-ribeiro avatar brpadilha avatar cabrall10 avatar dalmirojunior avatar e3duardo avatar elissonmichael avatar enzorobaina avatar fandor42 avatar gespinosa7 avatar henriquetatagiba avatar jeduardopaes avatar kamille21 avatar lmaths avatar mathaus-fadul avatar mikhaelangelo avatar pofreire avatar seixas avatar vagneroliveira1 avatar yukioarie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

teste-e-qualidade-de-software's Issues

Tamanho da Distância Entre 2 Sequências

Tamanho da Distância Entre 2 Sequências:

O objetivo dessa atividade é retornar o número do tamanho da diferença entre duas sequências (strings). Em outras palavras, quantos caracteres são diferentes entre duas strings com mesmo tamanho?

Crie um método que receba as strings e retorne o valor. Retorne uma mensagem de erro caso os dois parâmetros do método sejam de tamanhos diferentes.

Alguns Exemplos:

Entrada Saída
'', '' 0
'A', 'A' 0
'GGACTGA', 'GGACTGA' 0
'A', 'G' 1
'AG', 'CT' 2
'AT', 'CT' 1
'GGACG', 'GGTCG' 1
'ACCAGGG', 'ACTATGG' 2
'AAG', 'AAA' 1
'AAA', 'AAG' 1
'TAG', 'GAT' 2
'GATACA', 'GCATAA' 4
'GGACGGATTCTG', 'AGGACGGATTCT' 9

Empréstimo de Revistas para Amigos

Empréstimo de Revistas

Implemente uma solução orientada a objetos que vai gerenciar seus empréstimos
de revistas de quadrinhos aos seus amigos.

Introdução

  • Atributos de revista que deseja guardar: coleção (exemplo: Batman), número (edição) e ano;
  • Atributos do amigo que deseja guardar: nome, nome da mãe e local de onde o conhece (exemplo: UCAM);
  • Você tem interesse em saber a data inicial do empréstimo e quando o empréstimo foi devolvido;
  • Não permita que uma revista seja devolvida em uma data anterior a data na qual ela foi emprestada;
  • Não permita que um amigo pegue emprestado uma revista indisponível, ou seja, você precisa verificar se a revista está emprestada antes de efetuar um empréstimo;
  • Seu sistema precisa te informar quais revistas estão emprestadas para um determinado amigo.

Exemplo
Considere que você tenha os seguintes objetos:

  • amigo = Amigo(nome: 'Zézim', mae: 'Judite', local: 'UCAM')
  • revista = Revista(colecao: 'Batman', numero: 1, ano: 2014)

Considere que você tenha chamado o seguinte método:

  • amigo.pegar_emprestado(revista, data: 22/06/2018)
Método Retorno
amigo.revistas [revista]
amigo.emprestimos.size 1

Considere que você tenha chamado o seguinte método:

  • amigo.devolver(revista, data: 23/06/2018 )
Método Retorno
amigo.revistas []
amigo.emprestimos.size 0

Escrever Testes para Moedas

Escrever Testes para Moedas

Escrever testes para um módulo com uma função para conversão de números em strings formatadas para dinheiro.

Alguns Exemplos:

Entrada Saída
numero_para_moeda(3) "R$3,00"
numero_para_moeda(5_500_000) "R$5.500.000,00"
numero_para_moeda(1, unidade: '$') "$1,00"
numero_para_moeda(1, separador: '.') "R$1.00"
numero_para_moeda(2500000, delimitador: '-') "R$2-500-000,00"

Sistema de Consultas

Sistema de Consultas

Implemente um sistema de agendamento de consultas por data entre médicos e
pacientes.

Introdução

  • Um médico tem nome e métodos permitem saber quais são os pacientes que estão
    agendados para um determinada data e quais datas estão agendadas para um
    determinado paciente;
  • Um paciente tem nome e um método que o permite agendar uma consulta com um
    determinado médico em uma data;
  • Não deve ser permitido que um mesmo paciente agende uma mesma data mais de uma
    vez.

Exemplo
Considere que você tenha os seguintes objetos:

  • medico = Medico(nome: 'Dra. Satya Ananda')
  • paciente1 = Paciente(nome: 'Élisson Michael')
  • paciente2 = Paciente(nome: 'Brandon Nyorai')

Considere que você tenha chamado o seguinte método nesses objetos:

  • paciente1.agendar_consulta(medico, data)
  • paciente2.agendar_consulta(medico, data)
Método Retorno
medico.pacientes_do_dia(data) [paciente1, paciente2]
medico.pacientes_do_dia(outra_data) []

Considere que a data agendada seja 03/04/2018.
Obs: Você pode usar o método .strftime('%d/%m/%Y') para formatar data:

Método Retorno
medico.datas_de_atendimento_do(paciente1) ['03/04/2018']

Nova Feature em Taverna Medieval

Taverna Medieval

Você é um programador recém contratado para trabalhar na Taverna Mediavel. Uma pequena pousada estrategicamente localizada em uma cidade rica, seu atendente é o amigável Élisson. Além de ser uma pousada, existe um comércio de mercadorias. Infelizmente as mercadorias vão perdendo a qualidade com o passar do tempo, ou seja, quanto mais próximo fica do prazo de validade.

Já existe um site que atualiza automaticamente os preços do nosso estoque, que foi criado por um técnico que não tinha muita experiência com programação e depois que o sistema ficou complicado de atualizar e ele "pulou fora".

Seu trabalho hoje será adicionar uma nova feature para o nosso site para que possamos vender um novo tipo de item.

Introdução

  • Os itens têm um atributo vence_em que guarda o número de dias antes do prazo vencer.
  • Os itens têm um atributo qualidade que influência seu valor.
  • O valor máximo para qualidade é 50.
  • Todos os dias nosso site executa a função atualizar_qualidade que decrementa os valores de vence_em e qualidade de cada um dos itens do estoque.
  • Se o prazo de validade do item vencer, sua qualidade diminui duas vezes mais rápido.
  • O atributo qualidade não pode ficar negativo

Exceções

  • O Item Vinho fica mais valioso com o tempo (qualidade aumenta).
  • O item Lendário não tem seus atributos decrementados (ele não perde qualidade).
    • Ele também pode ter um valor máximo de qualidade 80.
  • O item Ingresso, assim como o Vinho, fica mais valioso quando está perto do prazo de vencimento;
    • Sua qualidade Incrementa em 2 quando vencer_em é menor ou igual a 10.
    • Sua qualidade Incrementa em 3 quando vencer_em é menor ou igual a 5.
    • Sua qualidade vai direto para 0 quando vencer_em zera .

A Nova Feature que a Taverna precisa que Você Implemente

A taverna comprou recentemente um estoque de Arcos Conjurados e precisa adicionar esse item no site.

  • Esse Item tem sua qualidade decrementada duas vezes mais rápido que o normal.

O amigável atendente da taverna Élisson já andou trabalhando nos testes automatizados para te ajudar com essa tarefa, pois o técnico anterior tinha feito tudo sem testes... Você só precisa implementar a nova feature sem quebrar nada no site que já esteja funcionando.

Turma de Alunos

Turma de Alunos:

Implementar uma relação de um para muitos entre turma e alunos.

  • Uma turma tem muitos alunos.
  • Aluno como atributos nome e nota.
  • Turma tem métodos que retornam todos os alunos, todos os alunos aprovados e reprovados.
  • Turma tem um método que retorna a média das notas da turma.
  • Você não pode adicionar um mesmo aluno duas vezes em uma mesma turma.
  • Considere que a média para ser aprovado é 6.

Exemplo
Considere que você tenha adicionado 3 alunos à uma turma:

  • jose = José (com nota 6.0)
  • joao = João (com nota 5.0)
  • maria = Maria (com nota 7.0)
Método Retorno
turma.alunos [jose, joao, maria]
turma.aprovados [jose, maria]
turma.reprovados [joao]
turma.media 6.0

Livro com Páginas e Autores

O objetivo dessa atividade é praticar TDD e OOP.

Desenvolver Classes para Representar Livro, Página e Autor:

  • Livro tem as propriedades nome, preço e um(a) ou mais páginas e autores.
  • Autor tem nome, e-mail e gênero.
  • Página tem número, título e texto.

O objetivo é tentar escrever os testes antes da implementação.

Refatorar Usando Null Objet Pattern (Active Nothing)

Null Object Pattern

Melhore a qualidade do código da classe Fornecedor livrando-se das condicionais.

Introdução

Nesse sistema, o contato na classe Fornecedor é opcional. Por isso, em algumas situações um fornecedor é registrado apenas com o local. Diante dessa situação, precisamos estar sempre verificando se existe um contato antes de chamar seus métodos.

Obs.: Você pode usar o Null Object Pattern, também conhecido como Active Nothing, para resolver esse tipo de situação.

Exemplo
Considere que você tenha os seguintes objetos:

  • local = Local(nome: 'Rua de Qualquer Lugar')
  • contato = Contato(nome: 'Fulano', telefone: '99998888', email: '[email protected]')
  • fornecedor = Fornecedor(local: local, contato: contato)
Método Retorno
fornecedor.nome_do_contato 'Fulano'
fornecedor.telefone_do_contato '99998888'
fornecedor.email_do_contato '[email protected]'

Exemplo
Considere que você tenha criado um fornecedor sem contato agora:

  • fornecedor = Fornecedor(local: local)
Método Retorno
fornecedor.nome_do_contato 'Nenhum Nome'
fornecedor.telefone_do_contato 'Nenhum Telefone'
fornecedor.email_do_contato 'Nenhum Email'

Album de Músicas

Album de Músicas

Implemente um sistema de registro de músicas, artistas e álbuns.

Introdução

  • Um álbum tem nome e ano como propriedades;
  • Uma música tem nome e duração em segundos como propriedades;
  • Uma música pode retornar a duração formatada em minutos:segundos;
  • Um álbum tem várias músicas;
  • Um artista tem nome e várias músicas;
  • Uma música tem vários artistas;
  • Um artista tem vários álbuns através das músicas;
  • Um álbum tem vários artistas através das músicas;

Exemplo
Considere que você tenha os seguintes objetos:

  • album = Album(nome: 'Bar Das Coleguinhas', ano: 2015)
  • simone = Artista(nome: 'Simone')
  • simaria = Artista(nome: 'Simaria')
  • musica_meu_violao = Musica(nome: 'Meu Violão e Nosso Cachorro', segundos: 209)
  • musica_ingratidao = Musica(nome: 'Ingratidão', segundos: 201)

Considere que você tenha chamado os seguintes métodos:

  • album.incluir(musica_meu_violao)
  • album.incluir(musica_ingratidao)
  • musica_meu_violao.incluir(simone)
  • musica_meu_violao.incluir(simaria)
  • musica_ingratidao.incluir(simone)
  • musica_ingratidao.incluir(simaria)
Método Retorno
album.musicas [musica_meu_violao, musica_ingratidao]
album.artistas [simone, simaria]
musica_meu_violao.albuns [album]
musica_ingratidao.albuns [album]
musica_meu_violao.duracao_em_minutos '3:29'
musica_ingratidao.duracao_em_minutos '3:21'
simone.musicas [musica_meu_violao, musica_ingratidao]
simaria.musicas [musica_meu_violao, musica_ingratidao]

Escrever Testes para Extensão de String

Escrever Testes para Extensão de String

Escrever testes para duas funções extras implementadas para a classe String.

Alguns Exemplos:

Entrada Saída
"elisson michael".titleize "Elisson Michael"
"ELISSON MICHAEL".titleize "Elisson Michael"
" ".blank? true
"Elisson".blank? false

Personagem de D&D

Personagem de D&D

Em um jogo de Dungeons & Dragons, cada jogador começa criando um personagem para ele jogar. Esse personagem tem, entre outras coisas, seis habilidade: força, destreza, constituição, inteligência, sabedoria e carisma. Essas seis habilidade tem um pontuação que é determinada aleatoriamente. Você faz isso rolando quatro dados de seis lados e guardando a soma dos três maiores valores. Você faz isso seis vezes, uma vez para cada habilidade.

Seu personagem inicialmente tem 10 pontos de vida + o modificador de constituição do personagem. Você descobre o modificador de constituição do seu personagem subtraindo 10 da constituição do seu personagem, dividindo por 2 e arredondando para cima.

Escreva um gerador de personagem aleatório que siga as regras abaixo.

Por exemplo, as seis jogadas dos quatro dados podem se parecer com:

  • 5, 3, 1, 6: Você descarta o 1 e soma 5 + 3 + 6 = 14, o qual você atribui para força.
  • 3, 2, 5, 3: Você descarta o 2 e soma 3 + 5 + 3 = 11, o qual você atribui para destreza.
  • 1, 1, 1, 1: Você descarta o 1 e soma 1 + 1 + 1 = 3, o qual você atribui para constituição.
  • 2, 1, 6, 6: Você descarta o 1 e soma 2 + 6 + 6 = 14, o qual você atribui para inteligência.
  • 3, 5, 3, 4: Você descarta o 3 e soma 5 + 3 + 4 = 12, o qual você atribui para sabedoria.
  • 6, 6, 6, 6: Você descarta o 6 e soma 6 + 6 + 6 = 18, o qual você atribui para carisma.

Por causa da constituição ser 3, o modificar de constituição é -4 e os pontos de vida equivalem a 6.

Escreva também testes automatizados para sua classes e seus métodos.

Adolescente

Atividade inspirada por Exercism.

Adolescentes costumam ser indiferentes, em conversas suas respostas são limitadas:
• Um adolescente responde ‘Certo.’ quando você faz uma pergunta a ele.
• Ele responde ‘Ei, relaxa aí!’ quando você grita com ele.
• Ele responde ‘Ok, que seja’ quando você não diz nada.
• Ele responde ‘Tanto faz’ para qualquer outra coisa.

Escreva a classe Adolescente com testes.

Substituir Condicional por Polimorfismo

Substituir Condicional por Polimorfismo

Praticando Clean Code

Remova o switch/case usando polimorfismo.

Orientações:

  • Crie um arquivo na pasta aaaa-s, por exemplo 2018-2 (ano-semestre);
    • Crie a pasta caso ela não existe.
  • Copie e renomeie o arquivo para essa pasta.
  • Escreva o código nesse arquivo, não altere os arquivos originais;
    • Para esse problema, em específico, você vai alterar o método altitude_de_cruzeiro;
  • Certifique-se de que seu arquivo continua passando em todos os testes;
  • Faça um commit com a hashtag #52 contendo apenas o(s) arquivo(s) da sua solução criado(s) dentro da pasta mencionada no primeiro item.
    • Cuidado ao usar git add ., git add *, git add --all ou git add -A

Resumos para Ajudar:

Lista de Itens Recentemente Usados

Lista de Itens Recentes

Implemente uma classe que representa uma Lista de Itens Recentemente Usados.
Escreva testes automatizados para sua classe.

Introdução

  • O item mais recente deve ser o primeiro item da lista
  • Não deve existir duplicações do mesmo item na lista
  • Quando um mesmo item é adicionado novamente na lista ele fica no topo (primeiro item)

Exemplo

Considere que você tenha um objeto da classe Lista: lista

Considere que você tenha chamado os seguintes métodos, nessa ordem,
nesse objeto:

  • lista.adicionar('Música 1')
  • lista.adicionar('Vídeo 2')
Método Retorno
lista.itens ['Vídeo 2, 'Música 1']

Considere que você tenha chamado o seguinte método nesse objeto:

  • lista.adicionar('Imagem 3')
Método Retorno
lista.itens ['Imagem 3', 'Vídeo 2, 'Música 1']

Finalmente, considere que você tenha tentado adicionar um item repetido:

  • lista.adicionar('Música 1')
Método Retorno
lista.itens ['Música 1', 'Imagem 3', 'Vídeo 2]

Implementar uma Classe Árvore

Implementação de uma Classe Árvore

Inspirado por Chris Pine https://pine.fm/LearnToProgram/chap_09.html.

Implemente uma classe chamada Arvore.

  1. Ela deve ter idade, altura e várias frutas e ser inicializada com todos esses atributos com valor 0.
  2. Ela deve ter um método passar_um_ano, que faz ela ficar mais velha. Quando o tempo passa ela fica maior e produz frutas.
  3. Ela morre após uma determinada idade escolhida por você.
  4. Ela não deve produzir frutas quando é mais nova do que 2 anos ou quando estiver morta.
  5. Ela deve ter um método pegar_uma_fruta, que diminui seu total de frutas atual em 1.
  6. As frutas não colhidas caem de um ano para o outro.
  7. Ela tem um método que responde se ela está viva ou não.

Orientações:

  • Crie um arquivo com seu nome na pasta aaaa-s, por exemplo 2018-2 (ano-semestre);
    • Crie a pasta caso ela não existe.
  • Escreva o código nesse arquivo, não altere os arquivos originais;
    • Para esse problema, em específico, você vai criar uma classe Arvore
  • Lembre-se de atualizar o caminho no require_relative do arquivo de teste;
  • Certifique-se de que seu arquivo está passando em todos os testes;
    • Tente se preocupar em passar em um teste de cada vez enquanto estiver trabalhando na sua solução.
  • Faça um commit com a hashtag #47 contendo apenas o arquivo da sua solução criado na pasta mencionada no item 1.
    • Cuidado ao usar git add ., git add *, git add --all ou git add -A

Resumo para Ajudar:

Carrinho de Compras

Carrinho de Compras:

Usar o arquivo de testes para implementação de uma classe de carrinho de compras.

Orientações:

  • Escolha um dos dos arquivos de teste: carrinho_compras_spec ou carrinho_compras_test;
    • Observe que é preciso da gem Rspec para o primeiro
    • Os outros podem ser executados com apenas Ruby.
  • Crie um arquivo na pasta aaaa-s, por exemplo 2018-2 (ano-semestre);
    • Crie a pasta caso ela não existe.
  • Escreva o código nesse arquivo, não altere os arquivos originais;
    • Para esse problema, em específico, você vai criar classes e métodos de acordo com o arquivo de testes;
    • Exemplos: Carrinho, Produto.
  • Lembre-se de atualizar o caminho no require_relative do arquivo de teste que escolheu usar para testar seu código;
  • Certifique-se de que seu arquivo está passando em todos os testes;
    • Tente se preocupar em passar em um teste de cada vez enquanto estiver trabalhando na sua solução.
  • Faça um commit com a hashtag #6 contendo apenas os arquivos da sua solução criados dentro da pasta mencionada no item 2.
    • Cuidado ao usar git add ., git add *, git add --all ou git add -A
    • Envios (com testes) em outras linguagens de programação são bem vindos.

Resumos para Ajudar:

Transcrição DNA para RNA

O objetivo dessa atividade é transcrever uma sequência de DNA para RNA.
Crie um método que receba uma string contendo as letras abaixo e retorne uma string onde:

  • C transcreve para G
  • G transcreve para C
  • T transcreve para A
  • A transcreve para U

Se a string de entrada contiver caracteres inválidos (nenhum dos quatro acima), o método deve retornar uma string vazia.

Exemplos:

Entrada Saída
'C' 'G'
'TA' 'AU'
'AATT' 'UUAA'
'ACGT' 'UGCA'
'ACGTGGTCTTAA' 'UGCACCAGAAUU'
'U' ' '
'XXX' ' '
'ACGTXXXCTTAA' ' '

Não deixe de conferir o(s) arquivos de teste(s) para mais exemplos.

Número Primo

Número Primo

Fazer com que números inteiros sejam capazes de responder se são primos ou não. Um número primo tem apenas dois divisores: o número um e ele mesmo.

Exemplos:

Exemplo Retorno
2.primo? true
3.primo? true
4.primo? false
5.primo? true
6.primo? false
7.primo? true
8.primo? false
9.primo? false
10.primo? false
11.primo? true

Opcional: Ao invés de fazer abrir a classe Integer e fazer um monkey patch, tente usar Refinements.

Cores de Resistores

Cores de Resistores

Você precisa saber duas coisas sobre resistores:

  • Cada resistor tem um valor de resistência;
  • Resistores são pequenos, tão pequenos que se você colocasse os valores de resistência neles, seria difícil de ler;

Para contornar esse problema, os fabricantes imprimem faixas de cores nos resistores para representar seus valores de resistência. Cada faixa funciona como o dígito de um número.

Escreva um programa, junto com testes automatizados, que receba cores como entrada e retorne o número correto.

  • Preto: 0

  • Marrom: 1

  • Vermelho: 2

  • Laranja: 3

  • Amarelo: 4

  • Verde: 5

  • Azul: 6

  • Violeta: 7

  • Cinza: 8

  • Branco: 9

    Exemplo:

    Se um resistor tiver a faixa marrom (valor 1) seguido de uma faixa verde (valor 5), isso seria traduzido para o número 15.

    Método Retorno
    Resistencia.valor(['marrom', 'preto']) 10
    Resistencia.valor(['azul', 'cinza']) 68
    Resistencia.valor(['amarelo', 'violeta']) 47
    Resistencia.valor(['laranja', 'laranja']) 33

Contagem de Palavras em uma Frase

Número de Ocorrências de Palavras em uma Frase

Implementar um método que receba uma string como parâmetro de entrada e retorne um hash com a ocorrência de cada palavra em uma frase, cada chave nesse hash é uma palavra e cada valor é a quantidade de ocorrências (vezes que aparece na string). Atenção:

  • As palavras na string não são separadas apenas por espaço, podem ser separadas por vírgulas, por exemplo;
  • Uma palavra não deve ser considerada diferente se estiver em minúsculo ou maiúsculo.

Alguns Exemplos:

Entrada Saída
'palavra' { 'palavra' => 1 }
'uma de cada' { 'uma' => 1, 'de' => 1, 'cada' => 1 }
'um peixe dois peixe vermelho peixe azul peixe' { 'um' => 1, 'peixe' => 4, 'dois' => 1, 'vermelho' => 1, 'azul' => 1 }
'um,dois,quatro' { 'um' => 1, 'dois' => 1, 'quatro' => 1 }
'vai Vai VAI Para para' { 'vai' => 3, 'para' => 2 }

Jokenpô

Jokenpô é uma brincadeira onde cada jogador escolhe uma das seguintes opções: pedra, papel ou tesoura.

Para determinar o vencedor, seguem-se as seguintes regras:

  • pedra ganha de tesoura
  • tesoura ganha de papel
  • papel ganha de pedra.

Não se esqueça de conferir o(s) arquivo(s) de teste.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.