<?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.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>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>
    <item>
      <title>ORM Eloquent: Factory</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Tue, 29 Nov 2022 21:08:34 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/orm-eloquent-factory-2nk8</link>
      <guid>https://dev.to/marciopolicarpo/orm-eloquent-factory-2nk8</guid>
      <description>&lt;p&gt;Quando vamos realizar testes na aplicação, persistimos alguns registros para validações mais simples, tarefa árdua pois precisamos simular dados fictícios para inserir na aplicação.&lt;/p&gt;

&lt;p&gt;Há serviços on-line onde podemos baixar esses dados em formato json, mas mesmo esses facilitadores apresentam limitações no schema, resultando em mais trabalho para adequar o schema ao contexto do projeto.&lt;/p&gt;

&lt;p&gt;Felizmente, o ORM Eloquent disponível no Laravel possui uma classe com métodos para geração de diversos tipos de dados fictícios, onde a grande vantagem é poder utilizar os modelos da própria aplicação para persistir as informações.&lt;/p&gt;

&lt;p&gt;Estou me referindo à classe abstrata &lt;code&gt;Illuminate\Database\Eloquent\Factories\Factory&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Ao longo deste artigo vou mostrar alguns métodos para criação de informações fictícias para cada modelo. Não haverá interação com a camada de persistência e todo o conteúdo deste artigo pode ser encontrado na documentação oficial &lt;a href="https://laravel.com/docs/9.x/eloquent-factories" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;⚠️ É recomendável conhecimento prévio sobre Laravel.&lt;/p&gt;




&lt;h3&gt;
  
  
  Conteúdo
&lt;/h3&gt;

&lt;p&gt;Este artigo está organizado de forma a facilitar a busca por informações. Se você quiser mais detalhes acerca do funcionamento da classe &lt;strong&gt;Factory&lt;/strong&gt;, sugiro ler os itens 1 e 2.&lt;/p&gt;

&lt;p&gt;Mas se você está buscando saber como gerar tipos específicos, então seu destino está entre os itens 3 e 8.&lt;/p&gt;

&lt;p&gt;Boa leitura. 😄&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Por onde começar&lt;/li&gt;
&lt;li&gt;Gerando informações fictícias&lt;/li&gt;
&lt;li&gt;Dados pessoais&lt;/li&gt;
&lt;li&gt;Endereço&lt;/li&gt;
&lt;li&gt;Texto&lt;/li&gt;
&lt;li&gt;Números&lt;/li&gt;
&lt;li&gt;Data e hora&lt;/li&gt;
&lt;li&gt;Outros&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Por onde começar&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A maneira mais prática de criar uma classe que estenda de  &lt;strong&gt;\Eloquent\Factories\Factory&lt;/strong&gt; é através do Artisan. Utilizando qualquer terminal, acesse o diretório raiz da aplicação e digite o seguinte comando:&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:factory &amp;lt;nome_da_factory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim que o comando for executado um novo arquivo será criado no no diretório \database\factories\ com o conteúdo mostrado logo 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="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Database\Factories&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;Illuminate\Database\Eloquent\Factories\Factory&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cd"&gt;/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory&amp;lt;\App\Models\Model&amp;gt;
 */&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SampleFactory&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Factory&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/**
     * Define the model's default state.
     *
     * @return array&amp;lt;string, mixed&amp;gt;
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;definition&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="c1"&gt;//&lt;/span&gt;
        &lt;span class="p"&gt;];&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;A classe que acabamos de criar possui apenas um método, chamado &lt;code&gt;definition&lt;/code&gt; onde toda mágica acontece e como podemos ver na assinatura desse método o retorno é um array de string/valor, ou algo como &lt;code&gt;'propriedade' =&amp;gt; 'valor'&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Embora a declaração do método indique que ele retornará o estado padrão do modelo esta classe é totalmente desacoplada do modelo (&lt;strong&gt;Illuminate\Database\Eloquent\Model&lt;/strong&gt;) dentro de aplicações Laravel.&lt;/p&gt;

&lt;p&gt;Há duas formas de retornarmos informações para o método &lt;code&gt;definition&lt;/code&gt;. A primeira é utilizar a propriedade protegida &lt;code&gt;faker&lt;/code&gt; que extende de abastrata &lt;strong&gt;Eloquent\Factories\Factory&lt;/strong&gt; ou através do helper &lt;code&gt;fake()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A principal diferença é que no helper &lt;code&gt;fake()&lt;/code&gt; podemos passar o dialeto ($locale) para geração das informações, aumentando a assertividade dos dados.&lt;/p&gt;

&lt;p&gt;Abaixo está a assinatura do método &lt;code&gt;fake()&lt;/code&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="cd"&gt;/**
 * Get a faker instance.
 *
 * @param  ?string  $locale
 * @return \Faker\Generator
 */&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;fake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$locale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Gerando informações fictícias&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Para o mesmo tipo de dado o método fake() disponibiliza, quando disponível, duas formas de gerar informações. &lt;/p&gt;

&lt;p&gt;A primeira é consultando diretamente uma propriedade. &lt;br&gt;
Por exemplo, para criar nomes fictícios utilizamos o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fake()-&amp;gt;name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E a segunda é chamando um método que retorna o nome, também fictício, conforme o código abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fake()-&amp;gt;name()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A vantagem é no método &lt;code&gt;name()&lt;/code&gt; é a existência do argumento opcional &lt;code&gt;$gender&lt;/code&gt; que define o gênero do nome a ser criado.&lt;/p&gt;

&lt;p&gt;A seguir vou listar vários tipos de dados que podem ser gerados, agrupando-os em categorias para facilitar a busca e utilização.&lt;/p&gt;




&lt;h3&gt;
  
  
  Dados pessoais&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Este grupo de métodos retorna diversas informações pessoais, de nomes a números de telefone. A tabela a seguir traz o nome da propriedade e qual retorno fornecido. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Propriedade&lt;/th&gt;
&lt;th&gt;Retorno&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;nome completo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;lastName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;sobrenome&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;firstNameMale&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;primeiro nome masculino&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;firstNameFemale&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;primeiro nome feminino&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;jobtitle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;título (profissão)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;phoneNumber&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;número de telefone&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Endereço&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Esta categoria traz opções diversas opções para endereço como podemos ver na tabela a seguir.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Propriedade&lt;/th&gt;
&lt;th&gt;Retorno&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;address&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;endereço completo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;streetAddress&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;logradouro com número&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;streetName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;somente logradouro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;buildingNumber&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;número do prédio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;city&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cidade&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;country&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;país&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;postcode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CEP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Texto&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;"&lt;em&gt;...Lorem ipsum em design gráfico e editoração é um texto padrão em latim utilizado na produção gráfica para preencher os espaços de texto em publicações...&lt;/em&gt;". Fonte: &lt;a href="https://pt.wikipedia.org/wiki/Lorem_ipsum" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Esta categoria possibilita a geração de palavras únicas até parágrafos completos. &lt;/p&gt;

&lt;p&gt;Mas, diferentemente das categorias anteriores onde os retornos são sempre strings, algumas propriedades desta categoria retornam &lt;strong&gt;array de strings&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Este comportamento pode ser evitado utilizando o método correspondente no lugar da propriedade.&lt;/p&gt;

&lt;p&gt;Por exemplo, a propriedade &lt;code&gt;fake()-&amp;gt;words&lt;/code&gt; retornará um array com 3 strings diferentes, ao passo que o método &lt;code&gt;fake()-words(3, true)&lt;/code&gt; também retornar 3 palavras mas em uma única string.&lt;/p&gt;

&lt;p&gt;A tabela a seguir traz as propriedades com seus respectivos retornos e para cada propriedade há um método correspondente.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Propriedade&lt;/th&gt;
&lt;th&gt;Retorno&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;randomLetter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;uma letra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;word&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;uma única palavra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;words&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array com 3 palavras&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;sentence&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;uma frase com até 6 palavras&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;sentences&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array com 3 frases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;paragraph&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;parágrafo com 3 frases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;paragraphs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array com 3 parágrafos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;text&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;texto com até 200 palavras&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Números&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Este grupo destina-se a geração de números fictícios, sejam inteiros ou reais. Vamos à tabela com os métodos e os respectivos retornos.&lt;/p&gt;

&lt;p&gt;⚠️ Suprimi o &lt;code&gt;fake()-&amp;gt;&lt;/code&gt; para melhorar a visualização da tabela. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Método&lt;/th&gt;
&lt;th&gt;Retorno&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;numberBetween($int1 = 0, $int2 = 2147483647)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;inteiro entre &lt;code&gt;$int1&lt;/code&gt; e &lt;code&gt;$int2&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;randomDigit()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;inteiro entre 0 e 9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;randomDigitNot($except)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;inteiro entre 0 e 9, exceto &lt;code&gt;$except&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;randomDigitNotZero()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;inteiro entre 1 e 9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;randomFloat($nbMaxDecimals = null, $min = 0, $max = null)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;número real com &lt;code&gt;$nbMaxDecimals&lt;/code&gt; casas decimais, maior ou igual a &lt;code&gt;$min&lt;/code&gt; e menor ou igual a &lt;code&gt;$max&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Data e hora&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Esta categoria retorna informações de data e hora, fictícios. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Propriedade&lt;/th&gt;
&lt;th&gt;Retorno&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;dateTime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;data e hora, até a atual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;data no formato 'Y-m-d', até a atual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;time&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;hora no formato 'H:i:s', até a atual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;dateTimeThisCentury&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;data e hora do século corrente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;dateTimeThisDecade&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;data e hora da década corrente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;dateTimeThisYear&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;data e hora do ano corrente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;dateTimeThisMonth&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;data e hora do mês corrente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;dayOfMonth&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dia do mês&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;dayOfWeek&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dia da semana&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;month&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;mês (numeral)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;monthName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;mês (extenso)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;year&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ano&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;century&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;século&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Outros&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Esta categoria traz propriedades bastante diversas e por isso, vou listar somente algumas.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Propriedade&lt;/th&gt;
&lt;th&gt;Retorno&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;hexColor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cor em hexadecimal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;rgbColor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cor em RGB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;rgbCssColor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cor RGB em CSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;colorName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;nome da cor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;userName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;nome de usuário&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;password&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;senha de 6 a 20 caracteres&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;domainName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;nome de domínio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;url&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;ipv4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;endereço de rede IPV4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;ipv6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;endereço de rede IPV6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fake()-&amp;gt;macAddress&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;endereço "mac" de placa de rede&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Muita coisa não é mesmo?!&lt;/p&gt;

&lt;p&gt;Espero ter ajudado.&lt;/p&gt;

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

</description>
      <category>laravel</category>
      <category>beginners</category>
      <category>php</category>
    </item>
    <item>
      <title>4 tips for choosing a framework</title>
      <dc:creator>Marcio Policarpo</dc:creator>
      <pubDate>Tue, 01 Nov 2022 14:48:25 +0000</pubDate>
      <link>https://dev.to/marciopolicarpo/4-tips-for-choosing-a-framework-13c</link>
      <guid>https://dev.to/marciopolicarpo/4-tips-for-choosing-a-framework-13c</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;When I had the idea to write this article, I came across an important question that I believe is the question of most people directly involved with systems development.&lt;/p&gt;

&lt;p&gt;What is the difference between a framework and a library?&lt;/p&gt;

&lt;p&gt;To help answer this question, I tried to understand the basic concept behind each of these words and the result can be read below.&lt;/p&gt;

&lt;p&gt;⚠️ If I have written something that is not consistent with reality, please comment so that I can make the necessary corrections.&lt;/p&gt;




&lt;h3&gt;
  
  
  Framework
&lt;/h3&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%2Flspm0ns62dgnjzo9glxi.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%2Flspm0ns62dgnjzo9glxi.jpg" alt="Image description" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A framework is a set of classes that will serve as a basis for the development of an application, specifying the programming language and which path to follow to solve project problems.&lt;/p&gt;

&lt;p&gt;A framework can also be compared to the foundation of a building.&lt;/p&gt;

&lt;p&gt;An example of a framework: is NextJS.&lt;/p&gt;




&lt;h3&gt;
  
  
  Library
&lt;/h3&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%2F38aj0xij1o85r05lqq91.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%2F38aj0xij1o85r05lqq91.jpg" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A library, on the other hand, aims to solve specific problems within an application. It is not part of your project lifecycle and does not need to be written in the same language as your application.&lt;/p&gt;

&lt;p&gt;An example library: is ReactJS.&lt;/p&gt;




&lt;h3&gt;
  
  
  Learning curve
&lt;/h3&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%2Fybg27p4f7aojf8sz6w6v.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%2Fybg27p4f7aojf8sz6w6v.jpg" alt="Image description" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As important as the framework itself, the learning curve will dictate the project's implementation speed.&lt;/p&gt;

&lt;p&gt;Larger teams can significantly reduce the learning curve of frameworks because they can specialize in different aspects, increasing development speed.&lt;/p&gt;

&lt;p&gt;In smaller teams, usually (but not the rule) the language selected is the most known among team members. In these cases, the choice ends up being limited to the language version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: &lt;em&gt;Seek the alignment between your team's experience with the learning curve demanded by the chosen framework. This action guarantees the speed of project development&lt;/em&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Project
&lt;/h3&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%2Fekt5katl578rpouwvga2.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%2Fekt5katl578rpouwvga2.jpg" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imagine for a moment that you need to develop an application to control a family's budget. The application will be very simple, with fields to enter values ​​(real numbers), dates and descriptions.&lt;/p&gt;

&lt;p&gt;To develop the project in question you quickly study two PHP frameworks well-known in the development community: &lt;strong&gt;Laravel&lt;/strong&gt; and &lt;strong&gt;CodeIgniter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These two frameworks are very similar, serving MVC architecture very well. There is a great facility for connections to several databases and "up" a Rest API can be considered a very simple task in both frameworks.&lt;/p&gt;

&lt;p&gt;Just as a comparison, a new project created with CodeIgniter takes up about 22MB of disk space, while Laravel goes a little over 60MB.&lt;/p&gt;

&lt;p&gt;Although CodeIgniter is smaller, there will be a greater effort on the part of the team because many solutions will need to be built from scratch, unlike Laravel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: &lt;em&gt;Try to estimate how far the project can grow, avoiding replacing the framework in the middle of the development process&lt;/em&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Language
&lt;/h3&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%2Fkq3m0347ezzjeolwm2ru.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%2Fkq3m0347ezzjeolwm2ru.jpg" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using the same example of the familiar budget control application, I mentioned two PHP frameworks but never mentioned if it would be a web, desktop or mobile project.&lt;/p&gt;

&lt;p&gt;The choice of language will be based on the need presented by the client.&lt;/p&gt;

&lt;p&gt;If the budget control application is for individual use, installed on the desktop for example, one of the most appropriate languages ​​would be C#.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: &lt;em&gt;Choose a familiar language with long-term support (LTS) reducing the risk of technology being abandoned mid-project&lt;/em&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Hype
&lt;/h3&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%2Fn22xvncftqveb68kvlck.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%2Fn22xvncftqveb68kvlck.jpg" alt="Image description" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hype means fashion and being "fashionable" means being up-to-date, and keeping up with everything new.&lt;/p&gt;

&lt;p&gt;New technologies appear all the time with different proposals and breaking paradigms. But to evolve they will need adepts and enthusiasts willing to invest time in reporting bugs and suggesting new features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: &lt;em&gt;Even if new technologies are promising, be careful&lt;/em&gt;. Remember Silverlight?&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;This article was thought to be a reflection point when choosing a framework or a library.&lt;/p&gt;

&lt;p&gt;The people directly involved with the project and the client must make the final decision.&lt;/p&gt;

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

</description>
      <category>beginners</category>
    </item>
  </channel>
</rss>
