O documento resume uma apresentação sobre programação funcional usando C#. Apresenta conceitos como value containers e como lidar com resultados e erros de forma funcional usando tipos como Option e Either. Demonstra como refatorar código imperativo para um estilo mais funcional com esses tipos.
O documento apresenta uma palestra sobre programação funcional e refatoração de código usando abordagens funcionais. A palestra discute como o paradigma funcional pode ajudar a resolver problemas comuns como null exceptions, apresenta conceitos como value containers e high order functions, e mostra como refatorar uma função de atualização de usuário usando esses conceitos para melhor tratar erros e encadear operações.
TDC 2012 TDD e 20 coisas que você precisa saberCamilo Lopes
[1] O documento discute TDD (Test Driven Development) e fornece 20 lições aprendidas sobre TDD. [2] Apresenta Camilo Lopes, o palestrante, e seu background com desenvolvimento ágil. [3] Explica os benefícios de TDD como melhor qualidade de código, estimativas mais precisas e entregas mais rápidas.
O documento discute princípios de código limpo, incluindo: 1) tratar erros com exceções em vez de códigos de retorno; 2) limitar dependências de código de terceiros; 3) escrever testes de unidade limpos e automatizados para guiar o desenvolvimento. Ele também aborda tópicos como classes pequenas com responsabilidade única, separação de construção e uso de sistemas, e refinamento contínuo aplicando boas práticas.
O documento discute conceitos de qualidade de código como sistemas legados, refatoração, bad smells, nomenclatura, comentários, métodos, testes e métricas. A palestrante Gisele Zomer Rossi fala sobre como melhorar a estrutura e legibilidade do código através de refatorações.
O documento discute testes unitários, apresentando suas vantagens, ferramentas como JUnit e Mockito, padrões para escrever testes e técnicas como TDD. É explicado o que são mocks e como eles se comportam, além de boas práticas como escrever testes para código legado.
O lançamento do Visual Studio 2015 veio acompanhado, aliás, muito bem acompanhado, pelo C#6! Com isso temos vários recursos novos para auxiliar o desenvolvimento e deixar a linguagem bem mais completa, além de ser compilado em Roslyn que é feito em C#, deixando a compilação mais performática, ele veio com várias novidades que serão abordadas nessa apresentação.
O documento apresenta uma palestra sobre programação funcional e refatoração de código usando abordagens funcionais. A palestra discute como o paradigma funcional pode ajudar a resolver problemas comuns como null exceptions, apresenta conceitos como value containers e high order functions, e mostra como refatorar uma função de atualização de usuário usando esses conceitos para melhor tratar erros e encadear operações.
TDC 2012 TDD e 20 coisas que você precisa saberCamilo Lopes
[1] O documento discute TDD (Test Driven Development) e fornece 20 lições aprendidas sobre TDD. [2] Apresenta Camilo Lopes, o palestrante, e seu background com desenvolvimento ágil. [3] Explica os benefícios de TDD como melhor qualidade de código, estimativas mais precisas e entregas mais rápidas.
O documento discute princípios de código limpo, incluindo: 1) tratar erros com exceções em vez de códigos de retorno; 2) limitar dependências de código de terceiros; 3) escrever testes de unidade limpos e automatizados para guiar o desenvolvimento. Ele também aborda tópicos como classes pequenas com responsabilidade única, separação de construção e uso de sistemas, e refinamento contínuo aplicando boas práticas.
O documento discute conceitos de qualidade de código como sistemas legados, refatoração, bad smells, nomenclatura, comentários, métodos, testes e métricas. A palestrante Gisele Zomer Rossi fala sobre como melhorar a estrutura e legibilidade do código através de refatorações.
O documento discute testes unitários, apresentando suas vantagens, ferramentas como JUnit e Mockito, padrões para escrever testes e técnicas como TDD. É explicado o que são mocks e como eles se comportam, além de boas práticas como escrever testes para código legado.
O lançamento do Visual Studio 2015 veio acompanhado, aliás, muito bem acompanhado, pelo C#6! Com isso temos vários recursos novos para auxiliar o desenvolvimento e deixar a linguagem bem mais completa, além de ser compilado em Roslyn que é feito em C#, deixando a compilação mais performática, ele veio com várias novidades que serão abordadas nessa apresentação.
O documento apresenta as principais novidades do C# 6, incluindo using static, auto-property initializers, expression-bodied members, null-conditional operator, string interpolation, exception filters e operador nameof. O palestrante também discute chamadas assíncronas em blocos try-catch-finally e demonstra essas funcionalidades comparando códigos com e sem o C# 6.
O documento discute o dilema entre focar na qualidade do código versus entregar novas funcionalidades rapidamente. Ele argumenta que é melhor não diminuir a qualidade para atender prazos, e sim buscar qualidade para maior produtividade no longo prazo. Técnicas como pair programming, TDD, refactoring, testes automatizados e código limpo ajudam a manter boa qualidade.
O documento apresenta uma introdução sobre a complexidade cognitiva, medida de qualidade de software que avalia a dificuldade de entendimento de código. Ele define a complexidade cognitiva, compara-a com a complexidade ciclomática e fornece um exemplo prático de cálculo. O documento também discute a metodologia de cálculo da complexidade cognitiva e suas vantagens em relação à complexidade ciclomática.
O documento discute princípios de clean code em C#, incluindo nomes significativos, métodos simples, baixo acoplamento entre classes e redução de duplicação de código. O Visual Studio fornece ferramentas como Code Metrics para medir a qualidade do código e identificar áreas que precisam de refatoração.
Refinamento e boas práticas de programaçãoAécio Costa
O documento discute princípios de programação limpa e boas práticas, incluindo: (1) usar nomes significativos e distintos, (2) manter funções pequenas e focadas, (3) evitar repetição de código, e (4) usar objetos de forma eficiente para melhorar o desempenho. O objetivo é produzir código que seja fácil de ler, modificar e depurar.
Page Object para Testers - The Developers Conference 2017Katiana Maia
O documento discute Page Object para testes, apresentando suas vantagens como encapsulamento, manutenção e seguimento do princípio DRY. Explica como Page Objects organizam os elementos de página e validações de teste separadamente, melhorando a manutenção e permitindo mudanças de requisitos. Demonstra um exemplo básico de teste usando Page Objects para pesquisar no Google.
Este documento apresenta conceitos de código limpo em exemplos de código. Apresenta 4 partes: 1) Filosofia, 2) Teoria, 3) Prática com exemplos de código, 4) Laboratório de refatoração. Fornece conceitos como DDD, SRP, DRY, testes, refatoração e regras de simplicidade aplicados a exemplos de código.
Como melhoramos a performance dos testes automatizados com py.test e factoryboyLeonardo Galani
O documento discute como a equipe melhorou os testes automatizados usando py.test e factoryboy. Inicialmente, os testes eram desenvolvidos separadamente da equipe de desenvolvimento e erros só eram encontrados no Jenkins. Posteriormente, a equipe adotou py.test e factoryboy para gerar dados de teste e dependências de forma dinâmica, permitindo testes mais completos e integrados ao desenvolvimento. Isso melhorou a qualidade dos testes e facilitou a adoção de padrões de teste na equipe.
O documento discute a importância da refatoração de código para mantê-lo limpo, de fácil manutenção e entendimento. Apresenta conceitos como Clean Code, Object Calisthenics, princípios SOLID e padrões de projeto que auxiliam na refatoração, além de discutir técnicas como identificar código que precisa ser refatorado, manter a interface inalterada e testar durante o processo.
As três frases resumem o documento da seguinte forma:
O documento apresenta um resumo de uma palestra sobre código limpo com 17 tópicos, desde nomes significativos até refatoração. A palestra é organizada em 42 slides e será apresentada pelo desenvolvedor Douglas Siviotti com o objetivo de ensinar conceitos de qualidade de software.
O documento discute a Lei de Demeter, que estabelece que objetos só devem se comunicar com objetos próximos ou relacionados. A lei ajuda a criar sistemas com menor acoplamento e dependência, tornando-os mais fáceis de manter e evoluir. Um exemplo mostra como violar a lei, ao acessar atributos de objetos "estranhos", pode criar fragilidades no código.
5 coisas que você deve evitar em sua estratégia de testes automatizados - TDC...Samuel Lucas
O documento lista 5 coisas que devem ser evitadas em uma estratégia de testes automatizados: 1) automatizar cenários desnecessários, 2) automatizar e ninguém usar, 3) automatizar demais ou além do que o time possa dar manutenção, 4) automatizar sem um norte, 5) automatizar o teste mas não automatizar a execução. O autor enfatiza a importância de priorizar cenários relevantes para o negócio e entender quem irá usar os artefatos da automação.
O documento discute padrões de projeto de software, incluindo o Gang of Four que descreveu 23 padrões. Ele explica brevemente cinco padrões: template method, strategy, observer, singleton e iterator.
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...Joberto Diniz
1) O documento discute a importância do Código Limpo nas perspectivas dos desenvolvedores e empresas de software, destacando técnicas como nomes significativos, princípios SOLID e testes unitários.
2) É enfatizado que códigos ruins podem custar caro às empresas em termos de bugs e baixa produtividade, enquanto códigos limpos promovem sistemas robustos e de fácil manutenção.
3) Um experimento é apresentado para analisar estatisticamente as vantagens do Código Limpo em comp
A nossa linguagem preferida evolui e o nosso código deve então seguir o mesmo passo. PHP 7 oferece novas funcionalidades que permitem simplificar, melhorar e aumentar o desempenho do seu código. Nessa palestra, apresentarei os conceitos SOLID e Object Calisthenics e como aplica-los e combina-los com as novas funcionalidades dessa sétima versão. Nossa atualização deve ser constante e do nosso código também.
Boas práticas técnica para um código limpo (Clean Code)Rodrigo Kono
Este documento discute boas práticas para criar códigos limpos e de alta qualidade, focando em tópicos como nomes significativos, funções pequenas que fazem uma coisa só, comentários úteis, formatação consistente e tratamento de erros usando exceções. O objetivo é produzir códigos eficientes, de fácil manutenção e entendimento.
TDC - [Cuidado] Pareando dados com o uso de ferramentas pairwise - SP/2017Fernando Santiago
Pairwise é um método conhecido por diminuir consideravelmente a quantidade de testes quando se necessita testar a combinação de muitas variáveis, permitindo reduzir drasticamente a quantidade de casos de teste requeridos como cobertura. Vamos falar sobre o uso dessas ferramentas, suas inúmeras formas de utilização e principalmente cenários impróprios, quando a não utilização de uma ferramenta de pairwise se torna o melhor caminho para garantir uma cobertura de testes sustentável.
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPRodrigo Dos Santos
O documento discute princípios de programação procedural versus programação orientada a objetos. Ele enfatiza a importância de separar as responsabilidades do código através de modelagem, uso de padrões e testes para produzir software de melhor qualidade e mais fácil de manter.
Nesta palestra mostrei os problemas das exceções e do gerenciamento de erros e validações em aplicação de modo geral. Introduzindo um conceito de railway simples em C#, criando uma espécie de promise para o .NET.
O documento apresenta as principais novidades do C# 6, incluindo using static, auto-property initializers, expression-bodied members, null-conditional operator, string interpolation, exception filters e operador nameof. O palestrante também discute chamadas assíncronas em blocos try-catch-finally e demonstra essas funcionalidades comparando códigos com e sem o C# 6.
O documento discute o dilema entre focar na qualidade do código versus entregar novas funcionalidades rapidamente. Ele argumenta que é melhor não diminuir a qualidade para atender prazos, e sim buscar qualidade para maior produtividade no longo prazo. Técnicas como pair programming, TDD, refactoring, testes automatizados e código limpo ajudam a manter boa qualidade.
O documento apresenta uma introdução sobre a complexidade cognitiva, medida de qualidade de software que avalia a dificuldade de entendimento de código. Ele define a complexidade cognitiva, compara-a com a complexidade ciclomática e fornece um exemplo prático de cálculo. O documento também discute a metodologia de cálculo da complexidade cognitiva e suas vantagens em relação à complexidade ciclomática.
O documento discute princípios de clean code em C#, incluindo nomes significativos, métodos simples, baixo acoplamento entre classes e redução de duplicação de código. O Visual Studio fornece ferramentas como Code Metrics para medir a qualidade do código e identificar áreas que precisam de refatoração.
Refinamento e boas práticas de programaçãoAécio Costa
O documento discute princípios de programação limpa e boas práticas, incluindo: (1) usar nomes significativos e distintos, (2) manter funções pequenas e focadas, (3) evitar repetição de código, e (4) usar objetos de forma eficiente para melhorar o desempenho. O objetivo é produzir código que seja fácil de ler, modificar e depurar.
Page Object para Testers - The Developers Conference 2017Katiana Maia
O documento discute Page Object para testes, apresentando suas vantagens como encapsulamento, manutenção e seguimento do princípio DRY. Explica como Page Objects organizam os elementos de página e validações de teste separadamente, melhorando a manutenção e permitindo mudanças de requisitos. Demonstra um exemplo básico de teste usando Page Objects para pesquisar no Google.
Este documento apresenta conceitos de código limpo em exemplos de código. Apresenta 4 partes: 1) Filosofia, 2) Teoria, 3) Prática com exemplos de código, 4) Laboratório de refatoração. Fornece conceitos como DDD, SRP, DRY, testes, refatoração e regras de simplicidade aplicados a exemplos de código.
Como melhoramos a performance dos testes automatizados com py.test e factoryboyLeonardo Galani
O documento discute como a equipe melhorou os testes automatizados usando py.test e factoryboy. Inicialmente, os testes eram desenvolvidos separadamente da equipe de desenvolvimento e erros só eram encontrados no Jenkins. Posteriormente, a equipe adotou py.test e factoryboy para gerar dados de teste e dependências de forma dinâmica, permitindo testes mais completos e integrados ao desenvolvimento. Isso melhorou a qualidade dos testes e facilitou a adoção de padrões de teste na equipe.
O documento discute a importância da refatoração de código para mantê-lo limpo, de fácil manutenção e entendimento. Apresenta conceitos como Clean Code, Object Calisthenics, princípios SOLID e padrões de projeto que auxiliam na refatoração, além de discutir técnicas como identificar código que precisa ser refatorado, manter a interface inalterada e testar durante o processo.
As três frases resumem o documento da seguinte forma:
O documento apresenta um resumo de uma palestra sobre código limpo com 17 tópicos, desde nomes significativos até refatoração. A palestra é organizada em 42 slides e será apresentada pelo desenvolvedor Douglas Siviotti com o objetivo de ensinar conceitos de qualidade de software.
O documento discute a Lei de Demeter, que estabelece que objetos só devem se comunicar com objetos próximos ou relacionados. A lei ajuda a criar sistemas com menor acoplamento e dependência, tornando-os mais fáceis de manter e evoluir. Um exemplo mostra como violar a lei, ao acessar atributos de objetos "estranhos", pode criar fragilidades no código.
5 coisas que você deve evitar em sua estratégia de testes automatizados - TDC...Samuel Lucas
O documento lista 5 coisas que devem ser evitadas em uma estratégia de testes automatizados: 1) automatizar cenários desnecessários, 2) automatizar e ninguém usar, 3) automatizar demais ou além do que o time possa dar manutenção, 4) automatizar sem um norte, 5) automatizar o teste mas não automatizar a execução. O autor enfatiza a importância de priorizar cenários relevantes para o negócio e entender quem irá usar os artefatos da automação.
O documento discute padrões de projeto de software, incluindo o Gang of Four que descreveu 23 padrões. Ele explica brevemente cinco padrões: template method, strategy, observer, singleton e iterator.
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...Joberto Diniz
1) O documento discute a importância do Código Limpo nas perspectivas dos desenvolvedores e empresas de software, destacando técnicas como nomes significativos, princípios SOLID e testes unitários.
2) É enfatizado que códigos ruins podem custar caro às empresas em termos de bugs e baixa produtividade, enquanto códigos limpos promovem sistemas robustos e de fácil manutenção.
3) Um experimento é apresentado para analisar estatisticamente as vantagens do Código Limpo em comp
A nossa linguagem preferida evolui e o nosso código deve então seguir o mesmo passo. PHP 7 oferece novas funcionalidades que permitem simplificar, melhorar e aumentar o desempenho do seu código. Nessa palestra, apresentarei os conceitos SOLID e Object Calisthenics e como aplica-los e combina-los com as novas funcionalidades dessa sétima versão. Nossa atualização deve ser constante e do nosso código também.
Boas práticas técnica para um código limpo (Clean Code)Rodrigo Kono
Este documento discute boas práticas para criar códigos limpos e de alta qualidade, focando em tópicos como nomes significativos, funções pequenas que fazem uma coisa só, comentários úteis, formatação consistente e tratamento de erros usando exceções. O objetivo é produzir códigos eficientes, de fácil manutenção e entendimento.
TDC - [Cuidado] Pareando dados com o uso de ferramentas pairwise - SP/2017Fernando Santiago
Pairwise é um método conhecido por diminuir consideravelmente a quantidade de testes quando se necessita testar a combinação de muitas variáveis, permitindo reduzir drasticamente a quantidade de casos de teste requeridos como cobertura. Vamos falar sobre o uso dessas ferramentas, suas inúmeras formas de utilização e principalmente cenários impróprios, quando a não utilização de uma ferramenta de pairwise se torna o melhor caminho para garantir uma cobertura de testes sustentável.
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPRodrigo Dos Santos
O documento discute princípios de programação procedural versus programação orientada a objetos. Ele enfatiza a importância de separar as responsabilidades do código através de modelagem, uso de padrões e testes para produzir software de melhor qualidade e mais fácil de manter.
Nesta palestra mostrei os problemas das exceções e do gerenciamento de erros e validações em aplicação de modo geral. Introduzindo um conceito de railway simples em C#, criando uma espécie de promise para o .NET.
TDC2016POA | Trilha .NET - O que esperar do C# 7tdc-globalcode
O documento resume as principais novidades do C# 7, incluindo melhorias no desempenho, simplificação de código e consumo de dados. As principais features apresentadas são pattern matching, tuples, desconstruction, local functions, ref return e locals e out var.
O documento apresenta os principais conceitos da programação funcional usando a linguagem F#, como imutabilidade, funções como valores, composição de funções, type providers e features como Option e unidades de medida. O objetivo é mostrar como F# oferece um paradigma diferente de programação e como seus recursos podem ser usados no desenvolvimento .NET.
O documento apresenta os principais conceitos da programação funcional usando a linguagem F#, como imutabilidade, funções como valores, tipos fortemente tipados, pipelines e composição. O palestrante destaca recursos da linguagem como Option, unidades de medida e type providers para carregar dados dinamicamente.
O documento discute as vantagens do Java Server Faces (JSF) para desenvolvimento de interfaces web. O JSF permite a divisão de responsabilidades entre modelo, visão e controle através do padrão MVC, facilitando a manutenção e organização do código. Ele também suporta integração com diversas tecnologias como CSS, JavaScript e Ajax, além de recursos como validação de dados, conversão e recuperação de objetos.
O documento apresenta uma introdução sobre inteligência artificial e machine learning, discutindo o que são essas tecnologias e como elas podem ser usadas. Ele também descreve as três principais etapas do processo de machine learning - pré-processamento, treinamento e avaliação - e apresenta o Custom Vision como uma plataforma que facilita a criação de modelos de classificação de imagens.
O documento discute a API Roslyn do .NET, que permite o acesso ao pipeline de compilação do C# e VB.NET. Isso torna possível implementar ferramentas de código como syntax highlighting, intellisense e refactoring sem precisar reimplementar a análise sintática e semântica. A API Roslyn também permite a geração e análise de código em tempo de execução, facilitando o desenvolvimento de ferramentas de software.
Construir aplicativos para web é uma das principais demandas do mercado. O Java EE define uma série de componentes para essa área, um deles é o JavaServer Faces (JSF). O JSF é um framework que adota o modelo de arquitetura MVC (Model View Controller), com o objetivo de aumentar a produtividade da construção de interfaces gráficas web baseadas em templates e disponibilizando um conjunto de componentes visuais reutilizáveis. Os componentes visuais do JSF encapsulam a escrita de código HTML, CSS e JavaScript, muitos delessuportam Ajax. Outra caracteristica importante do JSF é permitir o uso de bibliotecas de componentes visuais fornecidas por terceiros, trazendo mais opções de escolha aos desenvolvedores. Esta apresentação descreverá como o JSF pode ser uma tecnologia interessante para o desenvolvimento de aplicações web com Java EE.
O documento apresenta o Spring Roo, uma ferramenta RAD para criação de aplicações Java. O Spring Roo aumenta a produtividade, elimina burocracia de projetos Java, e gera código de qualidade adotando padrões da comunidade Java. Ele permite criar rapidamente um projeto com estrutura de pastas, configuração do Maven, definição da camada de persistência e geração de entidades, atributos e controladores.
O documento discute as diferenças entre as linguagens de programação F# e C#. Ele explica que F# foi desenvolvido pela Microsoft Research para ser funcional em primeiro lugar e ter tipos algébricos, ao contrário de C# que tem raízes em C e é orientado a objetos. Ele também destaca que F# tem inferência de tipos, composição funcional e imutabilidade como padrão.
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Jonathan Prates
O documento discute a migração da plataforma de vídeos da Terra Networks de C# e Oracle para Python e MongoDB. Apresenta os desafios enfrentados como sincronizar as bases de dados, manter ou não as mesmas entidades e garantir que os dados sejam iguais, além de tratar de atualizações, ambientes limpos e deploy. Explica como essas questões foram resolvidas utilizando ferramentas como serviços de mensageria, drivers para MongoDB, virtualenv e integração contínua.
[TDCPOA2018] Desmistificando a eXtreme Programming para desenvolvedores "não ...Vinicius Campos Silva
Nossos desenvolvedores conhecem práticas ágeis propostas por eXtreme Programming? Se sim, eles estão realmente aplicando-as de forma que os ajudem a entregar software de valor? Caso contrário, os desenvolvedores estão desacreditados quanto a agilidade? O Scrum team sendo responsável pela qualidade técnica do que está sendo entregue para o cliente, pode e deve utilizar práticas da eXtreme Programming para obter melhores resultados!
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesSandro Giacomozzi
O documento discute a importância de se construir uma arquitetura de testes para garantir a qualidade e velocidade de entrega de software. Ele apresenta boas práticas de testes como a utilização de frameworks como JUnit, estrutura de pastas e nomenclatura de testes. Além disso, exemplifica testes de unidade, integração e integração com mock utilizando ferramentas como Spring Boot Test, RestAssured e MockServer.
Jorge Oleques é um desenvolvedor de software com experiência em PHP e Java. Ele possui graduação em Análise e Desenvolvimento de Sistemas e está cursando pós-graduação em Engenharia de Software. O documento fornece detalhes sobre sua formação acadêmica e experiência profissional, além de contatos como e-mail, Twitter, blog e GitHub.
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...Bruno Tanoue
Este documento discute testes e ambientes de integração contínua para desenvolvimento ágil em PHP. Ele apresenta a pirâmide de testes, explica testes de unidade isolados versus colaborativos, e discute otimizações para execução de testes e configuração de ambientes de integração contínua usando ferramentas como Jenkins.
1) O documento discute técnicas de machine learning (ML) e análise de dados, apresentando dois exemplos de aplicação: monitoramento de atletas e análise de aprendizagem (learning analytics) em cursos a distância.
2) Ferramentas como Spark MLlib, Weka e Orange são apresentadas para modelagem de ML.
3) Resultados de um caso real de predição de conclusão de curso a distância usando ML são mostrados.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Sergio Lima
O documento introduz o framework JavaScript StimulusJS e discute como ele pode ser usado com Ruby on Rails. O palestrante descreve sua experiência usando StimulusJS em artigos e projetos, explica o que é StimulusJS e seus benefícios, como funciona usando o padrão Controller-Target-Action, e demonstra sua implementação em um projeto Rails.
O documento descreve a evolução da programação de computadores, desde a programação linear até a programação orientada a objetos. A programação orientada a objetos permite maior reutilização de código, facilita a manutenção e documentação do software. Ela representa o mundo real através de objetos que encapsulam propriedades e métodos.
O documento discute como criar testes de interface do usuário (e2e) que sejam rápidos, robustos e de fácil manutenção. Ele explica a importância da automação de testes, os problemas comuns de testes e2e, e estratégias para torná-los independentes, paralelizados e baseados em padrões de teste.
O documento discute arquitetura de software limpa, explicando que ela separa a lógica principal de negócios de detalhes externos como interface do usuário e banco de dados. Apresenta o conceito de adaptadores que conectam o domínio principal à camada externa e demonstra uma aplicação que armazena dados de usuários usando essa abordagem.
Palestra sobre algumas novidades do C# 8 e do ML.NET para o evento de lançamento do Visual Studio 2019.
Todas as implementações do ML.NET foram feitas em F#
#vs19
Machine Learning: Classificação de Comentários com Azure ML & PythonGabriel Schade Cardoso
Slides utilizados no evento InterOP para demonstrar a criação de um modelo utilizando tanto Python quanto o Azure Machine Learning Studio.
Além disso, os slides dão uma boa noção do conceito geral.
Slides sobre Machine Learning e Inteligência Artificial utilizando como ferramenta o Azure Machine Learning Studio, ferramenta gratuita utilizada em Nuvem.
Através desta ferramenta podemos fazer o exemplo completo, desde a utilização de uma base de dados de exemplo, até a publicação do modelo como um serviço web.
Gabriel Schade cardoso apresenta sobre programação funcional usando C# e F#. Ele discute conceitos como value containers, option types, modelagem de domínio e extração de dados externos como planilhas do Excel e dados do World Bank.
Palestra sobre programação funcional para a trilha no TDC SP 2018.
Nesta palestra é possível encontrar slides sobre a utilização de programação funcional em C# e F#, mesclando as duas linguagens na mesma aplicação para uma solução híbrida.
O documento discute a arquitetura limpa para desenvolvimento de software. Apresenta os conceitos de arquitetura hexagonal, ports and adapters e como a arquitetura limpa separa a lógica do núcleo da aplicação de detalhes como a interface do usuário, banco de dados e linguagem. Demonstra uma aplicação que armazena dados de usuários usando essa abordagem arquitetural.
Gabriel Schade Cardoso é um mestre em computação aplicada, desenvolvedor, professor e autor de livros. Sua apresentação discute como utilizar inteligência artificial (IA) e aprendizado de máquina (machine learning) por meio de serviços cognitivos da Microsoft, demonstrando como gerar legendas para fotos e reconhecer informações sobre pessoas.
Machine learning é um tema muito popular, mas ainda é muito comum ter uma série de dúvidas.
O objetivo desta apresentação é desmistificar este tema, mostrando uma série de informações sobre os dados e com um exemplo prático.
O documento apresenta Gabriel Schade Cardoso, um desenvolvedor e professor especializado em programação funcional. Ele discute os conceitos básicos de programação funcional, incluindo vincular valores em vez de atribuição, funções, currying, aplicação parcial e funções de alta ordem. Exemplos são fornecidos para ilustrar esses conceitos.
O documento discute a importância da programação funcional e fornece exemplos de seus principais conceitos, como: 1) funções como membros de primeira ordem; 2) expressões e composições para criar códigos; 3) tipos para expressar códigos de forma clara.
Palestra ministrada no Meetup "DDD - Domain-Driven Design - Balneário Camboriú". - Acessível em: https://www.meetup.com/qualyteam/events/243888032/
Nesta apresentação abordo os temas linguagem ubíqua e código expressivo. Utilizando conceitos de programação funcional mistos com programação orientada à objetos.
Gabriel Schade Cardoso apresenta seu trabalho com desenvolvimento utilizando o Microsoft Kinect. Ele tem experiência com C# e .NET, além de ser autor de livros sobre Kinect e Windows Phone. O documento explica como o Kinect funciona para reconhecimento de voz, mãos e postura através de sensores e fluxos de esqueleto, bem como técnicas para detecção de gestos.
Gabriel Schade Cardoso é um desenvolvedor .NET com experiência em interfaces naturais como o Kinect. O documento descreve as principais funcionalidades do Kinect SDK, incluindo captura de profundidade, reconhecimento de esqueletos, streams de áudio, cores e profundidade. Algoritmos como a lei dos cossenos e produto escalar são usados para detecção de poses e gestos.
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
1. Globalcode – Open4education
Trilha .NET – Programação funcional usando
C#
Gabriel Schade Cardoso
Microsoft MVP | Software Engineer | Mestre em Computação Aplicada |
Professor | Escritor
2. Globalcode – Open4education
Mestre em computação aplicada a IA
Microsoft MVP – Dev. Technologies
Desenvolvedor, Professor e Revisor
Autor dos livros
Gabriel Schade Cardoso
4. Globalcode – Open4education
Problemas comuns
Quem aqui sabe o que é isso?
ArgumentNullException
DomainException
Essa nem existe na linguagem, mas eu já vi TANTO
5. Globalcode – Open4education
Como essas duas coisas estão
conectadas?
Programação funcional é bem diferente de
programação orientada à objetos;
Podemos aprender muito com F#;
É um paradigma diferente;
6. Globalcode – Open4education
Como essas duas coisas estão
conectadas?
Ao aprender um novo paradigma, você aprende uma
nova forma de ver os problemas.
8. Globalcode – Open4education
Vamos ao problema do null
Ele é um método mentiroso;
A assinatura dele me diz que ele irá retornar um
usuário, mas se o Id for inválido?
10. Globalcode – Open4education
Vamos ao problema do null
Este é um método honesto, ele indica que talvez
ele retorne um usuário;
Ok, mas o que isso muda na nossa vida?
11. Globalcode – Open4education
Vamos ao problema do null
Mas isso não é só um null check obrigatório?
Quase, mas causa erro de compilação.
O erro acontece porque o tipo option é um value container, não o
valor em si.
13. Globalcode – Open4education
Um container pode ser visto como um envelope ou uma caixa
que circunda um objeto/valor, incluindo-o em algum contexto
específico.
Lidamos com este tipo de valor o tempo todo:
List;
Task;
Nullable.
Value Containers
14. Globalcode – Open4education
Imagine o seguinte cenário: você possui um dado do tipo
inteiro e precisa somá-lo com o valor 3.
Value Containers
16. Globalcode – Open4education
Não podemos realizar a soma com o mesmo valor, isso por
conta do contexto que o cerca.
Por isso, comumente temos uma função para remover o valor
de seu contexto.
Value Containers
17. Globalcode – Open4education
No caso do array podemos utilizar o indexador para remover
um valor do contexto.
Value Containers
18. Globalcode – Open4education
Geralmente utilizamos as funções Map/Filter/Reduce ou
Select/Where/Aggregate, mas também podemos utilizar uma
comparação de padrões (pattern matching).
Podemos nos aproveitar deste conceito para criar novos
objetos e classes que armazenam valores sob um determinado
contexto.
Value Containers
19. Globalcode – Open4education
Option<T>
Que tal criar um Option para o C#?
1. O tipo não pode assumir o valor null;
2. Precisamos de uma maneira de extrair a informação do
contexto;
3. Não deixaremos o programador acessar a informação, caso ela
esteja no estado inválido;
26. Globalcode – Open4education
Value Containers
E se precisássemos de validações mais complexas?
Existem mais value containers além do Option!
Either<TLeft, TRight>
...
Vamos refatorar uma funcionalidade que atualiza um usuário
34. Globalcode – Open4education
Atualizando um usuário
Como as exceções não estão sendo tratadas, acabamos
sempre retornando um erro 500.
Este HTTP code não deve ser utilizado para isso, precisamos
retornar um 400 (bad request).
Onde colocar esse tratamento?
36. Globalcode – Open4education
Atualizando um usuário
Algo deu errado, o código não deveria ficar assim estranho.
Vamos tentar produzir esse resultado, mas sem try-catches:
38. Globalcode – Open4education
Atualizando um usuário
Precisamos continuar enviando o resultado para frente, mesmo
se algo deu errado, dessa forma não quebramos o fluxo de
código.
Vamos fazer mais um container, dessa vez para representar
um resultado para a continuação de uma operação.
40. Globalcode – Open4education
Atualizando um usuário
Notem que as propriedades de nossa classe só possuem um
método get, ou seja, todas elas são readonly;
Precisamos de construtores!
42. Globalcode – Open4education
Com nosso novo container já é possível retornar um resultado!
Vamos começar adaptando a função Update!
Criando um novo tipo
43. Globalcode – Open4education
Return em dois locais diferentes?
Ainda usamos try-catch?
Vamos quebrar as validações do banco em métodos separados
Criando um novo tipo
57. Globalcode – Open4education
Atualizando um usuário
A solução ainda está bem estranha!
Esses If’s não estão legais...
E se a struct de continuação oferecer uma forma de
continuarmos a expressão?
58. Globalcode – Open4education
Atualizando um usuário
Vamos criar os métodos Then e Catch;
Eles recebem uma função por parâmetro e retornam uma
estrutura de continuação!
63. Globalcode – Open4education
Atualizando um usuário
Neste ponto você já deve ter percebido que estamos sempre
atualizando o continuation, certo?
Mas como o próprio método já o retorna, podemos utilizar
uma sintaxe encadeada!
Além disso, podemos utilizar um match para finalizar e
retornar o resultado!