<?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>Forem: Weverton Timoteo</title>
    <description>The latest articles on Forem by Weverton Timoteo (@wevtimoteo).</description>
    <link>https://forem.com/wevtimoteo</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%2F99878%2F1d66b465-8376-4ae4-a165-c93640990342.jpg</url>
      <title>Forem: Weverton Timoteo</title>
      <link>https://forem.com/wevtimoteo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/wevtimoteo"/>
    <language>en</language>
    <item>
      <title>Defining active menu item in Phoenix Framework through Short-circuit Evaluation</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Sat, 30 Dec 2023 01:50:00 +0000</pubDate>
      <link>https://forem.com/wevtimoteo/defining-active-menu-item-in-phoenix-framework-through-short-circuit-evaluation-1ih6</link>
      <guid>https://forem.com/wevtimoteo/defining-active-menu-item-in-phoenix-framework-through-short-circuit-evaluation-1ih6</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/wevtimoteo/definindo-item-ativo-no-menu-no-phoenix-framework-usando-short-circuit-evaluation-ph0"&gt;Ler versão em pt-BR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When developing web applications, marking menu items, tabs, or other parts of the user interface as active is a common need. In the &lt;a href="https://phoenixframework.org/"&gt;Phoenix Framework&lt;/a&gt;, doing this quickly might lead you to something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;
  &lt;span class="n"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sx"&gt;~p"/stores/#{@store}/products"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"tab"&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;@active&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="ss"&gt;:products&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;" tab-active"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;else&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="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="no"&gt;Products&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;/.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this approach, we use ternary expressions and string concatenation to conditionally define CSS classes. It works, but as conditional logic increases, it can become challenging to read and maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Short-circuit Evaluation
&lt;/h2&gt;

&lt;p&gt;In Elixir, &lt;strong&gt;lazy evaluation&lt;/strong&gt; and &lt;strong&gt;short-circuit evaluation&lt;/strong&gt; are often used interchangeably. However, there's a slight difference. Lazy evaluation is usually associated with more complex data structures, while short-circuit is &lt;strong&gt;more common in boolean expressions&lt;/strong&gt;. And that's what we're going to use.&lt;/p&gt;

&lt;p&gt;Let's look at some examples using &lt;code&gt;iex&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"plataformatec"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"sourcelevel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"dashbit"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;#=&amp;gt; ["plataformatec", nil, "sourcelevel", false, "dashbit"]&lt;/span&gt;

&lt;span class="c1"&gt;# Using short-circuit evaluation on the list&lt;/span&gt;
&lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"plataformatec"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="s2"&gt;"sourcelevel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="s2"&gt;"dashbit"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;#=&amp;gt; ["plataformatec", nil, false]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the second definition of the list, we are using a short-circuit operation, where the last value of the expression prevails when the previous one is true; otherwise, the previous value is retained.&lt;/p&gt;

&lt;p&gt;In simple terms, it's like telling &lt;a href="https://elixir-lang.org/"&gt;Elixir&lt;/a&gt;: "stop thinking as soon as you know the answer."&lt;/p&gt;

&lt;h2&gt;
  
  
  Applying Short-circuit to the CSS Class List
&lt;/h2&gt;

&lt;p&gt;In a &lt;a href="https://github.com/phoenixframework/phoenix_html/issues/276#issuecomment-584911356"&gt;Phoenix Framework issue #276&lt;/a&gt;, an approach using lazy evaluation for the class syntax was discussed. &lt;a href="https://github.com/phoenixframework/phoenix_html/issues/276#issuecomment-742375950"&gt;In this comment&lt;/a&gt;, it was clarified that if the list item is &lt;code&gt;false&lt;/code&gt; or &lt;code&gt;nil&lt;/code&gt;, it will be removed. We can apply this solution to our example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;
  &lt;span class="n"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sx"&gt;~p"/stores/#{@store}/products"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="s2"&gt;"tab"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;@active&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="ss"&gt;:products&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="s2"&gt;"tab-active"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="no"&gt;Products&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;/.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;@active&lt;/code&gt; is &lt;code&gt;:products&lt;/code&gt;, the string &lt;code&gt;"tab-active"&lt;/code&gt; will be added to the list (resulting in &lt;code&gt;tab tab-active&lt;/code&gt;), otherwise, it will be omitted (resulting in just &lt;code&gt;tab&lt;/code&gt;). This approach is cleaner, more readable, and efficient:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Code Conciseness&lt;/strong&gt;: The lazy evaluation syntax is more concise, resulting in cleaner code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency&lt;/strong&gt;: Lazy evaluation halts evaluation as soon as the result is known, avoiding unnecessary evaluations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readability&lt;/strong&gt;: The class list is easy to understand and maintain, improving code readability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ease of Maintenance&lt;/strong&gt;: The simplified syntax makes code maintenance easier over time.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When developing applications in Elixir, it's not just about using the functional paradigm, but also about writing concise and easily understandable code. This approach not only simplifies our code but also makes maintenance more straightforward and direct. 😎✨&lt;/p&gt;

</description>
      <category>phoenixframework</category>
      <category>elixir</category>
      <category>css</category>
      <category>html</category>
    </item>
    <item>
      <title>Definindo item ativo no menu no Phoenix Framework usando Short-circuit Evaluation</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Sat, 30 Dec 2023 01:32:00 +0000</pubDate>
      <link>https://forem.com/wevtimoteo/definindo-item-ativo-no-menu-no-phoenix-framework-usando-short-circuit-evaluation-ph0</link>
      <guid>https://forem.com/wevtimoteo/definindo-item-ativo-no-menu-no-phoenix-framework-usando-short-circuit-evaluation-ph0</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/wevtimoteo/defining-active-menu-item-in-phoenix-framework-through-short-circuit-evaluation-1ih6"&gt;Read en-US version&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ao desenvolver aplicações web, muitas vezes precisamos marcar itens de menu, abas ou outras partes da interface do usuário como ativos. No &lt;a href="https://phoenixframework.org/"&gt;Phoenix Framework&lt;/a&gt;, fazendo isso de forma rápida, pode ser que você chegue nesse resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;
  &lt;span class="n"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sx"&gt;~p"/lojas/#{@store}/produtos"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"tab"&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;@active&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="ss"&gt;:products&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;" tab-active"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;else&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="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="no"&gt;Produtos&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;/.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nessa abordagem, usamos expressões ternárias e concatenação de strings para definir classes do CSS condicionalmente. Funciona, mas conforme a lógica condicional aumenta, isso pode ficar difícil de ler e manter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apresentando o Short-circuit Evaluation
&lt;/h2&gt;

&lt;p&gt;No Elixir, &lt;strong&gt;lazy evaluation&lt;/strong&gt; e &lt;strong&gt;short-circuit evaluation&lt;/strong&gt; muitas vezes são usadas de forma intercambiável. No entanto, há uma pequena diferença. A lazy evaluation geralmente é associada a estruturas de dados mais complexas, enquanto o short-circuit é &lt;strong&gt;mais comum em expressões booleanas&lt;/strong&gt;. E é isso que iremos usar.&lt;/p&gt;

&lt;p&gt;Vamos dar uma olhada em alguns exemplos usando o &lt;code&gt;iex&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"plataformatec"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"sourcelevel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"dashbit"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;#=&amp;gt; ["plataformatec", nil, "sourcelevel", false, "dashbit"]&lt;/span&gt;

&lt;span class="c1"&gt;# Utilizando o short-circuit evaluation na lista&lt;/span&gt;
&lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"plataformatec"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="s2"&gt;"sourcelevel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="s2"&gt;"dashbit"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;#=&amp;gt; ["plataformatec", nil, false]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na segunda definição da lista, estamos usando uma operação de short-circuit, onde o último valor da expressão prevalece quando o anterior é verdadeiro; caso contrário, o valor anterior é mantido.&lt;/p&gt;

&lt;p&gt;Em termos simples, é como dizer ao &lt;a href="https://elixir-lang.org/"&gt;Elixir&lt;/a&gt;: "pare de pensar assim que souber a resposta".&lt;/p&gt;

&lt;h2&gt;
  
  
  Aplicando short-circuit na lista de classes do CSS
&lt;/h2&gt;

&lt;p&gt;Numa &lt;a href="https://github.com/phoenixframework/phoenix_html/issues/276#issuecomment-584911356"&gt;issue do Phoenix Framework #276&lt;/a&gt;, foi discutida uma abordagem usando a lazy evaluation para a sintaxe das classes. &lt;a href="https://github.com/phoenixframework/phoenix_html/issues/276#issuecomment-742375950"&gt;Nesse comentário&lt;/a&gt;, ficou claro que, se o item da lista for &lt;code&gt;false&lt;/code&gt; ou &lt;code&gt;nil&lt;/code&gt;, ele será removido. Podemos aplicar essa solução ao nosso exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;
  &lt;span class="n"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sx"&gt;~p"/lojas/#{@store}/produtos"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="s2"&gt;"tab"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;@active&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="ss"&gt;:products&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="s2"&gt;"tab-active"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="no"&gt;Produtos&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;/.&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se &lt;code&gt;@active&lt;/code&gt; for &lt;code&gt;:products&lt;/code&gt;, a string &lt;code&gt;"tab-active"&lt;/code&gt; será adicionada à lista (ficando &lt;code&gt;tab tab-active&lt;/code&gt;), caso contrário, ela será excluída (ficando apenas &lt;code&gt;tab&lt;/code&gt;). Essa abordagem é mais limpa, legível e eficiente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Concisão de Código&lt;/strong&gt;: A sintaxe da lazy evaluation é mais concisa, resultando em código mais limpo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eficiência&lt;/strong&gt;: A lazy evaluation interrompe a avaliação assim que o resultado é conhecido, evitando avaliações desnecessárias.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legibilidade&lt;/strong&gt;: A lista de classes é fácil de entender e manter, melhorando a legibilidade do código.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Facilidade de Manutenção&lt;/strong&gt;: A sintaxe simplificada facilita a manutenção do código ao longo do tempo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ao desenvolver aplicações em Elixir, não basta usar o paradigma funcional, mas também escrever código conciso e fácil de entender.  Essa abordagem não apenas simplifica nosso código, mas também torna a manutenção mais fácil e direta. 😎✨&lt;/p&gt;

</description>
      <category>phoenixframework</category>
      <category>elixir</category>
      <category>css</category>
      <category>html</category>
    </item>
    <item>
      <title>Cleaning your working directory in Git (including untracked files) 😎</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Fri, 03 Nov 2023 20:08:49 +0000</pubDate>
      <link>https://forem.com/wevtimoteo/cleaning-your-working-directory-in-git-including-untracked-files-117m</link>
      <guid>https://forem.com/wevtimoteo/cleaning-your-working-directory-in-git-including-untracked-files-117m</guid>
      <description>&lt;p&gt;Have you ever found yourself in a Git repo mess with unwanted files and changes piling up? Don't sweat it; we've got your back! Let's roll up our sleeves and learn how to clean things up and get back to coding in style. Plus, we'll show you some cool Git tricks along the way! 😄&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Clear Out the Clutter 🧹
&lt;/h2&gt;

&lt;p&gt;Git's &lt;code&gt;clean&lt;/code&gt; command is like your personal repo janitor. It sweeps away all those pesky untracked files and directories. Open your terminal and head to your Git playground. Then, hit it with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clean &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's the lowdown on the command:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;git clean&lt;/code&gt;: The cleanup wizard.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-f&lt;/code&gt;: The "force" flag. It means we're going all-in on the cleanup without asking too many questions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-d&lt;/code&gt;: The "directories" flag. This tells Git to clean up directories along with files, so you get a squeaky-clean workspace.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Say Goodbye to Local Changes ✌️
&lt;/h2&gt;

&lt;p&gt;With the clutter gone, you might still have some local changes you want to ditch. We're gonna use the &lt;code&gt;checkout&lt;/code&gt; command to give those changes a one-way ticket out of your repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command throws away local changes and brings your repo back to the way it was when you last committed. Fresh start, anyone? 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: Get Interactive! 💡
&lt;/h2&gt;

&lt;p&gt;Now, for the cherry on top: Git's interactive mode. It's like a toolbox full of magic wands for precise cleaning. Let's break it out and see the sparks fly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clean &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔮 Poof! You're in Git's interactive menu. This menu is where the real fun begins. It gives you the power to choose which untracked files or changes stay and which ones go. It's like cleaning with a fine-toothed comb.&lt;/p&gt;

&lt;p&gt;And there you have it! Your Git repo is looking sharp and ready for more epic coding adventures. Just remember to keep your valuable changes safe before you unleash Git's cleanup magic.&lt;/p&gt;




&lt;p&gt;Cleaning up your Git repo doesn't have to be a chore. With Git's &lt;code&gt;clean&lt;/code&gt; and &lt;code&gt;checkout&lt;/code&gt; commands, along with the bonus interactive mode, you're in control. Keep your repo organized and fresh, and you'll be coding like a pro in no time! 💻🚀&lt;/p&gt;

</description>
      <category>git</category>
      <category>bestpractices</category>
      <category>github</category>
    </item>
    <item>
      <title>Anotando: Plugins da comunidade que utilizo no Obsidian</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Mon, 09 Oct 2023 15:23:25 +0000</pubDate>
      <link>https://forem.com/wevtimoteo/anotando-plugins-da-comunidade-que-utilizo-no-obsidian-lhm</link>
      <guid>https://forem.com/wevtimoteo/anotando-plugins-da-comunidade-que-utilizo-no-obsidian-lhm</guid>
      <description>

&lt;p&gt;Na &lt;a href="https://dev.to/wevtimoteo/anotando-plugins-embutidos-que-utilizo-no-obsidian-2c45"&gt;postagem passada&lt;/a&gt;, eu mostrei quais plugins embutidos do &lt;a href="https://obsidian.md"&gt;Obsidian&lt;/a&gt; eu deixo ligado e porquê. Agora é a hora de começar a montar o restante do fluxo de anotações utilizando os plugins da &lt;a href="https://obsidian.md/community"&gt;comunidade&lt;/a&gt;.&lt;br&gt;
Todos que eu vou mostrar nessa lista estão disponíveis no GitHub. Para instalar qualquer um deles, basta abrir as preferências do Obsidian (Cmd + ,) &amp;gt; &lt;code&gt;Community Plugins&lt;/code&gt; e clicar no botão &lt;code&gt;Browse&lt;/code&gt;.&lt;br&gt;
Você também pode utilizar essa página para descobrir alternativas aos que eu vou mostrar aqui.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://github.com/tgrosinger/advanced-tables-obsidian"&gt;Advanced tables&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Adiciona diversas melhorias para &lt;strong&gt;navegar e manipular tabelas&lt;/strong&gt;. É possível criar tabelas em &lt;a href="https://www.markdownguide.org/"&gt;Markdown&lt;/a&gt; utilizando a seguinte estrutura:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;| Nome     | Descrição  |
| -------- | ---------- |
| Weverton | Autor      |
| Fulano   | Leitor     |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como você pode perceber, é muito comum aparecer um valor com um texto mais longo que alguma célula existente, se isso acontecer, &lt;strong&gt;todas as colunas precisariam ser ajustadas&lt;/strong&gt; (o mesmo aconteceria se alguma coluna precisasse ser adicionada ou renomeada).&lt;br&gt;
Com esse plugin é possível:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;formatar alinhamento do texto&lt;/li&gt;
&lt;li&gt;mover células (cima, baixo, direita e esquerda)&lt;/li&gt;
&lt;li&gt;adicionar linhas ou colunas&lt;/li&gt;
&lt;li&gt;ordenar por ordem alfabética ou uma função personalizada&lt;/li&gt;
&lt;li&gt;exportar para CSV&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Exemplo de uso:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---F4YVjkV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://raw.githubusercontent.com/tgrosinger/advanced-tables-obsidian/main/resources/screenshots/basic-functionality.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---F4YVjkV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://raw.githubusercontent.com/tgrosinger/advanced-tables-obsidian/main/resources/screenshots/basic-functionality.gif" alt="Demo do Advanced Tables" width="800" height="444"&gt;&lt;/a&gt;&lt;br&gt;
Por mim, só de não precisar ficar editando manualmente esses espaços, já vale o uso da extensão!&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Vinzent03/obsidian-advanced-uri"&gt;Advanced URI&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Permite você controlar várias funcionalidades do Obsidian apenas abrindo algumas URIs, como tudo é texto você não precisa ficar utilizando o mouse ou atalhos de teclado.&lt;br&gt;
Acho ótimo para automatizar o workflow, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;abrir, editar ou criar arquivos&lt;/li&gt;
&lt;li&gt;abrir workspaces&lt;/li&gt;
&lt;li&gt;navegar para títulos dentro do arquivo (como um sumário ou uma página index para determinada categoria)
A lista completa de ações está disponível &lt;a href="https://vinzent03.github.io/obsidian-advanced-uri/actions"&gt;aqui&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://github.com/chetachiezikeuzor/cMenu-Plugin"&gt;cMenu&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Algumas vezes você só quer selecionar o texto e formatar de maneira rápida, mas, para quem está começando com o Markdown, pode ser desafiador memorizar todos os marcadores de formatação. Eu mesmo, dificilmente, vou lembrar como fazer algo como 2&lt;sup&gt;2&lt;/sup&gt; no dia-a-dia.&lt;br&gt;
Só de utilizar a barra de ferramentas do plugin consigo ver que se trata de um &lt;code&gt;2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;/code&gt;, por exemplo.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://github.com/blacksmithgu/obsidian-dataview"&gt;Dataview&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Uso para organizar algumas notas como se fosse um "banco de dados", por exemplo, para listar todas as notas de determinada pasta para formar minha página "Wishlist do Nintendo Switch".&lt;br&gt;
É ótimo para organizar também tasks e notas com algumas tags específicas, no &lt;code&gt;README&lt;/code&gt; do projeto existem diversos exemplos com diversas aplicações.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Vinzent03/find-unlinked-files"&gt;Find orphaned files and broken links&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Eu sou do tipo de pessoa que gosta de linkar tudo. Assim consigo ter um backlink super completo das notas que eu visito. Então, sempre que sobra um tempinho ou quando revisito uma nota antiga, acabo dando uma olhada se não existe nenhum arquivo vazio ou sem link para ele.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://github.com/chetachiezikeuzor/Highlightr-Plugin"&gt;Highlightr&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Utilizando a técnica que eu descrevi no &lt;a href="https://dev.to/wevtimoteo/tomando-notas-como-desenvolvedor-de-software-2com"&gt;primeiro blog post&lt;/a&gt; dessa série, quando eu compilo alguma leitura ou algum texto que preciso sintetizar, utilizo o &lt;strong&gt;negrito&lt;/strong&gt; para as partes mais importantes e utilizo esse plugin para marcar com uma espécie de marca texto o destaque do destaque. Assim consigo obter aquele ideal de abrir uma nota e em até 30 segundos extrair toda info necessária dela (via dica do livro &lt;a href="https://amzn.to/3LIXoEk"&gt;Criando um Segundo Cérebro)&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://github.com/FlorianWoelki/obsidian-iconize"&gt;Icon Folder&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Apenas para dar uma melhorada na aparência da minha sidebar, com esse plugin consigo adicionar ícones para os ítens do topo da árvore de diretórios. Não utilizo para subitems para evitar que eu gere muita poluição visual ao navegar pelas subpastas e me perder na semântica de cada uma delas.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y22iIER---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://wevtimoteo.github.io/assets/images/obsidian_left_sidebar_with_icons.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y22iIER---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://wevtimoteo.github.io/assets/images/obsidian_left_sidebar_with_icons.jpg" alt="Ícones Obsidian" width="216" height="507"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://github.com/sissilab/obsidian-image-toolkit"&gt;Image Toolkit&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Infelizmente, ao abrir ou linkar uma imagem no Obsidian, não é possível dar zoom nela. Esse plugin não só adiciona um lightbox para toda imagem linkada, como também dá a opção de redimensionar, editar, aplicar filtros e até girar a imagem. Recomendo seu uso, principalmente se você adiciona muitas imagens e excedem a largura do que é considerado legível, assim você redimensiona a imagem e se precisar ver mais detalhes basta clicar nela.&lt;br&gt;
Para diminuir o tamanho de uma imagem no Markdown, você pode utilizar essa sintaxe:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![|500](link_para_imagem.jpg)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;code&gt;|500&lt;/code&gt; dentro da "descrição" da imagem, indica para o Markdown, limitar a imagem para 500px de largura.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Quorafind/Obsidian-Memos"&gt;Obsidian Memos&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Esse plugin cobriu muito bem a função de Journaling para mim. Acho muito prático para já adicionar timestamps nas minhas anotações daquele dia sem precisar abrir o dia atual e fazê-lo manualmente.&lt;br&gt;
Além disso, sou incentivado a anotar na estrutura de bullet points, parecido com o &lt;a href="https://logseq.com/"&gt;Logseq&lt;/a&gt;. Acho bacana porque de brinde acabo ganhando a feature de azulejos verdes do GitHub:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ofTxZG5u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://wevtimoteo.github.io/assets/images/github_wall_like.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ofTxZG5u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://wevtimoteo.github.io/assets/images/github_wall_like.jpg" alt="GitHub wall" width="500" height="666"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/larslockefeer/obsidian-plugin-todo"&gt;Obsidian TODOs | Text-based GTD&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Indo na contramão da recomendação, tenho alguns "TODOs" no meu sistema de notas, mas geralmente esses TODOs são coisas que eu gostaria de fazer um dia e que não me impactam caso eu não os faça. Como, por exemplo, ideias de blog posts para escrever.&lt;br&gt;
O plugin permite ter um rastreamento de todos os TODOs que eu possuo no meu sistema de notas. O que é bacana porque eu também ganho uma área na sidebar da direita para visualizar todas as tarefas que citei na nota que eu estou editando/visualizando.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/remotely-save/remotely-save"&gt;Remotely-save&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Citei esse plugin no primeiro blog post também: com ele você consegue sincronizar suas notas utilizando o S3, Dropbox, OneDrive e etc. É uma ótima alternativa se você não quer pagar pelo serviço &lt;a href="https://obsidian.md/sync"&gt;Obsidian Sync&lt;/a&gt;.&lt;br&gt;
Algumas pessoas relataram que utilizam Git para armazenar suas notas em algum repo, acho bem vantajoso pelo controle que conseguimos ter no versionamento das notas. Não tomei esse caminho porque não gostaria de adicionar um overhead para manter meu sistema de notas precisando fazer um commit para cada anotação que eu faço. Caso contrário, perderia a praticidade de simplesmente anotar e deixar o sync acontecer tanto no Desktop quanto no mobile.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Ellpeck/ObsidianSimpleTimeTracker"&gt;Super Simple Time Tracker&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Para algumas tarefas, consigo ter mais foco quando coloco um timer, ter isso no sistema de notas, não só documenta no que eu trabalhei no dia (bem útil para freelancers) como também me permite gerir melhor as pausas, caso eu queira utilizar alguma técnica como o &lt;a href="https://pt.wikipedia.org/wiki/T%C3%A9cnica_pomodoro"&gt;Pomodoro&lt;/a&gt;.&lt;br&gt;
Recomendo utilizar esse plugin caso você precise desse tipo de rastreamento nas atividades durante o dia, costumo usar combinado com o plugin &lt;code&gt;Obsidian memos&lt;/code&gt; porque consigo manter os timers dentro das notas diárias onde fiz aquela tarefa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Próximos passos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Existem duas iniciativas da comunidade do Obsidian, voltadas para criação/divulgação de plugins, uma delas é o &lt;a href="https://obsidian-plugin-stats.vercel.app/"&gt;Plugin Stats&lt;/a&gt;, que permite visualizar os plugins em trending, mais baixados, com tags específicas e etc.&lt;/li&gt;
&lt;li&gt;E existe o vault (que é um dos cofres de notas) chamado &lt;a href="https://publish.obsidian.md/hub/02+-+Community+Expansions/02.01+Plugins+by+Category/%F0%9F%97%82%EF%B8%8F+02.01+Plugins+by+Category"&gt;Obsidian Hub&lt;/a&gt;, voltado para listar os plugins por categoria.&lt;/li&gt;
&lt;li&gt;Um outro caminho para encontrar novos plugins, é explorar o &lt;code&gt;Browse&lt;/code&gt; da aba &lt;code&gt;Community plugins&lt;/code&gt; na janela de configurações do Obsidian (que eu citei no início do post).&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>notas</category>
      <category>obsidian</category>
      <category>plugins</category>
      <category>ptbr</category>
    </item>
    <item>
      <title>Anotando: Plugins embutidos que utilizo no Obsidian</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Sun, 24 Sep 2023 06:05:04 +0000</pubDate>
      <link>https://forem.com/wevtimoteo/anotando-plugins-embutidos-que-utilizo-no-obsidian-2c45</link>
      <guid>https://forem.com/wevtimoteo/anotando-plugins-embutidos-que-utilizo-no-obsidian-2c45</guid>
      <description>

&lt;p&gt;Na &lt;a href="https://dev.to/wevtimoteo/tomando-notas-como-desenvolvedor-de-software-2com"&gt;postagem passada&lt;/a&gt; eu expliquei como iniciei minha jornada em tomar notas, mas não falei muito do app (&lt;a href="https://obsidian.md"&gt;Obsidian&lt;/a&gt;) e quais minhas configurações e plugins.&lt;/p&gt;

&lt;p&gt;Vamos começar falando sobre os plugins embutidos nele (conhecidos como &lt;code&gt;Core plugins&lt;/code&gt; na seção de configurações).&lt;/p&gt;

&lt;h2&gt;
  
  
  Audio recorder
&lt;/h2&gt;

&lt;p&gt;Sem dúvida, uma das funcionalidades mais amadas pelos brasileiros: um WhatsApp nas suas notas! :D só que aqui você salva os &lt;strong&gt;seus áudios&lt;/strong&gt; para você mesmo ouvir! Quero ver se você vai continuar gravando um podcast para cada áudio que envia para um contato depois dessa experiência.&lt;/p&gt;

&lt;p&gt;Aqui a ideia é guardar a informação de forma rápida para depois usar alguma ferramenta de transcrição ou simplesmente sintetizar os pontos mais importantes do texto.&lt;/p&gt;

&lt;p&gt;O formato utilizado é &lt;code&gt;.webm&lt;/code&gt;, que garante uma ótima qualidade de gravação com uma boa troca pelo tamanho do arquivo. A única desvantagem é que se você apagar a ocorrência de onde você linkou o áudio gravado, o Obsidian não vai te perguntar se quer também remover o anexo. Mapear esses anexos que nunca foram mencionados acaba sendo um tanto trabalhoso, então fica por sua conta.&lt;/p&gt;

&lt;p&gt;Se fosse comparar o formato &lt;code&gt;.webm&lt;/code&gt; com outros populares, seria mais ou menos isso:&lt;/p&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;.webm&lt;/th&gt;
&lt;th&gt;.mp3&lt;/th&gt;
&lt;th&gt;.ogg&lt;/th&gt;
&lt;th&gt;.opus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bitrate (kbps)&lt;/td&gt;
&lt;td&gt;Variável, 256-320&lt;/td&gt;
&lt;td&gt;Variável, 320&lt;/td&gt;
&lt;td&gt;Variável, 192-500&lt;/td&gt;
&lt;td&gt;Variável, 6-510&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tamanho Médio (10s)&lt;/td&gt;
&lt;td&gt;Aproximadamente 320 KB&lt;/td&gt;
&lt;td&gt;Aproximadamente 400 KB&lt;/td&gt;
&lt;td&gt;Aproximadamente 250 KB&lt;/td&gt;
&lt;td&gt;Aproximadamente 80 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aplicativos&lt;/td&gt;
&lt;td&gt;Obsidian&lt;/td&gt;
&lt;td&gt;Músicas&lt;/td&gt;
&lt;td&gt;Telegram&lt;/td&gt;
&lt;td&gt;WhatsApp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Backlinks
&lt;/h2&gt;

&lt;p&gt;É uma das principais funcionalidades que me motivou a utilizar Obsidian, mandatória para seu sistema de notas. Ela vai indicar onde aquela nota foi linkada/citada.&lt;/p&gt;

&lt;p&gt;Assim, se você mencionar aquela função ou snippet, ao acessar a nota da linguagem da programação, você vai conseguir ver onde ela foi citada, como se fosse um agregador de ocorrências.&lt;/p&gt;

&lt;h2&gt;
  
  
  Command Palette
&lt;/h2&gt;

&lt;p&gt;O famoso &lt;code&gt;Cmd + Shift + P&lt;/code&gt; do &lt;a href="https://code.visualstudio.com/"&gt;Visual Studio Code&lt;/a&gt;, porém no Obsidian é só &lt;code&gt;Cmd + P&lt;/code&gt;, esse comando vai te mostrar todas as funções existentes no app, desde esconder as sidebars da esquerda ou da direita, como uma opção para mudar temas, apagar o arquivo, renomear e etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Daily Notes
&lt;/h2&gt;

&lt;p&gt;Esse plugin é opcional, se você não utiliza a funcionalidade de Journal (Diário), você pode pular essa. Com ela você consegue derivar notas diárias em um determinado diretório, eu uso &lt;code&gt;_Journal&lt;/code&gt;. Vale ressaltar que o sistema PARA, que eu mencionei no blog post anterior, não menciona nada sobre melhor organização para esse tipo de notas. Se você não quer colocar em uma pasta raiz, caberia muito bem no &lt;code&gt;3 Resources&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Dicas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Utilize o formato de data &lt;code&gt;YYYY-MM-DD&lt;/code&gt;&lt;/strong&gt;, não é tão intuitivo para nós por não estarmos acostumados, mas é o melhor para ordenação das notas. Dessa maneira você não terá uma bagunça na ordenação por ordem alfabética, como &lt;code&gt;01-10-2022&lt;/code&gt; e depois um &lt;code&gt;01-10-2023&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selecione um template&lt;/strong&gt; para gerar suas notas diárias com um pouco mais de metadados, eu utilizo as seguintes properties:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
created at: {{date:DD/MM/YYYY}} {{time:HH:mm}}
weekday: {{date:dddd}}
tags:
---
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso você saberá qual dia da semana gerou aquela nota e em qual data no formato mais convencional de leitura.&lt;/p&gt;

&lt;p&gt;Eu utilizo campo &lt;code&gt;tags&lt;/code&gt; para especificar quais as atividades daquele dia que anotei, exemplo: utilizo &lt;code&gt;#ffxiv&lt;/code&gt; quando quero anotar algo do &lt;a href="https://na.finalfantasyxiv.com/"&gt;Final Fantasy XIV&lt;/a&gt; e &lt;code&gt;#sourcelevel&lt;/code&gt; quando tem algo do trabalho para lembrar.&lt;/p&gt;

&lt;p&gt;Ressaltando que &lt;strong&gt;não adianta nada ter anotado algo se você não consegue encontrar depois&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Note composer
&lt;/h2&gt;

&lt;p&gt;Algumas vezes você começa uma seção de aprendizado sobre determinada ferramenta e quando vai ver já escreveu muitos detalhes sobre algo muito específico dela, por exemplo, como a cobrança funciona.&lt;/p&gt;

&lt;p&gt;Nesse caso o plugin Note composer ajuda demais porque basta selecionar o texto específico e utilizar a opção no &lt;code&gt;Command palette&lt;/code&gt;: &lt;code&gt;Note composer: Extract current selection...&lt;/code&gt;. Esse comando irá criar uma nova nota com a seleção e linkar a nota criada na nota anterior que você estava editando.&lt;/p&gt;

&lt;p&gt;Assim você garante um sistema de notas mais organizado e sem aquele monte de ruído que, muitas vezes, não te interessa quando está lendo as notas gerais.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linkando notas
&lt;/h3&gt;

&lt;p&gt;Vale lembrar que, para linkar uma nota, utilize a sintaxe &lt;code&gt;[[Nome da nota]]&lt;/code&gt;, mesmo que seja para caminhos mais complexos como &lt;code&gt;[[3 Resources/Caminho/para/Nota]]&lt;/code&gt;. Se você quiser usar um atalho/alias de exibição, basta utilizar pipe (&lt;code&gt;|&lt;/code&gt;) no final do link: &lt;code&gt;[3 Resources/Caminho/muito/longo/Como escrever melhor|Como escrever melhor]]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Caso você precise referenciar essa nota várias vezes, basta utilizar a property &lt;code&gt;aliases&lt;/code&gt;. Com ela você consegue dar "apelidos" para mencionar a nota, então ao abrir os colchetes duplos, o próprio Obsidian já vai autocompletar os apelidos disponíveis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outline
&lt;/h2&gt;

&lt;p&gt;Muito útil para entender a estrutura da nota e incentiva você a escrever os &lt;code&gt;headings&lt;/code&gt; (&lt;code&gt;h1&lt;/code&gt;, &lt;code&gt;h2&lt;/code&gt;, &lt;code&gt;h3&lt;/code&gt; e assim em diante) nas suas notas. Essa visualização fica presente na sidebar da direita ao abrir uma nota e facilita demais na navegação, edição e na leitura.&lt;/p&gt;

&lt;h2&gt;
  
  
  Page preview
&lt;/h2&gt;

&lt;p&gt;Essa é bacana quando você não quer acessar a nota que foi mencionada na nota que está editando, basta segurar &lt;code&gt;Ctrl&lt;/code&gt;/&lt;code&gt;Cmd&lt;/code&gt; e passar o mouse sob a menção (hover), um prompt será exibido com o preview da nota.&lt;/p&gt;

&lt;h2&gt;
  
  
  Properties preview
&lt;/h2&gt;

&lt;p&gt;Sem dúvida uma das funcionalidades que fizeram alguns usuários de outros apps de notas migrarem para o Obsidian. Foi lançada recentemente na &lt;a href="https://obsidian.md/changelog/2023-08-31-desktop-v1.4.5/"&gt;versão v1.4, do final de Agosto, 2023&lt;/a&gt;, ela exibe uma interface mais atrativa para usuários menos técnicos visualizarem e editarem as propriedades de uma nota:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nDLHlTPi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/obsidianmd/obsidian-api/assets/693981/aea72173-5663-459d-83de-6ff888f6bdd5" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nDLHlTPi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/obsidianmd/obsidian-api/assets/693981/aea72173-5663-459d-83de-6ff888f6bdd5" alt="Properties view do Obsidian" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick switcher
&lt;/h2&gt;

&lt;p&gt;Seguindo com a analogia com o VSCode, seria o equivalente ao &lt;code&gt;Ctrl + P&lt;/code&gt;, uma busca "fuzzy" (que significa algo embaçado ou não muito nítido) das suas notas. Essa é &lt;strong&gt;uma maneira inteligente de pesquisar algo, mesmo quando você não lembra muito bem o nome&lt;/strong&gt;, só digita algumas letras e ali está o que você estava procurando.&lt;/p&gt;

&lt;p&gt;Através do &lt;code&gt;Quick switcher&lt;/code&gt; também é possível criar novas notas, só fique atento que se você incluir caracteres especiais, como &lt;code&gt;:&lt;/code&gt; no título da nota, o mesmo falhará e se você estava pensando em um título para o blog post (como eu para esse), será perdido! Então coloque um nome rápido e depois renomeie a nota, utilizando o plugin apenas para criar no local correto.&lt;/p&gt;

&lt;p&gt;Ela não funciona muito bem para criar novas notas em estruturas de diretórios aninhadas, por exemplo: &lt;code&gt;3 Resources/Ideias/Postagens/Minha ideia de blog post&lt;/code&gt;, você teria que digitar pasta por pasta. O que deixa você suscetível a erro, mas espero que o time do Obsidian resolva isso logo ou mesmo a própria comunidade - &lt;em&gt;como última saída, também posso esperar essa dor aumentar para eu mesmo resolvê-la um dia! :)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tags view
&lt;/h2&gt;

&lt;p&gt;Uma das extensões bem bacanas para você avaliar o estado geral das suas notas, serve mais para curiosidade que para algo de fato "útil". Com ela é possível ver todas as tags (etiquetas) que utilizou em todo seu sistema.&lt;/p&gt;

&lt;p&gt;Vale ressaltar que é possível criar tags aninhadas, seguindo exemplo do FFXIV, se eu quero anotar relacionado a jardinagem no jogo, não vou utilizar apenas &lt;code&gt;#gardening&lt;/code&gt; e sim &lt;code&gt;#ffxiv/gardening&lt;/code&gt;. &lt;strong&gt;Dicas:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;utilize hífens para separar palavras, não vá acabar com um &lt;code&gt;#codequality&lt;/code&gt;, use &lt;code&gt;#code-quality&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;só utilize tags aninhadas para desambiguação das tags (como o exemplo da jardinagem acima)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Word count
&lt;/h2&gt;

&lt;p&gt;Muito útil para quem escreve conteúdo, com esse plugin você sabe quantas palavras foram utilizadas e com isso pode escrever um conteúdo com uma chance melhor de engajamento.&lt;/p&gt;

&lt;p&gt;Algo que aprendi na &lt;a href="https://sourcelevel.io"&gt;SourceLevel&lt;/a&gt; ao escrever postagens com maior frequência foi que, segundo um &lt;a href="https://backlinko.com/content-study"&gt;estudo de 2019 do pessoal da Backlinko&lt;/a&gt; (uma das referências em SEO, conteúdo e marketing), o &lt;strong&gt;"sweet spot" para maximizar os shares nas redes sociais&lt;/strong&gt;, como Facebook, Twitter, Reddit e Pinterest, é algo &lt;strong&gt;em torno de 1.000 - 2.000 palavras&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Blog posts nesse intervalo de conteúdo tem, em média, &lt;strong&gt;56.1% mais compartilhamentos que conteúdos com menos de 1.000 palavras&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;E como esse blog post já está com ~1.400 até aqui, acho que é hora de parar e deixar o detalhamento sobre plugins da comunidade para uma nova postagem. Espero ter colaborado em como "tunar" seu Obsidian ou a selecionar configurações equivalentes para usar no seu sistema de notas atual.&lt;/p&gt;

</description>
      <category>notas</category>
      <category>obsidian</category>
      <category>plugins</category>
      <category>ptbr</category>
    </item>
    <item>
      <title>Tomando notas como desenvolvedor de software</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Sat, 23 Sep 2023 13:43:36 +0000</pubDate>
      <link>https://forem.com/wevtimoteo/tomando-notas-como-desenvolvedor-de-software-2com</link>
      <guid>https://forem.com/wevtimoteo/tomando-notas-como-desenvolvedor-de-software-2com</guid>
      <description>

&lt;p&gt;Me arrependo profundamente de não tomar notas mais cedo. As notas até existiam, mas geralmente eram coisas pontuais para executar uma tarefa ou algo interessante que encontrei que meses depois eram só anotações "sem utilidade".&lt;br&gt;
Fico pensando se eu tivesse um mapa de tudo que eu aprendi e experienciei na vida transcrito de uma maneira organizada que eu possa consumir para gerar novas ideias e, finalmente, eu tenho.&lt;/p&gt;

&lt;p&gt;Recentemente li o livro &lt;a href="https://amzn.to/3PMEizK"&gt;Criando um Segundo Cérebro&lt;/a&gt; do Tiago Forte e me ajudou bastante a tirar essa ideia de organização perfeita e simplesmente começar a anotar. Meu processo de tomar notas para valer se deu depois de resolver as seguintes dúvidas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qual melhor app/software para tomar notas?&lt;/li&gt;
&lt;li&gt;O que anotar?&lt;/li&gt;
&lt;li&gt;Como organizar minhas notas?&lt;/li&gt;
&lt;li&gt;Como anotar rápido?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Só depois que "resolvi" esses pontos que senti que estava pronto para escrever para valer e aí a coisa começou a andar.&lt;/p&gt;
&lt;h2&gt;
  
  
  Qual o melhor app/software para tomar notas?
&lt;/h2&gt;

&lt;p&gt;Como tudo: depende. E depende para cada pessoa. Cada solução terão vantagens e desvantagens, antes precisei escrever o que era mais importante para mim para poder decidir, eu queria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Um app leve (não necessariamente nativo, um &lt;a href="https://github.com/electron/electron"&gt;electron&lt;/a&gt; resolveria)&lt;/li&gt;
&lt;li&gt;Suporte a Backlinks (lista de menções da nota que estou visualizando)&lt;/li&gt;
&lt;li&gt;Queria estrutura de pastas (para organização que eu estava pensando fazia sentido)&lt;/li&gt;
&lt;li&gt;De graça (não queria pagar para algo que iria manter para vida toda)&lt;/li&gt;
&lt;li&gt;Os arquivos são meus (não estão em uma cloud privada ou requere alguma funcionalidade de exportação para arquivos para eu manipulá-los)&lt;/li&gt;
&lt;li&gt;Possibilidade de estender e customizar (caso eu quisesse desenvolver um plugin para atender um fluxo específico meu)&lt;/li&gt;
&lt;li&gt;Arquivos de anexos centralizados (não queria guardar em uma cloud à parte)&lt;/li&gt;
&lt;li&gt;Não tinha necessidade de colaborar (editar a nota ao mesmo tempo que alguém)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://notion.so/"&gt;Notion&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Requisito de estar sempre conectado&lt;/li&gt;
&lt;li&gt;Fácil de se tornar algo mais complexo com funcionalidades de tabelas, banco de dados, fórmulas&lt;/li&gt;
&lt;li&gt;Não possui suporte para backlinks&lt;/li&gt;
&lt;li&gt;Acho o sistema de anexos muito lento para renderizar arquivos estáticos&lt;/li&gt;
&lt;li&gt;Tenho a sensação do app ser muito pesado o que dificultava minha navegação&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://logseq.com/"&gt;Logseq&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;App super leve&lt;/li&gt;
&lt;li&gt;Open Source (esse item pesa bastante)&lt;/li&gt;
&lt;li&gt;Tudo é um bullet point (uma &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; dentro de uma &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; para desenvolvedores web)&lt;/li&gt;
&lt;li&gt;Não existe organização por diretórios, apenas um "All notes"&lt;/li&gt;
&lt;li&gt;Bem fácil para anotar no formato diário (Journaling)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://roamresearch.com/"&gt;Roam&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;App/Serviço Pago&lt;/li&gt;
&lt;li&gt;Porém existe localização de preço para brasileiros (é necessário entrar em contato)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://obsidian.md/"&gt;Obsidian&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Comunidade bem forte&lt;/li&gt;
&lt;li&gt;Diversos plugins&lt;/li&gt;
&lt;li&gt;App leve&lt;/li&gt;
&lt;li&gt;Fácil de customizar e extender&lt;/li&gt;
&lt;li&gt;Fácil de gerir arquivos estáticos (attachments/anexos)&lt;/li&gt;
&lt;li&gt;Visão de grafo é interessante mas não muito útil&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Dentre esses acabei optando pelo &lt;em&gt;Obsidian&lt;/em&gt;, inclusive esse blog post está sendo escrito nele. Gosto bastante de como é possível configurá-lo para ficar no fluxo de edição mais favorável ao que estou acostumado, inclusive com Vi keys para quem curte o editor &lt;a href="https://www.vim.org/"&gt;Vim&lt;/a&gt; (e para quem não conhece, vá direto para o &lt;a href="https://neovim.io/"&gt;Neovim&lt;/a&gt; caso queira testar).&lt;/p&gt;
&lt;h2&gt;
  
  
  O que anotar?
&lt;/h2&gt;

&lt;p&gt;Como você deve ter imaginado, esse é um dos pontos críticos: o risco de anotar tudo que sua nota tem tanto ruído e detalhe que se torna irrelevante para ser consultada. Eu recomendaria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;algo que seja importante&lt;/li&gt;
&lt;li&gt;anote de uma maneira que você entenda o contexto rapidamente&lt;/li&gt;
&lt;li&gt;a nota tem que ter alguma utilidade para você

&lt;ul&gt;
&lt;li&gt;se anotar quantos PRs (Pull Requests) você abriu no dia é importante e tem alguma utilidade no futuro, anote! - mas é melhor usar a &lt;a href="https://sourcelevel.io/"&gt;SourceLevel&lt;/a&gt; para isso :)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Falando da rotina de uma pessoa desenvolvedora de software eu gosto de anotar:&lt;/p&gt;
&lt;h3&gt;
  
  
  Reuniões
&lt;/h3&gt;

&lt;p&gt;É muito comum, durante a daily diversas pessoas citarem ferramentas, tecnologias, nomes e/ou empresas que você nunca ouviu falar. Não precisa ser algo bem preciso, principalmente se for uma reunião presencial, mas é legal transcrever pontos importantes daquela reunião para depois você saber de onde conheceu uma determinada tecnologia ou uma empresa.&lt;/p&gt;

&lt;p&gt;Acho também interessante para reuniões de 1:1s ou de Performance, para saber o que já foi dito em reuniões passadas e até para fazer o follow up da sugestão e até dos elogios.&lt;/p&gt;
&lt;h3&gt;
  
  
  Sessão de Debugging
&lt;/h3&gt;

&lt;p&gt;Durante um debugging eu gosto de transcrever o problema que estou tendo e já não estou conseguindo resolver, como por exemplo, uma exception. Então sempre que eu tenho um problema, verifico primeiro no meu sistema de notas.&lt;/p&gt;

&lt;p&gt;Esses dias precisei adicionar uma variável ambiente em um cluster &lt;a href="https://kubernetes.io/"&gt;Kubernetes&lt;/a&gt;. Eu não lembrava qual subcomando do CLI &lt;code&gt;kubectl&lt;/code&gt; deveria utilizar, mas bastou uma busca rápida no meu sistema de notas e ali estava um tutorial de como fazer isso. Para quem ficou interessado o comando é &lt;code&gt;kubectl set env deployment/&amp;lt;seu-deployment&amp;gt; MY_ENV_CONFIG=&amp;lt;valor da config&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Esse tipo de coisa, não só cataloga os problemas que estou tendo, mas pode ajudar um colega de time quando passa por algo parecido. Bastaria copiar o &lt;a href="https://www.markdownguide.org/"&gt;Markdown&lt;/a&gt; e colar o conteúdo para a pessoa. Outro ponto interessante é que fica fácil escrever um blog post, só pegando partes das minhas notas.&lt;/p&gt;
&lt;h3&gt;
  
  
  Discovery/Aprendizado
&lt;/h3&gt;

&lt;p&gt;Comecei recentemente a estudar o &lt;a href="https://www.pulumi.com/"&gt;Pulumi&lt;/a&gt; como alternativa ao &lt;a href="https://www.terraform.io/"&gt;Terraform&lt;/a&gt;, então fui detalhando tudo que descobri em poucos itens de forma resumida. Como, por exemplo, formatos disponíveis para descrever a infraestrutura (NodeJS, Python, etc), precificação e funcionamento do modelo de créditos.&lt;/p&gt;

&lt;p&gt;Esse tipo de nota me permite ajudar também outras pessoas que estão na etapa de aprendizado e até para conversar em uma reunião sobre determinada ferramenta e ir levantando potenciais dúvidas para serem resolvidas.&lt;/p&gt;
&lt;h3&gt;
  
  
  Consumo de conteúdo
&lt;/h3&gt;

&lt;p&gt;Agora quando eu leio algum blog post, cadastro no sistema de notas e transcrevo algumas partes importantes dele. Com a leitura do livro &lt;em&gt;Criando um Segundo Cérebro&lt;/em&gt;, que citei no início do texto, aprendi a utilizar &lt;strong&gt;bold/negrito&lt;/strong&gt; nos textos e também dar highlight no resumo do resumo. Isso também se aplica aos vídeos do YouTube, você pode clicar nas reticências (&lt;code&gt;...&lt;/code&gt;) -&amp;gt; &lt;code&gt;Mostrar transcrição&lt;/code&gt;. Tudo bem que é uma transcrição gerada, mas já ajuda a salvar trechos do vídeo para serem buscados no futuro.&lt;/p&gt;
&lt;h2&gt;
  
  
  Como organizar as notas?
&lt;/h2&gt;

&lt;p&gt;Primeira coisa que aprendi para destravar essa pergunta foi: &lt;strong&gt;não existe organização de diretórios e tags perfeitos&lt;/strong&gt;. Sendo assim, pensei em como reduzir o meu estrago, para isso acabei adotando o sistema proposto pelo Tiago Forte, chamado &lt;strong&gt;PARA&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Projetos:&lt;/strong&gt; Algo que você está trabalhando no momento, existe início e uma data de fim&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Áreas:&lt;/strong&gt; Algo que você está trabalhando continuamente, por exemplo, um cuidado de uma doença genética ou um almoço com um familiar que você tem o planejamento de sempre conhecer um lugar diferente&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recursos:&lt;/strong&gt; Aqui vai todo o restante, eu penso nele como um "banco de dados" das minhas notas e ultimamente ela tem virado meio que uma Wiki pessoal. Lá consigo ter listagem de jogos que já joguei, séries que já assisti, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arquivo:&lt;/strong&gt; Tudo que teve um término (independente do que era originalmente), se foi encerrado, ele vem para esse diretório.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se você utilizar Logseq, recomendo dar uma olhada &lt;a href="https://github.com/georgeguimaraes/logseq-plugin-add-PARA-properties"&gt;na extensão&lt;/a&gt; que o &lt;a href="https://twitter.com/georgeguimaraes"&gt;George Guimarães&lt;/a&gt; desenvolveu que utiliza o sistema PARA.&lt;/p&gt;

&lt;p&gt;O Tiago Forte recomenda inclusive enumerar cada um deles para facilitar o mention e acesso. Então ficaria:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Projetos&lt;/li&gt;
&lt;li&gt;Áreas&lt;/li&gt;
&lt;li&gt;Recursos&lt;/li&gt;
&lt;li&gt;Arquivo&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Se você não tem uma organização em mente, recomendo fortemente utilizar essa e depois deixar seu sistema de gestão de conhecimento pessoal tomar forma organicamente e te direcionar para melhor estruturação.&lt;/p&gt;
&lt;h2&gt;
  
  
  Como anotar rápido?
&lt;/h2&gt;

&lt;p&gt;Pense em não perder as ideias, não tem problema ter algum erro de digitação ou não ter muito detalhamento enquanto você está anotando algo (por exemplo, durante uma reunião). &lt;strong&gt;O importante é você não perder essa informação&lt;/strong&gt; e poder revisitar suas notas depois da reunião para organizar com etiquetas (tags), linkar notas existentes (como pessoas que participaram da reunião ou lugar que a mesma ocorreu).&lt;/p&gt;

&lt;p&gt;Eu gosto bastante do sistema de diário (criando uma entrada do dia e anotando tudo lá). O Obsidian não trabalha muito dessa maneira, comparado ao Logseq, mas utilizando o Cmd + P -&amp;gt; &lt;code&gt;Daily notes: Open today's daily note&lt;/code&gt;, resolve isso de maneira muito rápida. É interessante adicionar algumas properties também, para isso, no início de cada nota basta utilizar o seguinte trecho:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
tags: health cooking
url: https://minha.receita/almoco
----
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode customizar as propriedades da nota com o que o você achar relevante, eu tenho linkado notas existentes nas propriedades diretamente (de forma experimental).&lt;/p&gt;

&lt;p&gt;Depois de achar um formato para cada tipo de nota, você pode transformá-los em &lt;strong&gt;Templates&lt;/strong&gt;, então assim que abrir a nota, você pode utilizar Cmd + T (no Obsidian) para selecionar qual template utilizar, inclusive é possível aplicar vários templates na mesma nota.&lt;/p&gt;




&lt;h3&gt;
  
  
  Plugins?
&lt;/h3&gt;

&lt;p&gt;Eu utilizo vários, porém não recomendo sair pegando os plugins que alguém utiliza e instalar tudo de uma vez. Deixe a necessidade surgir! No futuro pretendo compilar os que uso e por qual motivo, o único que faço questão de mencionar agora é o &lt;a href="https://github.com/remotely-save/remotely-save"&gt;remotely-save&lt;/a&gt;, para sincronizar as notas do Obsidian no S3 (ou compatível), Google Drive ou Dropbox. Permitindo assim você acessá-las no iOS ou Android.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anotou?
&lt;/h2&gt;

&lt;p&gt;Nesse blog post já deve ter surgido várias coisas bacanas para você copiar e usar depois, se você ainda não começou a anotar: agora é o momento!&lt;/p&gt;

&lt;p&gt;Não deixe para depois e não espere o momento perfeito para anotar. Imagine a quantidade de coisas interessantes e de possibilidades que você poderia estar desenvolvendo há tanto tempo se já tivesse essas anotações desde o início da sua carreira?&lt;/p&gt;

</description>
      <category>notas</category>
      <category>obsidian</category>
      <category>plugin</category>
      <category>ptbr</category>
    </item>
    <item>
      <title>Mastering Git: The lesser-known commands you could be using (or not)</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Wed, 16 Aug 2023 12:52:38 +0000</pubDate>
      <link>https://forem.com/sourcelevel/mastering-git-the-lesser-known-commands-you-could-be-using-or-not-1234</link>
      <guid>https://forem.com/sourcelevel/mastering-git-the-lesser-known-commands-you-could-be-using-or-not-1234</guid>
      <description>&lt;p&gt;Navigating the vast landscape of Git commands can sometimes feel like venturing into a bustling marketplace where everyone seems to know the most popular stalls: &lt;strong&gt;&lt;code&gt;pull&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;commit&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;push&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;rebase&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;stash&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;checkout&lt;/code&gt;&lt;/strong&gt;. These commands are the cornerstone of everyday version control tasks, often forming the basis of a developer's Git journey. But amidst this bustling crowd of common commands, have you ever paused to wonder, "What else can Git do?" Have you ever caught yourself in the quiet moments, pondering the existence of lesser-known Git commands that could potentially transform your workflow?&lt;/p&gt;

&lt;p&gt;Join us as we navigate through these unexplored corners of Git, revealing commands that may have eluded your attention but can significantly enhance your mastery of version control.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;git switch&lt;/code&gt;: a fresh approach to branch management
&lt;/h2&gt;

&lt;p&gt;While &lt;code&gt;git checkout&lt;/code&gt; remains a versatile command for various purposes, it also comes with the potential to inadvertently discard changes or create confusion. Enter &lt;code&gt;git switch&lt;/code&gt;, introduced in Git version 2.23 as a dedicated tool for branch management.&lt;/p&gt;

&lt;p&gt;Unlike the all-encompassing nature of &lt;code&gt;git checkout&lt;/code&gt;, &lt;code&gt;git switch&lt;/code&gt; focuses solely on simplifying branch-related operations. Its purpose is straightforward: to provide a clearer and safer way to switch branches, reducing the risk of errors and data loss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Consider Using &lt;code&gt;git switch&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you've ever felt the unease of accidentally losing your work while using &lt;code&gt;git checkout&lt;/code&gt;, &lt;code&gt;git switch&lt;/code&gt; offers a more reassuring alternative. This command offers explicit error messages and is designed to minimize the chances of unintentional changes.&lt;/p&gt;

&lt;p&gt;Here are some examples of how you can use &lt;code&gt;git switch&lt;/code&gt; effectively:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and switch to a new branch with &lt;code&gt;git switch -c my-new-branch&lt;/code&gt;, using the current commit as its base.&lt;/li&gt;
&lt;li&gt;Swiftly switch to the &lt;code&gt;main&lt;/code&gt; branch using &lt;code&gt;git switch main&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Return to the previous branch by employing &lt;code&gt;git switch -&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;git bisect&lt;/code&gt;: tracking bugs down
&lt;/h2&gt;

&lt;p&gt;In software development, locating a bug can be akin to finding a needle in a haystack. But fear not – the &lt;code&gt;git bisect&lt;/code&gt; command is here to help. It's like a guided missile for tracking down the elusive bug.&lt;/p&gt;

&lt;p&gt;Here's how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Identify Known States&lt;/strong&gt;: First, you need to identify a "good" commit (when the code worked) and a "bad" commit (when the bug surfaced).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start Bisecting&lt;/strong&gt;: Begin the process with:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git bisect start
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mark Known Commits&lt;/strong&gt;: Tag the known "good" and "bad" commits:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git bisect good &amp;lt;good-commit&amp;gt;
git bisect bad &amp;lt;bad-commit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Navigate Commits&lt;/strong&gt;: Git will automatically guide you to a commit between the two states. You test your code there. To see which commit you're at:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git log -n 1 --oneline
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Continue the Hunt&lt;/strong&gt;: Based on your test, you mark the commit as "good" or "bad":&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git bisect good  &lt;span class="c"&gt;# or git bisect bad&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Repeat Until Found&lt;/strong&gt;: Git will automatically move to the next commit within the narrowed range. You repeat the process until you've pinpointed the bug's source.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;End the Hunt&lt;/strong&gt;: When you've found the problematic commit:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git bisect reset
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This concludes the process and takes you back to the clean state and the previous &lt;code&gt;HEAD&lt;/code&gt; before you started the &lt;code&gt;bisect&lt;/code&gt; process.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;git notes&lt;/code&gt;: Enhancing Commit Context
&lt;/h2&gt;

&lt;p&gt;Git notes provide a versatile way to attach supplementary information to a commit without altering the commit itself.&lt;/p&gt;

&lt;p&gt;Imagine you and your team found yourselves in a Git repository with less-than-ideal commit messages. Often, commits lack the necessary clarity to explain their purpose effectively. This feature allows you to enrich commits with essential context without the need to modify or rewrite commit SHA1.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Utilize Git Notes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stored locally within &lt;code&gt;.git/refs/notes&lt;/code&gt;, Git notes remain separate from the main commit data. By default, they are not pushed to the remote repository. However, this can be changed by pushing them in a manner similar to &lt;code&gt;git tag&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push origin refs/notes/commits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To retrieve existing notes from a remote repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git fetch origin refs/notes/commits:refs/notes/commits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding Notes to Commits
&lt;/h3&gt;

&lt;p&gt;You can easily add notes to existing commits using the &lt;code&gt;git notes add&lt;/code&gt; command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git notes add -m "Introduce irreversible migrations at this point" &amp;lt;commit-sha1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;m&lt;/code&gt; option is optional. If omitted, your default text editor will open, allowing for a more detailed explanation.&lt;/li&gt;
&lt;li&gt;If you skip providing &lt;code&gt;&amp;lt;commit-sha1&amp;gt;&lt;/code&gt;, the &lt;code&gt;HEAD&lt;/code&gt; commit will be assumed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Removing Notes
&lt;/h3&gt;

&lt;p&gt;Removing notes is straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git notes remove &amp;lt;commit-SHA1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Listing and Viewing Notes
&lt;/h3&gt;

&lt;p&gt;To list all existing notes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git notes list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more in-depth insight into a specific note:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git notes show &amp;lt;commit-SHA1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unfortunately, GitHub no longer displays &lt;strong&gt;&lt;code&gt;git notes&lt;/code&gt;&lt;/strong&gt; in its UI. This adjustment, in my opinion, reflects the limited usage of these commands. By making this change, GitHub appears to be fostering a culture of encouraging developers to consistently produce improved commits without the temptation to revisit or dwell on the details of previous commits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sharing Diffs: &lt;code&gt;git diff&lt;/code&gt; + &lt;code&gt;git apply&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Consider a common scenario: a pair programming session happens to address a specific problem. During this interaction, the most experienced developer takes the lead, demonstrating a viable solution by implementing essential changes.&lt;/p&gt;

&lt;p&gt;As the collaborative session unfolds, these changes become crucial building blocks for the solution. To facilitate the smooth continuation of this collaborative effort, Git provides two essential commands: &lt;code&gt;git diff&lt;/code&gt; and &lt;code&gt;git apply&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Once the demonstration is complete, and the necessary changes are in place, you can encapsulate these modifications within a concise patch file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git diff &amp;gt; ~/Downloads/pair_programming_session.patch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The other developer can then seamlessly incorporate these modifications into their local codebase using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git apply pair_programming_session.patch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this manner, Git offers an efficient mechanism for transferring insights and progress gained from collaborative coding sessions, ensuring that developmental strides are effectively communicated.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Embrace Unfamiliar Commands&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I understand that consistently learning new tools and programming languages can be challenging. However, it's important to recognize that &lt;strong&gt;&lt;code&gt;git&lt;/code&gt;&lt;/strong&gt; serves as a tool for delivering your work. Thus, make it a practice to regularly peruse the official documentation and keep your &lt;strong&gt;&lt;code&gt;git&lt;/code&gt;&lt;/strong&gt; CLI updated to fully leverage its capabilities and embrace new features.&lt;/p&gt;

&lt;p&gt;Have you ever considered integrating these commands into your workflow? I hope you've found something useful or at least identified a command to avoid using.&lt;/p&gt;

</description>
      <category>git</category>
      <category>codereview</category>
      <category>bestpractices</category>
      <category>github</category>
    </item>
    <item>
      <title>The Perfect Git Commit Quest</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Mon, 07 Aug 2023 19:16:44 +0000</pubDate>
      <link>https://forem.com/sourcelevel/the-perfect-git-commit-quest-1kjm</link>
      <guid>https://forem.com/sourcelevel/the-perfect-git-commit-quest-1kjm</guid>
      <description>&lt;h2&gt;
  
  
  The Importance of Writing a Good Commit Message
&lt;/h2&gt;

&lt;p&gt;When it comes to Git commits, a well-crafted message is more than just a technical necessity. It serves as documentation, providing essential context for future reference. During a &lt;strong&gt;&lt;code&gt;git show&lt;/code&gt;&lt;/strong&gt;, a descriptive commit message offers valuable insights into the changes made, aiding comprehension and troubleshooting.&lt;/p&gt;

&lt;p&gt;Furthermore, communicating with accessible peers about implementation and modifications opens doors for constructive collaboration and alternative perspectives. Tech leads can also better understand your approach, enabling them to offer valuable advice on advancing the solution using alternate methods.&lt;/p&gt;

&lt;h2&gt;
  
  
  Commit Title/Header/Subject
&lt;/h2&gt;

&lt;p&gt;The commit header should be concise, with a maximum length of 72 characters in GitHub, to avoid truncation with ellipsis. Ending the title with a period is unnecessary, as every character counts. Starting with an imperative mood verb, such as &lt;strong&gt;&lt;code&gt;Add&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Fix&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Remove&lt;/code&gt;&lt;/strong&gt;, or &lt;strong&gt;&lt;code&gt;Refactor&lt;/code&gt;&lt;/strong&gt;, sets a clear and actionable tone for the commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Conventional Commits
&lt;/h3&gt;

&lt;p&gt;To provide even more context, consider following the &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/"&gt;Conventional Commits&lt;/a&gt; specification, which builds on the Angular Commit Guidelines. Prefix the title with specific keywords like fix, feature/feat, refactor, deploy, chore, docs, or test. Each prefix highlights the nature of the changes made.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;fix&lt;/strong&gt;: Represents a bug fix for your application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;feature&lt;/strong&gt; / &lt;strong&gt;feat&lt;/strong&gt;: Adds a new feature to your application or library.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;refactor&lt;/strong&gt;: A code change that neither fixes a bug nor adds a feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;deploy&lt;/strong&gt;: Changes related to the deployment process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;chore&lt;/strong&gt;: Upgrades libraries and/or performs maintenance tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;docs&lt;/strong&gt;: Documentation-only changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;test&lt;/strong&gt;: Adding missing tests or correcting existing tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feature(shopping-cart): Add remove button

User can now remove the item entirely from shopping cart.

On clicking the button an animation transition will be
displayed.

https://linear.app/&amp;lt;workspace&amp;gt;/issue/A-123/add-ability-to-remove-item-from-shopping-cart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Commit Body
&lt;/h2&gt;

&lt;p&gt;Adding a line break between the header and the body helps organize information clearly. You can mention the files affected by the changes and explain the purpose and accomplishments of the commit. Keeping individual lines within 100 characters enhances readability.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a linebreak between Header and the body&lt;/li&gt;
&lt;li&gt;You can mention which files are included in these changes&lt;/li&gt;
&lt;li&gt;Explain why and what was accomplished in this commit&lt;/li&gt;
&lt;li&gt;Many tools recommends that any line cannot be longer than 100 characters, making each one more readable&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Commit message conventions (Annotations)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;Co-authored-by&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Marking your pairs during commits is essential for effective collaboration, especially in pair programming (eXtreme Programming). When the author accepts the &lt;code&gt;suggestions&lt;/code&gt; block made during a Pull Request review, GitHub doesn’t use &lt;code&gt;Suggested-by&lt;/code&gt; convention, instead it uses &lt;code&gt;Co-authored-by&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;While there are &lt;a href="https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/CommitMessageConventions.html"&gt;more conventions to follow&lt;/a&gt;, in common workflows, using &lt;strong&gt;&lt;code&gt;Co-authored-by&lt;/code&gt;&lt;/strong&gt; is strongly recommended.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Commit?
&lt;/h2&gt;

&lt;p&gt;Committing early and often throughout development is highly recommended. Delaying commits until the end of the process can create challenges in organizing atomic commits, crafting a coherent narrative, and receiving timely feedback during the Code Review process. By committing regularly, you can easily create a Draft Pull/Merge Request to seek immediate peer input.&lt;/p&gt;

&lt;h2&gt;
  
  
  Staging the Changes
&lt;/h2&gt;

&lt;p&gt;Simplify your commit process with tools like &lt;strong&gt;&lt;a href="https://github.com/jesseduffield/lazygit"&gt;LazyGit&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="https://jonas.github.io/tig/"&gt;tig&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="https://desktop.github.com/"&gt;GitHub Desktop&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="https://www.git-tower.com/"&gt;Git Tower&lt;/a&gt;&lt;/strong&gt;, or &lt;strong&gt;&lt;a href="https://www.gitkraken.com/"&gt;GitKraken&lt;/a&gt;&lt;/strong&gt;. When making changes, think of each commit as a "package" that should be "revertable" through &lt;strong&gt;&lt;code&gt;git revert&lt;/code&gt;&lt;/strong&gt; without breaking the build or test suite. Run tests right after creating a commit to ensure changes do not disrupt the suite. To temporarily remove existing changes, use &lt;strong&gt;&lt;code&gt;git stash --include-untracked&lt;/code&gt;&lt;/strong&gt;, then remember to &lt;strong&gt;&lt;code&gt;git stash pop&lt;/code&gt;&lt;/strong&gt; and continue the commit process.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Forgot Something in the Previous Commit?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you missed including a change, you can easily remedy the situation with &lt;strong&gt;&lt;code&gt;git add&lt;/code&gt;&lt;/strong&gt; followed by &lt;strong&gt;&lt;code&gt;git commit --amend&lt;/code&gt;&lt;/strong&gt;. The &lt;strong&gt;&lt;code&gt;--amend&lt;/code&gt;&lt;/strong&gt; command picks up your previous commit message (don't forget to update the details about the inclusion) before pushing it with &lt;strong&gt;&lt;code&gt;git push&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Note that if you already pushed the commit, you'll need to use &lt;strong&gt;&lt;code&gt;git push -f&lt;/code&gt;&lt;/strong&gt; to replace the existing commit with the regenerated SHA1 commit from the amendment. If you're collaborating with others in the same branch, remind your peers to pull the changes, though no impact is expected if they haven't started working in this branch yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Art of Summarize: Drafting/Opening a Pull Request&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When working on a project for 2-5 days, summarizing your work in a Pull Request can be challenging. Leverage your well-crafted commit messages to read the story and provide concise summaries to your reviewers. Doing so not only streamlines the review process but also serves as documentation for future reference.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Tuning Your &lt;code&gt;git&lt;/code&gt; Command&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Ensure your &lt;strong&gt;&lt;code&gt;$EDITOR&lt;/code&gt;&lt;/strong&gt; is set to your favorite editor for &lt;strong&gt;&lt;code&gt;git commit&lt;/code&gt;&lt;/strong&gt; execution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="nx"&gt;EDITOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;nvim&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also configure &lt;strong&gt;&lt;code&gt;core.editor&lt;/code&gt;&lt;/strong&gt; to open any &lt;strong&gt;&lt;code&gt;git&lt;/code&gt;&lt;/strong&gt; command in your preferred editor (Visual Studio Code in this example):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nb"&gt;global&lt;/span&gt; &lt;span class="nx"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editor&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;wait&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Use Templates for Commit Messages&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Simplify the git commit message structure by using templates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;$&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nb"&gt;global&lt;/span&gt; &lt;span class="nx"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="sr"&gt;/.gitmessage.tx&lt;/span&gt;&lt;span class="err"&gt;t
&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;commit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not sure how to start? Use this one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Replace&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;(&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt; &lt;span class="na"&gt;imperative&lt;/span&gt;&lt;span class="err"&gt;),&lt;/span&gt; &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="na"&gt;50&lt;/span&gt; &lt;span class="na"&gt;chars&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;no&lt;/span&gt; &lt;span class="na"&gt;period&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="na"&gt;Keep&lt;/span&gt; &lt;span class="na"&gt;this&lt;/span&gt; &lt;span class="na"&gt;blankline&lt;/span&gt; &lt;span class="na"&gt;above&lt;/span&gt; &lt;span class="na"&gt;but&lt;/span&gt; &lt;span class="na"&gt;replace&lt;/span&gt; &lt;span class="na"&gt;this&lt;/span&gt; &lt;span class="na"&gt;line&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="na"&gt;below&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="na"&gt;by&lt;/span&gt; &lt;span class="na"&gt;your&lt;/span&gt; &lt;span class="na"&gt;body&lt;/span&gt; &lt;span class="na"&gt;explaining&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt;&lt;span class="na"&gt;what&lt;/span&gt;&lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="na"&gt;and&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt;&lt;span class="na"&gt;whay&lt;/span&gt;&lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;not&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt;&lt;span class="na"&gt;how&lt;/span&gt;&lt;span class="err"&gt;*)&lt;/span&gt; &lt;span class="na"&gt;no&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="na"&gt;more&lt;/span&gt; &lt;span class="na"&gt;than&lt;/span&gt; &lt;span class="na"&gt;100&lt;/span&gt; &lt;span class="na"&gt;chars&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="na"&gt;Here&lt;/span&gt; &lt;span class="na"&gt;is&lt;/span&gt; &lt;span class="na"&gt;a&lt;/span&gt; &lt;span class="na"&gt;footer&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;include&lt;/span&gt; &lt;span class="na"&gt;the&lt;/span&gt; &lt;span class="na"&gt;Git&lt;/span&gt; &lt;span class="na"&gt;Conventions&lt;/span&gt; &lt;span class="na"&gt;annotations&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="na"&gt;you&lt;/span&gt; &lt;span class="na"&gt;prefer&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;such&lt;/span&gt; &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; 
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="na"&gt;Co-authored-by&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;user&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;noreply&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;github&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Journey to Better Commits: Level Up! Quest Completed!
&lt;/h2&gt;

&lt;p&gt;In the journey of perfecting your Git commits, you've unlocked the art of crafting informative and context-rich messages that enhance your development process. Embracing Conventional Commits, staging your changes, and committing early and often, you've laid the foundation for collaborative and efficient code reviews.&lt;/p&gt;

&lt;p&gt;Before marking your Pull Request as “Ready for review”, check this blog post: '&lt;a href="https://sourcelevel.io/blog/10-items-to-check-before-assigning-a-pull-request-to-someone-plus-a-bonus"&gt;10 Items to Check Before Assigning a Pull Request to Someone&lt;/a&gt;.' Should your team seek more opportunities for reviews, venture into the realm of '&lt;a href="https://sourcelevel.io/blog/creating-code-reviews-opportunities"&gt;Creating Code Review Opportunities&lt;/a&gt;' for valuable insights. &lt;strong&gt;Continue your quest for better commits and conquer new challenges, kupo!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>codereview</category>
      <category>bestpractices</category>
      <category>github</category>
    </item>
    <item>
      <title>Creating Code Reviews opportunities</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Mon, 31 Jul 2023 18:40:52 +0000</pubDate>
      <link>https://forem.com/sourcelevel/creating-code-reviews-opportunities-2a0g</link>
      <guid>https://forem.com/sourcelevel/creating-code-reviews-opportunities-2a0g</guid>
      <description>&lt;p&gt;Picture this: Your team is working on a project, and Pull/Merge Requests are piling up without any reviews. Code Reviews are not just a formality; they are an incredible opportunity to learn, grow, motivate, mentor, debate, and share knowledge. So, how can you turn this situation around and make the most out of Code Reviews to enhance your development process?&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding Time Slots - Optimizing Your Review Routine
&lt;/h2&gt;

&lt;p&gt;Reviewing code shouldn't be an added burden to your team's daily tasks. Instead, seamlessly integrate it into your workflow by using available time slots. Take advantage of moments like coffee breaks, filling your water bottle, grabbing a coffee, or just before lunchtime and wrapping up the day. By incorporating these review moments into your daily rhythm, you ensure consistent Code Reviews without disrupting your workflow, promoting a culture of continuous improvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Interruptions to Your Advantage
&lt;/h2&gt;

&lt;p&gt;Interruptions are unavoidable, but they can also be opportunities for the Code Review process. When interrupted, use the time to review code. Seamlessly integrate Code Reviews into various workflow transitions, such as finishing user stories, pulling new user stories, opening pull requests, merging pull requests, and ending pair programming sessions.&lt;/p&gt;

&lt;p&gt;Dedicate specific time slots for reviews to ensure a focused approach. Avoid rushing reviews under time pressure; communicate time constraints and plan for thorough reviews. Prioritize quality over quantity; thoroughly review a few Pull Requests rather than performing hasty, superficial reviews.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maximizing Collaboration: Pair Programming's Hidden Gem - Code Reviews
&lt;/h2&gt;

&lt;p&gt;Pair programming fosters collaboration and knowledge sharing. At the end of a session, leverage this opportunity for collaborative Code Reviews. Engage in open discussions, share feedback, document decisions, and celebrate successes, boosting collaboration, code quality, and a culture of continuous learning and growth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Empowering Psychological Safety in Code Review Discussions
&lt;/h2&gt;

&lt;p&gt;Prioritize psychological safety to enhance team collaboration and code quality. Encourage openness and embrace diverse perspectives during reviews. Deliver feedback respectfully and focus on the code, not the developer. Lead by example, treat mistakes as learning opportunities, and provide guidance to support less experienced team members. Welcome questions and set clear expectations for Code Reviews.&lt;/p&gt;

&lt;p&gt;Empowering psychological safety encourages questions and fosters a welcoming environment for other reviewers to participate and interact. Your team can foster a culture of trust, continuous improvement, and code excellence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optimizing Code Reviews with Available Tools
&lt;/h2&gt;

&lt;p&gt;Streamline the Code Review process and avoid overlooking reviews by using available tools. GitHub Reminders, integrated with Slack, improve communication and collaboration. Assigned "Reviewers" receive direct messages, ensuring timely notifications. Configure a Slack channel to receive daily reminders, helping the team stay informed and address reviews promptly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fostering Accountability through Code Reviews
&lt;/h2&gt;

&lt;p&gt;Code Reviews promote accountability within your team. As "Reviewers," team members take ownership of the codebase, ensuring it meets the team's standards. A culture of mutual support and continuous improvement emerges, enhancing overall productivity and code quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embrace a Strong Code Review Culture
&lt;/h2&gt;

&lt;p&gt;Before assigning a Pull Request to someone, consider taking a moment to review it yourself. By ensuring your PR is well-prepared and clear, you set the stage for efficient and effective feedback sessions. To optimize your Code Review process and discover essential tips for preparing Pull Requests, explore our blog post &lt;strong&gt;&lt;a href="https://sourcelevel.io/blog/10-items-to-check-before-assigning-a-pull-request-to-someone-plus-a-bonus"&gt;here&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With a proactive approach to Code Reviews and a commitment to continuous learning, your team will thrive in a collaborative and supportive environment.&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>codequality</category>
      <category>pullrequests</category>
      <category>github</category>
    </item>
    <item>
      <title>Request Changes: você usa com frequência?</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Fri, 01 Jul 2022 14:21:06 +0000</pubDate>
      <link>https://forem.com/wevtimoteo/request-changes-voce-usa-com-frequencia-45dc</link>
      <guid>https://forem.com/wevtimoteo/request-changes-voce-usa-com-frequencia-45dc</guid>
      <description>&lt;p&gt;Ao revisar Pull Requests podemos bloquear o merge de acontecer, ao utilizar a opção &lt;code&gt;Request Changes&lt;/code&gt; (solicitar mudanças). Mas é uma boa prática utilizá-lo?&lt;/p&gt;

&lt;p&gt;A boa prática de uso do &lt;code&gt;Request Changes&lt;/code&gt; é quando você encontra alguma modificação que, por alguma razão, não foi encontrada na suite de testes porém se aquele PR for mergeado, irá quebrar a aplicação no ambiente de produção.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cuidado com o poder
&lt;/h3&gt;

&lt;p&gt;Request Changes também é uma forma de poder, pense que ao utilizá-la você está bloqueando o Pull Request da(s) pessoa(s) que trabalharam nele.&lt;/p&gt;

&lt;p&gt;Antes de chegar nesse tipo de prática eu recomendo refletir se as pessoas autoras envolvidas costumam atender aos comentários realizados em PRs de suas autorias.&lt;/p&gt;

&lt;p&gt;Caso atender aos comentários seja uma prática do time, não necessariamente resolver (respondendo de alguma maneira), talvez apenas fazer um review sem conceder a aprovação seja suficiente. ✅&lt;/p&gt;

&lt;h3&gt;
  
  
  É tudo sobre comunicação
&lt;/h3&gt;

&lt;p&gt;Caso você não tenha outra maneira de se comunicar com seu time e precise recorrer ao &lt;code&gt;Request Changes&lt;/code&gt; com frequência, você deve trabalhar em melhorar a comunicação.&lt;/p&gt;

&lt;p&gt;💬 Ter uma boa comunicação é essencial para a colaboração acontecer de maneira efetiva!&lt;/p&gt;

</description>
      <category>github</category>
      <category>codereview</category>
      <category>pullrequests</category>
    </item>
    <item>
      <title>Tempo para o 1º Engajamento nos Pull Requests</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Thu, 30 Jun 2022 16:45:32 +0000</pubDate>
      <link>https://forem.com/wevtimoteo/tempo-para-o-1o-engajamento-nos-pull-requests-1pj9</link>
      <guid>https://forem.com/wevtimoteo/tempo-para-o-1o-engajamento-nos-pull-requests-1pj9</guid>
      <description>&lt;p&gt;Essa é uma métrica valiosíssima para times grandes. Geralmente utilizamos para medir quanto tempo se passou para a primeira interação com o Pull Request acontecer.&lt;/p&gt;

&lt;p&gt;Você pode medir isso tanto para Pull Requests que estão em aberto, para servir de termômetro, ou para os que já foram fechados/mergeados, para ter uma ideia como o time tem trabalhado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sabe aquele Pull Request que você solicita revisão e fica horas sem ninguém comentar ou revisar?
&lt;/h2&gt;

&lt;p&gt;O contrário também é um problema: em menos de 1 minuto você já recebe uma aprovação sem comentário algum.&lt;/p&gt;

&lt;p&gt;Para times com esse problema do tempo longo de revisão recomendo os revisores utilizarem pequenas janelas de tempo da rotina de trabalho para revisar: pausa para o café, intervalos entre tarefas/User Stories, antes e depois do almoço e/ou antes/depois de reuniões.&lt;/p&gt;

&lt;p&gt;Para times que revisam o Pull Request muito rápido é interessante pensar na causa: as pessoas estão apressadas porque existe uma pressão para entregar algo? Ou simplesmente não veem valor na revisão de código?&lt;/p&gt;

&lt;h2&gt;
  
  
  O ambiente é seguro?
&lt;/h2&gt;

&lt;p&gt;Algumas vezes, a causa da falta ou demora de engajamento é porque as pessoas não se sentem à vontade para revisar um Pull Request de uma pessoa com mais experiência. Fique atento para essas situações, caso aconteça tente criar um ambiente com maior Segurança Psicológica.&lt;/p&gt;

&lt;p&gt;Um ambiente seguro para errar é o melhor dos ambientes para promover uma cultura de aprendizado e colaboração. Trabalhando para isso, com certeza vai refletir na prática de revisão de código.&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>git</category>
      <category>segurancapsicologica</category>
      <category>github</category>
    </item>
    <item>
      <title>Guia rápido: Comunicação não-ofensiva na revisão de Pull/Merge Requests</title>
      <dc:creator>Weverton Timoteo</dc:creator>
      <pubDate>Wed, 29 Jun 2022 17:52:13 +0000</pubDate>
      <link>https://forem.com/wevtimoteo/guia-rapido-comunicacao-nao-ofensiva-na-revisao-de-pullmerge-requests-2c1m</link>
      <guid>https://forem.com/wevtimoteo/guia-rapido-comunicacao-nao-ofensiva-na-revisao-de-pullmerge-requests-2c1m</guid>
      <description>&lt;p&gt;Quer melhorar a comunicação com seu time e a qualidade das interações?&lt;/p&gt;

&lt;h3&gt;
  
  
  Pare de comentar emojis ofensivos ou negativos, como 🤢, 🤮, 😵, 😱, 💩,🙈
&lt;/h3&gt;

&lt;p&gt;Comece a explicar porque aquilo pode ser ruim e/ou prejudicial para base de código.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pare de fazer comentários com um único emoji como ✂ ou 🔫
&lt;/h3&gt;

&lt;p&gt;Comece a explicar porque algo deve ser removido, além de só utilizar emojis e esperar que a pessoa que abriu o PR entenda o que você quis dizer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pare de pedir para refatorar trechos de código sem dar exemplos
&lt;/h3&gt;

&lt;p&gt;Comece a utilizar o bloco &lt;code&gt;suggestion&lt;/code&gt; que mostra uma pré-visualização do que você está propondo (além da possibilidade de fazer um commit com &lt;code&gt;Co-authored-by&lt;/code&gt; direto pela interface do GitHub).&lt;/p&gt;

&lt;h3&gt;
  
  
  Pare de ignorar refatorações ou melhorias realizadas pela pessoa que trabalhou no código
&lt;/h3&gt;

&lt;p&gt;Comece a parabenizar ou comemorar quando alguém consegue fazer esse tipo de melhoria no contexto de modificações que a pessoa está trabalhando.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pare de apenas comentar no PR e não voltar para responder quando acontece alguma interação com seu comentário
&lt;/h3&gt;

&lt;p&gt;Comece a configurar e utilizar as Notificações para ser avisado quando alguém interagir com seu comentário.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#protip&lt;/code&gt; mencione o nome de usuário para quem você quer que seja notificado ao responder comentários.&lt;/p&gt;

&lt;p&gt;✅ 🎉 ! Você tem alguma dica para melhorar as interações nos Pull/Merge Requests?&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>github</category>
      <category>gitlab</category>
      <category>pullrequest</category>
    </item>
  </channel>
</rss>
