<?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: Juliana Dias</title>
    <description>The latest articles on DEV Community by Juliana Dias (@juuh42dias).</description>
    <link>https://dev.to/juuh42dias</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%2F60754%2Fe00f8aea-84fb-4223-9db4-1c4cb33eb32b.jpg</url>
      <title>DEV Community: Juliana Dias</title>
      <link>https://dev.to/juuh42dias</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/juuh42dias"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Fri, 13 Mar 2026 12:34:05 +0000</pubDate>
      <link>https://dev.to/juuh42dias/-565l</link>
      <guid>https://dev.to/juuh42dias/-565l</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/mame/which-programming-language-is-best-for-claude-code-508a" class="crayons-story__hidden-navigation-link"&gt;Which Programming Language Is Best for Claude Code?&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/mame" class="crayons-avatar  crayons-avatar--l  "&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F676879%2Fe8494d51-0e62-4b19-9fe7-5a1c42d831cc.png" alt="mame profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/mame" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Yusuke Endoh
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Yusuke Endoh
                
              
              &lt;div id="story-author-preview-content-3310164" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/mame" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F676879%2Fe8494d51-0e62-4b19-9fe7-5a1c42d831cc.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Yusuke Endoh&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/mame/which-programming-language-is-best-for-claude-code-508a" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 5&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/mame/which-programming-language-is-best-for-claude-code-508a" id="article-link-3310164"&gt;
          Which Programming Language Is Best for Claude Code?
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/mame/which-programming-language-is-best-for-claude-code-508a" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;39&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/mame/which-programming-language-is-best-for-claude-code-508a#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              10&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            8 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>WIP: Juliana Dias @ CareerLadder</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Sun, 29 Jun 2025 02:00:56 +0000</pubDate>
      <link>https://dev.to/juuh42dias/wip-juliana-dias-careerladder-ao1</link>
      <guid>https://dev.to/juuh42dias/wip-juliana-dias-careerladder-ao1</guid>
      <description>&lt;h2&gt;
  
  
  Como Evoluir de Senior Engineer para Staff Engineer: Guia Completo e Complementar
&lt;/h2&gt;

&lt;p&gt;NOTA: Texto gerado por ChatGPT e Gemini&lt;br&gt;
Gepeto 🤝 Gemininho&lt;/p&gt;

&lt;p&gt;O papel de &lt;strong&gt;Staff Engineer&lt;/strong&gt; é um dos marcos mais importantes na carreira técnica de engenharia de software. Ele representa uma transição de um(a) engenheiro(a) altamente produtivo(a) individual para um(a) &lt;strong&gt;líder técnico com impacto organizacional amplo e estratégico&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Neste post, você vai entender:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O que é esperado de uma pessoa Staff Engineer&lt;/li&gt;
&lt;li&gt;As diferenças em relação ao papel de Senior Engineer&lt;/li&gt;
&lt;li&gt;Um roadmap prático para alcançar esse nível&lt;/li&gt;
&lt;li&gt;Recursos de estudo e leitura recomendada&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 O que é um(a) Staff Engineer?
&lt;/h2&gt;

&lt;p&gt;Um(a) &lt;strong&gt;Staff Engineer&lt;/strong&gt; não é apenas um(a) Senior com mais anos de experiência. É alguém que opera com &lt;strong&gt;autonomia estratégica&lt;/strong&gt;, &lt;strong&gt;liderança técnica além do time&lt;/strong&gt; e influência &lt;strong&gt;organizacional&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Responsabilidades típicas:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Liderar&lt;/strong&gt; decisões arquiteturais de grande escala&lt;/li&gt;
&lt;li&gt;Mentorar engenheiros de todos os níveis&lt;/li&gt;
&lt;li&gt;Conectar decisões técnicas aos objetivos do negócio&lt;/li&gt;
&lt;li&gt;Diagnosticar e resolver problemas sistêmicos e estruturais&lt;/li&gt;
&lt;li&gt;Conduzir &lt;strong&gt;tech specs&lt;/strong&gt;, RFCs e design docs&lt;/li&gt;
&lt;li&gt;Representar engenharia em discussões com stakeholders de produto e negócio&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔍 Diferenças entre Senior e Staff Engineer
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Critério&lt;/th&gt;
&lt;th&gt;Senior Engineer&lt;/th&gt;
&lt;th&gt;Staff Engineer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Escopo&lt;/td&gt;
&lt;td&gt;Time/local&lt;/td&gt;
&lt;td&gt;Cross-team / organização&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entregas&lt;/td&gt;
&lt;td&gt;Código e arquitetura de features&lt;/td&gt;
&lt;td&gt;Arquiteturas e plataformas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Liderança&lt;/td&gt;
&lt;td&gt;Técnica no time&lt;/td&gt;
&lt;td&gt;Técnica organizacional&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Comunicação&lt;/td&gt;
&lt;td&gt;Time e tech leads&lt;/td&gt;
&lt;td&gt;Engenharia, produto, negócios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Autonomia&lt;/td&gt;
&lt;td&gt;Alta no escopo local&lt;/td&gt;
&lt;td&gt;Alta em escopos ambíguos e estratégicos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🧭 Roadmap: De Senior para Staff Engineer
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Fase 1: Consolidação Técnica (6–12 meses)
&lt;/h3&gt;

&lt;p&gt;Aprofunde seu domínio técnico e prepare-se para desafios maiores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Foco:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arquiteturas distribuídas&lt;/li&gt;
&lt;li&gt;Performance, escalabilidade, disponibilidade&lt;/li&gt;
&lt;li&gt;Operações e observabilidade (metrics, logs, tracing)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Leituras e cursos:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;strong&gt;Designing Data-Intensive Applications&lt;/strong&gt; – Martin Kleppmann [1]&lt;/li&gt;
&lt;li&gt;💻 &lt;strong&gt;System Design Primer (GitHub)&lt;/strong&gt; [2]&lt;/li&gt;
&lt;li&gt;🎓 &lt;strong&gt;Grokking the System Design Interview&lt;/strong&gt; [3]&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔹 Fase 2: Expandindo o Impacto Técnico (6–12 meses)
&lt;/h3&gt;

&lt;p&gt;Transcenda o escopo do seu time e atue como referência técnica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Foco:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RFCs, Design Docs e decisões técnicas documentadas&lt;/li&gt;
&lt;li&gt;Comunicação com outros times de engenharia&lt;/li&gt;
&lt;li&gt;Projetos de base (infra, padrões, bibliotecas compartilhadas)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identificação e proposição de soluções para problemas complexos:&lt;/strong&gt; Não apenas resolver o que já existe, mas antecipar e propor melhorias significativas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Leituras:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;strong&gt;Staff Engineer&lt;/strong&gt; – Will Larson [4]&lt;/li&gt;
&lt;li&gt;🧑‍💻 &lt;strong&gt;StaffEng.com&lt;/strong&gt; – Entrevistas e perfis reais [5]&lt;/li&gt;
&lt;li&gt;📝 &lt;strong&gt;How to write a good software design doc&lt;/strong&gt; [6]&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔹 Fase 3: Visão Sistêmica e Influência Estratégica (contínuo)
&lt;/h3&gt;

&lt;p&gt;Operar em nível organizacional, com visão de longo prazo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Foco:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evolução de arquitetura&lt;/li&gt;
&lt;li&gt;Redução de dívida técnica com impacto mensurável&lt;/li&gt;
&lt;li&gt;Mentoria sistemática e criação de cultura técnica&lt;/li&gt;
&lt;li&gt;Participação em OKRs, planejamento anual, tech strategy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Networking e Construção de Relacionamentos:&lt;/strong&gt; A capacidade de influenciar e liderar sem autoridade formal depende muito de bons relacionamentos com pares, líderes e outras equipes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Habilidades de Negociação e Persuasão:&lt;/strong&gt; Para vender suas ideias e soluções em um nível organizacional, é crucial ter a capacidade de negociar e persuadir stakeholders com diferentes prioridades.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Leituras:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;strong&gt;The Staff Engineer’s Path&lt;/strong&gt; – Tanya Reilly [7]&lt;/li&gt;
&lt;li&gt;📘 &lt;strong&gt;Team Topologies&lt;/strong&gt; – Matthew Skelton e Manuel Pais [8]&lt;/li&gt;
&lt;li&gt;🎙️ &lt;strong&gt;StaffEng Podcast&lt;/strong&gt; [9]&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Referências Bibliográficas e Materiais Recomendados
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Livros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[1] Designing Data-Intensive Applications&lt;/strong&gt; – Martin Kleppmann&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[4] Staff Engineer&lt;/strong&gt; – Will Larson&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[7] The Staff Engineer’s Path&lt;/strong&gt; – Tanya Reilly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[8] Team Topologies&lt;/strong&gt; – Matthew Skelton e Manuel Pais&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accelerate: The Science of Lean Software and DevOps&lt;/strong&gt; – Nicole Forsgren, Jez Humble, Gene Kim&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crucial Conversations Tools for Talking When Stakes Are High&lt;/strong&gt; – Kerry Patterson, Joseph Grenny, Ron McMillan, Al Switzler&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Artigos e Repositórios:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[5] StaffEng.com&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2] System Design Primer&lt;/strong&gt; – GitHub&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[6] How to write a good design doc&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering Ladders&lt;/strong&gt; (diversos exemplos de trajetórias de carreira em grandes empresas de tecnologia, ajudam a entender as expectativas de diferentes níveis)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cursos e Plataformas:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[3] Educative.io&lt;/strong&gt; – Grokking the System Design Interview&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LeadDev.com&lt;/strong&gt; – Conteúdo técnico avançado para líderes técnicos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plataformas de cursos online como Coursera, edX, Udacity:&lt;/strong&gt; Buscar cursos sobre liderança técnica, gestão de projetos complexos e habilidades de comunicação para líderes.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ Dicas Finais
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Conecte engenharia ao impacto organizacional&lt;/li&gt;
&lt;li&gt;Construa influência técnica, não só autoridade&lt;/li&gt;
&lt;li&gt;Seja intencional em mentoria, comunicação e design&lt;/li&gt;
&lt;li&gt;Escolha problemas que escalam junto com a empresa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Busque feedback ativamente:&lt;/strong&gt; Peça feedback a colegas, líderes e mentorados para identificar áreas de melhoria e fortalecer suas habilidades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desenvolva sua "Marca Pessoal" como Staff Engineer:&lt;/strong&gt; Compartilhe seu conhecimento através de talks internas, blogs, ou contribuições open source. Isso solidifica sua posição como referência.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seja um Agente de Mudança:&lt;/strong&gt; Um Staff Engineer não só resolve problemas, mas também identifica e impulsiona mudanças positivas na organização, seja em processos, cultura ou tecnologia.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se você quer crescer na carreira técnica sem migrar para a gestão, o papel de Staff Engineer pode ser o seu próximo passo. Boa sorte na jornada! 🚀&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.amazonaws.com%2Fuploads%2Farticles%2Fzk6oc7u3lhubjtrwo6w2.png" 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.amazonaws.com%2Fuploads%2Farticles%2Fzk6oc7u3lhubjtrwo6w2.png" alt="Career Ladder - Pragmatic Engineer" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>careerdevelopment</category>
      <category>career</category>
      <category>self</category>
    </item>
    <item>
      <title>ChatGPT: Usando ViewComponent, Stimulus e Turbo em apps Rails</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Wed, 10 May 2023 23:51:44 +0000</pubDate>
      <link>https://dev.to/juuh42dias/chatgpt-usando-viewcomponent-stimulus-e-turbo-em-apps-rails-1i36</link>
      <guid>https://dev.to/juuh42dias/chatgpt-usando-viewcomponent-stimulus-e-turbo-em-apps-rails-1i36</guid>
      <description>&lt;p&gt;Rails é um framework de desenvolvimento web poderoso que torna fácil criar aplicativos da web ricos em recursos. Entre as ferramentas que o Rails oferece, há o ViewComponent, Stimulus e Turbo, que permitem construir componentes reutilizáveis, adicionar interatividade do lado do cliente e aumentar a velocidade da navegação.&lt;/p&gt;

&lt;p&gt;Neste blog post, vamos explorar como usar ViewComponent, Stimulus e Turbo em aplicações Rails, com exemplos simples.&lt;/p&gt;

&lt;h2&gt;
  
  
  ViewComponent
&lt;/h2&gt;

&lt;p&gt;ViewComponent é uma maneira de encapsular a lógica da view em componentes reutilizáveis que podem ser usados em várias páginas. Os componentes podem ter seu próprio controlador e modelo, e isso ajuda a manter a separação de responsabilidades e reduzir a complexidade do código.&lt;/p&gt;

&lt;p&gt;Para criar um componente usando ViewComponent, crie um arquivo na pasta &lt;code&gt;app/components&lt;/code&gt; com o nome do componente e adicione o código HTML e Ruby que definem o comportamento do componente. Por exemplo, vamos criar um componente simples que exibe um título e uma descrição:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# app/components/my_component.rb&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyComponent&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ViewComponent&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:)&lt;/span&gt;
    &lt;span class="vi"&gt;@title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;
    &lt;span class="vi"&gt;@description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- app/components/my_component.html.erb --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"my-component"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;description&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então, você pode usar o componente em uma view chamando o método &lt;code&gt;render&lt;/code&gt; passando o nome do componente e os parâmetros:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- app/views/pages/home.html.erb --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="na"&gt;render&lt;/span&gt; &lt;span class="na"&gt;MyComponent.new&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;title:&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="na"&gt;Hello&lt;/span&gt;&lt;span class="err"&gt;',&lt;/span&gt; &lt;span class="na"&gt;description:&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="na"&gt;World&lt;/span&gt;&lt;span class="err"&gt;')&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Stimulus
&lt;/h2&gt;

&lt;p&gt;Stimulus é uma biblioteca JavaScript que ajuda a adicionar interatividade do lado do cliente a uma aplicação Rails. É uma alternativa mais simples e fácil de usar ao React ou Vue.js. Ele se concentra em adicionar comportamento aos elementos existentes na página, em vez de criar novos componentes do zero.&lt;/p&gt;

&lt;p&gt;Para começar a usar o Stimulus em uma aplicação Rails, você precisa instalá-lo e configurá-lo. Isso é feito facilmente adicionando o seguinte código ao arquivo &lt;code&gt;app/javascript/packs/application.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Application&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stimulus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;definitionsFromContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stimulus/webpack-helpers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;application&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./controllers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="sr"&gt;js$/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;definitionsFromContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso carrega todos os controladores Stimulus definidos na pasta &lt;code&gt;app/javascript/controllers&lt;/code&gt;. Para criar um controlador, crie um arquivo JavaScript na pasta &lt;code&gt;app/javascript/controllers&lt;/code&gt; e defina um controlador como este:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/javascript/controllers/hello_controller.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stimulus&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;targets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;

  &lt;span class="nx"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hello, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;name&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nameTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&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;Este controlador é usado em um elemento HTML com o atributo &lt;code&gt;data-controller&lt;/code&gt; e os atributos &lt;code&gt;data-target&lt;/code&gt; e &lt;code&gt;data-action&lt;/code&gt; definidos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- app/views/pages/home.html.erb --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-controller=&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;data-target=&lt;/span&gt;&lt;span class="s"&gt;"hello.name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;data-action=&lt;/span&gt;&lt;span class="s"&gt;"click-&amp;gt;hello#greet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Greet&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos ver agora como usar o Turbo em uma aplicação Rails.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turbo
&lt;/h2&gt;

&lt;p&gt;Turbo é uma nova tecnologia do Rails que ajuda a aumentar a velocidade da navegação em uma aplicação web. Ele usa técnicas como cache e pré-renderização para tornar as transições entre páginas mais rápidas e suaves.&lt;/p&gt;

&lt;p&gt;Para começar a usar o Turbo em uma aplicação Rails, você precisa incluir a biblioteca do Turbo no arquivo &lt;code&gt;app/javascript/packs/application.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Rails&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@rails/ujs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Turbo&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hotwired/turbo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="nx"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;Turbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o Turbo instalado e configurado, agora podemos usar o &lt;code&gt;turbo-frame&lt;/code&gt; para carregar conteúdo dinamicamente sem atualizar a página. Por exemplo, vamos supor que queremos carregar uma lista de usuários em uma página:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- app/views/users/index.html.erb --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Usuários&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;turbo-frame&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"users"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="na"&gt;render&lt;/span&gt; &lt;span class="na"&gt;partial:&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="na"&gt;users_list&lt;/span&gt;&lt;span class="err"&gt;',&lt;/span&gt; &lt;span class="na"&gt;locals:&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt; &lt;span class="na"&gt;users:&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;users&lt;/span&gt; &lt;span class="err"&gt;}&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/turbo-frame&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- app/views/users/_users_list.html.erb --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%&lt;/span&gt; &lt;span class="na"&gt;users.each&lt;/span&gt; &lt;span class="na"&gt;do&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="na"&gt;user.name&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%&lt;/span&gt; &lt;span class="na"&gt;end&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, estamos renderizando a lista de usuários em um componente parcial &lt;code&gt;_users_list.html.erb&lt;/code&gt; e incluindo-o dentro de um &lt;code&gt;turbo-frame&lt;/code&gt; com o ID &lt;code&gt;users&lt;/code&gt;. Quando o usuário acessa a página pela primeira vez, a lista de usuários é carregada normalmente. No entanto, quando o usuário navega para outra página e volta para a lista de usuários, o Turbo usa cache e pré-renderização para carregar a lista de usuários instantaneamente, sem fazer uma nova solicitação ao servidor.&lt;/p&gt;

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

&lt;p&gt;O ViewComponent, Stimulus e Turbo são ferramentas poderosas para construir componentes reutilizáveis, adicionar interatividade do lado do cliente e aumentar a velocidade da navegação em uma aplicação Rails. Espero que este blog post tenha sido útil e que você possa começar a usar essas ferramentas em sua própria aplicação!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ChatGPT: Explicando complexidade de algoritmos</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Wed, 10 May 2023 23:29:45 +0000</pubDate>
      <link>https://dev.to/juuh42dias/chatgpt-explicando-complexidade-de-algoritmos-2fb7</link>
      <guid>https://dev.to/juuh42dias/chatgpt-explicando-complexidade-de-algoritmos-2fb7</guid>
      <description>&lt;p&gt;A complexidade de um algoritmo é uma medida da quantidade de recursos (como tempo de execução ou espaço de memória) que ele requer para resolver um determinado problema. É uma medida importante da eficiência de um algoritmo, pois ajuda a identificar possíveis gargalos de desempenho e a determinar se um algoritmo é adequado para uma determinada tarefa.&lt;/p&gt;

&lt;p&gt;Existem dois tipos de complexidade de algoritmos: a complexidade de tempo e a complexidade de espaço. A complexidade de tempo mede a quantidade de tempo que um algoritmo leva para resolver um problema em função do tamanho da entrada. A complexidade de espaço mede a quantidade de espaço em memória necessária para executar o algoritmo em função do tamanho da entrada.&lt;/p&gt;

&lt;p&gt;A complexidade de tempo é geralmente expressa usando a notação Big O (O). Essa notação descreve a ordem de crescimento do tempo de execução do algoritmo à medida que o tamanho da entrada aumenta. Por exemplo, um algoritmo com uma complexidade de tempo O (n) leva tempo proporcional ao tamanho da entrada, enquanto um algoritmo com uma complexidade de tempo O (n²) leva tempo proporcional ao quadrado do tamanho da entrada.&lt;/p&gt;

&lt;p&gt;Além disso, a complexidade de tempo é geralmente dividida em casos de melhor, médio e pior. O caso melhor é o cenário em que o algoritmo leva menos tempo para resolver o problema, enquanto o caso pior é o cenário em que o algoritmo leva mais tempo para resolver o problema. O caso médio é o cenário em que o algoritmo leva um tempo médio para resolver o problema.&lt;/p&gt;

&lt;p&gt;Já a complexidade de espaço é geralmente expressa usando a notação Big O (O) e descreve a quantidade de espaço em memória necessária para executar o algoritmo à medida que o tamanho da entrada aumenta. Por exemplo, um algoritmo com uma complexidade de espaço O (n) requer espaço proporcional ao tamanho da entrada, enquanto um algoritmo com uma complexidade de espaço O (n²) requer espaço proporcional ao quadrado do tamanho da entrada.&lt;/p&gt;

&lt;p&gt;É importante ter em mente que a complexidade de um algoritmo é apenas uma medida aproximada da eficiência do algoritmo. Outros fatores, como a arquitetura do computador em que o algoritmo é executado e o tamanho dos dados em que o algoritmo é aplicado, também podem afetar o desempenho do algoritmo.&lt;/p&gt;

&lt;p&gt;Em resumo, a complexidade de um algoritmo é uma medida da quantidade de recursos que ele requer para resolver um determinado problema e é expressa em termos de tempo e espaço. A notação Big O é comumente usada para expressar a complexidade de tempo e espaço dos algoritmos. É importante lembrar que a complexidade de um algoritmo é apenas uma medida aproximada da eficiência do algoritmo e outros fatores também podem afetar o desempenho do algoritmo.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ChatGPT: basic example of an Nginx configuration file using an auto-signed SSL certificate</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Fri, 10 Mar 2023 20:09:55 +0000</pubDate>
      <link>https://dev.to/juuh42dias/chatgpt-basic-example-of-an-nginx-configuration-file-using-an-auto-signed-ssl-certificate-jpg</link>
      <guid>https://dev.to/juuh42dias/chatgpt-basic-example-of-an-nginx-configuration-file-using-an-auto-signed-ssl-certificate-jpg</guid>
      <description>&lt;p&gt;This article was created by ChatGPT&lt;/p&gt;

&lt;p&gt;Here is a basic example of an Nginx configuration file using an auto-signed SSL certificate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Copy code
server &lt;span class="o"&gt;{&lt;/span&gt;
    listen 443 ssl&lt;span class="p"&gt;;&lt;/span&gt;
    server_name example.com&lt;span class="p"&gt;;&lt;/span&gt;
    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt&lt;span class="p"&gt;;&lt;/span&gt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key&lt;span class="p"&gt;;&lt;/span&gt;

    location / &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c"&gt;# your application code here&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here are the steps to generate the auto-signed SSL certificate and key files:&lt;/p&gt;

&lt;p&gt;Generate the SSL certificate and key files using OpenSSL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;openssl req &lt;span class="nt"&gt;-x509&lt;/span&gt; &lt;span class="nt"&gt;-nodes&lt;/span&gt; &lt;span class="nt"&gt;-days&lt;/span&gt; 365 &lt;span class="nt"&gt;-newkey&lt;/span&gt; rsa:2048 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-keyout&lt;/span&gt; /etc/ssl/private/nginx-selfsigned.key &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-out&lt;/span&gt; /etc/ssl/certs/nginx-selfsigned.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will prompt you for some information to include in the certificate, such as the Common Name (CN) which should be set to your domain name (e.g. example.com).&lt;/p&gt;

&lt;p&gt;Verify that the certificate and key files were generated:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; /etc/ssl/private/nginx-selfsigned.key /etc/ssl/certs/nginx-selfsigned.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see output similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root root 1091 Feb 24 15:44 /etc/ssl/certs/nginx-selfsigned.crt
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root root 1675 Feb 24 15:44 /etc/ssl/private/nginx-selfsigned.key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the configuration file above into your Nginx server block, replacing the example.com server name with your own domain name.&lt;/p&gt;

&lt;p&gt;Reload the Nginx configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl reload nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! Your Nginx server should now be configured to use the auto-signed SSL certificate.&lt;/p&gt;

</description>
      <category>ssl</category>
      <category>certificate</category>
    </item>
    <item>
      <title>WIP: Série Hoje Aprendi</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Sat, 25 Jun 2022 21:20:54 +0000</pubDate>
      <link>https://dev.to/juuh42dias/wip-serie-hoje-aprendi-nal</link>
      <guid>https://dev.to/juuh42dias/wip-serie-hoje-aprendi-nal</guid>
      <description>&lt;p&gt;Este será um post com pequenas coisas do dia a dia que vou aprendendo e vou inserindo aqui, ele será um eterno WIP post (vamos ver até onde o Dev.to vai me permitir hehe):&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;docker build . --platform linux/amd64&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Contexto:
&lt;/h3&gt;

&lt;p&gt;Estavam rodando uma build do docker no Macbook M1 e ele estava gerando coisas dentro da imagem com base ARM&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Referência:&lt;/em&gt; &lt;a href="https://docs.docker.com/engine/reference/commandline/build/#options" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/reference/commandline/build/#options&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Systemd
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;systemd-run --scope -p MemoryMax=5024M --user rspec spec/&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Contexto:
&lt;/h3&gt;

&lt;p&gt;Eu estava precisando limitar a quantidade de memória de um processo na máquina que estava usando, pois os testes que estava rodando consumiam MUITA memória 😅 &lt;br&gt;
ps: Adicionando o --user para usar o contexto o user e reduzir o escopo de acesso do processo&lt;br&gt;
Dica adicionada por @lucas59356 - X&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Referência:&lt;/em&gt; &lt;a href="https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html" rel="noopener noreferrer"&gt;https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Rails - ActiveRecord
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;User.attribute_types&lt;/code&gt;&lt;br&gt;
&lt;code&gt;User.columns&lt;/code&gt;&lt;br&gt;
&lt;code&gt;User.columns_hash&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Contexto:
&lt;/h3&gt;

&lt;p&gt;Estava apenas querendo saber os tipos de dados do model/tabela sem ter que sair do console do Rails&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Referência&lt;/em&gt;&lt;br&gt;
&lt;a href="https://github.com/rails/rails/blob/main/activerecord/lib/active_record/model_schema.rb#L428" rel="noopener noreferrer"&gt;https://github.com/rails/rails/blob/main/activerecord/lib/active_record/model_schema.rb#L428&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ruby - Object/Method
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Time.method(:parse).parameters
 =&amp;gt; [[:req, :date], [:opt, :now]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Contexto:
&lt;/h3&gt;

&lt;p&gt;Estava querendo saber os paramêtros que uma classe esperava em seu construtor e eu não tinha acesso a tal arquivo pra ler  essa classe, dúvida sanada por @leandroico. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Referência&lt;/em&gt; &lt;br&gt;
&lt;a href="https://ruby-doc.org/core-2.6.4/Method.html#method-i-parameters" rel="noopener noreferrer"&gt;https://ruby-doc.org/core-2.6.4/Method.html#method-i-parameters&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Rails - ActiveRecord/Reflections
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;3.0.4 :035 &amp;gt; Decidim::User.reflections.keys
 =&amp;gt;
["resource_links_to",
 "resource_links_from",
 "resource_permission",
 "follows",
 "followers",
 "organization"
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Contexto:
&lt;/h3&gt;

&lt;p&gt;Estava apenas querendo saber as associations de um model (que usa ActiveRecord) sem ter que ficar percorrendo e vasculhando mil arquivos.&lt;br&gt;
Ás vezes temos models e ou usamos classes que estão "escondidas" em gems ou nos internals do framework e não temos acesso fácil via editor.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Referência&lt;/em&gt;&lt;br&gt;
&lt;a href="https://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html#method-i-reflections" rel="noopener noreferrer"&gt;https://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html#method-i-reflections&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  MacOS - log
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;log stream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Contexto:
&lt;/h3&gt;

&lt;p&gt;Meu Bluetooth parou do nada de funcionar no Ubuntu e resolvi então reiniciar, mas ainda suspeitando do que poderia ter acontecido resolvi rodar o dmesg pra analisar, com isso pensei se existia um comando parecido para o MacOS.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Referência&lt;/em&gt;&lt;br&gt;
&lt;a href="https://ss64.com/mac/log.html" rel="noopener noreferrer"&gt;https://ss64.com/mac/log.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>todayilearned</category>
      <category>hojeaprendi</category>
    </item>
    <item>
      <title>Pelo direito de ser medíocre</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Sat, 18 Jun 2022 01:58:40 +0000</pubDate>
      <link>https://dev.to/juuh42dias/pelo-direito-de-ser-mediocre-4noh</link>
      <guid>https://dev.to/juuh42dias/pelo-direito-de-ser-mediocre-4noh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Significado de Medíocre&lt;br&gt;
adjetivo: De qualidade média, mediana; que não é bom nem mau: obra medíocre. Sem criatividade nem originalidade; banal: projeto medíocre. Característica do que é comum, ordinário, trivial: comentário medíocre.substantivo masculino Algo ou alguém que não tem grande valor intelectual. Quem não é capaz de realizar algo. Pessoa desprovida de talento ou que está abaixo da média. Etimologia (origem da palavra medíocre). Do latim mediocris.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Título chamativo com palavra um pouco forte para dizer que você é mediano não? Pois então, eu gostaria de trazer um desabafo e uma reflexão para vocês que estiverem lendo esse texto, lembrando que não existe verdade absoluta e o meu texto inclusive são só questionamentos atrás de respostas, que podem ser “verdades” ou “mentiras”, mas são só respostas…&lt;/p&gt;

&lt;p&gt;Recentemente em um grupo que participo vi um rapaz divulgando necessitar de desenvolvedoras FERAS na tecnologia X para uma vaga remota para Califórnia, e é sobre esse aspecto de ser FERA ou da necessidade da mesma que me pego pensando, na expectativa e na visão de quem eu poderia considerar a desenvolvedora FERA, quais os requisitos que não foram especificados para tal seria considerada FERA? E se a pessoa que for preencher a vaga não for FERA, e se ela for uma pessoa medíocre, ela conseguiria produzir o mesmo efeito de alguém FERA? E como iria saber se sou FERA ou medíocre? Apenas preenchendo a vaga? E se não conseguisse permanecer seria uma FERA medíocre? Quais são as expectativas minhas, suas ou as dos outros quanto o ser FERA ou ser medíocre na atividade?&lt;/p&gt;

&lt;p&gt;É bem sabido que vivemos num mercado selvagem, que a lei do mais forte impera, que no mundo nada tem sido justo (e tudo isso na visão de quem?). Na realidade Brasileira do mercado em que estou inserida já vi gente ser contratada porque foi meritocraticamente amigo(a) do(a) dono(a) da empresa fulana. Mas tudo bem, afinal, se esta pessoa era FERA e correspondia as expectativas de quem a contratou, qual seria nossa escolha, né?&lt;/p&gt;

&lt;p&gt;A verdade é que a realidade existem pessoas de todos os tipos, e as expectativas que criamos nascem a parte de um contexto NOSSO, é o que NÓS esperamos do outro, e isso quase sempre estará errado, porque avaliamos o mundo com uma perspectiva interna, e a expectativa que criamos a partir disso pode sim ser terrivelmente não correspondida, ou quem sabe muito mais do que correspondida, e até mesmo nos surpreender. Mas para tudo isso acontecer é preciso conhecer? É preciso tempo? É preciso aprender a ver o mundo com outros olhos? É preciso se cobrar mais? É preciso se cobrar menos? É preciso as pessoas terem o direito de serem FERAS? É preciso as pessoas terem o direito de serem medíocres? O que é preciso afinal?&lt;/p&gt;

&lt;p&gt;Originalmente postado em Medium: Pelo direito de ser medíocre&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sintomas de uma desenvolvedora cansada</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Tue, 31 May 2022 19:28:40 +0000</pubDate>
      <link>https://dev.to/juuh42dias/sintomas-de-uma-desenvolvedora-cansada-4l87</link>
      <guid>https://dev.to/juuh42dias/sintomas-de-uma-desenvolvedora-cansada-4l87</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DmtX7yYV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2pb905y1eku6jny2b90u.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DmtX7yYV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2pb905y1eku6jny2b90u.jpeg" alt="Foto frontal da minha pessoa (Juliana Dias) mostrando o notebook cheio de adesivos, senatada em uma poltrona com furinhos em uma cafeteria." width="626" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Deixa eu desabafar sobre um sintoma da minha vida como deva:&lt;/p&gt;

&lt;p&gt;Depois de um certo tempo trabalhando como dev, a gente vai meio que se cansando de quase sempre resolver os mesmos problemas nas aplicações, então começamos a mudar de projetos e ir trabalhando em várias áreas diferentes como projetos de odontologia, ecommerce, empréstimos, seguros e de outras n áreas diferentes.&lt;/p&gt;

&lt;p&gt;Depois dessa migração a gente começa a procurar apenas projetos que façam sentido pessoal pra nós, que tenha algum valor que vá além desses conhecimentos técnicos ou de regras de negócio, começamos a olhar projetos que se alinhem com a nossa filosofia de vida naquele momento, tal qual gosto de projetos de impacto social.&lt;/p&gt;

&lt;p&gt;Porque no fundo, é pra isso que desenvolvemos, não só escrever códigos mas resolver problemas e problemas da vida real, tudo feito de pessoas para pessoas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;14/08/2019&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Juliana Dias is creating Open Source Software with social impact</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Thu, 11 Jul 2019 01:56:43 +0000</pubDate>
      <link>https://dev.to/juuh42dias/juliana-dias-dos-santos-e-silva-is-creating-open-source-software-with-social-impact-44o0</link>
      <guid>https://dev.to/juuh42dias/juliana-dias-dos-santos-e-silva-is-creating-open-source-software-with-social-impact-44o0</guid>
      <description>&lt;p&gt;Folks, I've started dedicating my Sundays especially to coding on open source projects with social impact. If you want to support me by paying for a mug of coffee or two, you can do so on Patreon: &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/patreon.com%2Fjuuh42dias" 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/patreon.com%2Fjuuh42dias" alt="https://www.patreon.com/juuh42dias"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'll be very grateful for your support &amp;lt;3&lt;br&gt;
Thanks!&lt;/p&gt;

&lt;p&gt;&lt;a href="" class="article-body-image-wrapper"&gt;&lt;img alt="juliana.dev"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>State Machine in a nutshell</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Thu, 21 Feb 2019 18:15:13 +0000</pubDate>
      <link>https://dev.to/juuh42dias/state-machine-in-a-nutshell-13o2</link>
      <guid>https://dev.to/juuh42dias/state-machine-in-a-nutshell-13o2</guid>
      <description>&lt;p&gt;Sometimes we need to apply a state in some cases when we want to modify a status of an object. A basic example is water state: gaseous, liquid and solid and the events responsible for change it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Water&lt;/span&gt;
&lt;span class="no"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Fusion&lt;/span&gt;
&lt;span class="no"&gt;States&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;From&lt;/span&gt; &lt;span class="n"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;liquid&lt;/span&gt;
&lt;span class="no"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Evaporation&lt;/span&gt;
&lt;span class="no"&gt;States&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;From&lt;/span&gt; &lt;span class="n"&gt;liquid&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;gaseous&lt;/span&gt;
&lt;span class="no"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Condensation&lt;/span&gt;
&lt;span class="no"&gt;States&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;From&lt;/span&gt; &lt;span class="n"&gt;gaseous&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;liquid&lt;/span&gt;
&lt;span class="no"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;Solidification&lt;/span&gt;
&lt;span class="no"&gt;States&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;From&lt;/span&gt; &lt;span class="n"&gt;liquid&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;solid&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look at this as a simple example that happens around us. As in many other cases, we can apply it in programming using something called state machine.&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%2Fl4gillhvow5d02h5napx.png" 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%2Fl4gillhvow5d02h5napx.png" alt="State Machine code screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above example, we have different states and events responsible for change these states. &lt;code&gt;Proposed&lt;/code&gt;, &lt;code&gt;accepted&lt;/code&gt;, &lt;code&gt;rejected&lt;/code&gt; and &lt;code&gt;pending&lt;/code&gt; are possible states for a object and the state of an object can change when an event occurs. Pretty similar to the example of water states, right?&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>statemachine</category>
      <category>water</category>
    </item>
    <item>
      <title>DRY — Don’t Repeat Yourself</title>
      <dc:creator>Juliana Dias</dc:creator>
      <pubDate>Wed, 30 Jan 2019 22:49:29 +0000</pubDate>
      <link>https://dev.to/juuh42dias/drydont-repeat-yourself-43g3</link>
      <guid>https://dev.to/juuh42dias/drydont-repeat-yourself-43g3</guid>
      <description>&lt;p&gt;Good morning, good afternoon, good evening, good night, what they are in common? Yeap, the word “Good”. The concept DRY consists in look this and “dry” your repetitions, after dry could be: Good, morning, afternoon, evening and night. Being thus the word would serve for all, without losing the logic.&lt;/p&gt;

&lt;p&gt;Let’s see example in a code:&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fwinqobznflm7il9hny77.png" 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fwinqobznflm7il9hny77.png" alt="Trecho do código antes de aplicar o DRY"&gt;&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fjk12q2fntbgv1agpnm3k.png" 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fjk12q2fntbgv1agpnm3k.png" alt="Trecho do código posterior a aplicação do DRY"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same logic but in fewer lines of code. That is one of the philosophies about Ruby on Rails best practices, Ruby (and Rails) is fantastic because of this and others practices, Ruby code is totally readable, simple and powerful. And Rails has MVC organization, Tests, Naming Convention making a clean code, also has Convention Over Configuration and others things. So that’s it, let’s study and code.&lt;/p&gt;

&lt;p&gt;“Know, understand, modify and create.”&lt;/p&gt;

</description>
      <category>dry</category>
      <category>rubt</category>
      <category>goodpractices</category>
      <category>designpatterns</category>
    </item>
  </channel>
</rss>
