<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on alancesar.dev</title><link>https://alancesar.dev/posts/</link><description>Recent content in Posts on alancesar.dev</description><generator>Hugo</generator><language>pt-br</language><lastBuildDate>Sun, 20 Feb 2022 15:30:15 +0000</lastBuildDate><atom:link href="https://alancesar.dev/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Usando Generics no Go</title><link>https://alancesar.dev/posts/usando-generics-no-go/</link><pubDate>Sun, 20 Feb 2022 15:30:15 +0000</pubDate><guid>https://alancesar.dev/posts/usando-generics-no-go/</guid><description>&lt;p&gt;Como todo mundo que trabalha com a linguagem deve saber, o Golang nasceu sem tratamento de tipos &lt;a href="https://go.dev/doc/faq#generics"&gt;genéricos&lt;/a&gt;.&#10;De fato, não era uma preocupação no momento, afinal, ele nasceu pra ser simples e performático e, infelizmente, esse tipo recurso não ajuda nisso.&#10;Porém, o Go evoluiu para além de pequenas aplicações executando processos pesados e hoje é encontrado em praticamente tudo:&#10;aplicações web, bibliotecas, CLIs e aquilo ignorado durante sua concepção começou a ser sentido pela sua crescente comunidade.&lt;/p&gt;</description></item><item><title>Um pouco sobre arquivos e o pacote io do Go</title><link>https://alancesar.dev/posts/um-pouco-sobre-arquivos-e-o-pacote-io-do-go/</link><pubDate>Sat, 13 Nov 2021 15:20:34 +0000</pubDate><guid>https://alancesar.dev/posts/um-pouco-sobre-arquivos-e-o-pacote-io-do-go/</guid><description>&lt;p&gt;Trabalhar com arquivos em Golang pode parecer algo trivial, porém é comum aparecer algumas dúvidas. A maneira mais prática de abrir um arquivo é com o comando &lt;code&gt;os.Open()&lt;/code&gt;:&lt;/p&gt;&#10;&#10;&lt;span class="code-label"&gt;go&lt;/span&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;file.path&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;p&gt;Esse comando recebe um caminho e irá abrir o arquivo com permissões padrões, que no caso são somente para leitura.&lt;/p&gt;&#10;&#10;&lt;span class="code-label"&gt;go&lt;/span&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Open opens the named file for reading. If successful, methods on&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// the returned file can be used for reading; the associated file&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// descriptor has mode O_RDONLY.&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// If there is an error, it will be of type *PathError.&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;File&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#9;&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;OpenFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;O_RDONLY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;p&gt;Caso seja necessário realizar alterações no arquivo, precisamos usar o &lt;a href="https://pkg.go.dev/os#OpenFile"&gt;os.OpenFile()&lt;/a&gt;, que recebe mais dois argumentos: uma &lt;em&gt;flag&lt;/em&gt; e uma permissão. A permissão segue o &lt;a href="https://docs.nersc.gov/filesystems/unix-file-permissions/"&gt;padrão Unix&lt;/a&gt; e essas são as &lt;em&gt;flags&lt;/em&gt; disponíveis:&lt;/p&gt;</description></item><item><title>Testando seu Java com o Spock Framework</title><link>https://alancesar.dev/posts/testando-seu-java-com-o-spock-framework/</link><pubDate>Thu, 11 Feb 2021 12:00:00 +0000</pubDate><guid>https://alancesar.dev/posts/testando-seu-java-com-o-spock-framework/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;Após algum tempo, você vai perceber que ter não é tão agradável como querer. Não é lógico, mas é normalmente verdade.&#10;– Spock (1967)&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Testes unitários são um negócio chato e quem diz o contrário é porque quer se dar bem na entrevista. Pensando nisso, foi criado o &lt;a href="http://spockframework.org"&gt;Spock Framework&lt;/a&gt; e muito provavelmente esse nome é uma homenagem ao personagem de &lt;a href="https://www.cnet.com/pictures/20-reasons-why-star-trek-is-better-than-star-wars-pictures/"&gt;Star Trek&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="no-final-das-contas-é-tudo-jar"&gt;No final das contas, é tudo JAR&lt;/h2&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Uma pessoa pode começar remodelando a paisagem com apenas uma flor, Capitão.&#10;– Spock (1991)&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Construindo um blog com o Gatsby</title><link>https://alancesar.dev/posts/construindo-um-blog-com-o-gatsby/</link><pubDate>Thu, 04 Feb 2021 12:50:05 +0000</pubDate><guid>https://alancesar.dev/posts/construindo-um-blog-com-o-gatsby/</guid><description>&lt;p&gt;Se você leu o rodapé desta página, percebeu que ela foi feita usando o &lt;a href="https://www.gatsbyjs.com/"&gt;Gatsby&lt;/a&gt;. Essa ferramenta foi uma das minhas gratas surpresas em 2020.&lt;/p&gt;&#10;&lt;p&gt;Eu queria dar uma repaginada no meu blog e, por coincidência, estava estudando algumas tecnologias que me inspiraram a começar algo do zero. A ideia era escrever um artigo com a sintaxe do &lt;a href="https://www.markdownguide.org/getting-started/"&gt;Markdown&lt;/a&gt; que fosse renderizado em uma página HTML usando o &lt;a href="https://handlebarsjs.com/"&gt;Handlebars&lt;/a&gt; ou algo do tipo. Como toda as outras ideias de rescrever algo do zero, esse projeto fracassou. Mas enfim, me perguntei se mais alguém já não havia pensando nisso, que a princípio parecia ser algo tão promissor. E a resposta foi sim. Acabei chegando ao &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt;, mas parecia ser algo cru demais para o que eu tinha em mente. Até que descobri o Gatsby.&lt;/p&gt;</description></item><item><title>Como funciona a Blockchain</title><link>https://alancesar.dev/posts/como-funciona-a-blockchain/</link><pubDate>Tue, 01 May 2018 22:12:03 +0000</pubDate><guid>https://alancesar.dev/posts/como-funciona-a-blockchain/</guid><description>&lt;p&gt;Blockchain é um tema bastante difundido na comunidade e apesar de ser algo revolucionário, no que diz respeito à recursos utilizados, basicamente são tecnologias que já existem há tempos, como sistemas distribuídos, comunicação P2P e criptografia. Quando olha-se pra ela com mais calma, a sensação que fica é de &amp;ldquo;por que não fizemos isso antes&amp;rdquo;. Neste post, irei desmistificar alguns desses conceitos.&lt;/p&gt;&#10;&lt;h2 id="do-que-é-feita-a-blockchain"&gt;Do que é feita a blockchain?&lt;/h2&gt;&#10;&lt;p&gt;O próprio nome já uma uma definição do que se trata: uma cadeia de blocos onde todos os blocos estão interligados:&lt;/p&gt;</description></item><item><title>Testes em Node.js</title><link>https://alancesar.dev/posts/testes-em-node-js/</link><pubDate>Fri, 15 Dec 2017 12:00:00 +0000</pubDate><guid>https://alancesar.dev/posts/testes-em-node-js/</guid><description>&lt;p&gt;Dentre todas as técnicas que podem usadas para melhorar o código que escrevemos, uma que sempre merece destaque são os testes unitários. Neste artigo iremos tratar, através exemplos, como realizar testes unitários em uma aplicação Node.js. Como pré-requisito, você deve possuir um conhecimento básico em Node.js e alguma familiaridade com &lt;a href="http://www.ecma-international.org/ecma-262/6.0/"&gt;ECMAScript 2015 (ES6)&lt;/a&gt;. Apresentaremos alguns conceitos sobre testes unitários, tais como mocks e asserts.&lt;/p&gt;&#10;&lt;h2 id="projeto-exemplo"&gt;Projeto Exemplo&lt;/h2&gt;&#10;&lt;p&gt;Para rodar nossos testes vamos usar um projeto exemplo chamado &lt;strong&gt;Bookstore&lt;/strong&gt;, que pode ser baixado no &lt;a href="https://github.com/alancesar/bookstore/"&gt;GitHub&lt;/a&gt;. Se trata de um projeto bem simples cuja estrutura é a seguinte:&lt;/p&gt;</description></item><item><title>Introdução ao Webpack 2</title><link>https://alancesar.dev/posts/introducao-ao-webpack-2/</link><pubDate>Mon, 10 Jul 2017 12:00:00 +0000</pubDate><guid>https://alancesar.dev/posts/introducao-ao-webpack-2/</guid><description>&lt;p&gt;O Webpack é um empacotador de código-fonte para projetos web. Diferente de outros similares, como o &lt;a href="http://browserify.org/"&gt;browserify&lt;/a&gt;, sua principal proposta é focar na modularização da aplicação. A justificativa até que é simples: para grandes projetos web, não é eficiente colocarmos todo código em um único arquivo, especialmente se alguns blocos de código forem necessários somente em algumas determinadas circunstâncias.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="webpack.png" alt="Diagrama do Webpack"&gt;&lt;/p&gt;&#10;&lt;p&gt;Dentre as principais características do Webpack temos:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;code splitting;&lt;/li&gt;&#10;&lt;li&gt;loaders;&lt;/li&gt;&#10;&lt;li&gt;clever parsing;&lt;/li&gt;&#10;&lt;li&gt;plugin system.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="instalação"&gt;Instalação&lt;/h2&gt;&#10;&lt;p&gt;Sua instalação é relativamente simples. O Webpack tem como dependência o NodeJS e pode ser instalado tanto globalmente como dependência de desenvolvimento para seu projeto, que será o modo utilizado neste exemplo. No terminal, com o NodeJS e NPM instalados, execute os seguintes comando:&lt;/p&gt;</description></item><item><title>Trabalhando com Promises no JavaScript</title><link>https://alancesar.dev/posts/trabalhando-com-promises-no-javascipt/</link><pubDate>Sat, 14 Jan 2017 12:00:00 +0000</pubDate><guid>https://alancesar.dev/posts/trabalhando-com-promises-no-javascipt/</guid><description>&lt;p&gt;Uma das grandes novidades que vieram no &lt;em&gt;ES6&lt;/em&gt; foram as &lt;code&gt;Promises&lt;/code&gt;. Mas afinal, o que são? De onde vem? Do que se alimentam?&lt;/p&gt;&#10;&lt;h2 id="promessa-é-dívida"&gt;Promessa é dívida&lt;/h2&gt;&#10;&lt;p&gt;Promise vem do inglês, que significa promessa. E é mais ou menos isso: uma tarefa que é executada de forma&#10;assíncrona com a promessa de devolver alguma resposta, assim que concluída. Não é novidade fazer este tipo de&#10;requisições no JavaScript. Com a ausência de uma API específica, utilizava-se alguns workarounds para que este&#10;recurso funcionasse corretamente.&lt;/p&gt;</description></item></channel></rss>