<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcio Policarpo</title>
    <description>The latest articles on DEV Community by Marcio Policarpo (@marciopolicarpo).</description>
    <link>https://dev.to/marciopolicarpo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F881261%2F34301bf8-3216-4e3a-a182-a90fe5c3c287.jpeg</url>
      <title>DEV Community: Marcio Policarpo</title>
      <link>https://dev.to/marciopolicarpo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marciopolicarpo"/>
    <language>en</language>
    <item>
      <title>Guard Rail AI</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Mon, 31 Aug 2026 01:57:16 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/guard-rail-ai-3ka3</link>
      <guid>https://dev.to/marciopolicarpo/guard-rail-ai-3ka3</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;No projeto de hoje vou demonstrar o uso do Guard Rail no contexto de IA.&lt;/p&gt;

&lt;p&gt;O termo &lt;em&gt;guardrail&lt;/em&gt; tem origem inglesa tendo surgido por volta de 1860, para designar trilhos adicionais instalados em ferrovias nas curvas mais acentuadas, afim de evitar o descarrilamento de trens.&lt;/p&gt;

&lt;p&gt;No contexto da construção civil o conhecemos com &lt;em&gt;guarda corpo&lt;/em&gt; em residências ou passarelas.&lt;/p&gt;




&lt;p&gt;No contexto de IA o &lt;em&gt;guard-rail&lt;/em&gt; (ou &lt;em&gt;guardrail&lt;/em&gt;) pode funcionar como barreira à:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;geração de conteúdo inseguro&lt;/li&gt;
&lt;li&gt;falha de segurança&lt;/li&gt;
&lt;li&gt;alucinações&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Inteligências artificiais generativas são &lt;em&gt;probabilísticas&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Isso significa que ela &lt;em&gt;calcula&lt;/em&gt; a probabilidade de cada próximo &lt;em&gt;token&lt;/em&gt; com base no contexto e vai construindo a resposta a partir dessa probabilidade. &lt;/p&gt;

&lt;p&gt;Entre a pergunta e a resposta existe um processo chamado &lt;em&gt;tokenização&lt;/em&gt;, responsável por transformar texto puro em pequenas unidades chamadas tokens. Um token pode representar uma palavra inteira, partes de uma palavra, números ou símbolos.&lt;/p&gt;

&lt;p&gt;Em seguida esses tokens são convertidos em representações numéricas, usadas pelos modelos para compreender o contexto.&lt;/p&gt;

&lt;p&gt;Cada novo token gerado é usado para calcular a probabilidade dos próximos tokens.&lt;/p&gt;

&lt;p&gt;Isso explica porque obtemos diferentes respostas para a mesma pergunta, por exemplo.&lt;/p&gt;




&lt;h2&gt;
  
  
  Arquitetura
&lt;/h2&gt;

&lt;p&gt;A stack escolhida para este projeto é a seguinte:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;: c# / .net10&lt;br&gt;
&lt;strong&gt;ORM&lt;/strong&gt;: EF Core&lt;br&gt;
&lt;strong&gt;Banco de dados&lt;/strong&gt;: SQLite&lt;br&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React 19 com TypeScript&lt;br&gt;
&lt;strong&gt;LLM&lt;/strong&gt;: Gemini 3.5-flash-lite&lt;/p&gt;

&lt;p&gt;Para o backend c#/.net10 com EF orquestrando a persistência, é a escolha certa por fazerem parte do mesmo ecosistema.&lt;/p&gt;

&lt;p&gt;SQLite foi o escolhido da vez porque não tem dependência externa (ele é &lt;em&gt;self-contained&lt;/em&gt;), leve e de fácil configuração.&lt;/p&gt;

&lt;p&gt;ReactJS+Typescript pela proximidade com c# resultando em menor curva de aprendizado.&lt;/p&gt;

&lt;p&gt;Gemini 3.5-flash-lite por ser gratuito e rápido, além de não ser necessário fazer nenhuma configuração adicional. Apenas com uma conta Google já é possível criar uma &lt;em&gt;apikey&lt;/em&gt; válida para uso.&lt;/p&gt;


&lt;h2&gt;
  
  
  Funcionamento
&lt;/h2&gt;

&lt;p&gt;A aplicação foi projetada para enviar à LLM o prompt digitado pelo usuário para processamento, retornando uma resposta.&lt;/p&gt;

&lt;p&gt;Podemos filtrar ou não o assunto para validar a aplicação do filtro.&lt;/p&gt;

&lt;p&gt;A inclusão deliberada de palavras para filtrar fará com que o &lt;em&gt;guardrail&lt;/em&gt; entre em ação, realizando uma segunda chamada à LLM usando-a agora como juiz (conceito de &lt;em&gt;LLL-as-judge&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;A escolha do modelo para ser gerador de conteúdo e juiz ao mesmo tempo foi proposital, por ser um projeto didático.&lt;/p&gt;

&lt;p&gt;Recomendo fortemente que projetos reais usem modelos diferentes para geração de conteúdo e juiz,  afim de mitigar o risco de &lt;em&gt;falsos negativos&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Para fins de auditoria adicionei um histórico do que foi perguntado e se houve ou não bloqueio da resposta.&lt;/p&gt;


&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;Prompt sem filtro.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fifdwqfppllmg8odqksa3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fifdwqfppllmg8odqksa3.jpeg" alt=" " width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Prompt com filtro&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fadgt43zh672fek2v8l0i.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fadgt43zh672fek2v8l0i.jpeg" alt=" " width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Histórico de perguntas e resultado &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3syuh4etv40da6ccqzhs.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3syuh4etv40da6ccqzhs.jpeg" alt=" " width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Repositório
&lt;/h2&gt;

&lt;p&gt;O repositório é público e está acessível neste endereço:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/lima-marcio" rel="noopener noreferrer"&gt;
        lima-marcio
      &lt;/a&gt; / &lt;a href="https://github.com/lima-marcio/guard-rail-ai" rel="noopener noreferrer"&gt;
        guard-rail-ai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Guard Rail IA&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A &lt;strong&gt;didactic&lt;/strong&gt; project that demonstrates, in practice, how a &lt;strong&gt;"guard"
(guardrail)&lt;/strong&gt; layer can prevent information leakage or misuse of generative AI
tools inside a company.&lt;/p&gt;
&lt;p&gt;The user types a question and, optionally, provides sensitive topics
(separated by &lt;code&gt;;&lt;/code&gt;) that shouldn't appear in the answer. The question is sent
to a free LLM (Gemini) &lt;strong&gt;with no content filtering applied by the provider&lt;/strong&gt;
— this "raw" behavior is deliberate, to highlight the risk of using an AI
tool without controls. A separate layer of the application, the &lt;strong&gt;guard&lt;/strong&gt;
analyzes the answer and, if it relates to any of the given topics, replaces
the content with &lt;code&gt;"Conteúdo não permitido"&lt;/code&gt; ("Content not allowed").&lt;/p&gt;
&lt;p&gt;The guard &lt;strong&gt;is not an LLM feature&lt;/strong&gt; — it's an independent application layer
exactly the pattern a company would apply on top of any third-party AI tool
to enforce its own usage policies, without depending on…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/lima-marcio/guard-rail-ai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;🤖 A geração de conteúdo ganhou novos contornos com o uso massivo da IA, que tornou possível produzir resultados em uma velocidade sem precedentes.&lt;/p&gt;

&lt;p&gt;⚠️ Entretanto, supervisionar tudo o que é produzido tornou-se uma tarefa hercúlea e, muitas vezes, impraticável.&lt;/p&gt;

&lt;p&gt;🔍 Nesse cenário, estabelecer mecanismos capazes de avaliar e filtrar as respostas antes que cheguem ao usuário tornou-se essencial.&lt;/p&gt;

&lt;p&gt;🛡️ Em essência, trata-se de garantir que a IA opere dentro de limites previamente estabelecidos, proporcionando maior segurança, controle e previsibilidade sobre o conteúdo gerado.&lt;/p&gt;




&lt;h2&gt;
  
  
  IMPORTANTE
&lt;/h2&gt;

&lt;p&gt;🔒 Os modelos de IA geralmente possuem mecanismos de segurança próprios, capazes de identificar e restringir respostas a determinadas solicitações que envolvam conteúdos sensíveis ou que não sejam permitidos pelas políticas da plataforma ou pela legislação vigente em cada país.&lt;/p&gt;




&lt;p&gt;Obrigado pela leitura.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>csharp</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>Sistema de assinaturas recorrentes</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Fri, 21 Aug 2026 00:57:19 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/sistema-de-assinaturas-recorrentes-1ikg</link>
      <guid>https://dev.to/marciopolicarpo/sistema-de-assinaturas-recorrentes-1ikg</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Desenvolvedores são seres predominantemente imaginativos, pensantes, incansáveis na busca para resolver este ou aquele problema. Indivíduos constantemene bombardeados com ideias muitas vezes mirabolantes e totalmente sem sentido mas que servem de alicerce para construção de soluções robustas.&lt;/p&gt;

&lt;p&gt;Entretanto, a maior dificuldade para tirar uma ideia do papel é o tempo. A escasses dele nos empurra para escolhas inapropriadas afetando nossas entregas e criando um débito técnico (sim, ele existe) impagável. &lt;/p&gt;

&lt;p&gt;De certa forma porém, o suposto vilão também nos ajuda a ficar nos trilhos porque reduz nossa capacidade de gerar débito técnico.&lt;/p&gt;




&lt;p&gt;Com o uso cada vez maior de IA generitivas e agentes de IA essa barreira caiu por terra e até aqueles projetos há meses (quiçá anos) guardados no fundo da gaveta, protegidos por teias de aranha, podem virar um produto ou serviço de verdade.&lt;/p&gt;

&lt;p&gt;E poucas coisas dão tanto prazer quanto ver uma ideia se concretizar, não é mesmo?!&lt;/p&gt;




&lt;h2&gt;
  
  
  Arquitetura
&lt;/h2&gt;

&lt;p&gt;O projeto consiste em um sistema para controle de assinaturas usando o conceito de máquina de estados.&lt;/p&gt;

&lt;p&gt;A stack tecnológica é esta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: c# / net10&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ORM&lt;/strong&gt;: Entity Framework Core&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Banco de dados&lt;/strong&gt;: PostgreSQL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autenticação&lt;/strong&gt;: JWT&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: ReactJS 19 com Typescript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infraestrutura&lt;/strong&gt;: Docker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O que me motivou a escolher essa stack foi a experiência com C#, especialmente no backend onde as regras de negócio ficam &lt;em&gt;hospedadas&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;EF Core veio na esteira o que facilitou o desenvolvimento da aplicação.&lt;/p&gt;

&lt;p&gt;PostgreSQL foi a escolha natural para um projeto candidato a MVP. Ele é robusto sem ser pesado, tem boa performance geral e não está &lt;em&gt;preso&lt;/em&gt; a nenhum ecossistema.&lt;/p&gt;

&lt;p&gt;Autenticação JWT, nem preciso falar muita coisa porque é largamente adotada além de ser uma tecnologia consolidada.&lt;/p&gt;

&lt;p&gt;Já no frontend fui &lt;em&gt;compelido&lt;/em&gt; a usar a ReactJS com Typescript o que fez todo sentido pra mim por conta da proximidade entre C# e Typescript.&lt;/p&gt;

&lt;p&gt;Docker foi a escolha óbvia para agilizar o processo de validação da aplicação, mantendo um ambiente totalmente isolado.&lt;/p&gt;




&lt;h2&gt;
  
  
  Projeto
&lt;/h2&gt;

&lt;p&gt;A ideia para este projeto é controlar assinaturas, planos, assinantes, troca de planos (de trial para pago por exemplo), etc. Em suma uma &lt;strong&gt;Máquina de estados&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A decisão de não integrar com plataformas de pagamento reais foi deliberada, porque o objetivo desta fase é validar o processo em si. &lt;/p&gt;




&lt;h2&gt;
  
  
  Aprendizado
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Não existe sistema sem bug&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Uma das verdades universais quando falamos de desenvolvimento de sistemas.&lt;/p&gt;

&lt;p&gt;Geralmente nasce daquele código que &lt;em&gt;deveria estar comentado&lt;/em&gt;, de variáveis com valor fixo (essa é a melhor...rs) e uma infinidade de coisas que apenas vão se acumulando durante o desenvolvimento e deixamos para ver quando der. &lt;/p&gt;

&lt;h2&gt;
  
  
  A IA não mudou isso. Apenas acelerou a criação de débito técnico.
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Velocidade não é sinônimo de qualidade&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O projeto ficou &lt;em&gt;pronto&lt;/em&gt; em um curto espaço de tempo, admito. Porém tive o cuidado de verificar tudo o que estava sendo construído. &lt;/p&gt;

&lt;p&gt;Nesse momento notei que métodos inteiros eram copiados para uma &lt;em&gt;versão 2&lt;/em&gt; com os ajustes que eu pedia, transformando o antigo em &lt;strong&gt;lixo&lt;/strong&gt;. Ou seja, mais débito técnico.&lt;/p&gt;

&lt;p&gt;O lado positivo disso é que nem tudo está perdido. Alguns ajustes no arquivo &lt;strong&gt;.md&lt;/strong&gt; resultou em código mais limpo.&lt;/p&gt;

&lt;p&gt;Essa velocidade trouxe um efeito curioso: um programador médio levaria 4 semanas para criar código considerado mediano. Com o advento da IA o mesmo programador médio levaria 4 horas para produzir o mesmo código mediano.&lt;/p&gt;

&lt;h2&gt;
  
  
  Em outras palavras a velocidade aumentou mas a qualidade do código não.
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Quanto mais tempo investimos na fase de planejamento menos tempo gastamos na fase de produção&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pra mim essa é uma das verdades universais no desenvolvimento de sistemas.&lt;/p&gt;

&lt;p&gt;Seja &lt;em&gt;chato&lt;/em&gt; na análise dos requisitos, faça perguntas mesmo que a resposta lhe pareça óbvia, porque as dúvidas que surgem durante o desenvolvimento são mais relacionadas com regras de negócio do que de lógica ou arquitetura.&lt;/p&gt;

&lt;p&gt;Por essa razão decidi colocar mais energia na etapa de planejamento, buscando entender a fundo cada fase do projeto, reduzindo a chance de interrupções e de tabela ganhando velocidade.&lt;/p&gt;




&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Diagrama arquitetural&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0qt4ddp0igj7tv45o86c.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0qt4ddp0igj7tv45o86c.jpeg" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Crédito&lt;/strong&gt;: &lt;a href="https://github.com/tt-a1i/archify" rel="noopener noreferrer"&gt;https://github.com/tt-a1i/archify&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Planos&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpbkknc359bt50q3l6mw4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpbkknc359bt50q3l6mw4.jpg" alt=" " width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Assinantes&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgnzr3jmm2abr75v8rsqn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgnzr3jmm2abr75v8rsqn.jpg" alt=" " width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Assinaturas&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3i37m4xfxx4qow2crcin.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3i37m4xfxx4qow2crcin.jpg" alt=" " width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;br&gt;
A IA veio para ajudar. Isso é fato.&lt;/p&gt;

&lt;p&gt;Trata-se de uma ferramenta valiosa, assim como o &lt;a href="https://stackoverflow.com/questions" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt; foi. (não estou decretando a morte de ninguém, ok?!..rs)&lt;/p&gt;

&lt;p&gt;Então não seja radical se recusando a usá-la ou delegando a ela 100% da tarefa incluindo decisões importantes para o projeto.&lt;/p&gt;

&lt;p&gt;E como até o que é óbvio precisa ser dito &lt;em&gt;IA não sabe programar&lt;/em&gt; e por isso depende de nós para orientá-la.&lt;/p&gt;




&lt;h1&gt;
  
  
  Importante
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;o projeto atual foi desenvolvido com fins meramente educativos&lt;/li&gt;
&lt;li&gt;o código completo está no meu &lt;a href="https://github.com/lima-marcio/subscription-billing" rel="noopener noreferrer"&gt;repositório&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Obrigado pela leitura. &lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>docker</category>
      <category>postgres</category>
      <category>ai</category>
    </item>
    <item>
      <title>Laravel 11</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Sat, 16 Mar 2024 02:39:55 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/laravel-11-22h9</link>
      <guid>https://dev.to/marciopolicarpo/laravel-11-22h9</guid>
      <description>&lt;p&gt;Enfim, chegou.&lt;br&gt;
A versão 11 da Framework PHP mais conhecida do mundo foi liberada esta semana, mais precisamente no dia 12/03.&lt;/p&gt;

&lt;p&gt;Por padrão, o suporte a correções de erros é fornecido por 18 meses e correções de segurança por até 2 anos.&lt;/p&gt;

&lt;p&gt;Por essa razão, recomenda-se a atualização para aplicações que utilizem versões anteriores à 9 da framework, que deixou de ter suporte a correções de segurança em 6 de fevereiro deste ano (2024).&lt;/p&gt;

&lt;p&gt;A tabela a seguir traz a política de segurança para a framework.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztl9qix8bgws684isg8a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztl9qix8bgws684isg8a.jpg" alt="Image description" width="649" height="296"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Banco de dados padrão da aplicação
&lt;/h2&gt;

&lt;p&gt;Acostumado a ver a dupla Laravel/MySQL desde os primórdios da framework, confesso que fiquei surpreso com a mudança para o SQLite a partir da versão 11.&lt;/p&gt;

&lt;p&gt;Por conta desta mudança, um ajuste no PHP será necessário.&lt;/p&gt;

&lt;p&gt;Mas não se preocupe porque é uma tarefa bem simples e pode ser realizada com qualquer editor de textos.&lt;/p&gt;

&lt;p&gt;No computador, abra a pasta de instalação do PHP que você estiver utilizando e localize o arquivo &lt;em&gt;php.ini&lt;/em&gt;. Navegue no arquivo até encontrar a linha que contenha esta informação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;;extension=pdo_sqlite;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Descomente a linha removendo o ponto-e-vírgula do início, ficando conforme a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;extension=pdo_sqlite;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Salve o arquivo, fechando-o em seguida.&lt;/p&gt;




&lt;p&gt;Já, do lado do Laravel, dois arquivos foram modificados. &lt;/p&gt;

&lt;p&gt;O primeiro contém as configurações de acesso a vários bancos de dados bem como especifica qual será o banco de dados padrão da aplicação.&lt;/p&gt;

&lt;p&gt;Estamos falando do &lt;em&gt;config/database.php&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0sgi2265iyytzk1tcjz7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0sgi2265iyytzk1tcjz7.jpg" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E o segundo é o arquivo de configuração das variáveis de ambiente da aplicação, mais conhecido como &lt;em&gt;.env&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fymozp4ay5jtsxnhdcyc4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fymozp4ay5jtsxnhdcyc4.jpg" alt="Image description" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perceba que neste segundo arquivo, as informações para conexão com MySQL estão comentadas enquanto que a variável DB_CONNECTION está definida para SQLite.&lt;/p&gt;




&lt;h2&gt;
  
  
  Instalando
&lt;/h2&gt;

&lt;p&gt;O processo de instalação para a versão 11 do Laravel não mudou e pode ser feita pelo &lt;a href="https://getcomposer.org/" rel="noopener noreferrer"&gt;Composer&lt;/a&gt;, que é o gerenciador de dependências do PHP.&lt;/p&gt;

&lt;p&gt;Após a instalação de um novo projeto, iniciamos o servidor e nos deparamos com esta página de boas vindas:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8gyu62df97zl87dpjql.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8gyu62df97zl87dpjql.jpg" alt="Image description" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com o novo projeto instalado, pude notar que as maiores mudanças foram estruturais, otimizando a organização dos arquivos e melhorando outros aspectos da aplicação, como por exemplo, o incremento de 4 comandos novos para o Artisan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:class
php artisan make:enum
php artisan make:interface
php artisan make:trait
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os comandos criam, respectivamente, classes, enumeradores, interfaces e 'traits' (trechos de códigos utilizados com frequência).&lt;/p&gt;




&lt;p&gt;Outra melhoria é o suporte a conversão dos modelos utilizando métodos em detrimento às propriedades, simplificando as definições de conversão. A documentação oficial para esta melhoria pode ser consultada &lt;a href="https://laravel.com/docs/11.x/upgrade#eloquent-model-casts-method" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Há ainda outros aspectos desta versão que trarei em breve.&lt;/p&gt;

&lt;p&gt;Boa leitura e até breve. 😎&lt;/p&gt;

</description>
    </item>
    <item>
      <title>5 sites para se manter 'afiado' em JS</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Tue, 06 Feb 2024 01:20:58 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/5-sites-para-se-manter-afiado-em-js-3aij</link>
      <guid>https://dev.to/marciopolicarpo/5-sites-para-se-manter-afiado-em-js-3aij</guid>
      <description>&lt;p&gt;JavaScript é a linguagem de programação mais requisitada pelas empresas mundo afora e considerada a 'queridinha' por cerca de 60 mil entrevistados nos últimos cinco anos (fonte: &lt;a href="https://insights.stackoverflow.com/survey" rel="noopener noreferrer"&gt;StackOverflow Survey&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Boa parte desse sucesso está atrelado à evolução tecnológica dos computadores e aos smartphones como conhecemos hoje.&lt;/p&gt;

&lt;p&gt;Se voltarmos um pouquinho no tempo, mais especificamente para meados da década de 1990, as páginas web eram predominantemente estáticas, com pouca ou nenhuma interação com o usuário.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5b2ik2dp17h4a2bsi30v.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5b2ik2dp17h4a2bsi30v.jpg" alt="Página de internet do Yahoo!" width="543" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O JavaScript não nasceu com o propósito de resolver esse problema especificamente, mas é inegável que a linguagem trouxe vida às paginas web, com boa parte do processamento sendo realizado no lado do cliente.&lt;/p&gt;

&lt;p&gt;E acompanhar a evolução de qualquer tecnologia é uma tarefa árdua. &lt;/p&gt;

&lt;p&gt;Especialmente quando falamos de uma linguagem de programação tão versátil que é a 'espinha dorsal' de incontáveis bibliotecas e frameworks.&lt;/p&gt;

&lt;p&gt;Por essas razões resolvi compilar uma lista com 5 melhores sites (na minha opinião) para aprendizado e, principalmente, para testar nosso conhecimento através de desafios que abrangem diversos cenários e níveis de experiência na linguagem.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. JSChallenger
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8pr81c785duw4s179yw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8pr81c785duw4s179yw.jpg" alt="JSChallenger" width="316" height="78"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E o primeiro deles é o &lt;a href="https://www.jschallenger.com/" rel="noopener noreferrer"&gt;JSChallenger&lt;/a&gt; cuja proposta é ensinar JavaScript através de trilhas separadas por seções, ou a partir do zero. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2d73bbxbelaq2649fd8b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2d73bbxbelaq2649fd8b.jpg" alt="Image description" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As seções são mais indicadas para quem já tem algum conhecimento na linguagem porque focam em situações bem específicas.&lt;/p&gt;

&lt;p&gt;Existe uma seção de desafios que pode ser acessada através do menu "JavaScript practice".&lt;/p&gt;

&lt;h3&gt;
  
  
  A quem se destina?
&lt;/h3&gt;

&lt;p&gt;Pessoas que já possuem algum conhecimento em programação, não necessariamente em JavaScript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qual o investimento?
&lt;/h3&gt;

&lt;p&gt;Atualmente o site é gratuito mas possui uma área 'Premium' acessível através do pagamento de uma taxa (não especificada) em euros, e onde serviços adicionais são fornecidos.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Freecodecamp
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F739rf5lu9ci3h3p6vggw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F739rf5lu9ci3h3p6vggw.jpg" alt="Image description" width="235" height="47"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este site é focado no aprendizado de diversas tecnologias e linguagens de programação, fornecendo certificado de conclusão ao final de cada curso.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopg85387dschtusrbtnm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopg85387dschtusrbtnm.jpg" alt="Image description" width="755" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O diferencial deste site é a existência de um curso de inglês voltado a melhorar o vocabulário dos desenvolvedores.&lt;/p&gt;

&lt;p&gt;E para concluir há uma seção específica para ajudar nas entrevistas de trabalho, com desafios de matemática, algoritmos e estrutura de dados.&lt;/p&gt;

&lt;h3&gt;
  
  
  A quem se destina?
&lt;/h3&gt;

&lt;p&gt;Embora outras linguagens estejam disponíveis, possuir algum conhecimento em JavaScript ajudará bastante.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qual o investimento?
&lt;/h3&gt;

&lt;p&gt;Totalmente gratuito. A única exigência é que o usuário se registre no site afim da armazenar a evolução do aprendizado e emitir os certificados. &lt;/p&gt;

&lt;p&gt;O site oferece benefícios adicionais para doadores, como por exemplo não mostrar mais uma janela solicitando doações.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. JSCodeBox
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxb8ak3w60p04qxufvsp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxb8ak3w60p04qxufvsp.jpg" alt="Image description" width="279" height="62"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O site &lt;a href="https://jscodebox.com/" rel="noopener noreferrer"&gt;JSCodeBox&lt;/a&gt; também oferece trilhas para aprendizado e desafios em JavaScript.&lt;/p&gt;

&lt;p&gt;Mas o que me fez adicioná-lo à lista é que ele testa a solução que foi escrita pelo usuário.&lt;/p&gt;

&lt;p&gt;Essa abordagem é bem próxima às entrevistas reais, onde somos direcionados para uma plataforma que vai avaliar o código do candidato.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzvqpp15f9jglnc31teq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzvqpp15f9jglnc31teq.jpg" alt="Image description" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O seu progresso pode ser salvo no navegador ou no site através de uma conta gratuita. &lt;/p&gt;

&lt;h3&gt;
  
  
  A quem se destina?
&lt;/h3&gt;

&lt;p&gt;Pessoas com algum conhecimento em programação (em qualquer linguagem) e que já tiveram contato com JavaScript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qual o investimento?
&lt;/h3&gt;

&lt;p&gt;Nenhum. Como citado anteriormente, vale à pena criar uma conta gratuita para guardar seu progresso, continuando de onde parou a partir de qualquer computador.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Edabit
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbwyzf5l8ob5szs5frag.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbwyzf5l8ob5szs5frag.jpg" alt="Image description" width="139" height="52"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O &lt;a href="https://edabit.com/" rel="noopener noreferrer"&gt;Edabit&lt;/a&gt; possui desafios de várias linguagens de programação e também tutoriais, mas estes somente para JavaScript e Python.&lt;/p&gt;

&lt;p&gt;Os desafios estão divididos em seis níveis, indo do 'muito fácil' até o 'expert' e para todos existe uma variedade de 'ajudas' disponíveis'.&lt;/p&gt;

&lt;p&gt;Após uma introdução do problema proposto, há uma caixa para você implementar o código da solução que será validado. Estando 'ok', o código é submetido ao site para validar a resolução.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1m3kd4hpjskzc2mrxbq6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1m3kd4hpjskzc2mrxbq6.jpg" alt="Image description" width="700" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caso você esteja com dificuldade para solucionar o desafio, o site oferece alguns recursos adicionais, como links para páginas externas como &lt;a href="https://stackoverflow.com/" rel="noopener noreferrer"&gt;StackOverflow&lt;/a&gt; e &lt;a href="https://www.w3schools.com/" rel="noopener noreferrer"&gt;W3Schools&lt;/a&gt; por exemplo.&lt;/p&gt;

&lt;p&gt;Se mesmo assim você ainda estiver com dificuldades, é possível descrever sua dúvida e aguardar uma resposta ou ler as repostas de outros usuários.&lt;/p&gt;

&lt;h3&gt;
  
  
  A quem se destina?
&lt;/h3&gt;

&lt;p&gt;Pessoas com conhecimento básico em programação, independentemente da linguagem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qual o investimento?
&lt;/h3&gt;

&lt;p&gt;Gratuita mas os recursos mais relevantes são pagos.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Codewars
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjj1deqdmlr5oy6p6an6f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjj1deqdmlr5oy6p6an6f.jpg" alt="Image description" width="174" height="58"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Provavelmente o mais conhecido da comunidade de desenvolvimento, &lt;a href="https://www.codewars.com/" rel="noopener noreferrer"&gt;CodeWars&lt;/a&gt; traz desafios para quase todas as linguagens de programação.&lt;/p&gt;

&lt;p&gt;Chamados de Kata, que significa "...um conjunto de movimentos de ataque e defesa em uma luta imaginária" (fonte: &lt;a href="_https://pt.wikipedia.org/wiki/Kata_"&gt;Wikipedia&lt;/a&gt;), os desafios estão organizados em categorias sendo possível filtrá-los de forma a atender melhor as necessidades do usuário.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fet0d5z11g6n4pumh45f9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fet0d5z11g6n4pumh45f9.jpg" alt="Image description" width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Entre os diferenciais do CodeWars é que qualquer usuário registrado pode propor seus próprios desafios.&lt;/p&gt;

&lt;p&gt;Para finalizar o perfil de usuário pode ser configurado por nível de experiência e linguagens preferidas.&lt;/p&gt;

&lt;h3&gt;
  
  
  A quem se destina?
&lt;/h3&gt;

&lt;p&gt;Pessoas com conhecimento intermediário em programação. &lt;/p&gt;

&lt;h3&gt;
  
  
  Qual o investimento?
&lt;/h3&gt;

&lt;p&gt;Gratuita mas outros recursos podem ser desbloqueados com uma assinatura mensal de 5 dólares, no plano chamado de CodeWars Red.&lt;/p&gt;

&lt;p&gt;O site é bem completo e à primeira vista pode 😬 assustar. &lt;/p&gt;

&lt;p&gt;Mas com dedicação e afinco tudo é possível. 😄&lt;/p&gt;




&lt;p&gt;Mais do que trazer uma lista modesta de plataformas de aprendizado, o objetivo deste artigo é incentivar você leitor a continuar 📚 estudando e se atualizando.&lt;/p&gt;

&lt;p&gt;Até a próxima. 😎&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>Robôs humanóides de uso geral?!</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Sat, 27 Jan 2024 15:52:37 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/robos-humanoides-de-uso-geral-525i</link>
      <guid>https://dev.to/marciopolicarpo/robos-humanoides-de-uso-geral-525i</guid>
      <description>&lt;p&gt;Em recente artigo publicado por Bill Gates, ele lista algumas startups focadas em desenvolvimento de robôs, nas quais ele acredita estarem no caminho certo.&lt;/p&gt;

&lt;p&gt;Robôs já fazem parte do nosso dia a dia, e os primeiros que nos veem à mente são robôs das linhas de montagem de veículos, que são programados para realizarem bem uma única tarefa. &lt;/p&gt;

&lt;p&gt;Soldar peças ou pintar a carroceria do veículo que está sendo produzido são apenas dois exemplos de tarefas únicas executadas por robô.&lt;/p&gt;

&lt;p&gt;Porém de acordo com o artigo, robôs humanóides que possam ser programados para tarefas mais complexas serão mais úteis. &lt;/p&gt;

&lt;p&gt;A Amazon por exemplo, 'adotou' o Digit, um robô programado para movimentar caixas vazias após serem esvaziadas pelos funcionários.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flksrfvfqpizqqagnjdxy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flksrfvfqpizqqagnjdxy.jpg" alt="Digit na Amazon" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Crédito da imagem: Jason Redmond/AFP via Getty Images&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Agility
&lt;/h2&gt;

&lt;p&gt;Com sede em Corvallis, no Óregon, a &lt;a href="https://agilityrobotics.com/" rel="noopener noreferrer"&gt;Agility&lt;/a&gt; tem se destacado no desenvolvimento de robôs para atividades que só poderiam ser executadas por seres humanos.&lt;/p&gt;

&lt;p&gt;Aindrea Campbell, COO da Agility, comparou a criação da fábrica de robôs às linhas de montagem do início do século XX, quando muitas companhias adotaram esse modelo de produção.&lt;/p&gt;

&lt;p&gt;"Permitir que humanos sejam mais humanos" é a visão de futuro imaginada pela Agility, onde criar robôs para o trabalho é permitir que a humanidade prospere.&lt;/p&gt;

&lt;p&gt;Além da sede em Corvallis, a Agility Robotics tem escritórios em Palo Alto, no estado da Califórnia, e em Pittsburgh no estado da Pensilvânia.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tevel
&lt;/h2&gt;

&lt;p&gt;Outra startup citada por Bill Gates é a &lt;a href="https://www.tevel-tech.com/" rel="noopener noreferrer"&gt;Tevel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Fundada em 2017 por Yaniv Maor, o foco da startup é a agricultura, mais especificamente na colheita de frutas, como maçã, pêra e damasco.&lt;/p&gt;

&lt;p&gt;Esta tarefa é particularmente desafiadora, pois requer mão de obra qualificada.&lt;/p&gt;

&lt;p&gt;Pensando nessa dificuldade a Tevel desenvolveu drones autônomos capazes de fazer a colheita das frutas no tempo certo, evitando desperdícios.&lt;/p&gt;

&lt;p&gt;Além do processo de colheita, os drones coletam dados em tempo real da fazenda fornecendo um volume de dados considerável, mas vital para aumentar a eficiência do processo como um todo.&lt;/p&gt;

&lt;p&gt;Entre os benefícios apontados pela startup estão:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;aumento na qualidade da fruta&lt;/li&gt;
&lt;li&gt;agilidade&lt;/li&gt;
&lt;li&gt;economia de custos&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;O artigo completo (em inglês) pode ser lido &lt;a href="https://www.gatesnotes.com/" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Laravel 11: quase pronto...</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Sat, 20 Jan 2024 00:05:45 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/laravel-11-esta-chegando-17ip</link>
      <guid>https://dev.to/marciopolicarpo/laravel-11-esta-chegando-17ip</guid>
      <description>&lt;p&gt;A versão 11 do Laravel será disponibilizada oficialmente nas próximas semanas e trará mudanças significativas.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Versão do PHP&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para começar, a versão mínima necessária do PHP para executar as aplicações subiu da atual 8.1 para 8.2. &lt;/p&gt;

&lt;p&gt;Uma das melhorias advindas com a nova versão do PHP é que agora, é possível marcar parâmetros de função como &lt;strong&gt;sensíveis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Para uma melhor compreensão dessa melhoria, imagine um cenário onde a aplicação lança uma exceção. Em muitas linguagens de programação, o rastreamento dessas exceções serve para identificarmos erros na aplicação possibilitando sua correção.&lt;/p&gt;

&lt;p&gt;Entretanto, esse rastreamento pode mostrar dados sensíveis, como usuário ou número de cartão de crédito por exemplo, na eventualidade de terem sido passados via parâmetro para o método que lançou a exceção.&lt;/p&gt;

&lt;p&gt;E é justamente para ajudar a mitigar esse tipo de situação que a versão 8.2 do PHP trouxe o atributo &lt;strong&gt;#[\SensitiveParameter]&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Quando o compilador do PHP encontrar um parâmetro com esse atributo, o valor do parâmetro será omitido do rastreamento de pilha, caso ocorra uma exceção.&lt;/p&gt;

&lt;p&gt;O trecho de código a seguir ilustra a utilização do novo atributo e o resultado obtido:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;exemplo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nv"&gt;$diretorio&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;\SensitiveParameter&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nv"&gt;$usuario&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Error'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;exemplo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'\app\docs'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Alfred'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
Fatal error: Uncaught Exception: Error in test.php:6
Stack trace:
#0 test.php(10): test('\app\docs', Object(SensitiveParameterValue))
#1 {main}
thrown in test.php on line 6
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note que, ao apresentar a exceção, o parâmetro decorado com o atributo &lt;strong&gt;#[\SensitiveParameter]&lt;/strong&gt; tem o seu valor ocultado.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Arquivos de rotas no Laravel&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Até a versão 10, as novas instalações traziam no mínimo 4 arquivos para configuração de rotas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;api.php&lt;/code&gt;: como o próprio nome diz, fazemos a configuração das rotas de APIs REST&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;channels.php&lt;/code&gt;: este configura as rotas de broadcasting dentro da aplicação&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;console.php&lt;/code&gt;: caso sua aplicação receba chamadas através de rotinas de console, este é o arquivo a ser configurado&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;web.php&lt;/code&gt;: este arquivo configura as rotas para quando a aplicação é totalmente suportada pelo Laravel, tanto no &lt;strong&gt;backend&lt;/strong&gt; quando &lt;strong&gt;frontend&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A partir da versão 11 somente os arquivos &lt;code&gt;console.php&lt;/code&gt; e &lt;code&gt;web.php&lt;/code&gt; estarão presentes em novas instalações.&lt;/p&gt;

&lt;p&gt;Os demais arquivos poderão ser adicionados utilizando o &lt;strong&gt;Artisan&lt;/strong&gt;, como mostrado a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;artisan&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao ser executado, o arquivo &lt;code&gt;api.php&lt;/code&gt; será criado na pasta &lt;strong&gt;\routes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O comando também fará a instalação do &lt;a href="https://laravel.com/docs/10.x/sanctum#main-content" rel="noopener noreferrer"&gt;Laravel Sanctum&lt;/a&gt;, facilitando a implementação da autenticação de APIs REST.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;DD/Dump&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Um programador PHP que não conheça o comando "dd" não é programador PHP.... 😂&lt;/p&gt;

&lt;p&gt;No desenvolvimento de aplicações o ato de &lt;em&gt;debugar&lt;/em&gt; faz parte do dia a dia dos programadores e tem como principal objetivo entender o fluxo das rotinas.&lt;/p&gt;

&lt;p&gt;No mundo web as coisas são um pouco diferentes e essa tarefa é ligeiramente mais complexa.&lt;/p&gt;

&lt;p&gt;Para começar, nem todas as ferramentas (leia-se editor de código) possuem as funcionalidades necessárias para &lt;em&gt;debugar&lt;/em&gt; aplicações PHP, e as que tem geralmente são pagas.&lt;/p&gt;

&lt;p&gt;Já para as gratuitas é preciso adicionar plug-ins ou extensões para conseguir &lt;em&gt;debugar&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;E no PHP é comum avaliarmos variáveis e classes através da função &lt;code&gt;dd&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Abaixo podemos ver a sintaxe da função:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dd($variavel);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao ser invocada, a função retorna para a página o valor avaliado, interrompendo a aplicação em seguida.&lt;/p&gt;

&lt;p&gt;Com o objetivo de facilitar a vida dos desenvolvedores, a versão 11 do Laravel traz a &lt;em&gt;trait&lt;/em&gt; &lt;strong&gt;Dumpable&lt;/strong&gt;, extensível a qualquer classe PHP dentro da aplicação.&lt;/p&gt;

&lt;p&gt;O trecho de código a seguir exemplifica o uso da nova &lt;em&gt;trait&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Stringable&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;JsonSerializable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;ArrayAccess&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Conditionable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Dumpable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Macroable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Tappable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'foo'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;dd&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'foo'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o comportamento é o mesmo da função &lt;code&gt;dd&lt;/code&gt;, mostrando o valor e interrompendo a aplicação em seguida.&lt;/p&gt;




&lt;p&gt;Sabemos da importância de manter o sistema atualizado, com a framework mais recente (e estável) em uso. Pensando nisso, alguns cuidados devem ser tomados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📚leia a documentação&lt;/li&gt;
&lt;li&gt;👊avalie viabilidade técnica e necessidade com o time&lt;/li&gt;
&lt;li&gt;👩👨analise se haverá impacto para o cliente&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Obrigado pela leitura e até breve. 😎&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>news</category>
      <category>php</category>
      <category>programming</category>
    </item>
    <item>
      <title>Onda de demissões nas 'big techs' continua</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Fri, 24 Feb 2023 03:19:37 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/onda-de-demissoes-nas-big-techs-continua-4ghf</link>
      <guid>https://dev.to/marciopolicarpo/onda-de-demissoes-nas-big-techs-continua-4ghf</guid>
      <description>&lt;p&gt;No início do mês de fevereiro de 2023, a &lt;strong&gt;Dell&lt;/strong&gt; anunciou o corte de 6650 vagas no seu quadro de colaboradores. Outras companhias seguem o mesmo caminho, conforme podemos ver no quadro abaixo:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Companhia&lt;/th&gt;
&lt;th&gt;Colaboradores&lt;/th&gt;
&lt;th&gt;%&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Yahoo&lt;/td&gt;
&lt;td&gt;1600&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zoom&lt;/td&gt;
&lt;td&gt;1300&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twillio&lt;/td&gt;
&lt;td&gt;1500&lt;/td&gt;
&lt;td&gt;17%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Udemy&lt;/td&gt;
&lt;td&gt;não informado&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;(&lt;em&gt;fonte: &lt;a href="https://news.crunchbase.com/startups/tech-layoffs/" rel="noopener noreferrer"&gt;Crunchbase&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  Mas o que está acontecendo?
&lt;/h2&gt;

&lt;p&gt;Empresas de tecnologia estão entre as mais rentáveis na atualidade, além de serem bastante atrativas para investidores de longo prazo.&lt;/p&gt;

&lt;p&gt;Embora sejam fatores que favoreçam a geração de lucros, é importante analisar as estratégias adotadas nos últimos 24 meses para entender melhor o que está acontecendo neste momento.&lt;/p&gt;

&lt;p&gt;A pandemia mudou radicalmente a maneira como trabalhamos, criando uma demanda elevada por dispositivos e serviços. E para atender esta necessidade, mais latente na parte de suporte e infraestrutura, as companhias realizaram contratações em massa durante o primeiro ano da pandemia, mantendo esse ritmo ao longo de 2021.&lt;/p&gt;

&lt;p&gt;Tendo em vista que o cenário atual, com juros elevados e sem um vislumbre claro do fim da recessão global, essas companhias se viram obrigadas a cortar posições, piorando a situação econômica de diversas famílias.&lt;/p&gt;




&lt;h2&gt;
  
  
  E quando essa onda vai passar?
&lt;/h2&gt;

&lt;p&gt;Especialistas não tem uma previsão de quando o cenário ficará economicamente mais favorável. &lt;/p&gt;

&lt;p&gt;O mais importante é possuir uma boa estratégia para que desvios de demanda como o que o ocorreu em 2020, tenham seu impacto mitigado frente aos negócios.&lt;/p&gt;

&lt;p&gt;Empresas como &lt;strong&gt;Amazon&lt;/strong&gt; e &lt;strong&gt;Meta&lt;/strong&gt;, que possuem capital aberto na Nasdaq - bolsa de valores americana que negocia exclusivamente ações de empresas de tecnologia - são obrigadas a reportar alterações no quadro de funcionários.&lt;/p&gt;

&lt;p&gt;E de acordo com os relatórios divulgados por essas companhias, houve um crescimento de 38,5% e 30,4%, respectivamente, no quadro de colaboradores em 2020.&lt;/p&gt;

&lt;p&gt;Em 2021, a &lt;strong&gt;Amazon&lt;/strong&gt; aumentou seu quadro em 19,3% (metade de 2020) e a &lt;strong&gt;Meta&lt;/strong&gt; aumentou seu quadro em 22,8%. Já a &lt;strong&gt;Apple&lt;/strong&gt;, também com capital aberto na Nasdaq, reportou um crescimento de 7,3% em 2020 e 4,8% em 2021. &lt;/p&gt;

&lt;p&gt;Das 'big techs' a &lt;strong&gt;Apple&lt;/strong&gt; foi a mais conservadora. Congelou contratações e não reportou corte de funcionários nos últimos 2 anos.&lt;/p&gt;




&lt;p&gt;Não sabemos quando e como a economia global voltará a crescer. &lt;/p&gt;

&lt;p&gt;Enquanto isso, é importante estar preparado para as oportunidades que aparecerem, e neste momento, vale o ditado: "&lt;em&gt;Quando Deus fecha uma porta, abre uma janela&lt;/em&gt;".&lt;/p&gt;

&lt;p&gt;Até breve! 😎&lt;/p&gt;

</description>
      <category>go</category>
      <category>cicd</category>
      <category>softwaredevelopment</category>
      <category>devops</category>
    </item>
    <item>
      <title>Laravel 10</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Mon, 06 Feb 2023 11:28:57 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/laravel-10-2cpl</link>
      <guid>https://dev.to/marciopolicarpo/laravel-10-2cpl</guid>
      <description>&lt;p&gt;Prevista para 7 de Fevereiro de 2023, a versão 10 da conhecida framework Laravel trará diversas funcionalidades e correções.&lt;/p&gt;

&lt;p&gt;Os releases, até a versão 8, eram liberados a cada seis meses. Entretanto, essa estratégia mudou a partir da versão 9, lançada em 7 de Fevereiro de 2022.&lt;/p&gt;

&lt;p&gt;Essa alteração foi necessária para que o time de desenvolvedores tivesse tempo hábil para implementar e testar todas as funcionalidades, bem como corrigir os bugs mais críticos.&lt;/p&gt;




&lt;p&gt;A partir da versão 10 da framework, não haverá mais suporte para o PHP 8.0 ou inferiores. A versão mínima do PHP exigida pelo release 10 do Laravel passa a ser 8.1.&lt;/p&gt;

&lt;p&gt;De acordo com a documentação oficial, algumas funcionalidades disponíveis no PHP 8.1 já haviam sido implementadas no Laravel 9, como por exemplo o método &lt;code&gt;array_is_list()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;O método valida se um determinado &lt;strong&gt;array&lt;/strong&gt; é uma lista, e para tal o PHP verifica se:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;o &lt;strong&gt;array&lt;/strong&gt; possui um índice numérico&lt;/li&gt;
&lt;li&gt;o índice é sequencial&lt;/li&gt;
&lt;li&gt;o índice começa com 0 (zero)&lt;/li&gt;
&lt;li&gt;o último valor do índice é igual a &lt;code&gt;count($array) -1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;A migração a partir da versão 9 é facilitada através do &lt;a href="https://laravelshift.com/shifts" rel="noopener noreferrer"&gt;Laravel Shift&lt;/a&gt;. Este serviço é pago, possuindo diversas combinações de upgrade a partir de várias versões do Laravel. &lt;/p&gt;

&lt;p&gt;Inclusive existe a possibilidade de upgrades a partir do &lt;a href="https://lumen.laravel.com/docs/9.x" rel="noopener noreferrer"&gt;Lumen&lt;/a&gt; (lembram dele?! 😲) para a versão compatível do Laravel. Entretanto, a conversão é limitada e podem haver situações onde o processo não será executado, caso de algumas consultas a bancos de dados.&lt;/p&gt;




&lt;p&gt;Maiores detalhes acerca deste release podem ser encontrados aqui:&lt;br&gt;
&lt;a href="https://laravel-news.com/laravel-10" rel="noopener noreferrer"&gt;Laravel 10&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Até breve. 😎&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>offers</category>
    </item>
    <item>
      <title>Vou perder meu emprego para uma IA?</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Tue, 24 Jan 2023 01:27:42 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/vou-perder-meu-emprego-para-uma-ia-1pe7</link>
      <guid>https://dev.to/marciopolicarpo/vou-perder-meu-emprego-para-uma-ia-1pe7</guid>
      <description>&lt;p&gt;Nos últimos meses temos visto demissões em massa na área de tecnologia. Esse movimento ocorre, em parte, devido à recessão global que fez muitos governos adotarem políticas econômicas mais conservadoras.&lt;/p&gt;

&lt;p&gt;Como se não bastasse esse cenário pouco favorável ao crescimento, ainda vemos o aumento no uso de IAs.&lt;/p&gt;




&lt;p&gt;IA, ou inteligência artificial, é "&lt;em&gt;...um conceito amplo que recebe definições e significados diferentes, cujas principais características são: capacidade de raciocínio e aprendizagem, reconhecimento de padrões e capacidade de aplicar o raciocínio a atividades cotidianas...&lt;/em&gt;". (fonte Wikipedia).&lt;/p&gt;




&lt;p&gt;As profissões são criadas ou extintas de acordo com a necessidade da sociedade, buscando sempre melhorar processos. Por exemplo, com a implantação de robôs em linhas de montagem, o processo de montagem de veículos passou ser realizado em menor tempo e de forma padronizada.&lt;/p&gt;

&lt;p&gt;Como resultado positivo tivemos a redução nos custos de produção, facilidade para ajustar os processos e aumento na produtividade&lt;/p&gt;

&lt;p&gt;A consequência negativa foi a dispensa de grande parte da mão de obra, afetando mais diretamente economias locais.&lt;/p&gt;




&lt;p&gt;⚠️&lt;br&gt;
Antes de continuar, quero deixar claro que não tenho a intenção de julgar as escolhas feitas pela humanidade, nem tão pouco buscar responsáveis por esta ou aquela ação. &lt;/p&gt;

&lt;p&gt;O objetivo deste artigo é apenas e tão somente refletir sobre o papel do profissional de tecnologia frente aos desafios apresentados com o advento da inteligência artificial.&lt;/p&gt;




&lt;p&gt;A exemplo dos robôs colocados em linhas de montagem para realizar tarefas pesadas e repetitivas, a inteligência artificial segue um caminho parecido, sendo útil no processamento de grandes volumes de dados, rapidamente. &lt;/p&gt;

&lt;p&gt;Esse 'auxiliar' assusta porque é muito difícil para o ser humano aceitar que uma máquina possa assumir suas atribuições, mas é necessário esclarecer que o resultado desse processamento ainda será analisado por um ser humano. &lt;/p&gt;

&lt;p&gt;E este é apenas um detalhe. Não podemos nos esquecer que a parte criativa é orgânica e não sintética.&lt;/p&gt;




&lt;p&gt;Com todos esses detalhes em mente, podemos finalmente responder à pergunta que motivou este artigo: "&lt;strong&gt;Vou perder meu emprego para uma IA&lt;/strong&gt;❓"&lt;/p&gt;

&lt;p&gt;A resposta é &lt;strong&gt;NÃO&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Uma inteligência artificial pode ter a resposta para muitas perguntas mas é preciso saber perguntar. &lt;/p&gt;

&lt;p&gt;Um bom exemplo é o ChatGPT, ferramenta desenvolvida pela &lt;a href="https://openai.com/" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt; e disponibilizada no final de 2022. Após utilizar a ferramenta por alguns dias, cheguei à conclusão de que são remotas as chances dela vir a substituir profissionais de tecnologia.&lt;/p&gt;

&lt;p&gt;Ela responde rapidamente a diversas indagações e segue uma linha de raciocínio (por assim dizer) durante uma 'conversa'. &lt;/p&gt;

&lt;p&gt;Na página principal há três avisos a respeito das limitações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ocasionalmente informações incorretas podem ser geradas&lt;/li&gt;
&lt;li&gt;Ocasionalmente, pode produzir instruções prejudiciais ou conteúdo tendencioso&lt;/li&gt;
&lt;li&gt;Conteúdo limitado sobre o mundo e eventos ocorridos depois de 2021&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E entre as capacidades da IA estão:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lembrar o conteúdo da conversa&lt;/li&gt;
&lt;li&gt;Permite que os usuários façam correções&lt;/li&gt;
&lt;li&gt;Treinada para declinar de requisições inapropriadas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Atualmente ela é gratuita e para acessá-la basta apenas um cadastro simples (com confirmação) por e-mail.&lt;/p&gt;

&lt;p&gt;Especialistas tem afirmado que o ChatGPT pode ser o substituto do Google. 😮&lt;/p&gt;




&lt;p&gt;Outra ferramenta de inteligência artificial que tem se destacado é o &lt;a href="https://midjourney.com/" rel="noopener noreferrer"&gt;Midjourney&lt;/a&gt;. Ele tem a capacidade de criar ilustrações baseadas nas instruções dadas por um usuário.&lt;/p&gt;

&lt;p&gt;Por exemplo, solicitei à IA que fizesse um desenho do Bill Gates (ex CEO da Microsoft) jovem, mas em formato de quadrinhos animados e este foi um dos resultados:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxcvr2xsekxnvbhgqbpc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxcvr2xsekxnvbhgqbpc.png" alt="Image description" width="294" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esta ferramenta é gratuita nas primeiras renderizações.&lt;/p&gt;




&lt;p&gt;De fato as inteligências artificiais melhoram a cada minuto. Mas mesmo com esse avanço exponencial na capacidade de processamento, ainda assim será necessário ter um ser humano por perto, seja para dar alguma instrução ou para dar manutenção mesmo. 😁&lt;/p&gt;




&lt;p&gt;Até breve. 😎&lt;/p&gt;

</description>
    </item>
    <item>
      <title>O que esperar de 2023?</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Sat, 31 Dec 2022 13:45:22 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/o-que-esperar-de-2023-7gi</link>
      <guid>https://dev.to/marciopolicarpo/o-que-esperar-de-2023-7gi</guid>
      <description>&lt;p&gt;Chegamos ao final de mais uma "iteração" e como de costume, temos o hábito de refletir a respeito do que aconteceu durante o ano que passou, revisitando objetivos e reavaliando metas.&lt;/p&gt;

&lt;p&gt;2022 foi um ano de muitos desafios em diversos aspectos. Invasão da Ucrânia pelos russos, demissões em massa nas Big Techs e  recessão global pós pandemia foram apenas alguns dos fatores que fizeram a humanidade repensar conceitos e atitudes.&lt;/p&gt;

&lt;p&gt;Aprendemos a valorizar mais o tempo que passamos com familiares e amigos, e o trabalho remoto - onde e quando foi possível - ajudou bastante nesse quesito.&lt;/p&gt;




&lt;p&gt;Particularmente falando, foi um ano de muito aprendizado. &lt;/p&gt;

&lt;p&gt;Incentivado por familiares e amigos, comecei a escrever artigos sobre sistemas, escolhendo PHP como linguagem de programação. &lt;/p&gt;

&lt;p&gt;Considero-me iniciante em PHP, o que tornou o objetivo de escrever artigos ainda mais desafiador. Além disso, dediquei parte dos meus esforços no aprendizado do Laravel, framework PHP mais utilizado na atualidade.&lt;/p&gt;

&lt;p&gt;O primeiro contato que tive com este framework foi em 2017 e confesso ter ficado surpreendido com a facilidade para criar uma aplicação web, até mesmo para quem tem pouco conhecimento em PHP. &lt;/p&gt;

&lt;p&gt;Apesar do seu tamanho, o framework é bem estruturado, possui rica documentação e ampla comunidade de desenvolvedores. Mas não se engane. É preciso bom conhecimento em PHP para compreender como algumas coisas funcionam. &lt;/p&gt;




&lt;p&gt;Ao longo de 2022 foram 24 artigos escritos com quase 3 mil visualizações, e em cada artigo, busquei montar cenários mais próximos da realidade dos desenvolvedores iniciantes.&lt;/p&gt;

&lt;p&gt;Muito embora esse tenha sido o foco - mesmo porque, me considero iniciante - acredito que o fato de compartilhar conhecimento ajudou desenvolvedores de todos os níveis de experiência.&lt;/p&gt;

&lt;p&gt;Precisei (re)aprender conceitos sobre POO e boas práticas de desenvolvimento, uma experiência sensacional, diga-se de passagem.&lt;/p&gt;

&lt;p&gt;Também publiquei alguns projetos no GitHub visando ajudar na compreensão dos cenários propostos.&lt;/p&gt;




&lt;p&gt;Mas não escrevi apenas artigos técnicos.&lt;/p&gt;

&lt;p&gt;Durante 2022 falei um pouquinho sobre eventos, pesquisas em áreas de atuação profissional (quais tecnologias os desenvolvedores mais utilizam) e sugestões diversas.&lt;/p&gt;

&lt;p&gt;E o objetivo com esse tipo de artigo, foi me forçar a conectar com outras áreas evitando ser entediante ao falar de um único assunto, sempre.&lt;/p&gt;

&lt;p&gt;Acho que consegui... 😁&lt;/p&gt;




&lt;h3&gt;
  
  
  O que esperar de 2023?
&lt;/h3&gt;

&lt;p&gt;Insisto bastante na questão do conhecimento porque sei que é a única coisa capaz de promover mudanças significativas na vida das pessoas.&lt;/p&gt;

&lt;p&gt;A partir do momento em que tomamos ciência que cada indivíduo possui sua própria curva de aprendizado, torna necessário abordar o mesmo problema de formas distintas, proporcionando evolução, tanto na forma de aprender como na maneira com a qual dividimos conhecimento.&lt;/p&gt;

&lt;p&gt;Concordo que o volume de informação disponível na atualidade é surreal, o que torna a pesquisa por informação de qualidade uma "Via Crucis". &lt;/p&gt;

&lt;p&gt;Mas esse "sofrimento" se dá, na minha opinião, por dois fatores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dificuldade em fazer a "pergunta certa"&lt;/li&gt;
&lt;li&gt;falta de conhecimentos básicos (lógica de programação, por exemplo)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sei muito bem que existem outros fatores envolvidos, mas não vou citá-los por acreditar que são relativos a cada indivíduo.&lt;/p&gt;




&lt;p&gt;Respondendo à pergunta "O que esperar de 2023?", eu diria que não devemos esperar e sim agir.&lt;/p&gt;

&lt;p&gt;O tempo passa muito rápido e mesmo que deixemos nossos sonhos "na geladeira" em algum momento eles apodrecerão e serão descartados.&lt;/p&gt;




&lt;p&gt;Uma dica?&lt;/p&gt;

&lt;p&gt;Foque naquilo que você tem mais dificuldade e não se prenda à uma única linguagem de programação. Às vezes o aprendizado é dificultado pela própria linguagem porque ela nos obriga a fazer as coisas de uma determinada maneira.&lt;/p&gt;

&lt;p&gt;E aprender uma nova linguagem do zero trará benefícios a longo prazo.&lt;/p&gt;




&lt;p&gt;Particularmente, coloquei como meta pessoal escrever um artigo a cada 15 dias, pelo menos.&lt;/p&gt;

&lt;p&gt;Esse intervalo de tempo trará consistência e qualidade aos conteúdos que terei o prazer de compartilhar.&lt;/p&gt;




&lt;p&gt;Aproveito o momento para agradecer de coração todos que investiram uns minutinhos lendo cada palavra que eu escrevi. O objetivo maior sempre foi ajudar o próximo com conhecimento e dicas.&lt;/p&gt;

&lt;p&gt;E esse continuará sendo o objetivo, se assim me for permitido. 🙏&lt;/p&gt;

&lt;p&gt;Desejo-lhes boas festas, um próspero 2023 e que eu possa sempre trazer novidades e compartilhar experiências.&lt;/p&gt;

&lt;p&gt;😎&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sandbox</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Sat, 17 Dec 2022 03:01:12 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/sandbox-1ffk</link>
      <guid>https://dev.to/marciopolicarpo/sandbox-1ffk</guid>
      <description>&lt;p&gt;Em desenvolvimento de sistemas uma coisa sempre me fascinou: &lt;em&gt;depuração&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Compreender o que faz cada instrução, verificar o valor de cada variável, analisar a lógica utilizada é um dos motivos pelos quais considero programação algo singular.&lt;/p&gt;

&lt;p&gt;E as IDEs (Ambiente de Desenvolvimento Integrado) que acompanham os desenvolvedores desde os primórdios da programação, começaram como meros editores de texto.&lt;/p&gt;

&lt;p&gt;Ao longo do tempo evoluíram para ferramentas bastante completas - e complexas - sendo que algumas suportam mais de uma linguagem de programação.&lt;/p&gt;

&lt;p&gt;Por outro lado, considero o processo de instalação de uma IDE traumático. Para usuários menos experientes pode significar refazer o processo várias vezes até 'acertar a mão'.&lt;/p&gt;

&lt;p&gt;Há situações onde adicionamos pacotes de componentes adicionais à IDE, tornando-a maior e mais pesada.&lt;/p&gt;




&lt;h4&gt;
  
  
  E para quem quer validar pequenas rotinas?
&lt;/h4&gt;

&lt;p&gt;Nesses casos minha sugestão é a utilização de uma &lt;em&gt;SandBox&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;O conceito se aproxima do &lt;em&gt;Docker&lt;/em&gt; mas sem precisar instalar nada, rodando a partir de qualquer navegador de internet.&lt;/p&gt;

&lt;p&gt;Disponíveis para várias linguagens de programação o objeto é ser fácil de usar, gratuita e acessível.&lt;/p&gt;

&lt;p&gt;Outra vantagem no uso de uma SandBox é a questão do aprendizado. &lt;/p&gt;

&lt;p&gt;Geralmente quem está no início da carreira de programador ou simplesmente quer aprender uma nova linguagem de programação, esta é uma excelente alternativa às IDEs geralmente pagas.&lt;/p&gt;

&lt;p&gt;Com isso em mente, vou listar algumas SandBoxes bem interessantes, separados por linguagem de programação.&lt;/p&gt;




&lt;h3&gt;
  
  
  PHP
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5558whotxjcdx76h8jo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5558whotxjcdx76h8jo.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;OnLinePHP.io&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Com layout minimalista, possui opção para escolher entre tema claro ou escuro e o suporte vai desde a versão 4.0.6 até 8.2.0 do PHP.&lt;/p&gt;

&lt;p&gt;Tem uma lista das funções mais utilizadas na plataforma e permite fazer o download do fonte. Assim que rodamos o programa, o site mostra quanto tempo o código levou para ser executado e a quantidade de memória.&lt;/p&gt;

&lt;p&gt;Acesse neste link: &lt;a href="https://onlinephp.io/" rel="noopener noreferrer"&gt;https://onlinephp.io/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjc31jhjbhq5ln1mwvcf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjc31jhjbhq5ln1mwvcf.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;WTOOLS - Web Tools&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A proposta deste site é diferente. Além de possuir um editor para rodarmos nossos códigos PHP, há outras ferramentas como geradores de dados aleatórios, validadores e formatadores de json/xml, por exemplo.&lt;/p&gt;

&lt;p&gt;Neste site destaco a seção de Code Snipets, local recomendado para fazer uma 'visita'.&lt;/p&gt;

&lt;p&gt;Acesse neste link: &lt;a href="https://wtools.io/" rel="noopener noreferrer"&gt;https://wtools.io/&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Javascript
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ptgncw5igoy2t8olifa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ptgncw5igoy2t8olifa.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;PLAYCODE&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A lista de templates disponíveis neste site é surreal. Desde JS puro passando por ReactJS (&lt;em&gt;class components&lt;/em&gt; e &lt;em&gt;function components&lt;/em&gt;), VueJS e Svelte.&lt;/p&gt;

&lt;p&gt;O que chamou a atenção aqui foi a possibilidade de personalizar a saída com CSS, sendo possível praticar ao mesmo tempo uma linguagem de estilos com Javascript.&lt;/p&gt;

&lt;p&gt;Você pode (literamente) se divertir aqui: &lt;a href="https://playcode.io/" rel="noopener noreferrer"&gt;https://playcode.io/&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  CSharp
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2o75m9bu6gbjl4uq1pgx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2o75m9bu6gbjl4uq1pgx.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;.Net Fiddle&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Este é voltado para C#, F# e VB.NET. Já as opções de framework estão limitadas ao .net Framework 4.7.2, asp.net core 3.1.&lt;/p&gt;

&lt;p&gt;Acesse neste link: &lt;a href="https://dotnetfiddle.net/" rel="noopener noreferrer"&gt;https://dotnetfiddle.net/&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Geral
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopwwbeq0jkgpfv58m5yt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopwwbeq0jkgpfv58m5yt.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;w3schools&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E por último mas nem por isso, menos importante, temos o W3Schools. &lt;/p&gt;

&lt;p&gt;A proposta aqui é ensinar as mais variadas linguagens de programação, sempre baseando-se na documentação oficial.&lt;/p&gt;

&lt;p&gt;Com exemplos bem didáticos, você é incentivado a treinar o código que acabou de aprender através de um editor básico.&lt;/p&gt;

&lt;p&gt;Acesse neste link: &lt;a href="https://www.w3schools.com/default.asp" rel="noopener noreferrer"&gt;https://www.w3schools.com/default.asp&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Deixe nos comentários o que você achou dessa lista e quais outros sites você incluiria nela.&lt;/p&gt;

&lt;p&gt;Espero ter ajudado e até breve. 😎&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Unit testing is not the Holy Grail</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Wed, 07 Dec 2022 00:57:25 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/unit-testing-is-not-the-holy-grail-j6g</link>
      <guid>https://dev.to/marciopolicarpo/unit-testing-is-not-the-holy-grail-j6g</guid>
      <description>&lt;p&gt;Worshiped by a large part of the developer community, unit testing (or unit testing, depending on the literature) has vast material explaining the most diverse concepts, often accompanied by widely detailed examples in all programming languages.&lt;/p&gt;

&lt;p&gt;Some frameworks include several tools for creating and executing unit tests. And for those who are deprived of these facilitators, there are libraries that will readily meet the most diverse needs.&lt;/p&gt;

&lt;p&gt;However, whenever this subject arises in developer groups, a question is raised: "&lt;em&gt;How to implement unit tests in routines with high levels of complexity and serious organization problems?&lt;/em&gt;"&lt;/p&gt;

&lt;p&gt;This question haunts even the most experienced developer, an expert in the code under his responsibility.&lt;/p&gt;




&lt;p&gt;Well, the first time I heard about unit testing, I also considered it to be the solution to the development problems we had in our applications.&lt;/p&gt;

&lt;p&gt;It was enough to create a class with a few methods validating a function or routine, where the result of each interaction would serve as a starting point to fine-tune the routine even further until eliminating (or reducing) any errors found.&lt;/p&gt;

&lt;p&gt;Armed with the concepts and some examples I found, I set out to create my first unit test. I took advantage of the demand for a project in C# and developed the function and the test responsible for validating the newly created routine.&lt;/p&gt;

&lt;p&gt;I confess to having been quite excited because I believed I had found a way to prevent a routine from breaking whenever a developer "passed" that way.&lt;/p&gt;




&lt;p&gt;I found it. The problem was validating every bit of the "&lt;strong&gt;Spaghetti Code&lt;/strong&gt;" that was in front of me. Methods with three hundred, sometimes even a thousand lines of code made the unit testing approach an almost impossible task to perform.&lt;/p&gt;

&lt;p&gt;This finding took away much of the motivation for creating unit tests. But I understood (through osmosis, I admit... lol) the real importance of SOLID's Single Responsibility Principle:&lt;/p&gt;

&lt;p&gt;"&lt;strong&gt;A class should have only one responsibility and there should only be one reason to modify it&lt;/strong&gt;".&lt;/p&gt;




&lt;p&gt;Good development practices preach the creation of tests before routines.&lt;/p&gt;

&lt;p&gt;However, the application or not of this practice comes up against several obstacles and the biggest one, in my opinion, is the lack of a long-term vision.&lt;/p&gt;

&lt;p&gt;This "myopia", so to speak, is a direct consequence of the scenario in which most technology companies are inserted, where there is a lot of competition for good products/services and deadlines are getting shorter.&lt;/p&gt;

&lt;p&gt;Add legacy code to this scenario and we have the perfect formula for systems full of bugs and poorly designed interfaces.&lt;/p&gt;




&lt;p&gt;However, all is not lost and unit tests are not the only way to validate a system or application. Other tests are performed in the various stages that involve the development of applications, from integration tests to black box tests where the system is validated by an expert.&lt;/p&gt;




&lt;p&gt;Unit tests are great because they can be automated, saving time, but they should never be the only tool for finding bugs in a system.&lt;/p&gt;

&lt;p&gt;A team aligned on delivery and with good knowledge of the scope of the project is worth more than a thousand unit tests.&lt;/p&gt;

&lt;p&gt;See you soon. 😎&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>github</category>
    </item>
  </channel>
</rss>
