O documento apresenta uma palestra sobre arquitetura de software no evento .NET Architects Days 2013. A palestra aborda tópicos como machine learning, arquitetura RESTful, desempenho de APIs, testes, acessibilidade, programação concorrente e funcional.
4. Agenda
Um Case de Machine Learning
Implementando RESTful SOA com DDD
Construindo uma API de dados esportivos que responde a 6000 req/s
Sobre o DNAD2013
Encerramento
O que aprendi em 5 anos de pesquisa em TDD?
Desenvolvendo aplicações acessíveis na plataforma .NET
Survey sobre Programação Concorrente com .NET
CQRS aplicado para construção de aplicações de alto desempenho usando Windows Azure
Painel de Programação Funcional
Arquitetura evolutiva na prática
5. .NET Architects Days 2013
• MAIOR evento de arquitetura de software do Brasil
• Sem fins lucrativos
• Assuntos técnicos, conceituais, práticos e acadêmicos
• Interessados na melhoria da qualidade e produtividade em software
• NÃO limita-se ao framework .NET ou a tecnologias Microsoft
6. Disclaimer
AS INFORMAÇÕES E OPINÕES EXPRESSAS NESTA APRESENTAÇÃO SÃO DE
RESPONSABILIDADE DO PRÓPRIO AUTOR. EM MOMENTO E DE MANEIRA ALGUMA
PRETENDE-SE QUE AS INFORMAÇÕES PRESENTES NESTES SLIDES SEJAM CONSIDERADAS
DE RESPONSABILIDADE OU OPNIÕES DIRETAS DE UM OU MAIS PALESTRANTES DO
DNAD2013. ESTA APRESENTAÇÃO FOI FEITA COM O INTUITO DE COMPARTILHAR O
CONHECIMENTO E EXPERIÊNCIA QUE PUDE TER NO DNAD2013.
7. Um Case de Machine Learning
Por Guilherme Silveira
• Métodos
• Regressão linear
• Polinômios
• Demais funções
• Algoritmos de Classificação
• Capacidade de Evolução (treino)
• Quantos mais dados, melhor a
solução
• Algoritmo para solução de
problemas
• Previsibilidade de resultados
• Probabilidades e Estatísticas
• Margens de erro
• Redes neurais
8. Um Case de Machine Learning
Possíveis perguntas para um robô:
• Estou pagando um preço justo por
este produto?
• Qual seria o valor justo
(estimativa)?
• O e-mail é spam?
• Essa movimentação é uma fraude?
• Qual a nota o aluno vai tirar na
prova final?
• Quanto tempo os alunos
precisarão para esta prova?
• Como algum dado se agrupa?
9. Implementando RESTful SOA com DDD
Por Daniel Moreira Yokoyama
Behavior-centric
Data-centric
?
REST
DDD
10. Implementando RESTful SOA com DDD
Domain-Driven Design
• Pareamento entre negócio, modelo e
código
• NÃO é apenas o uso de building blocks
• Modelagem estratégica
• Bounded Contexts
• Context Map
• Anti-Corruption Layer
• Open Host Service
• Published Language
APIs RESTful
HTTP Method URL
GET /api/products
GET /api/products/1
POST /api/products
PUT /api/products/1
DELETE /api/products/1
11. Construindo uma API de dados esportivos que
responde a 6000 req/s
Por Rafael Martins
12. NGINX
Sobre
O Nginx é um servidor web rápido, leve, e
com inúmeras possibilidades de configuração
para melhoria performance
• Consome menos memória que o Apache,
pois é “event-based web server” ao invés
de “process-based server”
• Pode trabalhar junto com o Apache
• Considerado o maior servidor HTTP,
responsável por 12,81% dos servidores
de HTTP e IMAP/POP3 (Netcraft/2013)
Quem usa NGINX?
• Dropbox
• Netflix
• Facebook
• Netflix
• SourceForge
• Groupon
• TED
• Instagram
• Intel
• Wordpress ...
13. Considerações sobre APIs
Consistência
• Seu cliente é um desenvolvedor
• Dados consistentes
• Informações claras
• Boa documentação
Performance
• Escalabilidade
• Tamanho e quantidade de
arquivos
• Set mínimo e set máximo
• Cache
• Expiração ativa (remover vínculo
entre tabelas) - NoSql
• Consulta em memória
14. Arquitetura evolutiva na prática
Por Denis Ferrari
Questões:
• O que fazer?
• Quando fazer?
• Em que ordem fazer?
• Qualidade de um projeto =
• Qualidade dos seus programadores
• Não quantidade de programadores
• Arquitetura tem seu momento
• Keep It Simple, Stup#@!
• Domain-Driven Design
• Permitir que evolua
15. O que aprendi em 5 anos de pesquisa em TDD?
Por Mauricio Aniche
“Dizem que TDD melhora o design
de um software. Mas como ele faz
isso? Como acontece a sua ’magia’?”
Mantra
16. Respostas e Conclusões
"TDD dá retorno constante sobre os
possíveis problemas existentes no
atual projeto de classes. É tarefa do
desenvolvedor perceber esses
problemas e melhorar o projeto de
acordo."
"Se está difícil testar, é porque,
provavelmente, há um problema de
projeto ou implementação em se
código."
“O segredo é perceber, o mais
rápido possível, o momento em que
escrever o teste passou a ser uma
tarefa difícil.”
Mauricio Aniche
17. Desenvolvendo aplicações acessíveis na plataforma .NET
Por Alexandre Santos Costa
“Uma aplicação acessível é aquela
que atende o maior tipo de
limitações físicas e intelectuais”
Alguns Recursos
• Leitores de tela
• Ampliadores de tela
• Alto contraste
• Teclado virtual
18. Desenvolvendo aplicações acessíveis na plataforma .NET
Desenvolvimento
Web standards
Semântica
ARIA
(Accessible Rich Internet Application)
Interações
Teclado SIM
Mouse NÃO para deficientes visuais
Informações
• Nome
• Valor
• Estado
• Comportamento (roles)
• Descrição imagens
Problema
Áreas dinâmicas
19. Checklist de Acessibilidade
Etiquetar todos elementos
Navegação por teclados
Esquema de cores
Verificação com leitores de tela
20. Desenvolvendo aplicações acessíveis na plataforma .NET
“Para uma pessoa sem deficiência a
tecnologia tornaram as coisas fáceis.
Para uma pessoa com deficiência
torna as coisas possíveis.”
Mary Pat, IBM
21. Survey sobre Programação Concorrente com .NET
Por Fabio Galuppo Ideias
• Era dos multicores
• Novos dispositivos
• Economia de energia
• Cloud computing
• Abstrações do paralelismo
(frameworks)
22. CQRS aplicado para construção de aplicações de
alto desempenho usando Windows Azure
Por Elemar Junior
Command-query Separation (CQS)
(Bertrand Meyer)
• Command – Mudando o estado do objeto
que o define, mas não retornando valor
algum (métodos void);
• Query – Retornando o resultado de algum
processamento, mas não alterando o
estado do objeto que o define (no side-
effects)
CQRS: Visão Geral
23. Command-query Responsability Segregation
Quando é aplicável?
Em domínios colaborativos:
• Conjunto amplo de agentes
(usuários);
• Pequeno (proporcionalmente)
conjunto de dados;
• Onde o bloqueio de dados é
necessário (concorrência);
• Bloqueio de usuários não é
necessário e/ou possível.
Ideias
• Novos dispositivos
• Renderização no cliente, mas
lógica mínima no cliente
Tecnologias
• MongoDb (NoSql)
• Lucene (Indexação de busca)
• Windows Azure
24. CQRS aplicado para construção de aplicações de
alto desempenho usando Windows Azure
25. Painel de Programação Funcional
Participantes
• Elemar Jr.
• Fabio Galuppo
• Pedro Teixeira
• Vinicius Hana
• Plínio Balduino
• Rodrigo Vidal
Algumas linguagens funcionais
26. Painel de Programação Funcional
Linguagens Funcionais
• Retornam funções ao invés de
valores
• Linq e Lambda são exemplos de
paradigma funcional no C#
• Paradigmas de programação:
• Programação estruturada
• Programação orientada a objetos
• Programação funcional
• Linguagens multiparadigma
Dica
“Um bom programador não precisa
conhecer várias linguagens,
mas sim conhecer diversos
paradigmas de programação”
28. Algumas conclusões pessoas & dicas
É importante aprender sobre qualidade e padrões (DDD, TDD, CQRS...)
Mas não se limitar ou prender-se a estes padrões
Conhecer outros paradigmas de programação (aka linguagens funcionais)
Aprender como seu software utiliza seu hardware
29. Obrigado!
“Para cultivar a sabedoria, é preciso força
interior. Sem crescimento interno, é difícil
conquistar a autoconfiança e a coragem
necessárias. Sem elas, nossa vida se
complica. O impossível torna-se possível
com a força de vontade.”
Dalai Lama