fbpx
Ring Buffer – Antecipe, otimize e evite custos excessivos

Ring Buffer – Antecipe, otimize e evite custos excessivos

Ring Buffer, também chamado de Circular Buffer é uma estrutura de dados muito poderosa. Seu nome já traz o spoiler e entrega o ouro, afinal não deixa de ser um buffer, só que trabalhando em formato de anel/circular. Se você não faz ideia do que seja, vem comigo nessa viagem pois vamos dissecar o assunto e ainda compará-la ao processo de uberização dos objetos custosos.

(mais…)
Azure Functions + Containers (Parte 2/2)

Azure Functions + Containers (Parte 2/2)

No post passado o foco estava nos Agnostic Services e no uso de containers. Agora é hora de olharmos outra questão mais braçal. Rodar Azure Functions 3 com Containers, uma tarefa que deveria ser trivial, mas não é.

Nossa jornada começa com o tutorial Criar uma função no Linux usando um contêiner personalizado, onde no step “Configurar o ambiente local” temos o passo de instalação do “O Azure Functions Core Tools versão 2.7.1846 ou uma versão 2.x posterior.”, que nos redireciona para o post “Trabalhar com o Azure Functions Core Tools“.

Esse step nos dá 2 opções, Azure Functions 2 ou 3. Para instalar a versão 3, local, precisamos executar:

npm install -g azure-functions-core-tools@3

A instalação ocorre perfeitamente.

Mas… ao executar o passo para a criação do projeto, que encontramos no link Criar uma função no Linux usando um contêiner personalizado (primeiro da lista acima)

func init LocalFunctionsProject --worker-runtime dotnet --docker

Somos surpreendidos com um erro.

$ func init LocalFunctionsProject --worker-runtime dotnet --docker
events.js:292
      throw er; // Unhandled 'error' event
      ^

Error: spawn C:\Users\luizc\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin/func ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:268:19)
    at onErrorNT (internal/child_process.js:468:16)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:274:12)
    at onErrorNT (internal/child_process.js:468:16)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'spawn C:\\Users\\luizc\\AppData\\Roaming\\npm\\node_modules\\azure-functions-core-tools\\bin/func',
  path: 'C:\\Users\\luizc\\AppData\\Roaming\\npm\\node_modules\\azure-functions-core-tools\\bin/func',
  spawnargs: [
    'init',
    'LocalFunctionsProject',
    '--worker-runtime',
    'dotnet',
    '--docker'
  ]
}

A solução, está nesse comentário do GitHub.

  1. Go to the installed location.C:\Users\[USERNAME]\AppData\Roaming\npm\node_modules\azure-functions-core-tools in the example above.
  2. Run npm install unzipper@0.10.7
  3. Run npm .\lib\install.js node .\lib\install.js from that directory

Autor: Ankit Kumar

Uma vez executado o procedimento, deixamos de ter um problema na criação do projeto.

$ func init LocalFunctionsProject --worker-runtime dotnet --docker

Writing C:\_dev\docker-definitivo\AzFunc\LocalFunctionsProject\.vscode\extensions.json
Writing Dockerfile
Writing .dockerignore

Daqui pra frente é só seguir o tutorial, instalando o plugin do Visual Studio Code (ms-azuretools.vscode-azurefunctions)

E seguir com debug e teste local.

Aliás, você deu uma olhadinha no Dockerfile?

É peculiar, mas vou deixar para você dar uma olhada e comentar nesse post.

Quer saber mais sobre Azure Functions?

Te indico o material do Renato Groffe no Medium.

Se precisa de um treinamento sobre Serverless + Azure Functions, o Renato, o Milton e o Ericson encabeçam o Azure na Prática que pode te ajudar nessa direção.

Aliás, um passarinho me contou que vai rolar o Azure na Prática #13 – Serverless + Azure Functions #03, e está em pré-venda. Vale lembrar que em pré-venda, são R$ 400 reais de desconto.

Azure na Prática – Serverless + Azure Functions

Vai rolar no dia 29/08/2020 (sábado), com foco em Serverless + Azure Functions e englobando o uso de tecnologias como:
Azure Logic Apps, RabbitMQ, Apache Kafka, SQL Server, MongoDB, Redis, Application Insights, Azure Cosmos DB e GitHub Actions.

Acesse então o link a seguir para efetuar sua inscrição com o desconto especial de pré-venda (apenas R$ 200,00).
Sim, é isso mesmo! De R$ 600 por R$ 200!!!!

Quer saber mais sobre Docker & .NET + Open Source?

No mais, se quiser saber mais sobre Docker e .NET, principalmente Open Source e .NET vem comigo que também tenho muita coisa legal!

Comunidade Solidária Microsoft

Comunidade Solidária Microsoft

Tudo bem aí?

Tá sabendo da Semana Nacional de Tecnologia?

Nessa segunda-feira começou a Semana Nacional de Tecnologia. Sob o slogan “Usando conhecimento para transformar o mundo”.

Antes de mais nada, o que vem a ser esse evento?

  • É gratuito
  • É online
  • Transmitido via Microsoft Teams
  • Mais de 30 horas de palestras
  • Promovido por mais de 11 comunidades

As inscrições para o evento acontecem no sympla. Eu vou colocar o link no final pois preciso explicar como funciona.

Tudo fica mais fácil depois de explicar, eu prometo!
A comunidade solidária

No tópico acima eu disse que o evento é gratuito, certo?! Sim, é 100% gratuito Mas se você quiser e tiver a chance de doar, há várias forma de você fazer isso.

Eu vou te mostrar isso logo abaixo do banner oficial!

Informação Importante

O evento é 100% gratuito.
Então, se não quiser contribuir com nada, não tem problema algum!!!!

Mas… se você tem interesse em contribuir, há várias formas de fazer isso.
Tem modelo de contribuição para PF e PJ, e de uma forma super transparente!

Como contribuir?

se você quer contribuir com refeições

Mesmo sendo absolutamente gratuito, você tem também a chance/oportunidade de contribuir com uma instituição da região que preferir.

No Sympla a primeira opção de ingresso é “INSCRIÇÃO GRATUITA”, e abaixo dela tem mais 11 tipos, que seguem o padrão: “Doação 1 refeição – Região XX”.

Na mesma página tem uma lista de beneficiários por região.

Por exemplo, se você doar 1 refeição para RJ e 1 para Nordeste, os beneficiários serão:

Hospital Pedro Ernesto Boulevard – RIO DE JANEIRO
Centro de Serviço à vida – PERNAMBUCO
Lar Torres de Melo – CEARÁ

Se você optar por doar, cada doação fica no valor de R$ 20,00 (+ R$ 2,50 taxa).

Essa parte de transparência está incrível!

Aliás, sem pressão. A doação é opcional. O evento não diferencia quem faz doação de quem está usando ingresso gratuito.

Mas eu sim: Manda um email para contato@gago.io dizendo pra onde você doou!!!! Vou ficar muito feliz e vou te responder!

Como contribuir?

se você quer contribuir com cestas básicas

Se você quer contribuir com cestas básicas, e geralmente empresas tendem a preferir esse tipo de doação. Aqui tem também essa opção.

Na imagem acima eu destaquei essa parte. É um link de Doação para Empresas, mas qualquer um pode doar.

Esse link aponta diretamente para um form, basta preencher e aguardar o contato.

O fluxo é simples:

  • Você preenche o form
    • Nome
    • Email
    • Telefone
    • Quantidade de Cestas
    • Dados da empresa (nome, site, logomarca)
    • Instituição que deseja apoiar com cestas básicas (tem uma lista de 14 instituições)
  • A organização do evento envia a lista de contribuintes para o distribuidor de cestas básicas da região que você selecionou.
  • O distribuidor entra em contato com você para acertar valores, forma de pagamento.
  • Pronto!!!

Como contribuir?

se você quer contribuir com sua presença

Esse convite não é um convite para fazer você tirar o escorpião do Bolso, são mais de 30 horas de conteúdo.

Então, venha nos assistir.

Eu vou falar de Modernizando Aplicações Legadas com Containers na sexta-feira, dia 5 (jun/2020).

Começa 19:00, mas eu devo começar por volta de 20:30.

Mas, venha às 19, pois Renato Groffe (Microsoft MVP, MTAC) e Milton Camara Gomes (Microsoft MVP, MTAC) falarão sobre Application Insights em Application Insights: identificando problemas de performance em aplicações legadas com um mínimo de esforço.

Legal também, né?!

Como contribuir?

se você quer contribuir compartilhando

Basta encaminhar o link desse post.

Você pode compartilhar com seu chefe, com um amigo do trabalho. Com sua esposa, marido, namorada, namorado.

Se você tem alguém que queira assistir a alguma das palestras do evento…
Compartilhe!

Se você tem alguém que queira doar…
Compartilhe!

Se você tem algum gerente, diretor, head, CTO, CIO, CMO, CTO, CEO que eventualmente possa fazer sentido ajudar, repasse pra ele.

To esperando você na sexta!

Tá marcado então!

Então, bora lá?

Esse link vai te redirecionar para o Sympla onde você vai realizar sua inscrição.

A mecânica das decisões

A mecânica das decisões

Chegou a hora de avaliarmos o mercado, a situação na qual estamos e entender quais movimentos são possíveis. Entender friamente o que pode acontecer e quais são os movimentos possíveis nesse tabuleiro, nos permite antecipar ações para minimizar os efeitos de sermos atingidos de surpresa.

(mais…)
DevShow #EP16 – Home Office

DevShow #EP16 – Home Office

Neste episódio, em meio a uma pandemia do Coronavírus, o assunto ficou muito evidente, então falamos um pouco sobre o Home Office ou como é mais conhecido na atualidade: Trabalho remoto. Quais são as vantagens e desvantagens? Como se manter focado com tantas distrações? Que ferramentas e técnicas você pode utilizar para ser mais produtivo? Para descobrir isso e muito mais, ouça esse episódio no conforto da sua casa!

Para saber as respostas de tudo isso e muito mais, vem com a gente em mais um episódio.

(mais…)
Jornada DevHero – REPRISE

Jornada DevHero – REPRISE

Em janeiro de 2019 produzi um evento chamado Jornada Dev Hero. A jornada do desenvolvedor, mostrando o caminho que eu e diversos amigos trilhamos para chegar onde chegamos.

Eu achei o conteúdo tão rico e tão importante em termos de mensagem e capacidade de transformação que tinha reais planos de transformar em produto. Mas o momento é outro.

Essa jornada rolou em uma semana inteira de lives, foram 5, de segunda a sexta, e estou disponibilizando gratuitamente para você.

O impacto de uma Pandemia e do Isolamento Social

Não é brincadeira, isolamento social é uma necessidade. E assim eu me questionei sobre como poderia ajudar nesse período? O que eu poderia fazer para ajudar quem está em casa?

Eu cheguei a pensar em retransmitir algumas mensagens que pudessem esclarecer a situação e o avanço do coronavirus, já que eu tendo a ficar imerso no assunto, mas não passaria de um telefone sem fio, com chances de cometer gafes enormes no meio do caminho.

Mas eu não desisti da ideia de fazer alguma coisa, apenas desisti da ideia de que essa coisa fosse algo que informasse o status da epidemia. Acho que já tem gente demais falando disso! Na verdade eu sinto que muita gente não está habituada a ficar em casa, eu estou. Eu estou super tranquilo e mentalmente são, por enquanto. Mas conheço gente que já está surtando.

Foi vendo pessoas assim, quase surtando, que pensei no que estou começando a fazer: Diversão, Entretenimento e Aprendizado. Nós nos divertimos e conectamos quando estamos programando.

Então eu resolvi que, pelo menos nesse período de quarentena, quase que diariamente vou parar um tempo para fazer lives, live coding, e publicar alguns vídeos que nunca haviam sido publicados antes.

A ideia é conseguir oferecer uma opção de entretenimento que seja divertida e proveitosa, e dentro do nosso contexto técnico. Eu não sou a pessoa mais bem humorada da minha roda de amigos e portanto não fazia o menor sentido vir para a internet fazer piada. A chance de tomar um processo seria maior do que a probabilidade de alguém rir das piadas sem graças de tiozão!

Mas eu posso sim, resolver algumas questões que eu quero resolver da minha infra, do treinamento (docker definitivo), criando mais conteúdo para que você, por sua vez possa ter mais opções.

O que é a Jornada Dev Hero?

A jornada Dev Hero foi um evento em que eu abri as minhas estratégias de estudo o que eu uso no meu dia-a-dia. Tudo que faço que deu resultado estudando tecnologias e definindo meus próprios roadmaps de estudo.

Contei com presenças que me ajudaram com toda essa semana, incluindo Renato Groffe, Andre Secco, Tatiana Grego.

Foram algumas poucas dezenas de pedidos para que fosse apresentado novamente.

Leia mais nesses 2 links:

Jornada DevHero 2019 – 1ª Edição | https://gago.io/blog/jornada-devhero-2019-1a-edicao/

Jornada DevHero 2019 – 1ª Edição – Resumo | https://gago.io/blog/devhero-resumo/

Calendário

E assim dessa forma estou liberando, a partir dessa segunda-feira, 23 de março, às 8:00, a Jornada Dev Hero.

Vou liberar 1 episódio por dia, 8 horas da manhã: Já está tudo agendado!

Em breve atualizações !

DevShow #EP15 – Testes

DevShow #EP15 – Testes

Neste episódio, o assunto é testes! Testes de unidade, integração, aceitação, carga e diversos outros. Qual a importância de testar sua aplicação? O que pode dar errado se você não fizer? Quais os tipos de teste? Quais os frameworks e ferramentas? Para saber isso e muito mais, aperta o play (sim, funciona, nós testamos).

Para saber as respostas de tudo isso e muito mais, vem com a gente em mais um episódio.

(mais…)
DevShow #EP14 – Carreira TI

DevShow #EP14 – Carreira TI

Neste episódio, falamos um pouco sobre a carreira na área que mais cresce atualmente, a TI (Tecnologia da Informação).

  • É importante fazer faculdade?
  • Certificação serve para alguma coisa?
  • Como classificar um Júnior, pleno e sênior?

Para saber as respostas de tudo isso e muito mais, vem com a gente em mais um episódio.

(mais…)
O dado é do usuário, não é seu, nem do sistema!

O dado é do usuário, não é seu, nem do sistema!

Parece um conceito banal, mas vou contar uma história atual, muito recente e vou contar o reflexo disso operacionalmente. É mais um daqueles casos em que a “boa vontade” é traduzida em processo e procedimentos equivocados que geram mais problemas do que soluções.

O contexto

Recentemente lancei um curso online. Resolvi abstrair toda a complexidade de lidar com meio de pagamento, distribuição, plataforma etc. Tudo isso foi abstraído ao usar uma plataforma all-in-one. Uma vez entregando o treinamento, tem um período de garantia, ok, e em um prazo de mais ou menos 30 dias você já pode sacar o dinheiro. Para sacar o valor, eu posso usar tanto pessoa física quanto pessoa jurídica. Para pessoa física há um limite, o valor que tenho a sacar é maior que esse limite. Portanto, faz todo sentido usar a pessoa jurídica. Ok? Pois é…

Você preenche um cadastro, submete dados da pessoa jurídica, dados financeiros (conta etc).

E aqui começa o problema!

Durante o processo de aprovação, não está claro se é um processo sistêmico ou manual, mas eles alteram o cadastro de PJ para PF, trocando CNPJ por CPF. Sim. Sabe-se Deus o por que, mas eles pegam os dados de PF que estão nos documentos (faz parte enviar dados de PF e PJ), e alteram meu cadastro. Quando eu volto na plataforma, eu vejo meu cadastro alterado, como se eu tivesse feito isso.

Uma vez alterado (por eles), eles aprovam o cadastro da conta! COM O CPF EM VEZ DO CNPJ.

Mas vem aí o efeito cascata dessa atrocidade! O pagamento entra em conflito por conta do CNPJ vs CPF. Nesse loop o pagamento nunca poderá ser realizado de fato.

Parece má vontade?

Sinceramente eu de coração acredito que um percentual muito pequeno das pessoas no mundo de fato são más, possuem esse tipo de maldade. Vontade de querer atrapalhar ou ferrar alguém. Por experiência lidando com os mais variados tipos de profissionais e pessoas, dos mais variados nichos, eu acredito muito mais no poder destrutivo da ignorância/desconhecimento.

Nesse caso a “boa vontade” produziu uma falha no processo, que por sua vez só pode ser percebida em outra etapa. O reflexo imediato é a insatisfação do cliente, mas calma… há mais sobre esse tema.

O DADO É DO USUÁRIO

Se você tem usuários que imputam informações no seu sistema, você não tem AUTORIDADE, para alterar os dados imputados pelo usuário. Não é papel nem da operação, nem do sistema ALTERAR dados imputados pelo usuário.

Você pode tratar, transformar, manipular e produzir novos dados a partir do dado do usuário, mas NUNCA alterá-lo. Nem você, nem teu sistema pode realizar uma edição no dado original, ele precisa ser mantido como foi imputado.

Isso se dá pela necessidade de confiabilidade.

Quando um dado que é alterado, como citei acima, gera desconfiança. Afinal, eu sequer tenho visibilidade a respeito do meu imput. Eu sequer consigo determinar, sem tirar prints, se eu errei no cadastro ou se eles alteraram meu dado. E para chegar a esas conclusão, sim: Eu tirei prints e guardei para comparar, na segunda vez que isso aconteceu (em menos de 15 dias).

O ponto é que não gera só a dúvida sobre o erro. Gera também a insegurança em torno da plataforma. Afinal, se eles tomam para si meu dado, ao ponto de alterá-lo deliberadamente, o que mais poderiam fazer?

Qual o nível de profissionalismo do serviço?

O dado é do usuário, e somente dele, e não pode ser alterado em sua origem.

É exatamente por estar pautado sob esse princípio que o banco recusa o pagamento!

O dado está errado? Recusa! Mas não tenta resolver à moda ……….. !

É assim que profissionais trabalham. O dado está correto, ok. Não está? Recusa-se!

Eu não espero que o banco olhe para o nome do titular da conta e por inferência corrija o dado.

Na verdade eu não espero que ninguém no processo altere os dados que imputei.

As premissas fundamentais e Conclusão

O dado é do usuário.

Usuário preencheu errado, valide e dê feedback. Não corrija o dado.

Você pode enriquecer um cadastro, não há nada de errado nisso, desde que não altere algo que o usuário imputou.

Quer automatizar algo? Crie um motherfucker botão, com uma confirmação, explicando o que acontecerá.

Sua iteração pode automatizar coisas enquanto o usuário consegue “recuperar” a ação, ou seja: Enquanto ele estiver olhando para o sistema, com capacidade de confirmar, recusar a alteração. Mas ele está ciente, ele está vendo a coisa acontecer.

Gravar algo da forma A e do dia para a noite, quando você volta para o sistema e encontra B no teu cadastro?! Isso não é admissível.

Do WCF para ASP.NET Core Web API com Docker no Linux 2/2

Do WCF para ASP.NET Core Web API com Docker no Linux 2/2

Agora é hora de mostrar como podemos tirar proveito dos contratos (interfaces) existentes para promover essa migração. Esse é o momento em que a “SOPA de LETRINHAS” ou melhor, os design patterns fazem sentido. Graças a eles, essa migração que poderia ser dolorosa e desastrosa, se torna algo fácil. Não é simples, mas exige pouco esforço. Esses patterns permitirão que o cliente tenha APENAS A FACTORY alterada nessa transição.

(mais…)
Do WCF para ASP.NET Core Web API com Docker no Linux 1/2

Do WCF para ASP.NET Core Web API com Docker no Linux 1/2

Não sei se você conhece WCF, rodando uma enquete eu percebi que uma parcela considerável sequer conhece WCF. Hoje vamos costurar o assunto com um outro post para que eu possa mostrar como fazer uma migração de WCF pra Web API no ASP.NET Core, rodando em containers Linux.

Nosso cenário de teste é super simples, uma API de Cálculo, que só tem uma operação de SOMA. Sem acesso a dados, uma API tão simples quanto isso.

(mais…)