{"@attributes":{"version":"2.0"},"channel":{"title":"DEV Community: Arthur F\u00fccher","description":"The latest articles on DEV Community by Arthur F\u00fccher (@afucher).","link":"https:\/\/dev.to\/afucher","image":{"url":"https:\/\/media2.dev.to\/dynamic\/image\/width=90,height=90,fit=cover,gravity=auto,format=auto\/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F187079%2F58cdd60f-12a8-42da-b3fa-b795b3199841.jpg","title":"DEV Community: Arthur F\u00fccher","link":"https:\/\/dev.to\/afucher"},"language":"en","item":[{"title":"Agora um espa\u00e7o para falar sobre #Clojure em portugu\u00eas <3 \n\nQuer conhecer mais sobre Clojure? https:\/\/clojurebrasil.com.br\/","pubDate":"Thu, 23 Oct 2025 19:16:31 +0000","link":"https:\/\/dev.to\/afucher\/agora-um-espaco-para-falar-sobre-clojure-em-portugues-3-quer-conhecer-mais-sobre-clojure-30cj","guid":"https:\/\/dev.to\/afucher\/agora-um-espaco-para-falar-sobre-clojure-em-portugues-3-quer-conhecer-mais-sobre-clojure-30cj","description":"<p>\n\n<\/p>\n<div class=\"crayons-card c-embed text-styles text-styles--secondary\">\n    <div class=\"c-embed__content\">\n        <div class=\"c-embed__cover\">\n          <a href=\"https:\/\/clojurebrasil.com.br\/\" class=\"c-link align-middle\" rel=\"noopener noreferrer\">\n            <img alt=\"\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fclj-br.github.io%2F%2Fresources%2Flogo.svg\" height=\"auto\" class=\"m-0\">\n          <\/a>\n        <\/div>\n      <div class=\"c-embed__body\">\n        <h2 class=\"fs-xl lh-tight\">\n          <a href=\"https:\/\/clojurebrasil.com.br\/\" rel=\"noopener noreferrer\" class=\"c-link\">\n            Clojure Brasil\n          <\/a>\n        <\/h2>\n          <p class=\"truncate-at-3\">\n            Comunidade Clojure Brasil\n          <\/p>\n        <div class=\"color-secondary fs-s flex items-center\">\n            <img alt=\"favicon\" class=\"c-embed__favicon m-0 mr-2 radius-0\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fclojurebrasil.com.br%2Fresources%2Flogo.svg\">\n          clojurebrasil.com.br\n        <\/div>\n      <\/div>\n    <\/div>\n<\/div>\n\n\n\n\n"},{"title":"TDC Summit 2024","pubDate":"Sun, 31 Mar 2024 18:42:23 +0000","link":"https:\/\/dev.to\/afucher\/tdc-summit-2024-57j","guid":"https:\/\/dev.to\/afucher\/tdc-summit-2024-57j","description":"<p>Dia 26 e 27 de mar\u00e7o aconteceu o TDC Summit 2024 e eu participei pela primeira vez no estande de uma empresa, onde conheci e revi muitas pessoas.<\/p>\n\n\n\n\n<p>Estou escrevendo esse texto enquanto escuto o podcast <a href=\"https:\/\/open.spotify.com\/show\/4A10xEx9daSzyBtjfSWy0s\">Fl\u00e1udio<\/a>.<\/p>\n\n\n\n\n<h2>\n  \n  \n  Uma participa\u00e7\u00e3o com gostinho especial\n<\/h2>\n\n<p>Quero come\u00e7ar a contar sobre o evento falando como foi diferente participar como \"expositor\" e n\u00e3o como participante ou palestrante.<br>\nEssa edi\u00e7\u00e3o fui convidado e fiquei no estande do Nubank apresentando as nossas comunidades. Para muitas pessoas isso pode ser meio nada a ve, e nada importante. Mas para mim tem um gosto especial.<br>\nJ\u00e1 escrevi um pouco aqui sobre a minha experi\u00eancia mudando da <a href=\"https:\/\/dev.to\/afucher\/series\/20937\">Engenheria de Software para Developer Relations<\/a>, e estar em contato com comunidade, al\u00e9m de ser algo que me motiva\/energiza absurdamente, \u00e9 algo que est\u00e1 totalmente ligado a essa nova \u00e1rea.<\/p>\n\n<h2>\n  \n  \n  Comunidade &lt;3\n<\/h2>\n\n<p>De que vale ir em um evento se n\u00e3o for para conhecer outras pessoas? Ok, pra vc deve ter outros valores ahhahah Mas para mim, essa \u00e9 a melhor parte!<\/p>\n\n<p>No primeiro dia eu tive a oportunidade de participar de um bate papo sobre comunidades, e pude n\u00e3o s\u00f3 compartilhar um pouco da minha experi\u00eancia mas principalmente escutar as experi\u00eancias de 3 pessoas espetaculares:<\/p>\n\n<ul>\n<li>\n<a href=\"https:\/\/www.danvitoriano.com.br\">Dan Vitoriano<\/a>: Foi o mediador do bate-papo, e n\u00e3o poderia ter sido melhor. Para quem n\u00e3o conhece o trabalho dele vou destacar 2: apresentador da <a href=\"https:\/\/conf.braziljs.org\/\">Brazil JS Conf 2024<\/a> e criador da <a href=\"https:\/\/www.danvitoriano.com.br\/iniciativas\/devs40\">Comunidade Devs40+<\/a>. E fiquem de olho na LGBTech Conf Brasil!<\/li>\n<li>\n<a href=\"https:\/\/www.linkedin.com\/in\/mocraveirodev\/\">Monica Craveiro de Menezes<\/a>: Desenvolvedora Back-end que tem uma lista gigante de comunidades que participa e organiza, trouxe muita informa\u00e7\u00e3o e experi\u00eancia sobre NodeBR e Thasfin.<\/li>\n<li>\n<a href=\"https:\/\/www.linkedin.com\/in\/vivianyamassaki\">Vivian Mayumi Yamassaki<\/a>: Al\u00e9m de ser Mestra com pesquisa em Intelig\u00eancia Artificial e \u00e1rea de aplica\u00e7\u00e3o em Bioinform\u00e1tica pela Universidade de S\u00e3o Paulo, trouxe sua experi\u00eancia com a MIA (Mulheres em IA). Uma comunidade sensacional e que j\u00e1 fez um meetup no Nubank, se quiser saber mais confira o post <a href=\"https:\/\/building.nubank.com.br\/pt-br\/mia-meetup-2023-uma-reuniao-para-mulheres-em-ia-generativa\/\">sobre essa edi\u00e7\u00e3o nesse link.<\/a>\n<\/li>\n<\/ul>\n\n<p>Foi muito massa! Trouxe um pouco da minha experi\u00eancia que hoje tem sido diferente nas 3 comunidades que tenho mais atuado:<\/p>\n\n<ul>\n<li>\n<a href=\"https:\/\/www.linkedin.com\/company\/nubank\/events\/\">Meetup de Engenharia do Nubank<\/a>: Uma vis\u00e3o corporativa de comunidade, onde trazemos nubankers e pessoas de fora para falar sobre Engenharia de Software.<\/li>\n<li>\n<a href=\"https:\/\/www.meetup.com\/clojure-br\/\">Clojure BR<\/a>: comunidade de Clojure, onde fa\u00e7o meetups online para falar sobre Clojure em pt-br. Tem um p\u00fablico pequeno e pouco tempo de vida. Se quiser ver edi\u00e7\u00f5es anteriores, confira <a href=\"https:\/\/www.youtube.com\/@clojure-br\">nosso canal no Youtube<\/a>.<\/li>\n<li>\n<a href=\"https:\/\/www.meetup.com\/pt-BR\/fluttersp\/\">Flutter SP<\/a>: Comunidade que entrei faz pouco tempo para ajudar, mas que j\u00e1 tem uma comunidade grande e com bastante conte\u00fado. <\/li>\n<\/ul>\n\n<h2>\n  \n  \n  Pessoas que impactam\n<\/h2>\n\n<p>Durante o evento tamb\u00e9m conheci muitas pessoas, e dentre elas conheci duas pessoas que tem projetos que me chamaram a aten\u00e7\u00e3o:<\/p>\n\n<ul>\n<li>\n<a href=\"https:\/\/www.linkedin.com\/in\/passosmatheus\/\">Matheus Passos<\/a>: Me contou de um projeto muito massa que ele faz parte, e tem atuado na constru\u00e7\u00e3o do site e da plataforma. O projeto \u00e9 a <a href=\"https:\/\/www.dpfl.org.br\/\">ONG Pulse+<\/a>, que se chamava antes <strong>Da Perifa para Faria Lima<\/strong>\n<\/li>\n<\/ul>\n\n<blockquote>\n<p>Potencializando a jornada de jovens brasileiros em situa\u00e7\u00e3o de vulnerabilidade econ\u00f4mica atrav\u00e9s da educa\u00e7\u00e3o, tecnologia e empregabilidade.<\/p>\n<\/blockquote>\n\n<ul>\n<li>\n<a href=\"https:\/\/www.linkedin.com\/in\/maanolfi\/\">Marco Antonio<\/a>: Apresentado pelo Dan Vitoriano, o Marco tem usado IA para montar um projeto muito interessante. <a href=\"https:\/\/www.tertuulia.com\/\">Tertuulia<\/a> agrega diversos cursos que est\u00e3o gratuitos no YouTube, e o Marco me contou que a plataforma usa IA para gerar question\u00e1rios baseado no conte\u00fado e no final gera um certificado. Tamb\u00e9m tem espa\u00e7o para vagas e comunidades.<\/li>\n<\/ul>\n\n<h2>\n  \n  \n  Se conecte!\n<\/h2>\n\n<p>Eu sempre gostei muito de comunidades e as conex\u00f5es que elas trazem, nesse texto trouxe um pouco da minha experi\u00eancia. Mas tiveram muitos papos, muitas trocas, e muitas conex\u00f5es.<br>\nEnt\u00e3o, se conecte! Ache uma comunidade que fa\u00e7a sentido para voc\u00ea, e experimente.<\/p>\n\n\n\n\n<p>E voc\u00ea? Gosta de comunidades e eventos? Comente a\u00ed ou deixe uma reaction. Nos vemos num pr\u00f3ximo post ou evento.<\/p>\n\n\n\n\n<p>Foto de <a href=\"https:\/\/unsplash.com\/pt-br\/@etiennegirardet?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash\">Etienne Girardet<\/a> na <a href=\"https:\/\/unsplash.com\/pt-br\/fotografias\/uma-grande-parede-branca-com-algumas-palavras-sobre-ela-RuMqg2cs-M0?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash\">Unsplash<\/a><\/p>\n\n","category":["devrel","braziliandevs","thedevconf","community"]},{"title":"Dart: Tudo \u00e9 interface?","pubDate":"Thu, 05 Oct 2023 12:00:00 +0000","link":"https:\/\/dev.to\/afucher\/dart-tudo-e-interface-5di7","guid":"https:\/\/dev.to\/afucher\/dart-tudo-e-interface-5di7","description":"<ul>\n<li>Eu vejo interfaces...<\/li>\n<li>Com que frequencia?<\/li>\n<li>O tempo todo!<\/li>\n<\/ul>\n\n\n\n\n<p>Em Dart todas as classes definem interfaces implicitamente, ou seja, sempre que voc\u00ea tiver uma classe pode criar uma outra classe implementando ela.<br>\nAo fazer isso voc\u00ea precisa implementar todos os m\u00e9todos que ela tem respeitando o contrato.<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"kd\">class<\/span> <span class=\"nc\">A<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kt\">int<\/span> <span class=\"n\">numero<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n  <span class=\"kt\">String<\/span> <span class=\"n\">texto<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"s\">'A'<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">B<\/span> <span class=\"kd\">implements<\/span> <span class=\"n\">A<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"kt\">int<\/span> <span class=\"n\">numero<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"kt\">String<\/span> <span class=\"n\">texto<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"s\">'B'<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">A<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"na\">numero<\/span><span class=\"p\">());<\/span> <span class=\"c1\">\/\/ 1<\/span>\n  <span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">A<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"na\">texto<\/span><span class=\"p\">());<\/span>  <span class=\"c1\">\/\/ A<\/span>\n  <span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">B<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"na\">numero<\/span><span class=\"p\">());<\/span> <span class=\"c1\">\/\/ 2<\/span>\n  <span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">B<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"na\">texto<\/span><span class=\"p\">());<\/span>  <span class=\"c1\">\/\/ B<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>O mais comum de se ver \u00e9 a cria\u00e7\u00e3o de uma <code>abstract class<\/code> quando vai se usar para implementar em outra, assim voc\u00ea n\u00e3o declara o corpo dos m\u00e9todos.<\/p>\n\n<h2>\n  \n  \n  E a interface?\n<\/h2>\n\n<p>Na vers\u00e3o 3.0 do Dart foram adicionados diversos modificadores, e um deles foi <code>interface<\/code>. <\/p>\n\n<blockquote>\n<p>Ent\u00e3o eu posso criar uma interface direto?<\/p>\n<\/blockquote>\n\n<p>N\u00e3o. Eu sei, \u00e9 meio confuso. Mas vamos l\u00e1...<br>\nOs modificadores adicionados foram para resolver alguns problemas para quem desenvolve bibliotecas.<\/p>\n\n<p>Quando voc\u00ea tem uma biblioteca e seu usu\u00e1rio precisa passar uma classe que voc\u00ea definiu, ele pode estender uma classe sua ou implementar j\u00e1 que classes s\u00e3o interfaces.<\/p>\n\n<p>Mas e se eu n\u00e3o quiser que a pessoa possa estender? Eu quero realmente s\u00f3 que a pessoa use o contrato que eu criei. O modificador <code>interface<\/code> \u00e9 usado para isso, deixar expl\u00edcito que \u00e9 apenas para ser implementada. <\/p>\n\n<p>Dentro da sua biblioteca, ainda \u00e9 poss\u00edvel estender:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"kd\">interface<\/span> <span class=\"nc\">class<\/span> <span class=\"n\">A<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kt\">int<\/span> <span class=\"n\">numero<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n  <span class=\"kt\">String<\/span> <span class=\"n\">texto<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"s\">'A'<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">B<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">A<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"kt\">int<\/span> <span class=\"n\">numero<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"kt\">String<\/span> <span class=\"n\">texto<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"s\">'B'<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Por\u00e9m fora dela n\u00e3o \u00e9 permitido, dando o seguinte erro:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"kn\">import<\/span> <span class=\"s\">'.\/lib_a.dart'<\/span><span class=\"o\">;<\/span>\n\n <span class=\"c1\">\/\/The class 'A' can't be extended outside <\/span>\n<span class=\"c1\">\/\/ of its library because it's an interface class. <\/span>\n<span class=\"c1\">\/\/ dart(invalid_use_of_type_outside_library)<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">C<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">A<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"kt\">int<\/span> <span class=\"n\">numero<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"kt\">String<\/span> <span class=\"n\">texto<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"s\">'C'<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">D<\/span> <span class=\"kd\">implements<\/span> <span class=\"n\">A<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"kt\">int<\/span> <span class=\"n\">numero<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"kt\">String<\/span> <span class=\"n\">texto<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"s\">'D'<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<h2>\n  \n  \n  Criando uma interface pura\n<\/h2>\n\n<p>\u00c9 poss\u00edvel combinar mais de um modificador, com isso podemos criar uma <code>abstract interface class<\/code>. <br>\nCom isso, a classe ter\u00e1 m\u00e9todos abstratos (sem corpo) e s\u00f3 poder\u00e1 ser implementada, virando uma <strong>interface pura<\/strong>.<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"kd\">abstract<\/span> <span class=\"kd\">interface<\/span> <span class=\"nc\">class<\/span> <span class=\"n\">A<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kt\">int<\/span> <span class=\"n\">numero<\/span><span class=\"p\">();<\/span>\n  <span class=\"kt\">String<\/span> <span class=\"n\">texto<\/span><span class=\"p\">();<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">B<\/span> <span class=\"kd\">implements<\/span> <span class=\"n\">A<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"kt\">int<\/span> <span class=\"n\">numero<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"kt\">String<\/span> <span class=\"n\">texto<\/span><span class=\"p\">()<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"s\">'B'<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n\n\n\n<p>Conhecia esses novos modificadores para classe? J\u00e1 aproveitou o fato de Dart ter interfaces impl\u00edcitas? Conta a\u00ed nos coment\u00e1rios.<\/p>\n\n","category":["dart","flutter","braziliandevs"]},{"title":"Hacktoberfest: 5 projetos dart\/flutter para participar","pubDate":"Sun, 01 Oct 2023 20:37:26 +0000","link":"https:\/\/dev.to\/afucher\/hacktoberfest-5-projetos-dartflutter-para-participar-38o1","guid":"https:\/\/dev.to\/afucher\/hacktoberfest-5-projetos-dartflutter-para-participar-38o1","description":"<p>Quer participar da Hacktoberfest 2023 e ainda n\u00e3o sabe projetos para contribuir? Afim de melhorar seu conhecimento em Dart ou Flutter e ainda ajudar a comunidade?<br>\nResolvi dar uma pesquisada nos reposit\u00f3rios que est\u00e3o participando do Hacktoberfest 2023 e compartilhar alguns para voc\u00ea se inspirar e contribuir!<\/p>\n\n\n\n\n<p>Hacktoberfest \u00e9 um evento que eu gosto muito, me apresentou muitos projetos legais e como \u00e9 legal contribuir com open-source!<\/p>\n\n<p>Se voc\u00ea n\u00e3o sabe o que \u00e9 Hacktoberfest, t\u00e1 tudo bem, vou deixar aqui um link para esse conte\u00fado massa da <a class=\"mentioned-user\" href=\"https:\/\/dev.to\/levxyca\">@levxyca<\/a> <\/p>\n\n<blockquote>\n<p>\u00c9 um evento online patrocinado pela Digital Ocean que acontece todo ano, durante o m\u00eas de outubro. Seu objetivo \u00e9 incentivar e movimentar a comunidade a participar de projetos Open Source. - <a href=\"https:\/\/dev.to\/levxyca\/inicie-no-mundo-open-source-participando-da-hacktoberfest-3np6\">Inicie no mundo open-source participando da Hacktoberfest<\/a><\/p>\n<\/blockquote>\n\n<h2>\n  \n  \n  Contribuir com o que?\n<\/h2>\n\n<p>Voc\u00ea pode pensar:<\/p>\n\n<blockquote>\n<p>Po, mas ainda to estudando Dart\/Flutter. Mal consigo fazer meu c\u00f3digo aqui, como foi ajudar um outro projeto?<\/p>\n<\/blockquote>\n\n<p>O mais legal \u00e9 que voc\u00ea n\u00e3o precisa somente contribuir com c\u00f3digo, voc\u00ea n\u00e3o precisa ter conhecimento do projeto que est\u00e1 contribuindo. <\/p>\n\n<blockquote>\n<p>Como assim?? <\/p>\n<\/blockquote>\n\n<h2>\n  \n  \n  Senta que l\u00e1 vem a hist\u00f3ria...\n<\/h2>\n\n<p>Vou dar um exemplo:<br>\nEu estava preparando minha palestra para o TDC e estava relendo toda a documenta\u00e7\u00e3o do Flutter Web. Em um determinado momento, percebi que o link para uma p\u00e1gina de outro site estava quebrado. Fui l\u00e1 e achei a p\u00e1gina certa, para ler. Nesse momento eu poderia seguir minha vida numa boa, por\u00e9m a doc do Flutter \u00e9 aberta no github.<br>\nEnt\u00e3o eu abri um <a href=\"https:\/\/github.com\/flutter\/website\/pull\/9385\">pull-request<\/a> para arrumar o link dessa p\u00e1gina. Viu? Eu melhorei a documenta\u00e7\u00e3o de algo que eu estava estudando! <\/p>\n\n<h2>\n  \n  \n  Dicas de projetos\n<\/h2>\n\n<h3>\n  \n  \n  <a href=\"https:\/\/github.com\/flame-engine\/flame\">Flame<\/a>\n<\/h3>\n\n<blockquote>\n<p>A Flutter based game engine.<\/p>\n<\/blockquote>\n\n<p>Curte jogos? Ta a\u00ed uma oportunidade bem massa de conhecer o Flame e ainda contribuir.<br>\nE a <a href=\"https:\/\/github.com\/flame-engine\/flame-docs-site\">documenta\u00e7\u00e3o<\/a> deles tamb\u00e9m ta participando do Hacktoberfest.<\/p>\n\n<h3>\n  \n  \n  <a href=\"https:\/\/github.com\/AppFlowy-IO\/AppFlowy\">AppFlowy<\/a>\n<\/h3>\n\n<blockquote>\n<p>AppFlowy is an open-source alternative to Notion. You are in charge of your data and customizations. Built with Flutter and Rust.<\/p>\n<\/blockquote>\n\n<p>Aplica\u00e7\u00e3o muito interessante, e ainda pode ser uma oportunidade se curtir Rust! Uma coisa legal desse repo \u00e9 que usam dois labels bem legais nas issues: <a href=\"https:\/\/github.com\/AppFlowy-IO\/AppFlowy\/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue+for+devs%22\">good-first-issue-for-devs<\/a> e <a href=\"https:\/\/github.com\/AppFlowy-IO\/AppFlowy\/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue+for+experienced+devs%22\">good-first-issue-for-experienced-devs<\/a><\/p>\n\n<h3>\n  \n  \n  <a href=\"https:\/\/github.com\/imaNNeo\/fl_chart\">fl_chart<\/a>\n<\/h3>\n\n<blockquote>\n<p>FL Chart is a highly customizable Flutter chart library that supports Line Chart, Bar Chart, Pie Chart, Scatter Chart, and Radar Chart.<\/p>\n<\/blockquote>\n\n<p>Se voc\u00ea j\u00e1 precisou usar gr\u00e1ficos, muito provavelmente j\u00e1 viu essa biblioteca. Que tal contribuir de volta? <br>\nSe tiver come\u00e7ando agora, eles usam a label <a href=\"https:\/\/github.com\/imaNNeo\/fl_chart\/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22\">good-first-issue<\/a> para facilitar.<\/p>\n\n<h3>\n  \n  \n  <a href=\"https:\/\/github.com\/rrousselGit\/riverpod\">riverpod<\/a>\n<\/h3>\n\n<blockquote>\n<p>A simple way to access state while robust and testable.<\/p>\n<\/blockquote>\n\n<p>Riverpod \u00e9 uma biblioteca muito utilizada para controle de estados. <br>\nAl\u00e9m de issues de melhoria e corre\u00e7\u00f5es de bugs, o reposit\u00f3rio tem diversas issues com a label <a href=\"https:\/\/github.com\/rrousselGit\/riverpod\/issues?q=is%3Aissue+is%3Aopen+label%3Adocumentation\">documentation<\/a> que podem ser uma \u00f3tima oportunidade para contribui\u00e7\u00e3o.<\/p>\n\n<h3>\n  \n  \n  <a href=\"https:\/\/github.com\/foss42\/apidash\">apidash<\/a>\n<\/h3>\n\n<blockquote>\n<p>API Dash is a beautiful open-source cross-platform API Client built using Flutter which can help you easily create &amp; customize your API requests, visually inspect responses and generate Dart code on the go.<\/p>\n<\/blockquote>\n\n<p>Quem j\u00e1 usou postman ou qualquer outra alternativa para fazer requests vai achar esse projeto sensacional. Possui tamb\u00e9m a op\u00e7\u00e3o de gerar c\u00f3digo Dart para usar na sua aplica\u00e7\u00e3o! Achei o projeto bem massa.<\/p>\n\n<h2>\n  \n  \n  Partiu contribuir?\n<\/h2>\n\n<p>Esses foram alguns projetos que eu achei interessantes, e que est\u00e3o ativos e com oportunidades legais para contribui\u00e7\u00e3o ou mesmo para aprender mais!<\/p>\n\n<p>Quer encontrar outros projetos em Dart que est\u00e3o participando do Hacktoberfest? <\/p>\n\n<blockquote>\n<p><a href=\"https:\/\/github.com\/topics\/hacktoberfest?l=dart&amp;o=desc&amp;s=updated\">https:\/\/github.com\/topics\/hacktoberfest?l=dart<\/a><\/p>\n<\/blockquote>\n\n\n\n\n<p>Tem alguma outra sugest\u00e3o de projeto? Deixa um coment\u00e1rio :) <br>\nE se puder contribuir comigo, compartilha esse texto!<\/p>\n\n<p>Abra\u00e7os, e nos vemos em breve.<\/p>\n\n","category":["hacktoberfest23","hacktoberfest","flutter","braziliandevs"]},{"title":"Flutter Web no TDC SP 2023","pubDate":"Fri, 22 Sep 2023 12:00:00 +0000","link":"https:\/\/dev.to\/afucher\/flutter-web-no-tdc-sp-2023-491d","guid":"https:\/\/dev.to\/afucher\/flutter-web-no-tdc-sp-2023-491d","description":"<p>Essa semana marcou minha volta aos eventos presenciais, e justo no TDC (The Developers Conference), que foi o evento que me apresentou o que \u00e9 comunidade, o que \u00e9 aproveitar o corredor de evento. E pra completar ainda tive a oportunidade de palestrar sobre Flutter Web!<\/p>\n\n\n\n\n<p>Esse ano decidi que queria voltar a participar de eventos, e palestrar! O TDC \u00e9 um evento que sempre fez parte da minha carreira e ent\u00e3o decidi submeter uma palestra para l\u00e1, a\u00ed chegou o momento mais dif\u00edcil<\/p>\n\n<blockquote>\n<p>Falar sobre o que?<\/p>\n<\/blockquote>\n\n<p>Trabalho um tempo com Flutter e venho estudando cada vez mais, achei que era um bom assunto! Mas quando fui ver as trilhas do TDC, n\u00e3o tinha nenhuma sobre Flutter ou Mobile.. a\u00ed fiquei meio perdido.<br>\nFoi quando vi a trilha de Web e Frontend e pensei, porque n\u00e3o?<\/p>\n\n<h2>\n  \n  \n  Introdu\u00e7\u00e3o ao Flutter Web\n<\/h2>\n\n<p>Tenho visto o trabalho da equipe do Flutter de melhorias da plataforma Web, e achei que seria uma excelente oportunidade de poder estudar mais!<br>\nA palestra foi aceita, a\u00ed era hora de preparar o material! Foi ent\u00e3o que eu esbarrei no epis\u00f3dio <strong>Craft Engaging Presentations with FlutterDeck<\/strong> do podcast <em>Flying High with Flutter<\/em>.<\/p>\n\n<blockquote>\n<p><a href=\"https:\/\/redcircle.com\/shows\/flying-high-with-flutter\/ep\/ce31b0e8-7dd7-4b1c-afdc-b7eb57f33459\">Flying High with Flutter<\/a><\/p>\n<\/blockquote>\n\n<p>Eu sempre tentei em palestras t\u00e9cnicas ter <em>live code<\/em>, programar algo na hora, mostrar o que estou falando acontecendo. A\u00ed j\u00e1 sabe n\u00e9? Resolvi codar a minha apresenta\u00e7\u00e3o sobre Flutter Web em Flutter (Web) <\/p>\n\n<h2>\n  \n  \n  Flutter Deck\n<\/h2>\n\n<p>De acordo com o pr\u00f3prio autor, ele j\u00e1 tinha usado algumas vezes e apenas extraiu a biblioteca, o que acho que contribuiu para que mesmo sendo nova ser simples e f\u00e1cil de usar!<\/p>\n\n<blockquote>\n<p><a href=\"https:\/\/github.com\/mkobuolys\/flutter_deck\">Reposit\u00f3rio: Flutter Deck<\/a><\/p>\n<\/blockquote>\n\n<p>Consegui fazer a apresenta\u00e7\u00e3o com todo o conte\u00fado que eu queria, e ainda tinha o <em>grand finale<\/em>: Fechar a apresenta\u00e7\u00e3o revelando que a pr\u00f3pria apresenta\u00e7\u00e3o estava rodando no Flutter Web.<\/p>\n\n<h2>\n  \n  \n  Aquele g\u00e1s que faltava\n<\/h2>\n\n<p>Codar a apresenta\u00e7\u00e3o em Flutter e o pr\u00f3prio TDC como um todo, me deram a energia que eu precisava.<\/p>\n\n<p>Mas com certeza uma parada que foi fundamental, foi ter conhecido o Diego, ou mais conhecido como Prof. Diego Antunes. Eu consumo bastante o conte\u00fado do <a href=\"https:\/\/www.youtube.com\/user\/drantuness\">canal<\/a> dele e foi muito massa poder conversar com ele.<\/p>\n\n<p>Pretendo continuar os estudos sobre Flutter e come\u00e7ar a compartilhar isso por aqui!<br>\nQuem quiser, o c\u00f3digo da minha palestra est\u00e1 <a href=\"https:\/\/github.com\/afucher\/flutter_web_101\">aqui<\/a>.<\/p>\n\n\n\n\n<p>Deixa a\u00ed nos coment\u00e1rios, curte Flutter? O que gostaria que eu postasse de conte\u00fado?<\/p>\n\n<p>At\u00e9 mais!<\/p>\n\n","category":["braziliandevs","flutter","frontend","webdev"]},{"title":"Criando vari\u00e1veis e fun\u00e7\u00f5es em Clojure","pubDate":"Mon, 15 May 2023 12:00:00 +0000","link":"https:\/\/dev.to\/afucher\/criando-variaveis-e-funcoes-em-clojure-4j9f","guid":"https:\/\/dev.to\/afucher\/criando-variaveis-e-funcoes-em-clojure-4j9f","description":"<p>O b\u00e1sico para come\u00e7ar a desenvolver em uma linguagem (funcional) \u00e9 aprender a criar vari\u00e1veis para armazenar os dados e fun\u00e7\u00f5es para poder trabalhar com esses dados.<\/p>\n\n<p>Vamos ver na pr\u00e1tica como trabalhar com vari\u00e1veis e criar fun\u00e7\u00f5es, para isso vamos usar o REPL. Se ainda n\u00e3o sabe o que \u00e9, conhe\u00e7a <a href=\"https:\/\/dev.to\/afucher\/repl-seu-melhor-amigo-no-mundo-clojure-3e56\">REPL - seu melhor amigo no mundo clojure<\/a><\/p>\n\n<h2>\n  \n  \n  Criando vari\u00e1veis\n<\/h2>\n\n<p>Clojure preza pela imutabilidade, ent\u00e3o quando criamos uma vari\u00e1vel estamos definindo um s\u00edmbolo com um valor.<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"n\">user=&gt;<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"k\">def<\/span><span class=\"w\"> <\/span><span class=\"n\">foo<\/span><span class=\"w\"> <\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><span class=\"o\">#<\/span><span class=\"ss\">'user\/foo<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Nesse exemplo estamos definindo <code>foo<\/code> com o valor 1, o retorno \u00e9 o nome completo do s\u00edmbolo criado <code>#'user\/foo<\/code>. Quando criamos, o Clojure cria na namespace atual, que no caso \u00e9 <code>user<\/code>. Quando temos um arquivo, ele vai ter a pr\u00f3pria namespace, e tudo criado l\u00e1 dentro ser\u00e1 pertencente aquela namespace. <br>\nAgora podemos acessar o valor direto ou us\u00e1-lo passando para uma fun\u00e7\u00e3o:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"n\">user=&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">foo<\/span><span class=\"w\">\n<\/span><span class=\"mi\">1<\/span><span class=\"w\">\n<\/span><span class=\"n\">user=&gt;<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">inc<\/span><span class=\"w\"> <\/span><span class=\"n\">foo<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><span class=\"mi\">2<\/span><span class=\"w\">\n<\/span><span class=\"n\">user=&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">foo<\/span><span class=\"w\">\n<\/span><span class=\"mi\">1<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Notamos nesse exemplo que o valor de <code>foo<\/code> n\u00e3o mudou ap\u00f3s a execu\u00e7\u00e3o de <code>inc<\/code>. Isso \u00e9 evid\u00eancia a caracter\u00edstica de imutabilidade que comentamos, ou seja, o valor n\u00e3o \u00e9 alterado e sim o novo valor \u00e9 retornado. <br>\nVoc\u00ea pode estar pensando: <\/p>\n\n<blockquote>\n<p>\"podemos chamar o <code>def<\/code> novamente com o mesmo nome?\"  <\/p>\n<\/blockquote>\n\n<p>Sim, isso iria \"redefinir\". Mas n\u00e3o \u00e9 recomendado fazer isso, ent\u00e3o nem pense nisso \ud83d\ude05<\/p>\n<h2>\n  \n  \n  Criando fun\u00e7\u00f5es\n<\/h2>\n\n<p>Da mesma maneira que usamos <code>def<\/code> para atribuir um valor simples, fazemos para criar uma fun\u00e7\u00e3o. Vamos criar uma fun\u00e7\u00e3o chamada <code>ola<\/code> que recebe um par\u00e2metro <code>nome<\/code> e imprime <code>Ol\u00e1 &lt;&lt;nome&gt;&gt;<\/code>:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"p\">(<\/span><span class=\"k\">def<\/span><span class=\"w\"> <\/span><span class=\"n\">ola<\/span><span class=\"w\">\n  <\/span><span class=\"p\">(<\/span><span class=\"k\">fn<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"n\">nome<\/span><span class=\"p\">]<\/span><span class=\"w\">\n    <\/span><span class=\"p\">(<\/span><span class=\"nb\">println<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">str<\/span><span class=\"w\"> <\/span><span class=\"s\">\"Ol\u00e1 \"<\/span><span class=\"w\"> <\/span><span class=\"n\">nome<\/span><span class=\"p\">))))<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Estamos atribuindo a <code>ola<\/code> uma fun\u00e7\u00e3o, que definimos usando <code>fn<\/code>. Usamos <code>[]<\/code> para declarar os par\u00e2metros que recebemos, e depois o corpo da fun\u00e7\u00e3o.<br>\nAgora podemos executar a fun\u00e7\u00e3o igual as outras que j\u00e1 vimos:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"n\">user=&gt;<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nf\">ola<\/span><span class=\"w\"> <\/span><span class=\"s\">\"mundo\"<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><span class=\"n\">Ol<\/span><span class=\"err\">\u00e1<\/span><span class=\"w\"> <\/span><span class=\"n\">mundo<\/span><span class=\"w\">\n<\/span><span class=\"n\">nil<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<h3>\n  \n  \n  Retornando valores\n<\/h3>\n\n<p>No exemplo anterior, vimos que depois de imprimir a mensagem aparece <code>nil<\/code>, isso representa o retorno da nossa fun\u00e7\u00e3o. Em Clojure as fun\u00e7\u00f5es retornam a \u00faltima opera\u00e7\u00e3o\/valor.<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>user=&gt; (defn soma2 [x] (+ x 2))\n#'user\/soma2\nuser=&gt; (soma2 1)\n3\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<h3>\n  \n  \n  (def + fn)\n<\/h3>\n\n<p>Clojure criou uma maneira um pouco mais simplificada para a cria\u00e7\u00e3o fun\u00e7\u00f5es. <br>\nAo inv\u00e9s de escrever <code>def foo (fn []...)<\/code> para atribuir uma fun\u00e7\u00e3o, podemos utilizar <code>defn<\/code>. O exemplo anterior ficaria assim:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"p\">(<\/span><span class=\"k\">defn<\/span><span class=\"w\"> <\/span><span class=\"n\">ola<\/span><span class=\"w\">\n  <\/span><span class=\"p\">[<\/span><span class=\"n\">nome<\/span><span class=\"p\">]<\/span><span class=\"w\">\n  <\/span><span class=\"p\">(<\/span><span class=\"nb\">println<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">str<\/span><span class=\"w\"> <\/span><span class=\"s\">\"Ol\u00e1 \"<\/span><span class=\"w\"> <\/span><span class=\"n\">nome<\/span><span class=\"p\">)))<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<h3>\n  \n  \n  Aridade\n<\/h3>\n\n<p>A aridade de uma fun\u00e7\u00e3o \u00e9 a quantidade de par\u00e2metros que ela recebe. Em Clojure podemos definir na mesma fun\u00e7\u00e3o m\u00faltiplas aridades, isso pode ser usado por exemplo para definir par\u00e2metros opcionais ou valores default.<br>\nVamos alterar a fun\u00e7\u00e3o <code>ola<\/code> para que quando for chamada sem nenhum par\u00e2metro imprima \"Ola mund\u00e3o\":<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"p\">(<\/span><span class=\"k\">defn<\/span><span class=\"w\"> <\/span><span class=\"n\">ola<\/span><span class=\"w\">\n  <\/span><span class=\"p\">([]<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nf\">ola<\/span><span class=\"w\"> <\/span><span class=\"s\">\"mund\u00e3o\"<\/span><span class=\"p\">))<\/span><span class=\"w\">\n  <\/span><span class=\"p\">([<\/span><span class=\"n\">nome<\/span><span class=\"p\">]<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">println<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">str<\/span><span class=\"w\"> <\/span><span class=\"s\">\"Ol\u00e1 \"<\/span><span class=\"w\"> <\/span><span class=\"n\">nome<\/span><span class=\"p\">))))<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Cada aridade \u00e9 declarada envolta em <code>()<\/code> e declaramos da menor aridade para a maior.<br>\nVamos executar novamente a fun\u00e7\u00e3o, n\u00e3o passando par\u00e2metro e passando:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>user=&gt; (ola)\nOl\u00e1 mund\u00e3o\nnil\nuser=&gt; (ola \"mundo\")\nOl\u00e1 mundo\nnil\nuser=&gt; (ola \"mundo\" \"grande\")\nExecution error (ArityException) at user\/eval2032 (REPL:1).\nWrong number of args (2) passed to: user\/ola\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Note que quando chamamos a fun\u00e7\u00e3o passando um n\u00famero de argumentos que n\u00e3o existe, recebemos uma <code>ArityException<\/code>.<\/p>\n\n<h2>\n  \n  \n  Fun\u00e7\u00f5es: de primeira classe\n<\/h2>\n\n<p>Em Clojure as fun\u00e7\u00f5es s\u00e3o armazenadas e tratadas como os outros valores, portanto podem ser passadas como argumentos para outras fun\u00e7\u00f5es \ud83e\udd2f<br>\nPara exemplificar, vamos criar uma fun\u00e7\u00e3o que receba o nome da pessoa e a forma como queremos cumprimentar:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"p\">(<\/span><span class=\"k\">defn<\/span><span class=\"w\"> <\/span><span class=\"n\">cumprimentar<\/span><span class=\"w\">\n  <\/span><span class=\"p\">[<\/span><span class=\"n\">nome<\/span><span class=\"w\"> <\/span><span class=\"n\">cumprimento<\/span><span class=\"p\">]<\/span><span class=\"w\"> \n  <\/span><span class=\"p\">(<\/span><span class=\"nf\">cumprimento<\/span><span class=\"w\"> <\/span><span class=\"n\">nome<\/span><span class=\"p\">))<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>E podemos execut\u00e1-la:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"n\">user=&gt;<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nf\">cumprimentar<\/span><span class=\"w\"> <\/span><span class=\"s\">\"Ariel\"<\/span><span class=\"w\"> <\/span><span class=\"n\">ola<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><span class=\"n\">Ol<\/span><span class=\"err\">\u00e1<\/span><span class=\"w\"> <\/span><span class=\"n\">Ariel<\/span><span class=\"w\">\n<\/span><span class=\"n\">nil<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Veja que a fun\u00e7\u00e3o <code>cumprimentar<\/code> recebe o <code>cumprimento<\/code> e executa passando o nome, que tamb\u00e9m veio como par\u00e2metro, para ela.<\/p>\n\n<h2>\n  \n  \n  Docstring\n<\/h2>\n\n<p>Outra coisa importante \u00e9 que quando declaramos uma fun\u00e7\u00e3o podemos criar junto uma documenta\u00e7\u00e3o\/descri\u00e7\u00e3o do que ela faz. Para isso basta passar antes dos par\u00e2metros uma string com a descri\u00e7\u00e3o:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"p\">(<\/span><span class=\"k\">defn<\/span><span class=\"w\"> <\/span><span class=\"n\">ola<\/span><span class=\"w\">\n  <\/span><span class=\"s\">\"Recebe um nome e devolve Ol\u00e1 &lt;&lt;nome&gt;&gt;\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">[<\/span><span class=\"n\">nome<\/span><span class=\"p\">]<\/span><span class=\"w\">\n  <\/span><span class=\"p\">(<\/span><span class=\"nb\">println<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">str<\/span><span class=\"w\"> <\/span><span class=\"s\">\"Ol\u00e1 \"<\/span><span class=\"w\"> <\/span><span class=\"n\">nome<\/span><span class=\"p\">)))<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>E agora, podemos usar a fun\u00e7\u00e3o <code>doc<\/code> que vimos no outro <a href=\"https:\/\/dev.to\/afucher\/executando-funcoes-no-clojure-p4p\">post<\/a> passando a nossa fun\u00e7\u00e3o:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"n\">user=&gt;<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">doc<\/span><span class=\"w\"> <\/span><span class=\"n\">ola<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><span class=\"n\">-------------------------<\/span><span class=\"w\">\n<\/span><span class=\"n\">user\/ola<\/span><span class=\"w\">\n<\/span><span class=\"p\">([<\/span><span class=\"n\">nome<\/span><span class=\"p\">])<\/span><span class=\"w\">\n  <\/span><span class=\"n\">Recebe<\/span><span class=\"w\"> <\/span><span class=\"n\">um<\/span><span class=\"w\"> <\/span><span class=\"n\">nome<\/span><span class=\"w\"> <\/span><span class=\"n\">e<\/span><span class=\"w\"> <\/span><span class=\"n\">devolve<\/span><span class=\"w\"> <\/span><span class=\"n\">Ol<\/span><span class=\"err\">\u00e1<\/span><span class=\"w\"> <\/span><span class=\"n\">&lt;&lt;nome&gt;&gt;<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Muito legal n\u00e9? \ud83e\udd29<\/p>\n\n<h3>\n  \n  \n  Valores locais\n<\/h3>\n\n<p>Em Clojure podemos atribuir valores locais a nomes, dentro do escopo de fun\u00e7\u00f5es, usando o <code>let<\/code>. Esses valores ser\u00e3o constantes, ou seja, n\u00e3o poderemos mais alterar ou redefinir.<br>\nCom o <code>let<\/code> voc\u00ea pode criar de uma vez 1 ou mais constantes, ele segue a seguinte estrutura:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"p\">(<\/span><span class=\"k\">let<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"n\">nome<\/span><span class=\"w\"> <\/span><span class=\"n\">valor<\/span><span class=\"w\">\n      <\/span><span class=\"n\">nome<\/span><span class=\"w\"> <\/span><span class=\"n\">valor<\/span><span class=\"p\">]<\/span><span class=\"w\">\n  <\/span><span class=\"c1\">;;Podemos utilizar dentro do escopo do let<\/span><span class=\"w\">\n<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Para exemplificar vamos alterar a fun\u00e7\u00e3o anterior para criar a string e armazenar localmente, e depois imprimir.<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"p\">(<\/span><span class=\"k\">defn<\/span><span class=\"w\"> <\/span><span class=\"n\">ola<\/span><span class=\"w\">\n  <\/span><span class=\"p\">[<\/span><span class=\"n\">nome<\/span><span class=\"p\">]<\/span><span class=\"w\">\n  <\/span><span class=\"p\">(<\/span><span class=\"k\">let<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"n\">mensagem<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">str<\/span><span class=\"w\"> <\/span><span class=\"s\">\"Ola \"<\/span><span class=\"w\"> <\/span><span class=\"n\">nome<\/span><span class=\"p\">)]<\/span><span class=\"w\">\n    <\/span><span class=\"p\">(<\/span><span class=\"nb\">println<\/span><span class=\"w\"> <\/span><span class=\"n\">mensagem<\/span><span class=\"p\">)))<\/span><span class=\"w\"> \n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Criamos a <code>mensagem<\/code> com a string completa dentro do <code>let<\/code> e depois chamamos o <code>println<\/code>.<\/p>\n\n\n\n\n<p>Espero que tenha gostado do conte\u00fado! Se sim, compartilhe, comente e\/ou deixe uma rea\u00e7\u00e3o. Isso ajuda a trazer visibilidade e saber que est\u00e3o curtindo!<br>\nE se n\u00e3o gostou, comenta a\u00ed o que poderia melhorar! Quem sabe o pr\u00f3ximo post voc\u00ea goste?<\/p>\n\n<p>Abra\u00e7os e at\u00e9 breve<\/p>\n\n","category":["clojure","braziliandevs","beginners","programming"]},{"title":"(Executando fun\u00e7\u00f5es no Clojure)","pubDate":"Mon, 08 May 2023 12:30:00 +0000","link":"https:\/\/dev.to\/afucher\/executando-funcoes-no-clojure-p4p","guid":"https:\/\/dev.to\/afucher\/executando-funcoes-no-clojure-p4p","description":"<p>Agora que j\u00e1 tem o ambiente instalado e j\u00e1 sabemos o que \u00e9 REPL, que tal entender um pouco mais como executar fun\u00e7\u00f5es no Clojure?<br>\nSe ainda n\u00e3o tem o ambiente funcionando, n\u00e3o se preocupe! Basta seguir os outros posts que fiz da s\u00e9rie <a href=\"https:\/\/dev.to\/afucher\/series\/21480\">Clojure 101<\/a><\/p>\n<h2>\n  \n  \n  Caracter\u00edsticas das fun\u00e7\u00f5es\n<\/h2>\n\n<p>Clojure \u00e9 uma linguagem da fam\u00edlia LISP, e por isso tem algumas caracter\u00edsticas diferentes de quem n\u00e3o teve contato com nenhum dialeto LISP.<br>\nNo texto sobre REPL executamos algumas fun\u00e7\u00f5es de exemplo para entender o la\u00e7o contido dentro do REPL, se lembra?<\/p>\n\n<ul>\n<li><p><code>(pprint \"Hello world!\")<\/code><\/p><\/li>\n<li><p><code>(+ 1 1)<\/code><\/p><\/li>\n<\/ul>\n\n<p>Analisando elas, a primeira coisa que podemos notar \u00e9 o uso de <code>()<\/code> par\u00eanteses envolvendo a chamada da fun\u00e7\u00e3o. Em outras linguagens escrevemos a fun\u00e7\u00e3o a ser executada, e depois os par\u00eanteses para execut\u00e1-la e passar os par\u00e2metros. Por exemplo, no JavaScript seria <code>console.log(\"Hello world!\")<\/code><\/p>\n\n<p>Outra ponto \u00e9 o uso da nota\u00e7\u00e3o polonesa, onde voc\u00ea declara primeiro a opera\u00e7\u00e3o e depois os operandos. Quando olhamos para a soma, ao inv\u00e9s de declarar <code>1 + 1<\/code>, usamos <code>+ 1 1<\/code>. Essa nota\u00e7\u00e3o vem da matem\u00e1tica e tem suas vantagens. No caso da soma, vamos pensar que queremos somar 3 n\u00fameros: <code>1 + 2 + 3<\/code>, em clojure escrevemos <code>+ 1 2 3<\/code><\/p>\n<h2>\n  \n  \n  Chamadas de fun\u00e7\u00f5es encadeadas\n<\/h2>\n\n<p>Continuando a pensar em opera\u00e7\u00f5es matem\u00e1ticas, digamos que queremos executar a seguinte conta: <code>2 + 4 * 3<\/code>.<\/p>\n\n<blockquote>\n<p>Aqui j\u00e1 come\u00e7a o primeiro desafio <del>pessoal<\/del>, saber em qual ordem isso deveria ser resolvido \ud83d\ude02<\/p>\n<\/blockquote>\n\n<p>Depois de pesquisar na internet a ordem correta \u00e9 * depois + \ud83d\udc4d, ent\u00e3o precisamos:<\/p>\n\n<ol>\n<li><p>Executar <code>4 * 3<\/code>; (= 12)<\/p><\/li>\n<li><p>Executar <code>2 + _multiplica\u00e7\u00e3o_<\/code>; (= 14)<\/p><\/li>\n<\/ol>\n\n<p>Vamos montar a express\u00e3o Clojure que representa isso. A multiplica\u00e7\u00e3o fica <code>(* 4 3)<\/code>, agora precisamos fazer a soma que seria <code>(+ 2 _multiplica\u00e7\u00e3o_ )<\/code>. Substituindo ficamos com <code>(+ 2 (* 4 3))<\/code>, vamos validar no REPL?<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"n\">user=&gt;<\/span><span class=\"w\">  <\/span><span class=\"p\">(<\/span><span class=\"nb\">+<\/span><span class=\"w\"> <\/span><span class=\"mi\">2<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">*<\/span><span class=\"w\"> <\/span><span class=\"mi\">4<\/span><span class=\"w\"> <\/span><span class=\"mi\">3<\/span><span class=\"p\">))<\/span><span class=\"w\">\n<\/span><span class=\"mi\">14<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Voc\u00ea pode estar se perguntando:<\/p>\n\n<blockquote>\n<p>Mas com diversas chamadas isso deve ficar horr\u00edvel de entender. N\u00e3o fica confuso?<\/p>\n<\/blockquote>\n\n<p>E a minha reposta \u00e9: Fica sim! \ud83e\udd37 Existem maneiras de melhorar o c\u00f3digo, mas isso \u00e9 um assunto mais pra frente.<\/p>\n\n<h2>\n  \n  \n  doc e source: fun\u00e7\u00f5es pra te ajudar\n<\/h2>\n\n<p>Quando estou vendo uma linguagem ou fun\u00e7\u00e3o nova, tendo a ir fu\u00e7ando, lendo documenta\u00e7\u00f5es e c\u00f3digo fonte. Me ajuda a entender melhor e conhecer novas coisas.<\/p>\n\n<blockquote>\n<p>Se quiser ver onde eu costumo me atualizar e aprender sobre clojure, fiz um <a href=\"https:\/\/dev.to\/afucher\/clojure-onde-aprender-28c5\">post sobre isso<\/a><\/p>\n<\/blockquote>\n\n<p>E quando estamos no REPL tem uma maneira muito legal de poder entender melhor as fun\u00e7\u00f5es que estamos usando. No REPL vamos chamar a fun\u00e7\u00e3o <code>doc<\/code> passando <code>+<\/code> como par\u00e2metro:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"n\">user=&gt;<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">doc<\/span><span class=\"w\"> <\/span><span class=\"nb\">+<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><span class=\"n\">-------------------------<\/span><span class=\"w\">\n<\/span><span class=\"n\">clojure.core\/+<\/span><span class=\"w\">\n<\/span><span class=\"p\">([]<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"n\">x<\/span><span class=\"p\">]<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"n\">x<\/span><span class=\"w\"> <\/span><span class=\"n\">y<\/span><span class=\"p\">]<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"n\">x<\/span><span class=\"w\"> <\/span><span class=\"n\">y<\/span><span class=\"w\"> <\/span><span class=\"o\">&amp;<\/span><span class=\"w\"> <\/span><span class=\"n\">more<\/span><span class=\"p\">])<\/span><span class=\"w\">\n  <\/span><span class=\"n\">Returns<\/span><span class=\"w\"> <\/span><span class=\"n\">the<\/span><span class=\"w\"> <\/span><span class=\"n\">sum<\/span><span class=\"w\"> <\/span><span class=\"n\">of<\/span><span class=\"w\"> <\/span><span class=\"n\">nums.<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">+<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">returns<\/span><span class=\"w\"> <\/span><span class=\"mi\">0<\/span><span class=\"nb\">.<\/span><span class=\"w\"> <\/span><span class=\"n\">Does<\/span><span class=\"w\"> <\/span><span class=\"nb\">not<\/span><span class=\"w\"> <\/span><span class=\"n\">auto-promote<\/span><span class=\"w\">\n  <\/span><span class=\"n\">longs,<\/span><span class=\"w\"> <\/span><span class=\"n\">will<\/span><span class=\"w\"> <\/span><span class=\"n\">throw<\/span><span class=\"w\"> <\/span><span class=\"n\">on<\/span><span class=\"w\"> <\/span><span class=\"n\">overflow.<\/span><span class=\"w\"> <\/span><span class=\"n\">See<\/span><span class=\"w\"> <\/span><span class=\"n\">also<\/span><span class=\"err\">:<\/span><span class=\"w\"> <\/span><span class=\"nb\">+<\/span><span class=\"o\">'<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Ele traz o nome completo da fun\u00e7\u00e3o <code>clojure.core\/+<\/code>, nesse caso indicando que a fun\u00e7\u00e3o <code>+<\/code> fica dentro da <em>namespace<\/em> <code>clojure.core<\/code>.<br>\nDepois traz todas as op\u00e7\u00f5es de chamada que a fun\u00e7\u00e3o tem:<\/p>\n\n<ul>\n<li><p><code>[]<\/code>: sem nenhum par\u00e2metro<\/p><\/li>\n<li><p><code>[x]<\/code>: recebendo um par\u00e2metro<\/p><\/li>\n<li><p><code>[x y]<\/code>: recebendo dois par\u00e2metros<\/p><\/li>\n<li><p><code>[x y &amp; more]<\/code>: recebendo N par\u00e2metros. O <code>&amp;<\/code> indica que todos os demais par\u00e2metros ir\u00e3o vir dentro de um <em>array<\/em> na vari\u00e1vel <code>more<\/code>.<\/p><\/li>\n<\/ul>\n\n<p>E por \u00faltimo temos a <em>docstring<\/em> da fun\u00e7\u00e3o, explicando o que a fun\u00e7\u00e3o faz, e algumas outras informa\u00e7\u00f5es. Veja tamb\u00e9m o <code>See also: +'<\/code> indicando para olhar a fun\u00e7\u00e3o <code>+'<\/code>. \u26a0\ufe0f Isso pode ser um caminho sem volta<\/p>\n\n<p>E se isso n\u00e3o for o bastante para minha curiosidade? Vamos ent\u00e3o chamar a fun\u00e7\u00e3o <code>source<\/code>:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight clojure\"><code><span class=\"n\">user=&gt;<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nf\">source<\/span><span class=\"w\"> <\/span><span class=\"nb\">+<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><span class=\"p\">(<\/span><span class=\"k\">defn<\/span><span class=\"w\"> <\/span><span class=\"nb\">+<\/span><span class=\"w\">\n  <\/span><span class=\"s\">\"Returns the sum of nums. (+) returns 0. Does not auto-promote\n  longs, will throw on overflow. See also: +'\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">{<\/span><span class=\"no\">:inline<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nf\">nary-inline<\/span><span class=\"w\"> <\/span><span class=\"ss\">'add<\/span><span class=\"w\"> <\/span><span class=\"ss\">'unchecked_add<\/span><span class=\"p\">)<\/span><span class=\"w\">\n   <\/span><span class=\"no\">:inline-arities<\/span><span class=\"w\"> <\/span><span class=\"n\">&gt;1?<\/span><span class=\"w\">\n   <\/span><span class=\"no\">:added<\/span><span class=\"w\"> <\/span><span class=\"s\">\"1.2\"<\/span><span class=\"p\">}<\/span><span class=\"w\">\n  <\/span><span class=\"p\">([]<\/span><span class=\"w\"> <\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"w\">\n  <\/span><span class=\"p\">([<\/span><span class=\"n\">x<\/span><span class=\"p\">]<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">cast<\/span><span class=\"w\"> <\/span><span class=\"n\">Number<\/span><span class=\"w\"> <\/span><span class=\"n\">x<\/span><span class=\"p\">))<\/span><span class=\"w\">\n  <\/span><span class=\"p\">([<\/span><span class=\"n\">x<\/span><span class=\"w\"> <\/span><span class=\"n\">y<\/span><span class=\"p\">]<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">.<\/span><span class=\"w\"> <\/span><span class=\"n\">clojure.lang.Numbers<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nf\">add<\/span><span class=\"w\"> <\/span><span class=\"n\">x<\/span><span class=\"w\"> <\/span><span class=\"n\">y<\/span><span class=\"p\">)))<\/span><span class=\"w\">\n  <\/span><span class=\"p\">([<\/span><span class=\"n\">x<\/span><span class=\"w\"> <\/span><span class=\"n\">y<\/span><span class=\"w\"> <\/span><span class=\"o\">&amp;<\/span><span class=\"w\"> <\/span><span class=\"n\">more<\/span><span class=\"p\">]<\/span><span class=\"w\">\n     <\/span><span class=\"p\">(<\/span><span class=\"nf\">reduce1<\/span><span class=\"w\"> <\/span><span class=\"nb\">+<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"nb\">+<\/span><span class=\"w\"> <\/span><span class=\"n\">x<\/span><span class=\"w\"> <\/span><span class=\"n\">y<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">more<\/span><span class=\"p\">)))<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>\ud83e\udd2f Com esse comando podemos ver a implementa\u00e7\u00e3o da fun\u00e7\u00e3o, entender como fazem determinada coisa. <\/p>\n\n\n\n\n<p>Espero que tenha gostado do conte\u00fado! Se sim, compartilhe, comente e\/ou deixe uma rea\u00e7\u00e3o. Isso ajuda a trazer visibilidade e saber que est\u00e3o curtindo!<br>\nE se n\u00e3o gostou, comenta a\u00ed o que poderia melhorar! Quem sabe o pr\u00f3ximo post voc\u00ea goste? <\/p>\n\n<p>Abra\u00e7os e at\u00e9 breve<\/p>\n\n\n\n\n<p>Links interessantes:<\/p>\n\n<ul>\n<li><p><a href=\"https:\/\/lisp.com.br\/\">lisp.com.br<\/a><\/p><\/li>\n<li><p><a href=\"https:\/\/pt.wikipedia.org\/wiki\/Nota%C3%A7%C3%A3o_polonesa\">Nota\u00e7\u00e3o polonesa<\/a><\/p><\/li>\n<\/ul>\n\n","category":["clojure","beginners","braziliandevs","functional"]},{"title":"Clojure: onde aprender?","pubDate":"Sat, 01 Apr 2023 12:00:00 +0000","link":"https:\/\/dev.to\/afucher\/clojure-onde-aprender-28c5","guid":"https:\/\/dev.to\/afucher\/clojure-onde-aprender-28c5","description":"<p>Tenho feito alguns <a href=\"https:\/\/dev.to\/afucher\/series\/21480\">posts sobre Clojure<\/a>, mas pode ser que n\u00e3o esteja na velocidade que quem l\u00ea deseja para aprender! Ent\u00e3o resolvi escrever esse post com alguns links interessantes para quem quiser acelerar o conhecimento!<\/p>\n\n\n\n\n<h3>\n  \n  \n  <a href=\"https:\/\/clojuredocs.org\/\">Clojure Docs<\/a>\n<\/h3>\n\n<p>Um site que gosto muito de consultar sobre Clojure \u00e9 o <code>Clojure Docs<\/code>. Al\u00e9m de trazer a <code>docstring<\/code> das fun\u00e7\u00f5es, ele te traz exemplos adicionados pela comunidade e uma se\u00e7\u00e3o de <em>Veja Tamb\u00e9m (see also)<\/em>. Com isso \u00e9 muito legal pegar uma fun\u00e7\u00e3o, e ir navegando e conhecendo novas funcionalidades da linguagem de maneira simples.<\/p>\n\n<blockquote>\n<p>ClojureDocs is a community-powered documentation and examples repository for the Clojure programming language.<\/p>\n<\/blockquote>\n\n<h3>\n  \n  \n  <a href=\"http:\/\/clojurians.net\/\">Clojurians Slack<\/a>\n<\/h3>\n\n<p>Essa \u00e9 a principal comunidade de Clojure, \u00e9 um Slack com diversos canais (inclusive o <a href=\"https:\/\/clojurians.slack.com\/archives\/C055AMK5Y\">clojure-brasil<\/a>, se entrar da um oi). L\u00e1 voc\u00ea v\u00ea as principais refer\u00eancias e pessoas que mantem bibliotecas clojure, trocando ideia, ajudando e fazendo an\u00fancios de novidade.<\/p>\n\n<blockquote>\n<p>The Clojurians Slack -- self-signup: <a href=\"http:\/\/clojurians.net\">http:\/\/clojurians.net<\/a> and chat: <a href=\"https:\/\/clojurians.slack.com\">https:\/\/clojurians.slack.com<\/a> -- is the largest online community of Clojure developers right now (January 2021). <\/p>\n<\/blockquote>\n\n<h3>\n  \n  \n  <a href=\"https:\/\/www.reddit.com\/r\/Clojure\/\">r\/Clojure<\/a>\n<\/h3>\n\n<p>Uma ferramenta que uso para outros t\u00f3picos e que tamb\u00e9m uso para acompanhar e aprender Clojure, \u00e9 a comunidade de Clojure no <a href=\"https:\/\/www.reddit.com\/r\/Clojure\/\">Reddit<\/a>.<\/p>\n\n<blockquote>\n<p>Reddit is home to thousands of communities, endless conversation, and authentic human connection. <\/p>\n<\/blockquote>\n\n<h3>\n  \n  \n  <a href=\"https:\/\/clojure.org\/news\/news\">Clojure Deref<\/a>\n<\/h3>\n\n<p>A Clojure Deref \u00e9 um resumo semanal de diversos links e novidades sobre o ecossistema de Clojure organizada pelo <a href=\"https:\/\/www.linkedin.com\/in\/alexmiller\/\">Alex Miller<\/a>. Voc\u00ea pode acess\u00e1-la diretamente atrav\u00e9s do <a href=\"https:\/\/clojure.org\/news\/news\">site<\/a>, <a href=\"https:\/\/twitter.com\/ClojureDeref\">Twitter<\/a> ou via <a href=\"https:\/\/clojure.org\/feed.xml\">RSS<\/a><\/p>\n\n<blockquote>\n<p>Welcome to the Clojure Deref! This is a weekly link\/news roundup for the Clojure ecosystem.<\/p>\n<\/blockquote>\n\n<h3>\n  \n  \n  <a href=\"https:\/\/github.com\/Camilotk\/aprenda-clojure\">Aprenda Clojure<\/a>\n<\/h3>\n\n<p>Reposit\u00f3rio do github com diversos materiais para aprender Clojure mantido pelo <a href=\"https:\/\/twitter.com\/_camilotk\">Camilo Cunha de Azevedo<\/a>. Possui diversos tipos diferentes de material (livro, podcast, v\u00eddeos, etc...) e ainda traz informa\u00e7\u00f5es sobre ser pago ou n\u00e3o e o idioma.<br>\nE o bom \u00e9 que por ser um repo, voc\u00ea pode mandar sua contribui\u00e7\u00e3o caso tenha uma sugest\u00e3o.<\/p>\n\n<blockquote>\n<p>Lista de materiais e ferramentas para quem quer aprender Clojure<\/p>\n<\/blockquote>\n\n<p>No momento que escrevi esse post no repo ainda n\u00e3o constava o livro da Casa do C\u00f3digo: <a href=\"https:\/\/www.casadocodigo.com.br\/pages\/sumario-programacao-funcional-clojure\">Programa\u00e7\u00e3o Funcional: Uma introdu\u00e7\u00e3o em Clojure<\/a> do <a href=\"https:\/\/www.linkedin.com\/in\/gregoriomelo\">Greg\u00f3rio Melo<\/a><\/p>\n\n<h3>\n  \n  \n  Links\n<\/h3>\n\n<ul>\n<li>\n<a href=\"https:\/\/alefeans.medium.com\/\">Medium do \u00c1lefe<\/a> com posts sobre Clojure<\/li>\n<li>[Curso: Introdu\u00e7\u00e3o \u00e0 Programa\u00e7\u00e3o Funcional(<a href=\"https:\/\/segundatech.teachable.com\/p\/clojure-introducao-a-programacao-funcional\">https:\/\/segundatech.teachable.com\/p\/clojure-introducao-a-programacao-funcional<\/a>) feito pelo <a href=\"https:\/\/www.linkedin.com\/in\/marcio-frayze\/\">Marcio Frayze<\/a>. O curso \u00e9 gratuito, mas voc\u00ea pode pagar caso queira ajudar financeiramente<\/li>\n<li>E claro, meus posts aqui no <a href=\"https:\/\/dev.to\/afucher\">dev.to<\/a>\n<\/li>\n<\/ul>\n\n\n\n\n<p>Conhece algum outro conte\u00fado que recomenda? Comenta a\u00ed ;)<br>\nAt\u00e9 breve,<br>\nAbra\u00e7os<\/p>\n\n","category":["clojure","beginners","braziliandevs","programming"]},{"title":"REPL: seu melhor amigo no mundo Clojure","pubDate":"Wed, 08 Feb 2023 12:00:00 +0000","link":"https:\/\/dev.to\/afucher\/repl-seu-melhor-amigo-no-mundo-clojure-3e56","guid":"https:\/\/dev.to\/afucher\/repl-seu-melhor-amigo-no-mundo-clojure-3e56","description":"<p>Nos textos anteriores para validar a instala\u00e7\u00e3o e configura\u00e7\u00e3o do ambiente eu comentei sobre o REPL, quando rodava o comando <code>clj<\/code> ou <code>lein repl<\/code>. Vamos ent\u00e3o descobrir o que \u00e9 e para que serve o REPL. <\/p>\n\n<h2>\n  \n  \n  REPL\n<\/h2>\n\n<p>REPL (eu falo <em>r\u00e9pou<\/em>) \u00e9 um acr\u00f4nimo para <strong>R<\/strong>ead-<strong>E<\/strong>val-<strong>P<\/strong>rint <strong>L<\/strong>oop. Fazendo uma tradu\u00e7\u00e3o livre seria um <strong>la\u00e7o de leitura-execu\u00e7\u00e3o-impress\u00e3o<\/strong>.<\/p>\n\n<p>\u00c9 uma ferramenta de intera\u00e7\u00e3o onde \u00e9 poss\u00edvel executar c\u00f3digos da linguagem, facilitando o desenvolvimento, uma valida\u00e7\u00e3o de fun\u00e7\u00e3o, entre outros.<br>\nUm exemplo de REPL de javascript \u00e9 o <em>console<\/em> do navegador, nele voc\u00ea consegue escrever uma instru\u00e7\u00e3o em javascript, o navegador ent\u00e3o ir\u00e1: <\/p>\n\n<ul>\n<li>Ler a instru\u00e7\u00e3o que voc\u00ea colocou;<\/li>\n<li>Executar a instru\u00e7\u00e3o;<\/li>\n<li>Imprimir o resultado da instru\u00e7\u00e3o;<\/li>\n<\/ul>\n\n<p>Depois disso ficar\u00e1 esperando uma nova instru\u00e7\u00e3o e repetir\u00e1 o processo, ficando num la\u00e7o eterno.<br>\nDiversas linguagens possuem isso e \u00e9 uma excelente forma de come\u00e7ar a aprender a linguagem.<\/p>\n<h2>\n  \n  \n  Na pr\u00e1tica\n<\/h2>\n\n<p>Abra o REPL rodando o comando <code>lein repl<\/code> no terminal.<\/p>\n\n<blockquote>\n<p>Se n\u00e3o tiver o Leiningen instalado, sugiro dar uma lida no <a href=\"https:\/\/dev.to\/afucher\/leinigen-4akf\">Leinigen: Configurando ambiente dev para Clojure<\/a>, que l\u00e1 explico passo-a-passo como instalar.<\/p>\n<\/blockquote>\n\n<p>Uma vez executado, ir\u00e1 nos mostrar algumas informa\u00e7\u00f5es como vers\u00e3o do Clojure e da <em>JDK<\/em>, e tamb\u00e9m sobre um servidor <em>nREPL<\/em>. Por enquanto podemos ignorar o <em>nREPL<\/em>, mas sim \u00e9 poss\u00edvel conectar de remoto nesse REPL \ud83e\udd2f<br>\n<a href=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--iMt5wVb1--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800\/https:\/\/dev-to-uploads.s3.amazonaws.com\/uploads\/articles\/md3ikow63hmyf0zqi8og.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--iMt5wVb1--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800\/https:\/\/dev-to-uploads.s3.amazonaws.com\/uploads\/articles\/md3ikow63hmyf0zqi8og.png\" alt=\"terminal com a execu\u00e7\u00e3o do REPL\" width=\"794\" height=\"247\"><\/a><\/p>\n<h2>\n  \n  \n  Ol\u00e1, mundo!\n<\/h2>\n\n<p>O REPL agora est\u00e1 parado no la\u00e7o aguardando uma instru\u00e7\u00e3o para executar e imprimir o resultado. Vamos fazer um pequeno teste para ver como funciona.<\/p>\n\n<blockquote>\n<p>Por enquanto n\u00e3o repare na sintaxe ou qualquer aspecto da linguagem, o foco \u00e9 o REPL.<\/p>\n<\/blockquote>\n\n<p>Para come\u00e7ar que tal o famoso <code>Hello world!<\/code>? Para isso execute o seguinte c\u00f3digo no REPL <code>(pprint \"Hello world!\")<\/code> e vamos analisar a sa\u00edda:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">user<\/span><span class=\"o\">=&gt;<\/span> <span class=\"o\">(<\/span>println <span class=\"s2\">\"Hello world!\"<\/span><span class=\"o\">)<\/span> <span class=\"c\">#READ<\/span>\nHello world!                    <span class=\"c\">#EVAL<\/span>\nnil                             <span class=\"c\">#PRINT<\/span>\n<span class=\"nv\">user<\/span><span class=\"o\">=&gt;<\/span>                          <span class=\"c\">#LOOP<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>\u00c9 poss\u00edvel ver todo o la\u00e7o, primeiro ele l\u00ea a entrada da nossa instru\u00e7\u00e3o, e em seguida executa o c\u00f3digo que nesse caso \u00e9 para imprimir o texto \"Hello world!\". Depois o <code>nil<\/code> pode ser confuso, mas \u00e9 a impress\u00e3o do resultado da execu\u00e7\u00e3o, que nesse caso \u00e9 nulo dado que esse \u00e9 o retorno da chamada do <code>println<\/code>. E no final volta para o estado de esperar a pr\u00f3xima execu\u00e7\u00e3o.<\/p>\n\n<p>Agora vamos executar uma instru\u00e7\u00e3o que n\u00e3o imprima nada, como no caso anterior. Vamos somar 1 e 1 usando o c\u00f3digo <code>(+ 1 1)<\/code>:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">user<\/span><span class=\"o\">=&gt;<\/span> <span class=\"o\">(<\/span>+ 1 1<span class=\"o\">)<\/span> <span class=\"c\">#READ<\/span>\n2              <span class=\"c\">#(EVAL) PRINT <\/span>\n<span class=\"nv\">user<\/span><span class=\"o\">=&gt;<\/span>         <span class=\"c\">#LOOP<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Nesse exemplo o passo de executar o c\u00f3digo n\u00e3o aparece, pois a soma \u00e9 feita em mem\u00f3ria. Mas depois conseguimos checar que no terminal \u00e9 impresso o resultado da soma <code>2<\/code>.<\/p>\n\n\n\n\n<p>Eai, o que achou? O REPL \u00e9 excelente para conhecer fun\u00e7\u00f5es e estruturas de dados em Clojure. Veja a <a href=\"https:\/\/clojuredocs.org\/clojure.core\/println\">documenta\u00e7\u00e3o do println<\/a> e tente outras fun\u00e7\u00f5es.<br>\nCaso queira se aprofundar, existem conte\u00fados tamb\u00e9m sobre REPL Driven Development bem interessantes! Sugiro a palestra <a href=\"https:\/\/www.youtube.com\/watch?v=gIoadGfm5T8\">REPL Driven Development, Clojure's Superpower - Sean Corfield<\/a> (em ingl\u00eas)<\/p>\n\n<p>Abra\u00e7os, e at\u00e9 uma pr\u00f3xima!<\/p>\n\n","category":["beginners","clojure","programming","repl"]},{"title":"Leinigen: Configurando ambiente dev para Clojure","pubDate":"Tue, 31 Jan 2023 13:00:00 +0000","link":"https:\/\/dev.to\/afucher\/leinigen-4akf","guid":"https:\/\/dev.to\/afucher\/leinigen-4akf","description":"<p>Aloha!<br>\nNo outro texto compartilhei sobre <a href=\"https:\/\/dev.to\/afucher\/clojure-instalando-no-windows-496e\">como instalar Clojure no Windows<\/a>, agora iremos ver uma ferramenta muito utilizada em projetos Clojure: <strong>Leinigen<\/strong><\/p>\n<h2>\n  \n  \n  O que \u00e9?\n<\/h2>\n\n<p>De acordo com o <a href=\"https:\/\/leiningen.org\/\">site oficial<\/a>:<\/p>\n\n<blockquote>\n<p>for automating Clojure projects without setting your hair on fire.<\/p>\n<\/blockquote>\n\n<p>Em uma tradu\u00e7\u00e3o livre:<br>\n<strong><em>para automatizar projetos clojure sem colocar fogo no seu cabelo<\/em><\/strong><\/p>\n\n<p>Para quem vem do javascript, eu costumo comparar ao <a href=\"https:\/\/www.npmjs.com\/\">NPM<\/a>.<\/p>\n\n<p>A real \u00e9 que o leinigen fornece diversas facilidades para criar e rodar projeto, rodar testes, instalar depend\u00eancias, etc...<\/p>\n<h2>\n  \n  \n  Instalando\n<\/h2>\n\n<p>Como sempre, fui no <a href=\"https:\/\/leiningen.org\/\">site oficial<\/a> e segui o passo-a-passo.<br>\nAssim como o Clojure, ele precisa que voc\u00ea tenha o JAVA instalado. Como j\u00e1 temos, comecei a instala\u00e7\u00e3o que \u00e9 bastante simples.<\/p>\n\n<p>A primeira coisa \u00e9 fazer o download do arquivo <a href=\"https:\/\/raw.githubusercontent.com\/technomancy\/leiningen\/stable\/bin\/lein.bat\">lein.bat<\/a><\/p>\n\n<p>Depois precisamos adicionar o diret\u00f3rio desse arquivo no <code>PATH<\/code> do <em>Windows<\/em>. Para isso basta ir nas vari\u00e1veis de ambientes do <em>Windows<\/em>, localizar a <code>PATH<\/code> e incluir o diret\u00f3rio.<\/p>\n\n<blockquote>\n<p>Eu crio uma pasta <code>D:\\Utils<\/code> e j\u00e1 configuro no <code>PATH<\/code>. Nela coloco todos os arquivos de script que quero deixar dispon\u00edvel no terminal ;)<\/p>\n<\/blockquote>\n\n<p>O \u00faltimo passo \u00e9 rodar o script que ir\u00e1 fazer a instala\u00e7\u00e3o.<\/p>\n\n<p>\u26a0\ufe0f\u26a0\ufe0f\u26a0\ufe0f Quando rodei na minha m\u00e1quinha deu erro, dizendo que n\u00e3o encontrou um arquivo <code>.jar<\/code>, para tentar rodar <code>lein self-install<\/code>.<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>C:<span class=\"se\">\\U<\/span>sers<span class=\"se\">\\u<\/span>ser<span class=\"se\">\\.<\/span>lein<span class=\"se\">\\s<\/span>elf-installs<span class=\"se\">\\l<\/span>einingen-2.10.0-standalone.jar can not be found.\nYou can try running <span class=\"s2\">\"lein self-install\"<\/span>\nor change LEIN_JAR environment variable\nor edit lein.bat to <span class=\"nb\">set <\/span>appropriate LEIN_JAR path.\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Acredito que a doc do site esteja desatualizada, pois rodei o comando sugerido e funcionou \ud83d\ude07<\/p>\n\n<p><code>lein self-install<\/code><\/p>\n\n<h2>\n  \n  \n  Validando\n<\/h2>\n\n<p>Para validar a instala\u00e7\u00e3o, voc\u00ea pode rodar o comando <code>lein<\/code> no terminal. Ele trar\u00e1 uma lista de comandos que voc\u00ea pode executar.<br>\n\u00c9 bem interessante para ver a quantidade de coisas que o Leiningen faz:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>lein\nLeiningen is a tool <span class=\"k\">for <\/span>working with Clojure projects.\n\nSeveral tasks are available:\nchange              Rewrite project.clj with f applied to the value at key-or-path.\ncheck               Check syntax and warn on reflection.\nclasspath           Write the classpath of the current project to output-file.\nclean               Removes all files from paths <span class=\"k\">in <\/span>clean-targets <span class=\"k\">for <\/span>a project\ncompile             Compile Clojure <span class=\"nb\">source <\/span>into .class files.\ndeploy              Deploy jar and pom to remote repository.\ndeps                Download and examine dependencies.\n<span class=\"k\">do                  <\/span>Higher-order task to perform other tasks <span class=\"k\">in <\/span>succession.\n<span class=\"nb\">help                <\/span>Display a list of tasks or <span class=\"nb\">help <\/span><span class=\"k\">for <\/span>a given task or subtask.\n<span class=\"nb\">install             <\/span>Install jar and pom to the <span class=\"nb\">local <\/span>repository<span class=\"p\">;<\/span> typically ~\/.m2.\njar                 Package up all the project<span class=\"s1\">'s files into a jar file.\njavac               Compile Java source files.\nnew                 Generate scaffolding for a new project based on a template.\nplugin              DEPRECATED. Please use the :user profile instead.\npom                 Write a pom.xml file to disk for Maven interoperability.\nrepl                Start a repl session either with the current project or standalone.\nretest              Run only the test namespaces which failed last time around.\nrun                 Run the project'<\/span>s <span class=\"nt\">-main<\/span> <span class=\"k\">function<\/span><span class=\"nb\">.<\/span>\nsearch              Search Central and Clojars <span class=\"k\">for <\/span>published artifacts.\nshow-profiles       List all available profiles or display one <span class=\"k\">if <\/span>given an argument.\n<span class=\"nb\">test                <\/span>Run the project<span class=\"s1\">'s tests.\ntrampoline          Run a task without nesting the project'<\/span>s JVM inside Leiningen<span class=\"s1\">'s.\nuberjar             Package up the project files and all dependencies into a jar file.\nupdate-in           Perform arbitrary transformations on your project map.\nupgrade             Upgrade Leiningen to specified version or latest stable.\nvcs                 Interact with the version control system.\nversion             Print version for Leiningen and the current JVM.\nwith-profile        Apply the given task with the profile(s) specified.\n<\/span><\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Outra coisa \u00e9 que voc\u00ea pode rodar o REPL atrav\u00e9s do comando <code>lein repl<\/code>, o mesmo que rodamos quando instalamos o Clojure usando <code>clj<\/code>.<br>\nCom o <code>lein<\/code> ele faz mais coisas, mas que mostrarei em outros textos.<br>\nUma coisa legal, \u00e9 que agora para sair do REPL basta digitar <code>exit<\/code>:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code> lein repl\nnREPL server started on port 52228 on host 127.0.0.1 - nrepl:\/\/127.0.0.1:52228\nREPL-y 0.5.1, nREPL 1.0.0\nClojure 1.11.1\nOpenJDK 64-Bit Server VM 17.0.5+8\n    Docs: <span class=\"o\">(<\/span>doc <span class=\"k\">function<\/span><span class=\"nt\">-name-here<\/span><span class=\"o\">)<\/span>\n          <span class=\"o\">(<\/span>find-doc <span class=\"s2\">\"part-of-name-here\"<\/span><span class=\"o\">)<\/span>\n  Source: <span class=\"o\">(<\/span><span class=\"nb\">source <\/span><span class=\"k\">function<\/span><span class=\"nt\">-name-here<\/span><span class=\"o\">)<\/span>\n Javadoc: <span class=\"o\">(<\/span>javadoc java-object-or-class-here<span class=\"o\">)<\/span>\n    Exit: Control+D or <span class=\"o\">(<\/span><span class=\"nb\">exit<\/span><span class=\"o\">)<\/span> or <span class=\"o\">(<\/span>quit<span class=\"o\">)<\/span>\n Results: Stored <span class=\"k\">in <\/span>vars <span class=\"k\">*<\/span>1, <span class=\"k\">*<\/span>2, <span class=\"k\">*<\/span>3, an exception <span class=\"k\">in<\/span> <span class=\"k\">*<\/span>e\n\n<span class=\"nv\">user<\/span><span class=\"o\">=&gt;<\/span> <span class=\"nb\">exit\n<\/span>Bye <span class=\"k\">for <\/span>now!\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Se quiser continuar vendo mais sobre Leiningen sugiro ver o <a href=\"https:\/\/codeberg.org\/leiningen\/leiningen\/src\/branch\/stable\/doc\/TUTORIAL.md\">tutorial<\/a> que eles tem<\/p>\n\n\n\n\n<p>J\u00e1 conhecia o Leiningen? Conseguiu instalar? Compartilha a\u00ed nos coment\u00e1rios.<\/p>\n\n<p>Espero que tenha gostado da leitura! At\u00e9 breve.<\/p>\n\n<p>Abra\u00e7os<\/p>\n\n","category":["clojure","beginners","leiningen","tutorial"]},{"title":"Clojure: Instalando no Windows","pubDate":"Tue, 24 Jan 2023 12:00:00 +0000","link":"https:\/\/dev.to\/afucher\/clojure-instalando-no-windows-496e","guid":"https:\/\/dev.to\/afucher\/clojure-instalando-no-windows-496e","description":"<p>Estou acostumado a usar Clojure no MacOS, nunca tinha tentado instalar no Windows. <\/p>\n\n<h2>\n  \n  \n  Documenta\u00e7\u00e3o\n<\/h2>\n\n<p>Primeira coisa que fiz foi ler a <a href=\"https:\/\/clojure.org\/guides\/install_clojure#_windows_instructions\" rel=\"noopener noreferrer\">documenta\u00e7\u00e3o oficial<\/a>, nela consta instru\u00e7\u00f5es para cada Sistema Operacional e tamb\u00e9m os pr\u00e9-requisitos necess\u00e1rios. A documenta\u00e7\u00e3o \u00e9 simples e direta, o que facilita bastante todo o processo<\/p>\n\n<h2>\n  \n  \n  Pr\u00e9-requisito\n<\/h2>\n\n<p>O \u00fanico pr\u00e9-requisito especificado nessa p\u00e1gina \u00e9 o JAVA<\/p>\n\n<blockquote>\n<p>Sim, Clojure \u00e9 uma linguagem que roda na JVM<\/p>\n<\/blockquote>\n\n<p>Na pr\u00f3pria p\u00e1gina com as instru\u00e7\u00f5es de cada SO, tem <a href=\"https:\/\/clojure.org\/guides\/install_clojure#java\" rel=\"noopener noreferrer\">instru\u00e7\u00f5es para instala\u00e7\u00e3o do JAVA<\/a>, inclusive com a recomenda\u00e7\u00e3o de uma JDK espec\u00edfica. Fiz a instala\u00e7\u00e3o e validei atrav\u00e9s do terminal:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>D:<span class=\"se\">\\ <\/span>java <span class=\"nt\">--version<\/span>\nopenjdk 17.0.5 2022-10-18\nOpenJDK Runtime Environment Temurin-17.0.5+8 <span class=\"o\">(<\/span>build 17.0.5+8<span class=\"o\">)<\/span>\nOpenJDK 64-Bit Server VM Temurin-17.0.5+8 <span class=\"o\">(<\/span>build 17.0.5+8, mixed mode, sharing<span class=\"o\">)<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<h2>\n  \n  \n  Instala\u00e7\u00e3o\n<\/h2>\n\n<p>A instala\u00e7\u00e3o do Clojure no Windows est\u00e1 em alpha e fica numa p\u00e1gina separada: <a href=\"https:\/\/github.com\/clojure\/tools.deps.alpha\/wiki\/clj-on-Windows\" rel=\"noopener noreferrer\">Clj on Windows<\/a><\/p>\n\n<p>Nessa p\u00e1gina constam mais 2 pr\u00e9-requisitos:<\/p>\n\n<ul>\n<li> <a href=\"https:\/\/aka.ms\/wmf5download\" rel=\"noopener noreferrer\">PowerShell 5<\/a> (ou mais recente, incluindo <a href=\"https:\/\/aka.ms\/pscore6\" rel=\"noopener noreferrer\">PowerShell Core<\/a>)<\/li>\n<li>\n<a href=\"https:\/\/www.microsoft.com\/net\/download\" rel=\"noopener noreferrer\">.NET Core SDK 2.1+ or .NET Framework 4.5+<\/a> (ou mais recente)<\/li>\n<\/ul>\n\n<p>No meu caso eu tinha ambos os pr\u00e9-requisitos instalados, portanto segui para o pr\u00f3ximo passo que era a instala\u00e7\u00e3o em si do Clojure.<br>\nPara instalar eles disponbilizam um comando para rodar no PowerShell que ir\u00e1 fazer o download do script de instala\u00e7\u00e3o e execut\u00e1-lo:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>D:<span class=\"se\">\\ <\/span>Invoke-Expression <span class=\"o\">(<\/span>New-Object System.Net.WebClient<span class=\"o\">)<\/span>.DownloadString<span class=\"o\">(<\/span><span class=\"s1\">'https:\/\/download.clojure.org\/install\/win-install-1.11.1.1165.ps1'<\/span><span class=\"o\">)<\/span>\nDownloading Clojure tools\nAVISO: Clojure will <span class=\"nb\">install <\/span>as a module <span class=\"k\">in <\/span>your PowerShell module path.\n\nPossible <span class=\"nb\">install <\/span>locations:\n  1<span class=\"o\">)<\/span> C:<span class=\"se\">\\U<\/span>sers<span class=\"se\">\\u<\/span>ser<span class=\"se\">\\D<\/span>ocuments<span class=\"se\">\\W<\/span>indowsPowerShell<span class=\"se\">\\M<\/span>odules\n  2<span class=\"o\">)<\/span> C:<span class=\"se\">\\P<\/span>rogram Files<span class=\"se\">\\W<\/span>indowsPowerShell<span class=\"se\">\\M<\/span>odules\n  3<span class=\"o\">)<\/span> C:<span class=\"se\">\\W<\/span>indows<span class=\"se\">\\s<\/span>ystem32<span class=\"se\">\\W<\/span>indowsPowerShell<span class=\"se\">\\v<\/span>1.0<span class=\"se\">\\M<\/span>odules\nEnter number of preferred <span class=\"nb\">install <\/span>location: 1\n\nInstalling PowerShell module\nRemoving download\nClojure now installed. Use <span class=\"s2\">\"clj -h\"<\/span> <span class=\"k\">for <\/span>help.\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Veja que o script pergunta onde deseja instalar, na pr\u00f3pria documenta\u00e7\u00e3o eles explicam que a op\u00e7\u00e3o 1 \u00e9 a \u00fanica que n\u00e3o precisa ser <code>admin<\/code>, acabei optando por ela.<\/p>\n\n<h2>\n  \n  \n  Valida\u00e7\u00e3o\n<\/h2>\n\n<p>Para validar a instala\u00e7\u00e3o abri uma nova inst\u00e2ncia do PowerShell rodei o comando <code>clj<\/code>, na primeira vez ele faz o download de algumas depend\u00eancias:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>D:<span class=\"se\">\\ <\/span>clj \nDownloading: org\/clojure\/clojure\/1.11.1\/clojure-1.11.1.pom from central\nDownloading: org\/clojure\/core.specs.alpha\/0.2.62\/core.specs.alpha-0.2.62.pom from central\nDownloading: org\/clojure\/spec.alpha\/0.3.218\/spec.alpha-0.3.218.pom from central\nDownloading: org\/clojure\/pom.contrib\/1.1.0\/pom.contrib-1.1.0.pom from central\nDownloading: org\/clojure\/spec.alpha\/0.3.218\/spec.alpha-0.3.218.jar from central\nDownloading: org\/clojure\/core.specs.alpha\/0.2.62\/core.specs.alpha-0.2.62.jar from central\nDownloading: org\/clojure\/clojure\/1.11.1\/clojure-1.11.1.jar from central\nClojure 1.11.1\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Ap\u00f3s baixar as depend\u00eancias, ele mostra a vers\u00e3o do Clojure que est\u00e1 rodando e habilita o REPL.<br>\nFiz uma execu\u00e7\u00e3o simples para ver se realmente estava tudo certo, somando 1 e 1:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>user=&gt; (+ 1 1)\n2\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Aparentemente est\u00e1 tudo certo!<\/p>\n\n<p>Para finalizar o REPL pode utilizar <code>Ctrl+C<\/code><\/p>\n\n\n\n\n<p>Eai, conseguiu instalar no Windows? Me conta a\u00ed se teve alguma dificuldade ou se foi tranquilo.<\/p>\n\n","category":["career","learning","mentorship"]},{"title":"Dedica\u00e7\u00e3o total a voc\u00ea","pubDate":"Tue, 17 Jan 2023 12:30:00 +0000","link":"https:\/\/dev.to\/afucher\/dedicacao-total-a-voce-1hld","guid":"https:\/\/dev.to\/afucher\/dedicacao-total-a-voce-1hld","description":"<p>Hoje, 17 de janeiro \u00e9 o \u00faltimo dia da minha licen\u00e7a paternidade. Foram 100 dias de muito aprendizado, choro, alegria e uma linda constru\u00e7\u00e3o de la\u00e7o entre pai e filha.<\/p>\n\n\n\n\n<p>No dia 2 de mar\u00e7o de 2022 nasceu a Laura, minha primeira filha. Todo o processo at\u00e9 o momento do parto foi cheio de altos e baixos. A hora do parto foi uma das coisas mais emocionantes e maravilhosas que j\u00e1 vivi.<\/p>\n\n<p>Ter tido a oportunidade de ficar 100 dias de licen\u00e7a, totalmente dedicado a cuidar da minha filha, tornou tudo mais especial.<\/p>\n\n<blockquote>\n<p>Voc\u00ea disse 100 dias?? <\/p>\n<\/blockquote>\n\n<p>Sim, isso mesmo. Voc\u00ea leu certo! Recentemente o Nubank mudou a pol\u00edtica de licen\u00e7a paternidade. Alteraram para licen\u00e7a parental, e como base, qualquer pessoa tem direito a 120 dias de licen\u00e7a \ud83d\udc76.<\/p>\n\n<p>Isso aconteceu depois da Laura j\u00e1 ter nascido e eu ter tirado 20 dias de licen\u00e7a que era o que existia antes, e o Nubank liberou retroativo esse benef\u00edcio. Se quiser saber mais, fizeram um <a href=\"https:\/\/blog.nubank.com.br\/licenca-parental-nubank-por-que-e-importante\/\" rel=\"noopener noreferrer\">post<\/a> no blog sobre isso &lt;3 <br>\nParticipei do grupo que estava organizando o pedido de licen\u00e7a parental para o Nubank, foi um per\u00edodo curto ainda durante o per\u00edodo da gravidez. Confesso que isso me deixou muito feliz, fazer parte de algo assim \u00e9 de extrema satisfa\u00e7\u00e3o.<\/p>\n\n<h2>\n  \n  \n  \u00danica certeza\n<\/h2>\n\n<p>Desde que saiu a not\u00edcia eu tinha a certeza que isso era a coisa mais importante para mim, eu tinha isso na minha cabe\u00e7a e nada tirava. O que foi muito importante, pois eu acabei mudando de papel dentro do Nubank 3 meses antes de sair.<br>\nAcho que essa certeza, essa vontade de sair de licen\u00e7a, veio muito devido a um sentimento relacionado a paternidade que eu tive:<\/p>\n\n<blockquote>\n<p>Eu n\u00e3o me sentia pai.<\/p>\n<\/blockquote>\n\n<p>Durante a gravidez a m\u00e3e cria um v\u00ednculo com a crian\u00e7a, e eu n\u00e3o sentia nada. Achei que quando a Laura nascesse de alguma forma isso mudaria, mas n\u00e3o estava acontecendo. E foi nessa licen\u00e7a que eu vi a oportunidade de criar esse v\u00ednculo, queria passar tempo com a minha filha dedicado a ela. \u00d3bvio que antes disso eu participava de todos os momentos poss\u00edveis, estava trabalhando de casa o que ajudava muito! Mas n\u00e3o \u00e9 a mesma coisa, minha aten\u00e7\u00e3o durante a maior parte do dia estava no trabalho.<\/p>\n\n<p>E o resto dentro de mim era pura incerteza.<\/p>\n\n<h2>\n  \n  \n  Incertezas\n<\/h2>\n\n<ul>\n<li>Vou saber o que fazer? N\u00f3s vamos nos adaptar?<\/li>\n<li>E o trabalho? A certeza de tirar a licen\u00e7a era inabal\u00e1vel, mas poxa.. ser\u00e1 que fiz bem em trocar de equipe agora? To mega empolgado com o trampo novo, como vai ser quando eu voltar?<\/li>\n<li>Vou saber brincar? Incentivar? Ajudar no desenvolvimento?<\/li>\n<\/ul>\n\n<p>Me perguntaram outro dia: o que cansa mais, trabalhar ou cuidar da Laura? - Respondi que no trabalho eu sei o que estou fazendo, tenho dom\u00ednio .. cuidar da Laura foi cada dia um aprendizado. Cada dia uma adapta\u00e7\u00e3o nova. Cada dia um choro compensado por sorrisos diferentes.<\/p>\n\n<p>Eu amo Agilidade e nunca segui tanto o valor de <strong>Responder a mudan\u00e7as mais que seguir um plano<\/strong><\/p>\n\n<h2>\n  \n  \n  Mem\u00f3rias e V\u00ednculos\n<\/h2>\n\n<p>Essa licen\u00e7a me deu a oportunidade de come\u00e7ar a criar o v\u00ednculo com a minha filha.<br>\nPoder lembrar que foi a minha perna que serviu de obst\u00e1culo para ela exercitar e <strong>come\u00e7ar a engatinhar<\/strong>. Ali. Sentados. No ch\u00e3o da sala. Durante a tarde. De v\u00e1rios dias.<br>\n<strong>Enrolar na cama pra levantar<\/strong>. E quando for levantar brincar de c\u00f3cegas at\u00e9 gargalhar.<br>\nSer o \u00fanico homem com uma beb\u00ea na pra\u00e7a a tarde. Seja caminhando com o carrinho para fazer um exerc\u00edcio. Seja <strong>sentados na grama comendo uma banana<\/strong>.<br>\nLembrar tamb\u00e9m de quando falhei. De quando <strong>deixei cair<\/strong>. De quando esqueci de passar uma pomada. Porque \u00e9 um aprendizado.<br>\nE de longe o mais importante, que foi passar, realmente, pela experi\u00eancia exaustiva que \u00e9 cuidar de uma beb\u00ea praticamente o tempo todo (por que o leite a mam\u00e3e era respons\u00e1vel \ud83d\udc9c e v\u00e1rias outras coisas)<\/p>\n\n\n\n\n<p>Esse texto tem a inten\u00e7\u00e3o de mostrar para outras figuras paternas a import\u00e2ncia da licen\u00e7a paternidade. O qu\u00e3o intenso \u00e9 esse momento e a oportunidade \u00fanica que \u00e9.<br>\nE outra coisa, isso \u00e9 uma quest\u00e3o muito importante quando empresas falam de diversidade, em in\u00fameros pontos. Se sua empresa fala de diversidade, e n\u00e3o discute sobre licen\u00e7a parental, acho que est\u00e1 na hora de come\u00e7ar.<\/p>\n\n\n\n\n<p>Obrigado as pessoas do Nubank que tornaram isso poss\u00edvel.<br>\nObrigado Mayara que cobrou e n\u00e3o deixou eu cair no comforto. Que brigava quando era necess\u00e1rio, e que deu a luz a coisa mais fofa da minha vida.<br>\nObrigado Laura, por ter me escolhido, pelos seus sorrisos e gargalhadas.<\/p>\n\n","category":["tutorial","api","react","beginners"]}]}}