O documento discute programação assíncrona em C# 5, descrevendo como:
1) A programação assíncrona tornou-se essencial para aplicações escaláveis e responsivas;
2) C# 5 introduz novos recursos como "await" e "async" para simplificar a programação assíncrona;
3) Isso permite manter a interface gráfica responsiva enquanto operações longas ocorrem assincronamente.
O documento discute programação assíncrona com C# 5, explicando as diferenças entre síncrono e assíncrono, como Async e Await tornam a programação assíncrona mais simples e fácil, e fornece links úteis sobre o assunto.
Grand Central Dispatch - iOS Conf SG 2015Ben Asher
1) Grand Central Dispatch (GCD) is a technology for managing the execution of tasks in an app. It allows scheduling blocks of code to run on concurrent queues for parallel execution and synchronization of tasks.
2) GCD uses dispatch queues, which can be serial or concurrent, to schedule tasks. Global dispatch queues corresponding to quality of service classes are available to target specific thread priorities. Dispatch groups can be used to synchronize tasks and wait for completion.
3) Common techniques with GCD include scheduling tasks asynchronously on dispatch queues, synchronizing tasks using dispatch groups, and serializing asynchronous tasks by chaining animations in completion blocks. GCD provides efficient solutions for managing threads and tasks in iOS apps.
This document provides an overview of Grand Central Dispatch (GCD) in iOS. It describes key GCD concepts like blocks, dispatch queues, operation queues, dispatch groups, and dispatch semaphores. It explains how to define and execute tasks using these constructs. Examples are given showing how to download images asynchronously and use callback blocks. References for further reading on GCD are also provided.
Nesta palestra, eu apresentei um resumo das principais novas características e melhorias do .NET Framework 4.5 para desenvolvedores da plataforma .NET. Eu abordei os seguintes tópicos:
O .NET Framework
.NET Framework: Versões
Linguagem C#: Versões
Suporte a async & await
Biblioteca de classes portátil
.NET para Windows Store apps
Entity Framework 5
ASP.NET Web Forms 4.5
ASP.NET MVC 4
Windows Communication Foundation (WCF) 4.5
Windows Presentation Foundation (WPF) 4.5
Windows Workflow Foundation (WF) 4.5
Melhorias na Base Class Library
Links úteis
O documento apresenta os principais conceitos do modelo de programação assíncrona (APM), incluindo como implementar operações assíncronas usando os métodos Begin/End e as propriedades relacionadas como AsyncState, AsyncWaitHandle, CompletedSynchronously e IsCompleted. Referências adicionais sobre APM são fornecidas no final.
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Rogério Moraes de Carvalho
O documento apresenta uma sessão sobre programação assíncrona com C# 5 no Visual Studio 2013. A agenda inclui padrões assíncronos no .NET Framework 4.5.1, o padrão Task-based Asynchronous Pattern (TAP) e os operadores async e await. Duas demonstrações são apresentadas, cobrindo TAP, async e await, além de cancelamento e progresso.
Blocks allow passing code as a parameter or return value from functions. They capture the context in which they are defined. Grand Central Dispatch (GCD) simplifies concurrent programming using dispatch queues, which can execute blocks asynchronously or synchronously, and dispatch sources which attach blocks to system events. Dispatch groups and semaphores help coordinate work across dispatch queues.
O documento discute programação assíncrona com C# 5, explicando as diferenças entre síncrono e assíncrono, como Async e Await tornam a programação assíncrona mais simples e fácil, e fornece links úteis sobre o assunto.
Grand Central Dispatch - iOS Conf SG 2015Ben Asher
1) Grand Central Dispatch (GCD) is a technology for managing the execution of tasks in an app. It allows scheduling blocks of code to run on concurrent queues for parallel execution and synchronization of tasks.
2) GCD uses dispatch queues, which can be serial or concurrent, to schedule tasks. Global dispatch queues corresponding to quality of service classes are available to target specific thread priorities. Dispatch groups can be used to synchronize tasks and wait for completion.
3) Common techniques with GCD include scheduling tasks asynchronously on dispatch queues, synchronizing tasks using dispatch groups, and serializing asynchronous tasks by chaining animations in completion blocks. GCD provides efficient solutions for managing threads and tasks in iOS apps.
This document provides an overview of Grand Central Dispatch (GCD) in iOS. It describes key GCD concepts like blocks, dispatch queues, operation queues, dispatch groups, and dispatch semaphores. It explains how to define and execute tasks using these constructs. Examples are given showing how to download images asynchronously and use callback blocks. References for further reading on GCD are also provided.
Nesta palestra, eu apresentei um resumo das principais novas características e melhorias do .NET Framework 4.5 para desenvolvedores da plataforma .NET. Eu abordei os seguintes tópicos:
O .NET Framework
.NET Framework: Versões
Linguagem C#: Versões
Suporte a async & await
Biblioteca de classes portátil
.NET para Windows Store apps
Entity Framework 5
ASP.NET Web Forms 4.5
ASP.NET MVC 4
Windows Communication Foundation (WCF) 4.5
Windows Presentation Foundation (WPF) 4.5
Windows Workflow Foundation (WF) 4.5
Melhorias na Base Class Library
Links úteis
O documento apresenta os principais conceitos do modelo de programação assíncrona (APM), incluindo como implementar operações assíncronas usando os métodos Begin/End e as propriedades relacionadas como AsyncState, AsyncWaitHandle, CompletedSynchronously e IsCompleted. Referências adicionais sobre APM são fornecidas no final.
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Rogério Moraes de Carvalho
O documento apresenta uma sessão sobre programação assíncrona com C# 5 no Visual Studio 2013. A agenda inclui padrões assíncronos no .NET Framework 4.5.1, o padrão Task-based Asynchronous Pattern (TAP) e os operadores async e await. Duas demonstrações são apresentadas, cobrindo TAP, async e await, além de cancelamento e progresso.
Blocks allow passing code as a parameter or return value from functions. They capture the context in which they are defined. Grand Central Dispatch (GCD) simplifies concurrent programming using dispatch queues, which can execute blocks asynchronously or synchronously, and dispatch sources which attach blocks to system events. Dispatch groups and semaphores help coordinate work across dispatch queues.
Look and Feel Issues and Usability at Imagenio Telefonica´s IPTV Platformmiguelvinagre
The document discusses Telefonica's IPTV platform in Spain called Imagenio. It describes the user interface structure, navigation tree, purchasing trees, remote control, electronic program guide, and advertising formats. It also discusses improvements to the user interface like personalization, recommendations, notifications and channel changing. The conclusion emphasizes making the user interface intuitive with good aesthetics and functionality while maintaining the TV viewing experience.
This document explores how Christmas traditions and celebrations have changed over time from 2000 BC to the present. It discusses what Christmas may have looked like in ancient times in 2000 BC and then provides images and descriptions of Christmas traditions from the 1800s, 1920s, 1930s, 1940s, 1960s, 1970s, and 2009 to show how celebrations and customs have evolved in different eras. It concludes by asking the reader to consider what their Christmas may look like this year.
Petikan tersebut membincangkan usaha-usaha yang dilakukan untuk membasmi nyamuk aedes dan mencegah penularan penyakit denggi. Beberapa usaha yang disebutkan termasuk operasi keselamatan dan kesihatan di tapak binaan, pemeriksaan rumah demi rumah, kempen kesedaran di sekolah, aktiviti gotong-royong membersihkan kawasan, serta memastikan kawasan bebas air takungan. Kesimpulannya, kerjasama semua pihak dip
The document shares two stories about encounters with a woman named Maggie. In the first story, the narrator meets Maggie at a bar and loses memory of that night, waking up holding her hand. When they meet again at a restaurant, Maggie has a hysterical crying fit claiming that men in the restaurant burned her as a witch in a past life. In the second story told a year later, both Maggie and the narrator's new girlfriend Sue are seated at the same table at a crowded restaurant. Sue then experiences stomach pains and claims Maggie is killing her with witchcraft before running from the restaurant. Maggie approaches and warns Sue she deserved the pain before both women disappear from the narrator's life.
Fazendo Injeção de dependência com Unity 1.2Giovanni Bassi
O documento discute injeção de dependência com o framework Unity. Ele explica os princípios da inversão de dependência e como Unity permite diferentes tipos de injeção como constructor, property e method call injection. Também mostra como configurar dependências no Unity e realizar testes utilizando mocks.
These case studies demonstrate how Russ Mack was able to achieve significant results through his consulting work, often in surprising ways and short timeframes. Some key lessons highlighted are focusing on clients' goals with passion, thinking creatively about opportunities, and providing an optimistic perspective. Results included billion dollar cost reductions at Ford, developing successful business strategies and taglines, and promoting bestselling books. The case studies illustrate Russ Mack's leadership abilities and talents for listening, understanding clients' needs, and achieving results through consensus building.
Barack Obama's 2008 presidential campaign was highly effective in its use of new media and innovative strategies. It engaged supporters through online organizing tools, raised funds through small donations, and consistently communicated its message of change. The campaign's grasp of how the public connects online helped propel Obama to victory as the first African American president.
The document summarizes a group presentation on network management systems. It discusses how management programs use SNMP to poll agent programs running on network devices, collecting performance, inventory and traffic data stored in MIB formats. The data is made available to SNMP management programs and can be collected from various devices, even auxiliary ones like UPSs and printers, to provide information useful for repairs and planning network upgrades and budgets.
Пожизненное обучение: критика больших данных в образованииIvan Travkin
Презентация к докладу на конференции «Современные информационные технологии в обучении» ("виртуальная" секция "Продвижение технологий электронного обучения в современном образовательном пространстве"), 22 апреля, 2015. Институт открытого и дистанционного образования, Южно-Уральский государственный университет (Челябинск).
Dichtbij.nl is a Dutch hyperlocal news website that provides local journalism, community management, and local sales across 80 regions. It was founded in 2011 and now has over 120 employees and 135,000 registered contributors. The site receives 20 million pageviews per month, with the majority coming from articles about local incidents and news. Contributors can easily upload user-generated content, which is then curated by community managers. Examples show that contributors are successful when they write about relevant local issues and include things like videos, pictures, and calls to action. While experiments with new business models continue, 80% of Dichtbij's revenue still comes from display advertising. Its partnership with a large Dutch newspaper also brings in 40
Describes the work of Lucidity London, a marketing consultancy, on behalf of KBH On-Train Media, a small outdoor advertising contractor which promotes in-train advertising across London and the South East.
O documento discute a evolução da programação assíncrona no .NET. Em 3 frases:
A programação assíncrona está se tornando essencial para aplicativos responsivos e escaláveis, com o C# e VB adicionando suporte nativo a programação assíncrona usando keywords como "async" e "await". O documento explica como a programação assíncrona funciona, mantendo a UI responsiva enquanto operações como downloads ocorrem, e como o .NET fornece suporte para essa abordagem.
TDC 2015 - Execução em Background e Live Tiles em Universal AppsDiego Castro
Slides usado na palestra "Execução em Background e Live Tiles em Universal Apps" na trilha "Universal Windows" do TDC 2015
http://www.thedevelopersconference.com.br/tdc/2015/saopaulo/trilha-universal-windows
Look and Feel Issues and Usability at Imagenio Telefonica´s IPTV Platformmiguelvinagre
The document discusses Telefonica's IPTV platform in Spain called Imagenio. It describes the user interface structure, navigation tree, purchasing trees, remote control, electronic program guide, and advertising formats. It also discusses improvements to the user interface like personalization, recommendations, notifications and channel changing. The conclusion emphasizes making the user interface intuitive with good aesthetics and functionality while maintaining the TV viewing experience.
This document explores how Christmas traditions and celebrations have changed over time from 2000 BC to the present. It discusses what Christmas may have looked like in ancient times in 2000 BC and then provides images and descriptions of Christmas traditions from the 1800s, 1920s, 1930s, 1940s, 1960s, 1970s, and 2009 to show how celebrations and customs have evolved in different eras. It concludes by asking the reader to consider what their Christmas may look like this year.
Petikan tersebut membincangkan usaha-usaha yang dilakukan untuk membasmi nyamuk aedes dan mencegah penularan penyakit denggi. Beberapa usaha yang disebutkan termasuk operasi keselamatan dan kesihatan di tapak binaan, pemeriksaan rumah demi rumah, kempen kesedaran di sekolah, aktiviti gotong-royong membersihkan kawasan, serta memastikan kawasan bebas air takungan. Kesimpulannya, kerjasama semua pihak dip
The document shares two stories about encounters with a woman named Maggie. In the first story, the narrator meets Maggie at a bar and loses memory of that night, waking up holding her hand. When they meet again at a restaurant, Maggie has a hysterical crying fit claiming that men in the restaurant burned her as a witch in a past life. In the second story told a year later, both Maggie and the narrator's new girlfriend Sue are seated at the same table at a crowded restaurant. Sue then experiences stomach pains and claims Maggie is killing her with witchcraft before running from the restaurant. Maggie approaches and warns Sue she deserved the pain before both women disappear from the narrator's life.
Fazendo Injeção de dependência com Unity 1.2Giovanni Bassi
O documento discute injeção de dependência com o framework Unity. Ele explica os princípios da inversão de dependência e como Unity permite diferentes tipos de injeção como constructor, property e method call injection. Também mostra como configurar dependências no Unity e realizar testes utilizando mocks.
These case studies demonstrate how Russ Mack was able to achieve significant results through his consulting work, often in surprising ways and short timeframes. Some key lessons highlighted are focusing on clients' goals with passion, thinking creatively about opportunities, and providing an optimistic perspective. Results included billion dollar cost reductions at Ford, developing successful business strategies and taglines, and promoting bestselling books. The case studies illustrate Russ Mack's leadership abilities and talents for listening, understanding clients' needs, and achieving results through consensus building.
Barack Obama's 2008 presidential campaign was highly effective in its use of new media and innovative strategies. It engaged supporters through online organizing tools, raised funds through small donations, and consistently communicated its message of change. The campaign's grasp of how the public connects online helped propel Obama to victory as the first African American president.
The document summarizes a group presentation on network management systems. It discusses how management programs use SNMP to poll agent programs running on network devices, collecting performance, inventory and traffic data stored in MIB formats. The data is made available to SNMP management programs and can be collected from various devices, even auxiliary ones like UPSs and printers, to provide information useful for repairs and planning network upgrades and budgets.
Пожизненное обучение: критика больших данных в образованииIvan Travkin
Презентация к докладу на конференции «Современные информационные технологии в обучении» ("виртуальная" секция "Продвижение технологий электронного обучения в современном образовательном пространстве"), 22 апреля, 2015. Институт открытого и дистанционного образования, Южно-Уральский государственный университет (Челябинск).
Dichtbij.nl is a Dutch hyperlocal news website that provides local journalism, community management, and local sales across 80 regions. It was founded in 2011 and now has over 120 employees and 135,000 registered contributors. The site receives 20 million pageviews per month, with the majority coming from articles about local incidents and news. Contributors can easily upload user-generated content, which is then curated by community managers. Examples show that contributors are successful when they write about relevant local issues and include things like videos, pictures, and calls to action. While experiments with new business models continue, 80% of Dichtbij's revenue still comes from display advertising. Its partnership with a large Dutch newspaper also brings in 40
Describes the work of Lucidity London, a marketing consultancy, on behalf of KBH On-Train Media, a small outdoor advertising contractor which promotes in-train advertising across London and the South East.
O documento discute a evolução da programação assíncrona no .NET. Em 3 frases:
A programação assíncrona está se tornando essencial para aplicativos responsivos e escaláveis, com o C# e VB adicionando suporte nativo a programação assíncrona usando keywords como "async" e "await". O documento explica como a programação assíncrona funciona, mantendo a UI responsiva enquanto operações como downloads ocorrem, e como o .NET fornece suporte para essa abordagem.
TDC 2015 - Execução em Background e Live Tiles em Universal AppsDiego Castro
Slides usado na palestra "Execução em Background e Live Tiles em Universal Apps" na trilha "Universal Windows" do TDC 2015
http://www.thedevelopersconference.com.br/tdc/2015/saopaulo/trilha-universal-windows
O documento apresenta conceitos sobre PHP e AJAX. Resume os principais pontos sobre: 1) como o AJAX permite enviar e receber dados de um servidor sem recarregar a página usando tecnologias como Javascript, XML e HTTP; 2) o objeto XMLHttpRequest que permite fazer requisições assíncronas; 3) um exemplo prático de um mural de recados interativo usando PHP no servidor e AJAX no cliente.
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraCaelum
O documento discute como implementar push no servidor usando Servlets 3 e AsyncContext. Isso permite escalar aplicações para milhares de clientes usando poucas threads, ao liberar a thread quando o processamento é assíncrono. O autor fornece exemplos de código para armazenar clientes em fila e enviar mensagens para eles sem bloquear, melhorando a capacidade do servidor.
O documento apresenta o DeltaSpike, um conjunto de extensões portáteis para CDI que fornecem funcionalidades úteis para aplicações Java que não são suportadas pela especificação CDI. O DeltaSpike inclui módulos para segurança, JPA, JSF, validação de beans, agendamento de tarefas e outros que facilitam o desenvolvimento com CDI. O DeltaSpike não é um framework completo, mas sim um conjunto de ferramentas que estendem as capacidades do CDI.
DevDay - O elo perdido: sincronizando webappsSuissa
O documento discute como desenvolver aplicações web que funcionem offline através de tecnologias como HTML5, Node.js e Socket.io. Ele apresenta soluções como cache manifest, localStorage e webSockets para sincronizar dados entre clientes e servidor mesmo sem conexão com a internet.
O documento descreve a plataforma .NET da Microsoft. Resumidamente:
(1) A plataforma .NET é uma iniciativa da Microsoft que visa uma plataforma única para desenvolvimento e execução de sistemas e aplicações; (2) O código é compilado em MSIL e executado na CLR interagindo com o framework .NET; (3) Os principais tipos de compilados .NET são EXE, DLL, ASPX e ASMX.
1) O documento descreve a tecnologia AJAX e como é implementada no framework ASP.NET AJAX.
2) AJAX permite atualizações assíncronas de páginas web para melhorar a experiência do utilizador.
3) O framework ASP.NET AJAX facilita o desenvolvimento de aplicações AJAX utilizando controlos como UpdatePanel.
O documento discute como usar threads e tarefas para processamento paralelo de eventos de forma eficiente. Ele recomenda usar tarefas (Task) em vez de threads diretamente para aproveitar recursos de forma mais eficiente através do thread pool do .NET. Também discute quando usar threads ou tarefas dependendo se a operação é CPU-intensive ou I/O-bound.
1) O documento discute Docker, uma plataforma de containerização de software que permite compartilhar o mesmo kernel entre containers e cria imagens com sistemas de arquivos em camadas. 2) Explica como Docker funciona com imagens, containers e registros e como executar um container. 3) Apresenta como DockerHub pode ser usado para distribuir e compartilhar imagens Docker de forma versionada.
Este documento apresenta o jQuery, uma biblioteca JavaScript que simplifica o desenvolvimento de aplicações web. O jQuery facilita a seleção e manipulação de elementos HTML, adição de eventos e animações, e suporte a Ajax. O documento também discute padrões web, como acessibilidade e portabilidade, e por que desenvolvedores devem seguir esses padrões.
Programação Multiplataforma em Ambiente WebIsrael Messias
O documento resume conceitos sobre desenvolvimento web multiplataforma, incluindo ambientes de desenvolvimento como WAMP e LAMP, metodologia DevOps, sistemas operacionais Windows e Linux, servidores Apache e Nginx, bancos de dados MySQL e MariaDB, linguagem PHP e ferramentas como XDebug e Phalcon.
O documento apresenta os conceitos e fundamentos do Node.js, incluindo sua arquitetura orientada a eventos, utilização de JavaScript no servidor e clientes, e exemplos de código para criação de servidores, rotas e interação com usuário.
- O documento discute o framework NodeJS para desenvolvimento de aplicações web server-side usando Javascript, incluindo tópicos como arquitetura, instalação, criação de projetos, uso de módulos, frameworks como Express e banco de dados MongoDB.
This document discusses Ajax with jQuery. It introduces Ajax and its features like page reloads. It then covers making simple and jQuery Ajax requests, both asynchronously and synchronously. Examples of Ajax login and synchronous execution are provided with download links. References to books on jQuery and Ajax with jQuery are given at the end.
A explosão do Node.js: JavaScript é o novo pretoNando Vieira
O documento discute a explosão do Node.js e como JavaScript se tornou uma linguagem popular para desenvolvimento de servidores. Apresenta alguns dos principais módulos da biblioteca padrão do Node.js como timers, processamento de eventos e arquivos. Também discute alguns frameworks e bancos de dados populares usados com Node.js como Express, MongoDB e Socket.IO.
Com o surgimento de frameworks cada dia mais avançados e fáceis de utilizar, desenvolvedores estão cada dia mais focados na lógica de negócio e menos na infraestrutura necessária para execução das aplicações, que acabam por se tornar mais complexas, multi stack e distribuídas.
Mesmo com a evolução gigantesca na área automação que acompanhou esses frameworks (evolução essa liderada por técnologias como Capistrano, Heroku (PaaS) e Vagrant) o gargalo de comunicação entre equipe de desenvolvimento e operações continua a ser o maior impasse da área na hora de colocar uma solução para rodar.
Nesta palaestra vamos falar sobre "arquitetura executável" com foco na ferramenta open source de orquestração: AZK. Uma ferramenta que ajuda a ganhar agilidade no processo de orquestração do ambiente de desenvolvimento, mas sobre tudo tem como resultado uma "documentação executável da arquitetura" que facilita muito a vida de toda a equipe.
O documento discute processos no Node.js, incluindo como obter informações sobre o processo atual, lidar com streams de entrada e saída, e tratar eventos como exit e uncaughtException.
O documento apresenta uma agenda de cursos sobre desenvolvimento web com AJAX e WEB 2.0. No primeiro dia, o curso irá cobrir XMLHttpRequest, API DOM, frameworks AJAX como ExtJS e Mootools e exemplo de aplicações. No segundo dia, os alunos irão finalizar um projeto de aplicação WEB 2.0 iniciado no dia anterior e ter uma conclusão sobre o assunto. O documento também fornece detalhes sobre as tecnologias abordadas no curso.
PyData - Consumindo e publicando web APIs com PythonBruno Rocha
Apresentado no auditório da NuBank em São Paulo dia 28 de Março de 2017 - PyData Meetup.
- O que são Web APIs
- Consumindo web APIs com Python
- O que fazer com os dados?
- Publicando web APIs com Python.
http://github.com/rochacbruno/flasgger
Palestra apresentada no AgileBrazil 2018.
O Git é sem dúvida uma das ferramentas que mais tem potencial de impactar o trabalho da pessoas desenvolvedora de software – desde que ela o conheça bem. Um conhecimento superficial do Git fará com que a pessoa o utilize de forma parecida com que ele usava o Subversion, por exemplo, deixando passar diversas oportunidades.Nessa sessão veremos como o Git pode deixar a programação mais ágil, vamos tirá-lo de uma posição de ferramenta de apoio para levá-lo a um protagonismo no workflow de programação, sendo menos importante somente que a escrita do código em si e suas técnicas.Veremos como usar o Git como instrumento de comunicação do time, além de técnicas que permitem a pessoa foque no código em vez de focar no versionador.
Analisando dumps de memória de aplicações .NETGiovanni Bassi
Palestra apresentada no .NET Community Summit 2018 do iMasters.
(os slides estão com borda branca porque o slideshare não aceitou o upload de outra forma)
This document summarizes Giovanni Bassi's presentation on new features in C# 7 and 8. It discusses features like pattern matching, tuples, discards, ref locals/returns, expression-bodied members, numeric literals, local functions, generalized async returns, inferred tuple names, default literals, async Main method, non-trailing named arguments, leading separators for numbers, private protected access, and readonly ref extension methods. The presentation provides code examples and links to documentation for each new feature.
Async e await com JavaScript: entenda e use agoraGiovanni Bassi
O documento discute async e await no JavaScript, apresentando como usar essas funcionalidades para lidar com código assíncrono de forma mais simples. Explica brevemente a evolução das soluções para assincronicidade no JavaScript, desde callbacks até promises e generators. Em seguida, detalha como async e await funcionam, permitindo escrever código assíncrono de forma semelhante ao síncrono. Apresenta também exemplos práticos demonstrando o uso dessas funcionalidades.
Conhecendo o AKS, o azure container services com kubernetesGiovanni Bassi
O documento resume uma apresentação sobre o Azure Kubernetes Service (AKS) e o Visual Studio Codespaces (VSCE). O AKS fornece uma solução gerenciada de hospedagem de contêineres com Kubernetes no Azure de forma gratuita e escalável. O VSCE permite desenvolvimento em contêineres no Kubernetes gerenciado com isolamento, debug e extensões para VS e VS Code.
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Giovanni Bassi
O documento resume uma conferência sobre novidades do .NET Core 2.1 e ASP.NET Core 2.1, incluindo palestras de Giovanni Bassi e Victor Cavalcante. O evento também promove a arrecadação de doações para instituições de caridade e contém informações biográficas sobre os palestrantes.
The document discusses new features introduced in C# 7 and C# 7.1-7.2, including tuples, pattern matching, out variables, discards, numeric literals, local functions, generalized async return types, inferred tuple element names, default literals, async Main method, non-trailing named arguments, and leading separators for numeric literals. It provides links to Microsoft documentation and proposals for each new feature.
Engenharia ágil de ponta a ponta do clone ao deployGiovanni Bassi
A apresentação descreve a Lambda3, uma empresa de engenharia de software ágil que oferece serviços desde o desenvolvimento até o deploy de aplicações. A empresa tem uma estrutura democrática sem gerentes e toma decisões por consenso. O documento também lista os podcasts e eventos promovidos pela Lambda3 e explica seu fluxo de trabalho ágil de desenvolvimento.
Entrega contínua fica mais fácil com contêineresGiovanni Bassi
O documento apresenta a empresa Lambda3, especializada em desenvolvimento ágil e arquitetura de software. A empresa não tem gerentes ou estrutura hierárquica, toma decisões por consenso e oferece podcasts e cursos sobre tópicos de tecnologia da informação.
This document discusses .NET Core, ASP.NET Core and .NET Standard 2.0. It introduces Giovanni Bassi, a programmer and MVP who brought Scrum.org, PSM and PSD certification to Brazil. It also mentions Bassi's podcast, blog and involvement in communities like DockerSP. The document compares .NET Framework and .NET Core, explaining how they share common libraries through .NET Standard. It notes performance benchmarks showing ASP.NET Core performing well compared to Node.js and other frameworks. In closing, it provides links for learning more about .NET Core, .NET Standard and the .NET open source project on GitHub.
Giovanni Bassi é um programador brasileiro especializado em .NET e contêineres Docker para Windows e Linux. Ele trouxe diversas certificações e comunidades para o Brasil e mantém um podcast e blog sobre tópicos de tecnologia. O documento explica como o Docker funciona usando contêineres leves em vez de máquinas virtuais pesadas.
Compartilhando código entre frontend e backend com Node.jsGiovanni Bassi
Este documento apresenta Giovanni Bassi, um programador brasileiro que compartilha seu conhecimento em podcasts e blogs. Ele discute o uso de Node.js para compartilhar código entre frontend e backend e fornece links para recursos sobre renderização universal em Angular.
This document discusses the future of C# programming language. It provides an introduction to Giovanni Bassi, a C# programmer and MVP. It then lists topics that will be covered in his podcast, including Docker, .NET Core, Git, and Node.js. Charts are shown comparing the popularity and usage of C#, VB, and F# languages. The rest of the document demonstrates new features coming to C# like tuple names inference, default values for generic types, async Main method, and more.
O documento apresenta uma introdução aos containers no Windows. Explica as diferenças entre VMs e containers, como o Docker funciona no Windows usando a tecnologia nativa de containers do sistema operacional. Demonstra como criar imagens .NET Core e rodar containers Windows no Docker, incluindo uma breve demonstração no Visual Studio 2017 e na linha de comando.
O documento apresenta uma introdução ao .NET Core, incluindo sua arquitetura modular e multiplataforma, o .NET CLI e .NET Standard. Demostra o desenvolvimento de aplicações para diversas plataformas, incluindo Linux e Docker, e esclarece dúvidas sobre a substituição do PCL pelo .NET Standard.
Palestra apresentada no meetup do DockerSP. https://www.meetup.com/Docker-Sao-Paulo/events/234372170/
Nessa palestra veremos como montar um processo de build de uma aplicação conteinerizadas, em conjunto com o Docker Hub. Veremos ainda quais são os artefatos e como trabalhar com a promoção entre ambientes. Ao final, montaremos o processo de continuous deployment, opcionalmente colocando na mão do responsável pelo negócio a tomada de decisão da publicação.
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
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
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
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
1. Programação assíncrona
com C# 5
Giovanni Bassi
giovanni@lambda3.com.br
@giovannibassi
blog.lambda3.com.br
2. Giovanni Bassi
• Trouxe a Scrum.org, PSM e PSD pro Brasil
• Palestrante nacional e internacional (gestão,
agile, engenharia e arquitetura de software)
• Programador
• tecnoretorica.com.br, blog.lambda3.com.br,
dotnetarchitects.net
• Escalador e ciclista
• Não gerente
6. Tendências
• Aplicações cada vez mais conectadas
– Mais latência
– Mais problemas de responsividade da interface gráfica
(IG)
– Mais problemas de escalabilidade
• Programação assíncrona
– Está se tornando a norma em aplicações escaladas e
responsivas
– APIs que são somente assíncronas, como JavaScript,
Silverlight, Windows 8, Windows Phone
8. O que há de novo?
• Programação assíncrona • Programação assíncrona
• Atributos de informação de • Atributos de informação de
chamada chamada
• Iterators
9. Assincronia em poucas palavras
• Síncrono Espero o resultado antes de retonar
– string DownloadString(...);
• Assíncrono Retorne agora, chame de volta com o
resultado
– void DownloadStringAsync(..., Action<string> callback);
• Benefícios da assincronia
– Responsividade da interface gráfica: libera as threads de IG
para interação com o usuário
– Escalabilidade do servidor: A thread pode ser reutilizada para
outras requisições
10. Síncrono versus Assíncrono
var data = DownloadData(...);
ProcessData(data);
DownloadDataAsync(... , data => {
ProcessData(data);
});
11. Síncrono versus Assíncrono
var data = DownloadData(...);
ProcessData(data);
DownloadDataAsync(... , data => {
ProcessData(data);
});
13. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
Mensagens
Thread de IG
14. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
15. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
16. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
17. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1
18. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
19. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
20. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
21. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
22. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
23. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
24. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
25. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
26. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
27. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
28. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
29. Fluxo de controle assíncrono
async void DoWorkAsync() {
var t1 = ProcessFeedAsync("www.acme.com/rss");
var t2 = ProcessFeedAsync("www.xyznews.com/rss");
await Task.WhenAll(t1, t2);
DisplayMessage("Done");
} async Task ProcessFeedAsync(string url) {
var text = await DownloadFeedAsync(url);
var doc = ParseFeedIntoDoc(text);
await SaveDocAsync(doc);
ProcessLog.WriteEntry(url);
}
t1 t2
30. Como funciona?
async Task<XElement> GetRssAsync(string url) {
var client = new WebClient();
var task = client.DownloadStringTaskAsync(url);
var text = await task;
var xml = XElement.Parse(text);
return xml;
}
31. Como funciona?
async Task<XElement> GetRssAsync(string url) {
var client = new WebClient();
var task = client.DownloadStringTaskAsync(url);
var text = await task;
var xml = XElement.Parse(text);
return xml;
} Task<XElement> GetRssAsync(string url) {
var client = new WebClient();
var task = client.DownloadStringTaskAsync(url);
return task.ContinueWith(delegate
{
var text = task.Result;
var xml = XElement.Parse(text);
return xml;
});
}
32.
33. Como funciona?
Task<XElement> GetRssAsync(string url) {
var $builder = AsyncTaskMethodBuilder<XElement>.Create();
async Task<XElement> $state = 0;
var
TaskAwaiter<string> $a1;
GetRssAsync(string url) {
Action $resume = delegate {
var client = new try {
WebClient();
var task = if ($state == 1) goto L1;
client.DownloadStringTaskAsync(url);new WebClient();
var client =
var text = await task; task = client.DownloadStringTaskAsync(url);
var
$a1 = task.GetAwaiter();
var xml = XElement.Parse(text);
return xml; if ($a1.IsCompleted) goto L1;
} $state = 1;
$a1.OnCompleted($resume);
return;
L1: var text = $a1.GetResult();
var xml = XElement.Parse(text);
$builder.SetResult(xml);
}
catch (Exception $ex) { $builder.SetException($ex); }
};
$resume();
return $builder.Task;
}
34. Como funciona?
Task<XElement> GetRssAsync(string url) {
var $builder = AsyncTaskMethodBuilder<XElement>.Create();
async Task<XElement> $state = 0;
var
TaskAwaiter<string> $a1;
GetRssAsync(string url) {
Action $resume = delegate {
var client = new try {
WebClient();
var task = if ($state == 1) goto L1;
client.DownloadStringTaskAsync(url);new WebClient();
var client =
var text = await task; task = client.DownloadStringTaskAsync(url);
var
$a1 = task.GetAwaiter();
var xml = XElement.Parse(text);
return xml; if ($a1.IsCompleted) goto L1;
} $state = 1;
$a1.OnCompleted($resume);
return;
L1: var text = $a1.GetResult();
var xml = XElement.Parse(text);
$builder.SetResult(xml);
}
catch (Exception $ex) { $builder.SetException($ex); }
};
$resume();
return $builder.Task;
}
35. Como funciona?
Task<XElement> GetRssAsync(string url) {
var $builder = AsyncTaskMethodBuilder<XElement>.Create();
async Task<XElement> $state = 0;
var
TaskAwaiter<string> $a1;
GetRssAsync(string url) {
Action $resume = delegate {
var client = new try {
WebClient();
var task = if ($state == 1) goto L1;
client.DownloadStringTaskAsync(url);new WebClient();
var client =
var text = await task; task = client.DownloadStringTaskAsync(url);
var
$a1 = task.GetAwaiter();
var xml = XElement.Parse(text);
return xml; if ($a1.IsCompleted) goto L1;
} $state = 1;
$a1.OnCompleted($resume);
return;
L1: var text = $a1.GetResult();
var xml = XElement.Parse(text);
$builder.SetResult(xml);
}
catch (Exception $ex) { $builder.SetException($ex); }
};
$resume();
return $builder.Task;
}
36. Como funciona?
Task<XElement> GetRssAsync(string url) {
var $builder = AsyncTaskMethodBuilder<XElement>.Create();
async Task<XElement> $state = 0;
var
TaskAwaiter<string> $a1;
GetRssAsync(string url) {
Action $resume = delegate {
var client = new try {
WebClient();
var task = if ($state == 1) goto L1;
client.DownloadStringTaskAsync(url);new WebClient();
var client =
var text = await task; task = client.DownloadStringTaskAsync(url);
var
$a1 = task.GetAwaiter();
var xml = XElement.Parse(text);
return xml; if ($a1.IsCompleted) goto L1;
} $state = 1;
$a1.OnCompleted($resume);
return;
L1: var text = $a1.GetResult();
var xml = XElement.Parse(text);
$builder.SetResult(xml);
}
catch (Exception $ex) { $builder.SetException($ex); }
};
$resume();
return $builder.Task;
}
37. Métodos assíncronos...
• São marcados com o novo modificador “async”
• Devem retornar void, Task ou Task<T>
• Usam o operador “await” para devolver controle
cooperativamente
• Voltam a ser executados quando uma operação que estava em
espera (await) conclui
• Podem esperar (await) qualquer coisa que implemente o
“padrão de espera”
• Executam no contexto de sincronização de quem os chamou
• Permitem composição com as construções normais de
programação
• Parecem com código normal e síncrono!
39. Async com ASP.NET ontem
public void AcaoAsync()
{
AsyncManager.OutstandingOperations.Increment(5);
var svc = new AsyncPatternSvc.Service1Client();
AsyncManager.Parameters["textoFinal"] = "";
svc.GetDataCompleted += (sender, args) =>
{
AsyncManager.Parameters["textoFinal"] =
((string)AsyncManager.Parameters["textoFinal"]) + args.Result + ", ";
AsyncManager.OutstandingOperations.Decrement();
};
for (int i = 0; i < 5; i++)
svc.GetDataAsync(i);
}
public ActionResult AcaoCompleted(string textoFinal)
{
return View("RetornoServico", new AsyncModel { Resultado = textoFinal });
}
40. Async com ASP.NET hoje
public async Task<ActionResult> Acao()
{
var svc = new TaskSvc.Service1Client();
var resultados = await Task.WhenAll(
from i in Enumerable.Range(0, 5)
select svc.GetDataAsync(i));
var textoFinal = string.Join(", ", resultados);
return View("RetornoServico", new AsyncModel{
Resultado = textoFinal });
}
41. Suporte no .NET Framework
Outras…
Windows
Presentation ASP.NET
Foundation
43. Escalabilidade: Evitando novas threads
• Blocos síncronos lógicos esperando por requisições de
rede:
var feeds = (from url in urls select client.DownloadFeed(url)).ToArray();
var feeds = await Task.WhenAll(from url in urls select client.DownloadFeedAsync(url));
Sem novas threads!
44. Unificando a assincronia
• Um cenário assíncrono
– Busca alguns links de vídeo no YouTube
– Baixa dois vídeos ao mesmo tempo
– Cria um novo vídeo a partir dos vídeos baixados
– Salva o vídeo resultante
46. Métodos assíncronos
• (Quase) tão simples quanto código síncrono
• Unifica assincronia computacional, de rede e de
E/S
• Permite servidores mais escaláveis
• IG mais responsiva
47. Obrigado!
Giovanni Bassi
giovanni@lambda3.com.br
@giovannibassi
blog.lambda3.com.br