Ant em Ação - 2ª Edição de Java Development com Ant Ant em Ação - 2ª Edição de Java Development com

VITRINE Os TOP de vendas !!

Semana do Consumidor

De: R$ 134,00Por: R$ 79,90

Preço a vista: R$ 79,90

Economia de R$ 54,10

+-
Comprar
Opções de Parcelamento:
  • à vista R$ 79,90
Outras formas de pagamento

Quem viu este produto , comprou

Quem viu este produto , também se interessou

  • Descrição
    Ant em Ação - 2ª Edição de Java Development com Ant

    Este livro é sobre o Ant, a ferramenta premiada de construção de Java. O Ant se tornou a peça central de tantos processos de construção de projetos por ser fácil de se usar, ser independente de plataforma e objetivar as necessidades dos projetos atuais de automação de testes e de distribuição. Desde seus primórdios, como aplicação auxiliar à compilação do Tomcat, o servidor web Java do Apache cresceu até se tornar uma ferramenta isolada, adotada pela comunidade Java e, ao fazê-lo, mudou as expectativas das pessoas com relação as suas ferramentas de desenvolvimento. Se jamais usou o Ant, este livro o apresentará levando-o, sistematicamente, através dos estágios centrais da maioria dos projetos Java: compilação, testes, execução, empacotamento e entrega. Se você é um usuário experiente do Ant, será mostrado como ?impor limites? ao seu uso. A ênfase será no uso do Ant como parte de um grande projeto, extraindo melhores práticas de experiências reais. Seja qual for a sua experiência, acreditamos que aprenderá muita coisa, e que seus projetos de software se beneficiarão para construir, testar e liberar sua aplicação.
  • Sobre o Autor
  • Especificação

    Características

    AssuntosJava Web, ANT
    Tipo de LivroLivro Físico

    Especificações

    Sobre o AutorSteve Loughran

    Steve Loughran trabalha nos Laboratórios HP, em Bristol, Inglaterra, desenvolvendo tecnologias para tornar mais fácil a distribuição e o teste de servidores de larga escala e de outras aplicações distribuídas. Seu envolvimento com o Ant começou em 2000, quando ele estava trabalhando nos primeiros serviços web, em Corvallis, Oregon, EUA; ele é um comprometido com projetos Ant e membro da Apache Software Foundation. Graduado em Ciência da Computação pela Universidade de Edinburgh, ele mora em Bristol com sua esposa Bina e seu flho Alexander. Na ausência de qualquer local para esquiar, ele faz a maior parte do ciclismo dentro e fora de estrada, nas imediações.

    Erik Hatcher

    Erik Hatcher, membro da Apache Software Foundation, tem estado ocupado desde a primeira edição do livro do Ant, sendo co-autor de Lucene in Action, tornando-se pai pela terceira vez, e entrando no mundo maravilhoso da computação humanitária. Atualmente, ele trabalha para a Applied Research, no grupo Patacriticism, na Universidade de Virgínia, EUA, e como consultor de Lucene e Solr, através da eHatcher Solutions, Inc. Graças ao sucesso da primeira edição, Erik foi agraciado com palestras em conferências e para grupos ao redor do mundo, incluindo JavaOne, ApacheCon, OSCON, e o circuito do simpósio No Fluf, Just Stuf. Erik mora em Charlottesville, Virgínia, EUA, com sua linda esposa, Carole, e seus três maravilhosos flhos, Blake, Ethan e Jakob. Erik parabeniza Steve, seu porta-voz, por dar conta sozinho desta segunda edição.
    Informações TécnicasSumário

    PARTE 1 - Aprendendo o Ant - 5
    CAPÍTULO 1 - Introdução ao Ant - 7
    1.1 O que é o Ant? - 7
    1.1.1 Os conceitos centrais do Ant - 9
    1.1.2 Ant em ação: um projeto de exemplo - 11
    1.2 O que torna o Ant tão especial? - 15
    1.3 Quando usar o Ant - 18
    1.4 Quando não usar o Ant? - 18
    1.5 Alternativas para o Ant - 19
    1.5.1 IDEs - 19
    1.5.2 Make - 20
    1.5.3 Maven - 22
    1.6 A evolução contínua do Ant - 23
    1.7 Resumo - 25
    CAPÍTULO 2 - Uma primeira construção Ant - 27
    2.1 Como definir nosso primeiro projeto - 28
    2.2 Passo zero: criar o diretório do projeto - 28
    2.3 Passo um: verificar se as ferramentas estão no lugar - 29
    2.4 Passo dois: escrever o seu primeiro arquivo de construção ant - 30
    2.4.1 Examinando o arquivo de construção - 30
    2.5 Passo três: rodar a sua primeira construção - 32
    2.5.1 Se a construção falhar - 33
    2.5.2 Olhando para a construção em mais detalhes - 36
    2.6 Passo quatro: estabelecer estrutura - 39
    2.6.1 Apresentando os diretórios fonte - 39
    2.6.2 Como dispor os diretórios de construção - 41
    2.6.3 Como dispor os diretórios de distribuição - 42
    2.6.4 Como criar o arquivo de construção - 44
    2.6.5 Dependências de alvo - 45
    2.6.6 Como rodar o novo arquivo de construção - 48
    2.6.7 Construções incrementais - 49
    2.6.8 Como rodar múltiplos alvos na linha de comando - 50
    2.7 Passo cinco: rodar o nosso programa - 52
    2.7.1 Porque executar de dentro do Ant? - 52
    2.7.2 Como adicionar um alvo “execute” - 53
    2.7.3 Como rodar o novo alvo - 54
    2.8 Opções de linha de comando do Ant - 55
    2.8.1 Como especificar que arquivo de construção rodar - 57
    2.8.2 Como controlar a quantidade de informação fornecida - 58
    2.8.3 Como lidar com a falha - 60
    2.8.4 Como conseguir informação sobre um projeto - 60
    2.9 Examinando o arquivo de construção final - 61
    2.10 Como rodar a construção sob um IDE - 63
    2.11 Resumo - 64
    CAPÍTULO 3 - Entenda os tipos de dados propriedades do Ant - 67
    3.1 Preliminares - 68
    3.1.1 O que é um tipo de dados do Ant? - 68
    3.1.2 Visão geral de propriedade - 69
    3.2 Introdução a tipos de dados e propriedades com - 70
    3.3 Caminhos - 74
    3.3.1 Como usar um caminho - 75
    3.4 Conjuntos de arquivos - 76
    3.4.1 Conjuntos de padrão - 77
    3.5 Selecionadores - 82
    3.6 Tipos de dados adicionais do Ant - 85
    3.7 Propriedades - 87
    3.7.1 Como definir propriedades com a tarefa - 89
    3.7.2 Como checar pela disponibilidade de recursos: - 94
    3.7.3 Como testar condições com - 95
    3.7.4 Como criar uma marcação de horário de construção com - 99
    3.7.5 Como definir propriedades a partir da linha de comando - 100
    3.8 Como controlar o Ant com propriedades - 101
    3.8.1 Execução condicional de alvo - 102
    3.8.2 Falha condicional de construção - 103
    3.8.3 Conjunto de padrão de inclusão/exclusão condicional - 104
    3.9 Referências - 104
    3.9.1 Propriedades e referências - 105
    3.10 Como tratar dependências de biblioteca - 107
    3.11 Recursos: o modelo de dados secreto do Ant - 108
    3.12 Melhores práticas - 109
    3.13 Resumo - 111
    CAPÍTULO 4 - Como testar com o JUnit - 115
    4.1 O que é testar, e por que fazê-lo? - 116
    4.2 Introdução a nossa aplicação - 118
    4.2.1 A aplicação: um diário - 118
    4.3 Como testar um programa - 120
    4.4 Introdução ao JUnit - 122
    4.4.1 Como escrever um caso de teste - 124
    4.4.2 Como rodar um caso de teste - 125
    4.4.3 Como asserir resultados desejados - 127
    4.4.4 Como adicionar o JUnit ao Ant - 131
    4.4.5 Escrevendo o código - 133
    4.5 A tarefa do JUnit: - 134
    4.5.1 Como encaixar o JUnit no processo de construção - 136
    4.5.2 Como suspender a construção quando os testes falham - 139
    4.5.3 Como ver os resultados do teste - 140
    4.5.4 Como rodar múltiplos testes com - 143
    4.6 Como gerar relatórios HTML de teste - 144
    4.6.1 Como suspender as construções após gerar os relatórios - 147
    4.7 Técnicas avançadas da - 148
    4.8 Melhores práticas - 154
    4.8.1 O futuro do JUnit - 155
    4.9 Resumo - 156
    CAPÍTULO 5 - Como empacotar projetos - 159
    5.1 Como trabalhar com arquivos - 161
    5.1.1 Como deletar arquivos - 162
    5.1.2 Como copiar arquivos - 163
    5.1.3 Como mover e renomear arquivos - 165
    5.2 Introdução aos mapeadores - 165
    5.3 Como modificar arquivos dinamicamente - 172
    5.4 Preparação para empacotar - 174
    5.4.1 Como adicionar arquivos de dados ao classpath - 174
    5.4.2 Como gerar a documentação - 175
    5.4.3 Como modificar finais de linha para as plataformas alvo - 178
    5.5 Como criar arquivos JAR - 181
    5.5.1 Como testar o arquivo JAR - 185
    5.5.2 Como criar manifestos JAR - 187
    5.5.3 Como adicionar metadado adicional ao JAR - 189
    5.5.4 Arquivo JAR melhores práticas - 190
    5.5.5 Como assinar arquivos JAR - 190
    5.6 Como testar com arquivos JAR - 194
    5.7 Como criar arquivos Zip - 195
    5.7.1 Como criar uma distribuição Zip binária - 196
    5.7.2 Como criar uma distribuição de fonte - 198
    5.7.3 Arquivo Zip melhores práticas - 199
    5.8 Como empacotar para Unix - 200
    5.8.1 Arquivos tar - 200
    5.8.2 Como gerar Pacotes RPM - 204
    5.9 Como trabalhar com recursos - 205
    5.9.1 Uma definição formal de um recurso - 206
    5.9.2 Quais recursos existem? - 207
    5.9.3 Coleções de recursos - 208
    5.10 Resumo - 211
    CAPÍTULO 6 - Como executar programas - 213
    6.1 Como rodar programas sob o Ant – uma introdução - 214
    6.1.1 Introdução à tarefa - 216
    6.1.2 Como definir o classpath - 216
    6.1.3 Argumentos - 218
    6.1.4 Como definir propriedades de sistema - 222
    6.1.5 Como rodar o programa em uma nova JVM - 223
    6.1.6 Ajuste da JVM - 224
    6.1.7 Como tratar erros - 226
    6.1.8 Como executar arquivos JAR - 228
    6.2 Como rodar programas nativos - 229
    6.2.1 Como rodar nosso diário como um programa nativo - 230
    6.2.2 Como executar comandos shell - 231
    6.2.3 Como rodar sob diferentes sistemas operacionais - 233
    6.2.4 Como investigar por um programa - 236
    6.3 e - Avançado - 237
    6.3.1 Como definir variáveis de ambiente - 238
    6.3.2 Como tratar limites de tempo - 239
    6.3.3 Como rodar um programa em segundo plano - 240
    6.3.4 Entrada e saída - 241
    6.3.5 E/S transmitido via pipe com um redirecionador de E/S - 243
    6.3.6 Cadeias de filtro e leitores de filtro - 245
    6.4 Operações em massa com - 248
    6.5 Como tudo funciona - 250
    6.5.1 - 251
    6.5.2 e - 251
    6.6 Melhores práticas - 252
    6.7 Resumo - 253
    CAPÍTULO 7 - Como distribuir nossa aplicação - 255
    7.1 Como se preparar para distribuição - 256
    7.1.1 Como deixar nossa distribuição segura - 258
    7.1.2 Requisitos do servidor - 260
    7.2 Distribuição baseada em FTP de uma aplicação empacotada - 260
    7.2.1 Como enviar para Unix - 261
    7.2.2 Como enviar para um servidor FTP Windows - 264
    7.2.3 Como enviar para o SourceForge - 265
    7.2.4 Lógica de dependência via FTP - 266
    7.3 Distribuição baseada em e-mail de uma aplicação empacotada - 267
    7.3.1 Como enviar mensagens HTML - 272
    7.4 Distribuição segura com SSH e SCP - 273
    7.4.1 Como enviar arquivos com SCP - 274
    7.4.2 Como descarregar arquivos com a - 277
    7.4.3 Execução remota com - 279
    7.4.4 Como solucionar problemas nas tarefas SSH - 281
    7.5 Descarregamento via http - 282
    7.5.1 Como investigar por um servidor ou página da web - 283
    7.5.2 Como recuperar arquivos remotos com - 285
    7.5.3 Como realizar o descarregamento - 286
    7.6 Distribuição através de múltiplos canais - 288
    7.6.1 Como chamar alvos com a - 289
    7.6.2 Como distribuir com a - 293
    7.7 Resumo - 296
    CAPÍTULO 8 - Como colocar tudo junto - 297
    8.1 Como escrever bons arquivos de construção - 298
    8.2 Como construir a biblioteca da aplicação diário - 299
    8.2.1 Como iniciar o projeto - 299
    8.2.2 Os pontos de entrada públicos - 300
    8.2.3 Como configurar a construção - 301
    8.2.4 Como compilar e testar - 306
    8.2.5 Como empacotar e criar uma distribuição - 310
    8.2.6 Distribuição - 315
    8.3 Como adotar o Ant - 319
    8.4 Como construir um projeto existente sob o Ant - 323
    8.5 Resumo - 326
    PARTE 2 - Aplicando o Ant - 327
    CAPÍTULO 9 - Além das tarefas centrais do Ant - 329
    9.1 As muitas das diferentes categorias das tarefas do Ant - 330
    9.2 Como instalar tarefas opcionais - 334
    9.2.1 Como solucionar problemas -336
    9.3 Tarefas opcionais em ação - 338
    9.3.1 Como manipular arquivos de propriedade - 338
    9.3.2 Como aprimorar a com checagem de dependência - 341
    9.4 Gestão de configuração de software sob o Ant - 343
    9.5 Como usar tarefas de terceiros - 347
    9.5.1 Como definir tarefas com - 348
    9.5.2 Como declarar tarefas definidas em arquivos de propriedade - 349
    9.5.3 Como definir tarefas em um único espaço de nomes - 351
    9.5.4 Como definir tarefas de um Antlib - 353
    9.6 As tarefas Ant-contrib - 354
    9.6.1 As tarefas Ant-contrib em ação - 359
    9.7 Auditoria de código com Checkstyle - 367
    9.8 Resumo - 372
    CAPÍTULO 10 - Como trabalhar com grandes projetos - 375
    10.1 Construções mestre: como gerenciar grandes projetos -377
    10.1.1 Introdução à tarefa - 378
    10.1.2 Como desenhar um escalável arquivo flexível de construção mestre - 381
    10.2 Como controlar construções de projeto filho - 384
    10.2.1 Como definir propriedades em projetos filho - 384
    10.2.2 Como repassar propriedades e referências na - 387
    10.3 Delegação avançada - 391
    10.3.1 Como pegar dado de volta - 392
    10.4 Como herdar arquivos de construção através da - 393
    10.4.1 Inclusão de entidade XML - 394
    10.4.2 Como importar arquivos de construção com a - 396
    10.4.3 Como o Ant sobrescreve alvos - 397
    10.4.4 Como chamar alvos sobrescritos - 399
    10.4.5 As propriedades especiais da - 400
    10.5 Como aplicar a - 402
    10.5.1 Como estender um arquivo de construção existente - 403
    10.5.2 Como criar um arquivo de construção base para muitos projetos - 404
    10.5.3 Arquivos de construção mixin - 408
    10.5.4 Melhores práticas com a - 408
    10.6 As capacidades de macro do Ant - 409
    10.6.1 Como redefinir tarefas com a - 410
    10.6.2 Os perigos da - 412
    10.7 Como escrever macros com a - 414
    10.7.1 Como passar dados para uma macro - 415
    10.7.2 Variáveis Locais - 418
    10.7.3 Uso eficaz de macro - 420
    10.8 Resumo - 421
    CAPÍTULO 11 - Como gerenciar dependências - 423
    11.1 Introdução à Ivy - 425
    11.1.1 Os conceitos centrais da Ivy - 425
    11.2 Como instalar a Ivy - 428
    11.2.1 Como configurar a Ivy - 430
    11.3 Como resolver, criar relatório, e recuperar - 433
    11.3.1 Como criar um relatório de dependência - 434
    11.3.2 Como recuperar artefatos - 435
    11.3.3 Como definir os classpaths com a Ivy - 437
    11.4 Como trabalhar em projetos com a Ivy - 438
    11.4.1 Como compartilhar artefatos entre projetos - 438
    11.4.2 Como usar artefatos publicados em outros projetos - 441
    11.4.3 Como usar a Ivy para coreografar construções - 446
    11.5 Outros aspectos da Ivy - 448
    11.5.1 Como gerenciar versões de arquivo por meio de variáveis Ivy - 449
    11.5.2 Como encontrar artefatos no repositório central - 450
    11.5.3 Como excluir dependências indesejadas - 451
    11.5.4 Repositórios privados - 451
    11.5.5 Como adotar a Ivy - 452
    11.6 Resumo - 453
    CAPÍTULO 12 - Como desenvolver para a Web - 455
    12.1 Como desenvolver uma aplicação web - 457
    12.1.1 Como escrever um servlet de alimentação - 460
    12.1.2 Bibliotecas em aplicações web - 461
    12.1.3 Escrevendo as páginas web - 463
    12.1.4 Como criar um arquivo web.xml - 464
    12.2 Como construir o arquivo WAR - 466
    12.3 Implantação - 468
    12.3.1 Implantação por cópia - 468
    12.4 Atividades pós-implantação - 470
    12.4.1 Como investigar pela disponibilidade do servidor - 471
    12.4.2 Como interromper a construção com a - 473
    12.5 Como testar aplicações web com a HttpUnit - 474
    12.5.1 Como escrever testes HttpUnit - 475
    12.5.2 Como compilar os testes HttpUnit - 479
    12.5.3 Como rodar os testes HttpUnit - 480
    12.6 Resumo - 481
    CAPÍTULO 13 - Como trabalhar com XML - 483
    13.1 Informação de base: bibliotecas de processamento XML - 484
    13.2 Como escrever um XML - 485
    13.3 Como validar um XML - 488
    13.3.1 Como validar documentos usando arquivos DTD - 490
    13.3.2 Como validar documentos com Esquema XML - 493
    13.3.3 Como validar documentos RelaxNG - 497
    13.4 Como ler dados de um XML - 500
    13.5 Como transformar XML com XSLT - 502
    13.5.1 Como definir a estrutura do arquivo de constantes - 504
    13.5.2 Como criar o arquivo de constantes - 504
    13.5.3 Como criar folhas de estilo XSL - 505
    13.5.4 Como inicializar o arquivo de construção - 509
    13.6 Resumo - 513
    CAPÍTULO 14 - Java Corporativo - 515
    14.1 Como evoluir a aplicação de agenda - 516
    14.2 Como criar uma aplicação Corporativa - 518
    14.3 Como criar os beans - 520
    14.3.1 Como compilar classes Java EE anotadas - 522
    14.3.2 Como adicionar um session bean - 524
    14.4 Como estender a aplicação web - 527
    14.5 Como construir a aplicação Corporativa - 530
    14.6 Como implantar no servidor de aplicações - 536
    14.7 Teste de lado do servidor com o Apache Cactus - 537
    14.7.1 Como escrever um teste Cactus - 538
    14.7.2 Como construir testes Cactus - 539
    14.7.3 As tarefas Cactus do Ant - 540
    14.7.4 Como adicionar o Cactus a um arquivo EAR - 542
    14.7.5 Como rodar testes Cactus - 543
    14.7.6 Como diagnosticar problemas de implantação de EJB - 545
    14.8 Resumo - 546
    CAPÍTULO 15 - Integração contínua - 549
    15.1 Introdução à integração contínua - 550
    15.1.1 O que você precisa para a integração contínua? - 554
    15.2 Luntbuild - 555
    15.2.1 Como instalar a Luntbuild - 557
    15.2.2 Como rodar a Luntbuild - 558
    15.2.3 Como configurar a Luntbuild - 559
    15.2.4 Luntbuild em ação - 567
    15.2.5 Análise da Luntbuild - 569
    15.3 Como mudar para integração contínua - 570
    15.4 Resumo - 573
    CAPÍTULO 16 – Implantação - 575
    16.1 Como sobreviver à implantação - 576
    16.2 Como implantar com o Ant - 581
    16.3 Configuração de banco de dados no Ant - 582
    16.3.1 Como criar e configurar um banco de dados a partir do Ant - 583
    16.3.2 Como emitir comandos de administração de banco de dados - 585
    16.4 Como implantar com a SmartFrog - 587
    16.4.1 SmartFrog: uma nova maneira de pensar sobre implantação - 587
    16.4.2 Os conceitos em mais detalhes - 590
    16.4.3 Os componentes SmartFrog - 601
    16.5 Como usar a SmartFrog com o Ant - 603
    16.5.1 Como implantar com a SmartFrog - 605
    16.5.2 Como implantar com a tarefa - 612
    16.5.3 Resumo da SmartFrog - 615
    16.6 Abraçando a implantação - 616
    16.7 Resumo - 619
    PARTE 3 - Estendendo o Ant - 621
    CAPÍTULO 17 - Como escrever tarefas do Ant - 623
    17.1 O que exatamente é uma tarefa do Ant? - 624
    17.1.1 A vida de uma tarefa - 626
    17.2 Introdução a API Java do Ant - 627
    17.2.1 As classes utilitárias do Ant - 635
    17.3 Uma tarefa útil: - 637
    17.3.1 Escrevendo a tarefa - 637
    17.3.2 Como o Ant configura as tarefas - 640
    17.3.3 Configurando a tarefa - 643
    17.4 Como testar tarefas com a AntUnit - 644
    17.4.1 Como usar a AntUnit - 644
    17.4.2 Como testar a tarefa - 647
    17.4.3 Como rodar os testes - 649
    17.5 Mais atributos de tarefa - 651
    17.5.1 Enumerações - 652
    17.5.2 Tipos definidos pelo usuário - 654
    17.6 Como suportar elementos aninhados - 655
    17.7 Como trabalhar com recursos - 658
    17.7.1 Como usar uma tarefa habilitada para recurso - 661
    17.8 Como delegar para outras tarefas - 663
    17.8.1 Como definir classpaths em uma tarefa - 665
    17.9 Outras técnicas de tarefa - 671
    17.10 Como criar uma biblioteca Antlib - 673
    17.11 Resumo - 678
    CAPÍTULO 18 - Estendendo o Ant mais além - 681
    18.1 Como utilizar script dentro do Ant - 682
    18.1.1 Como escrever novas tarefas com a - 685
    18.1.2 Resumo sobre script - 690
    18.2 Condições - 690
    18.2.1 Como escrever uma tarefa condicional - 694
    18.3 Como escrever um recurso customizado - 696
    18.3.1 Como usar um recurso customizado - 699
    18.3.2 Como os tipos de dados do Ant tratam as referências - 700
    18.4 Selecionadores - 701
    18.4.1 Selecionadores com script - 703
    18.5 Como desenvolver um mapeador customizado - 704
    18.6 Como implementar um filtro customizado - 706
    18.7 Como tratar a entrada e saída do Ant - 710
    18.7.1 Como escrever um escutador customizado - 712
    18.7.2 Como escrever um responsável pelo log customizado - 717
    18.7.3 Como usar os responsáveis pelo log e os escutadores - 720
    18.7.4 Como tratar entrada do usuário com um InputHandler - 721
    18.8 Como embutir o Ant - 722
    18.9 Resumo - 725
    APÊNDICE A – Instalação - 727
    Antes de começar - 727
    Os passos para instalar o Ant - 728
    Configurando o Ant no Windows - 728
    Configurando o Ant no Unix - 730
    Configuração de instalação - 732
    ANT_OPTS - 732
    ANT_ARGS - 733
    Solucionando problemas de instalação - 733
    APÊNDICE B - Introdução ao XML - 739
    Espaços de nomes do XML - 745
    APÊNDICE C - Integração ao IDE- 749
    Como os IDEs usam o Ant - 749
    O Eclipse http://www.eclipse.org/ - 751
    O NetBeans, da Sun http:// www.netbeans.org/ - 760
    O IntelliJ IDEA http://intellij.com/ - 764
    Construindo com o Ant e um IDE - 769
    ÍNDICE - 771

    Informações Técnicas

    Nº de páginas:824
    Origem:Importado
    Editora:Editora Ciência Moderna
    Idioma:Português
    Edição:1ª Edição
    Ano:2009
    ISBN:9788573938128
    Encadernação:Brochura
    Autor:Steve Loughran, Erik Hatcher,
  • Informações

Avaliação técnica sobre o livro

Olá! Seja Bem Vindo (a)!

Eu sou o Moderninho , o Mascote da Ciência Moderna Online!
Além de bonito, o novo site tem Minhas Dicas :) #ficaadica

A 1ª Dica é -> Deixe aqui seu contato para receber nossas
NOVIDADES, PROMOÇÕES E CUPONS DE DESCONTOS ;)

Navegue SEM Moderação!