O documento discute as bibliotecas POCO C++. A POCO é uma coleção de bibliotecas C++ portáteis focadas em redes e aplicações. Ela fornece funcionalidades como cache, processos, sistema de arquivos, aplicações, rede, notificações e manipulação de strings. A POCO é uma alternativa à biblioteca Boost e possui vantagens como ser mais compreensível e fornecer suporte a pontos não cobertos pela Boost, como SQLite e monitoramento de diretórios.
Este documento discute volumes de dados no Docker, incluindo como associar diretórios do host e entre containers, modo somente leitura, compartilhamento de volumes e considerações sobre backup e migração de dados.
O documento compara Vagrant e Docker, discutindo como ambos ajudam na padronização de ambientes de desenvolvimento através da virtualização e conteinerização. Vagrant permite a automação da configuração de VMs virtuais, enquanto Docker facilita a replicação de aplicações através de contêineres leves. Embora contêineres sejam mais rápidos que VMs, eles dependem do sistema operacional do host.
O documento discute a evolução da web entre 1996 e 2015, destacando o crescimento exponencial no número de usuários e sites, além das melhorias tecnológicas como HTML 5 e browsers modernos. Também apresenta métricas de desempenho de sites como UOL e NYTimes ao longo dos anos e estratégias para otimizar o desempenho como CDNs, HTTP/2, cache e compactação gzip.
1) O documento fornece instruções para instalação e configuração do sistema I-Educar, incluindo requisitos do sistema, como PHP, Apache, PostgreSQL e biblioteca PDFLib.
2) Ele descreve o processo de compilação e instalação da biblioteca PDFLib no Ubuntu, necessária para geração de PDFs pelo I-Educar.
3) Também explica como baixar, descompactar e configurar o banco de dados PostgreSQL 8.2.19, versão homologada para o I-Educar.
Talk presented at Meetup Laravel SP #3 about docker from basics to docker orchestration.
Presented in 2015-05-07
Video da apresentação:
https://youtu.be/mR2px-mKjd0
Docker é uma plataforma que permite encapsular aplicações e suas dependências para torná-las portáteis e escaláveis. O documento discute como Docker funciona, como construir imagens Docker para aplicações PHP, e considerações sobre quem está usando Docker e o que vem por vir.
Este documento discute volumes de dados no Docker, incluindo como associar diretórios do host e entre containers, modo somente leitura, compartilhamento de volumes e considerações sobre backup e migração de dados.
O documento compara Vagrant e Docker, discutindo como ambos ajudam na padronização de ambientes de desenvolvimento através da virtualização e conteinerização. Vagrant permite a automação da configuração de VMs virtuais, enquanto Docker facilita a replicação de aplicações através de contêineres leves. Embora contêineres sejam mais rápidos que VMs, eles dependem do sistema operacional do host.
O documento discute a evolução da web entre 1996 e 2015, destacando o crescimento exponencial no número de usuários e sites, além das melhorias tecnológicas como HTML 5 e browsers modernos. Também apresenta métricas de desempenho de sites como UOL e NYTimes ao longo dos anos e estratégias para otimizar o desempenho como CDNs, HTTP/2, cache e compactação gzip.
1) O documento fornece instruções para instalação e configuração do sistema I-Educar, incluindo requisitos do sistema, como PHP, Apache, PostgreSQL e biblioteca PDFLib.
2) Ele descreve o processo de compilação e instalação da biblioteca PDFLib no Ubuntu, necessária para geração de PDFs pelo I-Educar.
3) Também explica como baixar, descompactar e configurar o banco de dados PostgreSQL 8.2.19, versão homologada para o I-Educar.
Talk presented at Meetup Laravel SP #3 about docker from basics to docker orchestration.
Presented in 2015-05-07
Video da apresentação:
https://youtu.be/mR2px-mKjd0
Docker é uma plataforma que permite encapsular aplicações e suas dependências para torná-las portáteis e escaláveis. O documento discute como Docker funciona, como construir imagens Docker para aplicações PHP, e considerações sobre quem está usando Docker e o que vem por vir.
O documento apresenta uma introdução ao Docker, incluindo sua história, conceitos-chave como containers e imagens, e demonstrações práticas de como criar e gerenciar containers Docker. É explicado como o Docker permite isolar e empacotar aplicações em unidades portáteis através do uso de namespaces, cgroups e union file systems.
Apresentação da ferramenta Docker para o pessoal da Websix. Passos básicos de como iniciar a utilização de containers a seu favor. Padronização de ambiente de desenvolvimento, staging, QA e Produção
Orquestrando Docker Containers: Machine, Swarm e ComposeRoberto Hashioka
O documento discute como o Docker pode ser usado para orquestrar containers, máquinas e aplicações distribuídas de forma modular, portátil e dinâmica através das ferramentas Docker Engine, Docker Machine, Docker Swarm e Docker Compose. O palestrante explica como essas ferramentas facilitam a construção, distribuição e execução de aplicações de forma consistente em qualquer ambiente.
O documento discute ferramentas e técnicas para debug de código em projetos WordPress, incluindo o uso de Docker para ambientes de desenvolvimento locais, ferramentas como Xdebug e Dev Tools para debug, e boas práticas de desenvolvimento como o uso do WP CLI e projetos scaffold.
Testadores 2015 - O Fantástico Mundo de DockerStefan Teixeira
Este documento apresenta os principais conceitos sobre Docker, incluindo imagens, containers, Dockerfiles e o ecossistema Docker. Resume os principais comandos da CLI Docker e fornece exemplos de Dockerfiles e projetos open source interessantes para aprender Docker.
Docker permite criar ambientes leves e portáteis para rodar aplicações através de containers Linux. Isso resolve problemas como diferentes sistemas operacionais, versões e dependências, permitindo que equipes tenham o mesmo ambiente de desenvolvimento e produção. O documento explica como usar Docker e Django para criar uma aplicação web em um container, mostrando como construir a imagem e executar o container.
Containers para Software! A mais nova revolução, trazida ao mundo pela Dockers, rodando hoje na AWS. Venha conhecer esta inovadora e revolucionária tecnologia que vai mudar a forma como você desenvolve e implementa software.
O documento discute como containers Docker podem ser usados para facilitar o deploy de aplicações e garantir que o ambiente de desenvolvimento seja idêntico ao de produção. Ele explica os benefícios dos containers sobre máquinas virtuais em termos de performance e escalabilidade e demonstra passo a passo como criar e implantar containers Docker na AWS usando o Elastic Beanstalk.
Como migrar seu ambiente de desenvolvimento para LinuxMarcelo Sabadini
O documento apresenta como migrar o ambiente de desenvolvimento para Linux. Ele discute o que é necessário para começar, como instalar o sistema operacional Ubuntu e ferramentas como Apache, PHP, MySQL e Subversion. Também fornece exemplos de como usar comandos da linha de comando para automatizar tarefas e converter arquivos entre codificações de caracteres.
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.
O documento explica os conceitos básicos de containers, incluindo o que é um container, suas características, como armazenar dados de forma persistente usando volumes, e como orquestrar containers com Docker Compose.
Este documento apresenta os principais conceitos sobre Docker, incluindo: (1) a diferença entre VMs e containers, (2) a história e projetos relacionados a containers, (3) os principais conceitos de Docker como imagens, containers e Dockerfiles, e (4) comandos essenciais da CLI do Docker.
Yaf - Um framework que roda sob uma extensãoThiago Paes
O Yaf é um framework PHP semelhante ao Zend Framework escrito em C e funciona como uma extensão do PHP. Ele segue o padrão MVC e tem uma estrutura de pastas padrão para controllers, models, views e layouts. O Yaf oferece recursos como autoload, rotas, configurações de banco de dados e tratamento de erros.
O documento discute o Apache DeltaSpike, um conjunto de extensões portáteis para o CDI que fornece funcionalidades úteis para aplicações Java. O DeltaSpike inclui módulos como segurança, JPA, JSF e agendamento de tarefas. Ele permite injeção de dependência tipada, configuração de projeto, recursos injetáveis e internacionalização de mensagens. O DeltaSpike facilita o desenvolvimento Java usando o CDI sem ser um framework completo.
O documento discute o uso do Docker para desenvolvimento, listando referências sobre configurações de container de Postgres, Pgadmin e Tomcat, além de links sobre ambientes de desenvolvimento com Docker Desktop e WSL 2 e exemplos de containers como Postgres, Pgadmin e Tomcat.
Alta Performance de Aplicações PHP com NginxThiago Paes
Este documento apresenta o servidor Nginx, um servidor HTTP de alto desempenho e gratuito. Ele descreve como instalar e configurar o Nginx para usar com PHP, frameworks como CakePHP e Zend, balanceamento de carga com Apache, cache, autenticação e integração com Memcached.
Docker, facilitando a vida do desenvolvimentoSérgio Lima
Docker facilita a criação e administração de ambientes isolados para aplicações, permitindo que elas funcionem independentemente da infraestrutura. O documento discute o que é Docker, por que usá-lo, como usar imagens e containers básicos, construir imagens personalizadas e encapsular aplicações com Docker Compose. Finalmente, apresenta a plataforma Rancher para gerenciar containers em produção.
Trabalhando com a infraestrutura como software na AWS com Elastic Beanstalk e...Bruno Rodrigues
O documento discute como usar Docker e Elastic Beanstalk para implementar infraestrutura como código, permitindo versionamento, ambientes idênticos para desenvolvimento, teste e produção, alta disponibilidade e escalabilidade. Ele também menciona como a Personare usa essas ferramentas para dar suporte a 6 milhões de usuários por mês em seus serviços e cursos online.
O documento introduz Docker, explicando como ele pode isolar aplicações em containers e simplificar o desenvolvimento e deploy. Ele define Docker, imagens, containers e Dockerfile, mostrando como criar uma imagem passo a passo com Dockerfile e como orquestrar múltiplos containers com Docker Compose.
1) O documento apresenta Mateus Caruccio e seu trabalho com computação em nuvem, OpenShift Origin e OO-Index.
2) OpenShift Origin é uma plataforma open source que permite implantar aplicações em containers auto-escaláveis na nuvem ou em infraestrutura local.
3) OO-Index é um projeto desenvolvido pela comunidade para listar cartuchos e receitas prontas para OpenShift Origin.
O documento apresenta uma introdução ao Docker, incluindo sua história, conceitos-chave como containers e imagens, e demonstrações práticas de como criar e gerenciar containers Docker. É explicado como o Docker permite isolar e empacotar aplicações em unidades portáteis através do uso de namespaces, cgroups e union file systems.
Apresentação da ferramenta Docker para o pessoal da Websix. Passos básicos de como iniciar a utilização de containers a seu favor. Padronização de ambiente de desenvolvimento, staging, QA e Produção
Orquestrando Docker Containers: Machine, Swarm e ComposeRoberto Hashioka
O documento discute como o Docker pode ser usado para orquestrar containers, máquinas e aplicações distribuídas de forma modular, portátil e dinâmica através das ferramentas Docker Engine, Docker Machine, Docker Swarm e Docker Compose. O palestrante explica como essas ferramentas facilitam a construção, distribuição e execução de aplicações de forma consistente em qualquer ambiente.
O documento discute ferramentas e técnicas para debug de código em projetos WordPress, incluindo o uso de Docker para ambientes de desenvolvimento locais, ferramentas como Xdebug e Dev Tools para debug, e boas práticas de desenvolvimento como o uso do WP CLI e projetos scaffold.
Testadores 2015 - O Fantástico Mundo de DockerStefan Teixeira
Este documento apresenta os principais conceitos sobre Docker, incluindo imagens, containers, Dockerfiles e o ecossistema Docker. Resume os principais comandos da CLI Docker e fornece exemplos de Dockerfiles e projetos open source interessantes para aprender Docker.
Docker permite criar ambientes leves e portáteis para rodar aplicações através de containers Linux. Isso resolve problemas como diferentes sistemas operacionais, versões e dependências, permitindo que equipes tenham o mesmo ambiente de desenvolvimento e produção. O documento explica como usar Docker e Django para criar uma aplicação web em um container, mostrando como construir a imagem e executar o container.
Containers para Software! A mais nova revolução, trazida ao mundo pela Dockers, rodando hoje na AWS. Venha conhecer esta inovadora e revolucionária tecnologia que vai mudar a forma como você desenvolve e implementa software.
O documento discute como containers Docker podem ser usados para facilitar o deploy de aplicações e garantir que o ambiente de desenvolvimento seja idêntico ao de produção. Ele explica os benefícios dos containers sobre máquinas virtuais em termos de performance e escalabilidade e demonstra passo a passo como criar e implantar containers Docker na AWS usando o Elastic Beanstalk.
Como migrar seu ambiente de desenvolvimento para LinuxMarcelo Sabadini
O documento apresenta como migrar o ambiente de desenvolvimento para Linux. Ele discute o que é necessário para começar, como instalar o sistema operacional Ubuntu e ferramentas como Apache, PHP, MySQL e Subversion. Também fornece exemplos de como usar comandos da linha de comando para automatizar tarefas e converter arquivos entre codificações de caracteres.
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.
O documento explica os conceitos básicos de containers, incluindo o que é um container, suas características, como armazenar dados de forma persistente usando volumes, e como orquestrar containers com Docker Compose.
Este documento apresenta os principais conceitos sobre Docker, incluindo: (1) a diferença entre VMs e containers, (2) a história e projetos relacionados a containers, (3) os principais conceitos de Docker como imagens, containers e Dockerfiles, e (4) comandos essenciais da CLI do Docker.
Yaf - Um framework que roda sob uma extensãoThiago Paes
O Yaf é um framework PHP semelhante ao Zend Framework escrito em C e funciona como uma extensão do PHP. Ele segue o padrão MVC e tem uma estrutura de pastas padrão para controllers, models, views e layouts. O Yaf oferece recursos como autoload, rotas, configurações de banco de dados e tratamento de erros.
O documento discute o Apache DeltaSpike, um conjunto de extensões portáteis para o CDI que fornece funcionalidades úteis para aplicações Java. O DeltaSpike inclui módulos como segurança, JPA, JSF e agendamento de tarefas. Ele permite injeção de dependência tipada, configuração de projeto, recursos injetáveis e internacionalização de mensagens. O DeltaSpike facilita o desenvolvimento Java usando o CDI sem ser um framework completo.
O documento discute o uso do Docker para desenvolvimento, listando referências sobre configurações de container de Postgres, Pgadmin e Tomcat, além de links sobre ambientes de desenvolvimento com Docker Desktop e WSL 2 e exemplos de containers como Postgres, Pgadmin e Tomcat.
Alta Performance de Aplicações PHP com NginxThiago Paes
Este documento apresenta o servidor Nginx, um servidor HTTP de alto desempenho e gratuito. Ele descreve como instalar e configurar o Nginx para usar com PHP, frameworks como CakePHP e Zend, balanceamento de carga com Apache, cache, autenticação e integração com Memcached.
Docker, facilitando a vida do desenvolvimentoSérgio Lima
Docker facilita a criação e administração de ambientes isolados para aplicações, permitindo que elas funcionem independentemente da infraestrutura. O documento discute o que é Docker, por que usá-lo, como usar imagens e containers básicos, construir imagens personalizadas e encapsular aplicações com Docker Compose. Finalmente, apresenta a plataforma Rancher para gerenciar containers em produção.
Trabalhando com a infraestrutura como software na AWS com Elastic Beanstalk e...Bruno Rodrigues
O documento discute como usar Docker e Elastic Beanstalk para implementar infraestrutura como código, permitindo versionamento, ambientes idênticos para desenvolvimento, teste e produção, alta disponibilidade e escalabilidade. Ele também menciona como a Personare usa essas ferramentas para dar suporte a 6 milhões de usuários por mês em seus serviços e cursos online.
O documento introduz Docker, explicando como ele pode isolar aplicações em containers e simplificar o desenvolvimento e deploy. Ele define Docker, imagens, containers e Dockerfile, mostrando como criar uma imagem passo a passo com Dockerfile e como orquestrar múltiplos containers com Docker Compose.
1) O documento apresenta Mateus Caruccio e seu trabalho com computação em nuvem, OpenShift Origin e OO-Index.
2) OpenShift Origin é uma plataforma open source que permite implantar aplicações em containers auto-escaláveis na nuvem ou em infraestrutura local.
3) OO-Index é um projeto desenvolvido pela comunidade para listar cartuchos e receitas prontas para OpenShift Origin.
Este documento fornece instruções sobre o aplicativo de Controle de Combustível desenvolvido pelo Programa de Inovação Cívica do TCE/PR, descrevendo suas fontes de dados, código-fonte, licenças, como contribuir e testar a aplicação.
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeStefan Teixeira
[1] O documento discute o uso da ferramenta Docker Compose para definir e executar aplicações com múltiplos contêineres, permitindo testar software de forma isolada e reproduzível. [2] Ele apresenta exemplos de como usar o Docker Compose para rodar testes de API, UI, segurança e fumaça junto com uma aplicação e seus serviços dependentes. [3] O documento também destaca pontos de atenção ao usar essa abordagem, como logs, volumes, tempo de inicialização e geração de imagens leves.
- O documento discute a colaboração de uma equipe da UFBA/UEFS em projetos de software livre e aberto (FLOSS), tendo selecionado o framework PHP CakePHP como o projeto de foco.
- A equipe realizou um reconhecimento inicial do CakePHP, identificando suas tecnologias, padrões arquiteturais, código-fonte, licença, repositórios e processos. Em seguida, selecionaram atividades como documentação, tradução e correção de bugs para contribuir.
-
Este documento apresenta as principais tecnologias do framework MEAN (MongoDB, Express, AngularJS e Node.js). Ele discute como construir uma aplicação utilizando essas tecnologias e mostra passo-a-passo a instalação e configuração do ambiente de desenvolvimento com essas ferramentas.
Este documento resume um projeto de colaboração com o framework CakePHP desenvolvido por uma equipe da Universidade Federal da Bahia. O projeto envolveu diversas atividades como documentação, tradução, correção de bugs e testes. A equipe caracterizou o framework, identificou tarefas e realizou contribuições como adicionar instruções para configuração no Windows e traduzir uma seção da documentação para português do Brasil.
O documento discute técnicas para otimizar o desempenho de websites desenvolvidos em PHP. Ele aborda ajustes que podem ser feitos no servidor web e no banco de dados para melhorar a performance, como utilização de módulos do Apache, configuração do MySQL e uso de cache. Além disso, apresenta técnicas de profiling em PHP para identificar gargalos e otimizações como compactação de arquivos e static assets.
- O documento descreve a colaboração de uma equipe da Universidade Federal da Bahia em projetos de código aberto, especificamente no framework PHP CakePHP.
- A equipe selecionou o CakePHP para colaboração depois de analisar várias opções e considerar aspectos como tamanho da comunidade, atividade e qualidade dos artefatos.
- As atividades de colaboração incluíram documentação, tradução, identificação e correção de bugs utilizando a metodologia e padrões de contribuição do projeto CakePHP.
Tchelinux live 2020 - Detectando e Respondendo Incidentes de Segurança em Fro...Jeronimo Zucco
1. O documento discute a implementação da pilha ELK (Elasticsearch, Logstash, Kibana) para centralizar logs e detectar incidentes de segurança nos frontends Nginx da UCS.
2. É descrita a estrutura de rede da UCS e como a pilha ELK foi utilizada para criar dashboards e visualizações que permitem monitorar e identificar ataques.
3. O documento também fornece detalhes sobre como configurar o Nginx para bloquear acessos maliciosos e sobre as funcionalidades avançadas disponíveis no X
Faça seu portal voar usando o plone.app.cachingFabiano Weimar
Este documento discute como melhorar o desempenho de sites Plone usando o pacote plone.app.caching. Ele descreve brevemente o histórico do cache no Plone, como o plone.app.caching melhorou em relação a soluções anteriores e fornece perfis de cache padrão. Além disso, explica como configurar regras de cache e operações de cache comuns.
Detectando e Respondendo Incidentes de Segurança em Frontends Nginx utilizand...Jeronimo Zucco
O documento descreve como a UCS implementou a pilha ELK (Elasticsearch, Logstash, Kibana) para centralizar logs, criar dashboards de monitoramento e detectar incidentes de segurança nos frontends Nginx. Ele detalha a estrutura de rede da UCS, a rotina inicial de notificação de incidentes, a centralização de logs com ELK e como configurar o Nginx para bloquear ataques e extrair logs para notificação via Kibana.
Este documento apresenta uma introdução à programação em Python e ao toolkit Tk. Ele discute os objetivos do curso, as características da linguagem Python, a importância da teoria e da prática, e como usar o interpretador Python de forma interativa.
O documento discute estratégias de cache em diferentes camadas como navegador, rede, servidor e aplicação. O cache melhora o desempenho ao armazenar recursos para uso futuro, evitando novas requisições e cálculos. Cabeçalhos HTTP definem como e quando recursos podem ser cacheados.
Django é um framework web escrito em Python que utiliza o padrão MTV, foi criado originalmente para gerenciar um site jornalístico e se tornou um projeto de código aberto em 2005 sob a licença BSD.
O documento discute as diferenças entre Python, CPython, Pythonico e Cython. Pythonico refere-se a seguir as melhores práticas de codificação Python como definido na PEP 8. CPython é a implementação original da linguagem Python. Cython é uma ferramenta que converte código Python em C para melhorar o desempenho.
O documento discute a linguagem de programação Python. Resume os principais pontos como: (1) Python começou em 1991 e é uma linguagem de alto nível, multi-paradigma e multiplataforma; (2) Python preza pela legibilidade do código e usa tipagem dinâmica e forte; (3) Python tem uma biblioteca padrão extensa e suporte a programação funcional, orientada a objetos, concorrente e web.
1) O documento discute como usar as ferramentas PHP, Memcached e Gearman para distribuir processamento e armazenamento em cache para melhorar escalabilidade e desempenho de aplicações.
2) Memcached é usado para armazenar objetos em memória RAM compartilhada para acelerar acessos frequentes e aliviar bancos de dados.
3) Gearman distribui tarefas assíncronas entre servidores para processamento paralelo e balanceamento de carga.
1) JavaScript é uma linguagem de programação interpretada utilizada para adicionar interatividade às páginas web.
2) O documento explica como incluir código JavaScript nas páginas web de diferentes formas e dá exemplos básicos de JavaScript.
3) São discutidos os tipos de dados em JavaScript, incluindo números, strings e booleanos.
Gitlab - Creating C++ applications with Gitlab CIUilian Ries
Gitlab is a complete tool that integrates everything from project management to product construction. In this talk I will present how a C ++ project can be analyzed, built, tested and deployed using Gitlab.
Conan.io - The C/C++ package manager for DevelopersUilian Ries
Conan is a decentralized package manager for C and C++ that handles both source code and pre-compiled binaries. It addresses issues with building dependencies from source by allowing developers to define packages through recipes that specify dependencies and build instructions. Conan packages are cached locally and identified by name, version, and user/channel to allow isolation of builds. The Conan community contributes package recipes through open source projects on GitHub like the Conan Center and Bincrafters organization.
O documento discute diferentes fluxos de trabalho no Git como Gitflow, Github Flow e Gitlab Flow. Ele também fornece boas práticas como fazer commits pequenos e frequentes, usar branches, testar antes de commitar e escrever boas mensagens de commit. O documento recomenda adotar um fluxo de trabalho consistente e usar o controle de versão para compartilhamento de código, não como sistema de backup.
O documento apresenta os conceitos e práticas do Behavior Driven Development (BDD). O BDD enfatiza a colaboração entre times de negócios, desenvolvimento e teste para definir exemplos de comportamento do software. O BDD utiliza linguagens como Gherkin e ferramentas como Cucumber para documentar e automatizar casos de teste de aceitação com foco no valor para o negócio. O documento também discute desafios e benefícios da abordagem BDD.
This document summarizes a presentation about the Conan package manager for C and C++ applications. It discusses popular C++ libraries that are commonly needed like Boost and Poco. It shows how Conan can be used to add these libraries as dependencies to a project without needing to build them manually. The document provides an example of using Conan to add Boost and Poco to a demo application that calculates an MD5 hash and validates an email address. It also gives an overview of how Conan works, including its package naming scheme, local caching of packages, and community around sharing packages on Bintray.
Conan is a C/C++ package manager that allows defining and consuming packages from source code or pre-compiled binaries. It supports dependency management, configuration, and testing of C/C++ projects. The document provides an example of using Conan to retrieve and link to the Poco networking library in a C++ project, and describes how to create, test, and publish Conan packages from source code.
This document discusses various software development tools for C/C++ projects including source control tools like Git and SVN, build tools for C++, frameworks for C/C++, code review of source code, unit testing and behavior driven development (BDD) testing, static and runtime code analysis, documentation tools, continuous integration for building and deploying, local and remote development environments, and solutions for local development, remote servers, continuous integration, and a datacom case study.
O documento discute o uso de frameworks de teste unitário GTest e Catch no C++, comparando suas funcionalidades, instalação e construção. É apresentada uma motivação para testes unitários e exemplos de código para ambos frameworks, destacando-se que GTest fornece recursos adicionais como geração de relatórios XML enquanto Catch é header-only.
C++11 introduced many new features including type deduction with auto, uniform initialization syntax, rvalue references and move semantics, improved enums, lambda expressions, and smart pointers. Type deduction with auto lets the compiler deduce the type of a variable based on its initializer. Uniform initialization uses curly braces {} and allows narrowing conversions only if explicitly cast. Rvalue references and move semantics allow moving an object to avoid expensive copies by leaving the source object in a valid but unspecified state.
O documento propõe desenvolver um sistema IoT para gerenciar sensores ambientais em um aquário ornamental e compartilhar dados online. O objetivo é automatizar tarefas de tratamento e apresentar estatísticas. A metodologia usará MQTT. O cronograma inclui definição do tema, levantamento bibliográfico, projeto do sistema embarcado, integração com IoT e apresentação final.
2. ETHERNET SWITCHES SOLUTIONS
AGENDA
• O que é a POCO?
• Onde é utilizada
• POCO vs boost
• Como usar no DmOS
• Cache
• Process
• Filesystem
• Application
• Net
• Notification
• DirectoryWatcher
• DynamicAny
• String
3. ETHERNET SWITCHES SOLUTIONS
O que é a POCO?
• POrtable COmponents;
• Coleção de bibliotecas C++;
• Focada em redes e aplicações;
• Altamente portável;
• Lançada em 2005, Áustria;
• Atualmente com 120 colaboradores (github);
• Compacta, ~8MB;
• Documentação de fácil leitura;
• Links:
– http://pocoproject.org
– http://pocoproject.org/documentation
5. ETHERNET SWITCHES SOLUTIONS
Onde é utilizada?
• Sim, é utilizada em sistemas embarcados:
– ACTIA Automotive
●
Sistema de diagnóstico automotivo.
– Schneider Electric
●
Plataforma de automação embarcada.
– StreamUnlimited
●
Aplicação embarcada para TV.
– Starticket
●
Dispositivo para emissão de passagem.
6. ETHERNET SWITCHES SOLUTIONS
POCO vs boost
• Poco é mais compreensível;
• Mais fácil de aprender;
• Possui suporte em pontos que a boost não dá:
– SQLite; Process; Application; Directory Watch
• Desvantagens:
– Comunidade não tão ampla como a boost;
– Documentação não extensa;
– C++11 superou alguns pontos;
– Boost cobre igualmente alguns pontos.
7. ETHERNET SWITCHES SOLUTIONS
Como usar no DmOS
• Versão Debian: 1.3.6 (2009)
• Versão atual: 1.7.3 (maio/2016)
• Versão no DmOS: 1.6.1 (agosto/2015)
10. ETHERNET SWITCHES SOLUTIONS
Como usar no DmOS
• CMake
– find_library(Poco_FOUNDATION PocoFoundation)
– find_library(Poco_UTIL PocoUtil)
– find_library(Poco_Net PocoNet)
– find_library(Poco_DATA PocoData)
– set(Poco_LIBRARIES ${Poco_FOUNDATION} ${Poco_UTIL}
${Poco_Net} ${Poco_DATA})
– target_link_libraries(${PROJECT_NAME} ${Poco_LIBRARIES})
– Bibliotecas com sufixo d são de DEBUG
11. ETHERNET SWITCHES SOLUTIONS
Como usar no DmOS
• No Buildroot:
Simbolo: BR2_PACKAGE_POCO
Localização:
→ Target packages
→ Libraries
→ Other
Filhas:
BR2_PACKAGE_POCO_CRYPTO
BR2_PACKAGE_POCO_DATA
BR2_PACKAGE_POCO_UTIL
BR2_PACKAGE_POCO_NET
12. ETHERNET SWITCHES SOLUTIONS
POCO Cache
• Boost possui circular buffer e multi-index;
• STL possui apenas seus containers;
• Atualmente manipulamos LRU no braço;
• Vantagem de utilizar Poco Cache:
– Container com tamanho limitado;
– Container com tempo limitado;
– Notificação de alteração na cache;
– Acesso ao item mais recente.
13. ETHERNET SWITCHES SOLUTIONS
POCO Cache – Least Recently Used
#include "Poco/LRUCache.h"
Poco::LRUCache<int, std::string> cache(3);
cache.add(1, "Foo"); // |-1-| -> primeiro elemento MRU
Poco::SharedPtr<std::string> elem = cache.get(1); // |-1-|
cache.add(2, "Bar"); // |-2-1-|
cache.add(3, "Qux"); // |-3-2-1-|
// Insere novo elemento mais impopular : "Couse"
cache.add(4, "Couse"); // |-4-3-2-|
assert (*elem == "Foo"); // Conteúdo ainda válido
elem = cache.get(2); // |-2-4-3-|
// Substitui Bar por Baz
cache.add(2, "Baz"); // 2 Eventos: Remove e Add
14. ETHERNET SWITCHES SOLUTIONS
POCO Cache – Time Based Expiration
#include "Poco/ExpireCache.h"
// Por padrão, expira TODOS OS VALORES após 10 min
Poco::ExpireCache<int, std::string> cache;
// Customização para 1 sec
Poco::ExpireCache<int, std::string> cache(1000);
• Uso de Poco::SharedPtr garante o tempo de vida da variável;
• Cuidado ao combinar as funções has() e get()
– Timeout entre as duas chamadas resulta em null pointer.
15. ETHERNET SWITCHES SOLUTIONS
POCO Cache – Time Based Expiration
#include "Poco/UniqueExpireCache.h"
#include “Poco/ExpirationDecorator.h”
// Expira o tempo de vida POR ELEMENTO
Poco::UniqueExpireCache<int, std::string> cache;
// Utiliza pattern Decorator para inserção de elementos
using ExprDecStr = Poco::ExpirationDecorator<std::string>;
cache.add(1, ExprDecStr(“Foo”, 1000)); // 1 sec
cache.add(2, ExprDecStr(“Bar”, 15000)); // 15 sec
poco_assert (cache.size() == 2);
std::this_thread::sleep_for(1s);
assert (cache.size() == 1);
Poco::SharedPtr<ExprDecStr> elem = cache.get(1);
assert (elem.isNull());
16. ETHERNET SWITCHES SOLUTIONS
POCO Cache – Time Based Expiration
#include "Poco/AccessExpireCache.h"
#include “Poco/UniqueAccessExpireCache.h”
// Expira o tempo de vida quando NÃO ACESSADO
Poco::AccessExpireCache<int, std::string> cache;
Poco::UniqueAccessExpireCache<int, std::string> cache;
• Dicas:
– Evitar usar has() com ExpireCache;
– O arcabouço de Cache é extensível:
Poco::AbstractStrategy;
– Poco Cache utiliza std::map, para std::set, utilize
Poco::Void como placeholder.
17. ETHERNET SWITCHES SOLUTIONS
POCO Process
• Boost Process não é oficial;
• STL não possui invocação de processos;
• Atualmente usamos system, popen ou fork;
• Vantagem de utilizar Poco Process:
– Manipular o tempo de vida do processo de forma simples.
18. ETHERNET SWITCHES SOLUTIONS
POCO Process
#include <Poco/Process.h>
Poco::Process::Args args = {“--foo=true”};
Poco::ProcessHandle handle =
Poco::Process::launch("dmos-example", args, "/bin");
// Do something ....
Poco::Process::requestTermination(handle.id());
Poco::Process::wait(handle);
19. ETHERNET SWITCHES SOLUTIONS
POCO Filesystem
• Boost filesystem é oficial;
• STL receberá filesystem no C++17;
• Atualmente usamos string para manipular path;
• Vantagem de utilizar Poco File:
– Manipulação de path (prefix, sufix, absolute, extension);
– Iterar sobre diretórios;
– Validar tipo de arquivo (is [directory | regular file]);
– Buscar arquivo no sistema;
– Validar acessos (can [write | read | exec]);
Boost
24. ETHERNET SWITCHES SOLUTIONS
POCO Filesystem – Glob
#include <Poco/Glob.h>
#include <Poco/File.h>
std::set<std::string> files;
Poco::Glob::glob("/usr/local/include/*/*.h", files);
for (const auto& it : files) {
Poco::File file(it);
assert(file.isFile());
assert(file.canRead());
}
25. ETHERNET SWITCHES SOLUTIONS
POCO Application
• Boost Application não é oficial;
• STL não possui pattern para aplicação;
• Atualmente usamos main e nada mais;
• Vantagem de utilizar Poco Application:
– Manter um padrão para construção da main;
– Manipulação de parâmetros de graça;
– Manipulação de arquivo de configuração de graça;
– Logger de graça;
– Estender sub-sistemas como filhas;
26. ETHERNET SWITCHES SOLUTIONS
POCO Application – Subsystem
// Retorna o nome do aplicativo.
const char* name() const
// Inicializa o sub-sistema
void initialize(Poco::Util::Application& app);
// Prepara o sub-sistema para morrer
void uninitialize(Poco::Util::Application& app);
// Reconfigura o sub-sistema
void reinitialize(Poco::Util::Application& app);
27. ETHERNET SWITCHES SOLUTIONS
POCO Application – Main
class FooApp : public Poco::ServerApplication {
int main(const Poco::ArgVec& args) {
Poco::TaskManager task_manager;
task_manager.start(new FooTask);
WaitForTerminationRequest(); // Aguarda SIGTERM
task_manager.cancelAll();
task_manager.joinAll();
return Poco::Util::Application::EXIT_OK;
}
};
28. ETHERNET SWITCHES SOLUTIONS
POCO Application – Handle Options
class FooApp : public Poco::ServerApplication {
void defineOptions(OptionSet& options)
{
Application::defineOptions(options);
options.addOption(
Option("help", "h", "display help information")
.required(false)
.repeatable(false)
.callback(OptionCallback<FooApp>(this,
&FooApp::handleHelp)));
}
};
29. ETHERNET SWITCHES SOLUTIONS
POCO Application – Configuration File
class FooApp : public Poco::ServerApplication {
void initialize(Poco::Application& self )
{
loadConfiguration();
if (config().hasOption(“serveruri”)) {
std::string ss = config().getString(“serveruri”);
}
Poco::Util::Application::initialize(self );
}
};
30. ETHERNET SWITCHES SOLUTIONS
POCO Application – Logger
class FooApp : public Poco::ServerApplication {
void uninitialize(Poco::Application& self)
{
logger().debug(“Finish Foo Application”);
dmmw_finish(&dmmw);
Poco::Util::Application::uninitialize(self);
}
};
31. ETHERNET SWITCHES SOLUTIONS
POCO Net
• Boost ASIO é oficial porém “complexa”;
• STL networking possui proposta para C++17;
• Atualmente usamos nativo;
• Vantagem de utilizar Poco Net:
– Manipular interface de rede (ip, mac);
– Socket (client/server);
– Conexão (Design Pattern Reactor);
– HTTP (client/server);
– TCP (client/server);
– FTP (client/server).
33. ETHERNET SWITCHES SOLUTIONS
POCO Net – Network Interface
#include <Poco/Net/NetworkInterface.h>
using Poco::Net::NetworkInterface;
NetworkInterface::NetworkInterfaceList interface_list
= Poco::Net::NetworkInterface::list();
for (const auto& it : interface_list) {
printf(“%s - %sn”, it.name(), it.address().toString());
printf("%02X:%02X:%02X:%02X:%02X:02Xn",
it.macAddress()[0], it.macAddress()[1],
it.macAddress()[2], it.macAddress()[3],
it.macAddress()[4], it.macAddress()[5]);
}
34. ETHERNET SWITCHES SOLUTIONS
POCO Notification & Events
• Boost possui signals2;
• STL possui function object;
• Atualmente usamos std::function, functor ou ponteiro;
• Vantagem de utilizar Poco Delegate:
– Pattern Observer;
37. ETHERNET SWITCHES SOLUTIONS
POCO Notification & Events - Delegate
#include <Poco/Delegate.h>
Subject subject;
std::array<Observer, 3> observers;
for (auto& observer : observers) { // Cadastra
subject.event += Poco::delegate(&observer,
&Observer::OnEvent);
}
subject.Notify(42); // Notifica todos os observadores
for (auto& observer : observers) { // Remove
subject.event -= Poco::delegate(&observer,
&Observer::OnEvent);
}
38. ETHERNET SWITCHES SOLUTIONS
POCO DirectoryWatcher
• Boost dir_monitor não é oficial;
• STL não possui suporte a eventos por arquivo;
• Atualmente usamos inotify;
• Vantagem de utilizar Poco DirectoryWatcher:
– Assistir mudanças em diretórios (não bloqueante);
– Manipulação mais fácil do que inotify.
40. ETHERNET SWITCHES SOLUTIONS
POCO DynamicAny
• Boost possui any;
• STL integrará fundamentals TS no C++17;
• Atualmente não usamos este conceito;
• Vantagem de utilizar Poco DynamicAny:
– Utilizar container dinâmico para tipos;
– Converter sem precisar saber o tipo original.
41. ETHERNET SWITCHES SOLUTIONS
POCO DynamicAny – boost::any
#include <boost/any.hpp>
using any_vector = std::vector<boost::any>;
any_vector foo = { 1, "foobar", true, 42.3 };
for (const auto& it : foo) {
std::cout << boost::any_cast<std::string>(it);
}
terminate called after throwing an instance of
'boost::exception_detail::clone_impl<boost::exception_detail::er
ror_info_injector<boost::bad_any_cast> >'
what(): boost::bad_any_cast: failed conversion using
boost::any_cast
42. ETHERNET SWITCHES SOLUTIONS
POCO DynamicAny
#include <Poco/DynamicAny.h>
using dynamic_vector = std::vector<Poco::DynamicAny>;
dynamic_vector dyn_vec = { "foo", 42, 3.14 };
for (const auto& it : dyn_vec) {
std::cout << it.convert<std::string>() << std::endl;
}
43. ETHERNET SWITCHES SOLUTIONS
POCO String
• Boost possui String Algorithms;
• STL possui apenas algorithms;
• Atualmente usamos boost e STL;
• Vantagem de utilizar Poco String:
– Atalho para algoritmos para string;
– Sobre boost, não tem vantagens;
– Economia de fosfato.
44. ETHERNET SWITCHES SOLUTIONS
POCO String – Compare ignore case
• STL
#include <algorithm>
std::equal(left.begin(), left.end(), right.begin(),
[](std::string::value_type a, std::string::value_type b) {
return std::tolower(a) == std::tolower(b);
});
• Poco
#include <Poco/String.h>
Poco::icompare(str1, str2);
• Boost
#include <boost/algorithm/string.hpp>
boost::iequals(str1, str2);
45. ETHERNET SWITCHES SOLUTIONS
POCO String – To lower case
• STL
#include <algorithm>
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
• Poco
#include <Poco/String.h>
Poco::toLower(str);
• Boost
#include <boost/algorithm/string.hpp>
boost::algorithm::to_lower(str);
boost::algorithm::to_lower_copy(str);
46. ETHERNET SWITCHES SOLUTIONS
POCO String – Trim
• STL
#include <algorithm>
str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
• Poco
#include <Poco/String.h>
Poco::trim(str);
• Boost
#include <boost/algorithm/string.hpp>
boost::erase_all::(str, “ ”);