<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: W. Neto</title>
    <description>The latest articles on DEV Community by W. Neto (@netoht).</description>
    <link>https://dev.to/netoht</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F712402%2F483b773d-7755-44aa-8cdf-d73e3c2c7189.png</url>
      <title>DEV Community: W. Neto</title>
      <link>https://dev.to/netoht</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/netoht"/>
    <language>en</language>
    <item>
      <title>Colima in macOS</title>
      <dc:creator>W. Neto</dc:creator>
      <pubDate>Wed, 26 Jun 2024 16:16:23 +0000</pubDate>
      <link>https://dev.to/netoht/colima-in-macos-44g</link>
      <guid>https://dev.to/netoht/colima-in-macos-44g</guid>
      <description>&lt;p&gt;Hey there! If you're like me, trying to set up colima on your M1 Mac and getting stuck with these pesky proxy issues, self-signed certificates and volumes - don't sweat it. I've got a fix for you. &lt;/p&gt;

&lt;p&gt;Once we’ve wrapped up the setup, we’ll give it a whirl using docker compose and two images: mongodb and redis. These two tend to give me a bit of a headache. 🙃&lt;/p&gt;

&lt;h4&gt;
  
  
  Install packages
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  colima &lt;span class="se"&gt;\&lt;/span&gt;
  docker &lt;span class="se"&gt;\&lt;/span&gt;
  docker-compose &lt;span class="se"&gt;\&lt;/span&gt;
  docker-buildx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Setup configs
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Linking the Colima socket to the default socket path. Note that this may break other Docker servers.&lt;/span&gt;
&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; ~/.colima/default/docker.sock /var/run/docker.sock

&lt;span class="c"&gt;# Docker plugins setup&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.docker/cli-plugins
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sfn&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;which docker-buildx&lt;span class="si"&gt;)&lt;/span&gt; ~/.docker/cli-plugins/docker-buildx
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sfn&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;which docker-compose&lt;span class="si"&gt;)&lt;/span&gt; ~/.docker/cli-plugins/docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Setup colima and certificates
&lt;/h4&gt;

&lt;p&gt;NOTE: vz is macOS virtualization framework and requires macOS 13&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# For m1 mac&lt;/span&gt;
colima start &lt;span class="nt"&gt;--cpu&lt;/span&gt; 4 &lt;span class="nt"&gt;--memory&lt;/span&gt; 4 &lt;span class="nt"&gt;--vm-type&lt;/span&gt; vz &lt;span class="nt"&gt;--vz-rosetta&lt;/span&gt; &lt;span class="nt"&gt;--edit&lt;/span&gt; &lt;span class="nt"&gt;--editor&lt;/span&gt; code

&lt;span class="c"&gt;# For intel mac&lt;/span&gt;
colima start &lt;span class="nt"&gt;--cpu&lt;/span&gt; 4 &lt;span class="nt"&gt;--memory&lt;/span&gt; 4 &lt;span class="nt"&gt;--vm-type&lt;/span&gt; vz &lt;span class="nt"&gt;--edit&lt;/span&gt; &lt;span class="nt"&gt;--editor&lt;/span&gt; code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NOTE: If you need to configure self-signed certificates add the following provision, if not skip this step. Save &amp;amp; close the file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;provision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;user&lt;/span&gt;
    &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;#!/bin/bash&lt;/span&gt;
      &lt;span class="s"&gt;sudo ln -sf /Users/&amp;lt;YOUR_USER&amp;gt;/certs/self_signed_cert.pem /etc/ssl/certs/self_signed_cert.pem&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Check installs
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# plugins&lt;/span&gt;
docker buildx version
docker compose version

&lt;span class="c"&gt;# docker&lt;/span&gt;
docker ps

&lt;span class="c"&gt;# docker certificates&lt;/span&gt;
docker pull hello-world

&lt;span class="c"&gt;# docker compose volumes&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/colima_test &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/colima_test

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'try {
  db.check.insertOne({ _id: 1, test: true });
  print(db.check.findOne({ _id: 1 }));
} catch (err) {
  print(`ERROR: ${err}`);
}
'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; init-mongo.js

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"name: check

services:
  mongodb:
    image: mongodb/mongodb-community-server:6.0-ubi8
    restart: always
    volumes:
      - ./docker_volumes/mongodb_data_db:/data/db
      - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
    ports:
      - 27017:27017
    command: ['--replSet', 'rs0', '--bind_ip_all', '--port', '27017']
    healthcheck:
      # Enabling replica set to execute transactions in mongodb
      test: echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;try { rs.status() } catch (err) { rs.initiate({_id:'rs0',members:[{_id:0,host:'127.0.0.1:27017'}]}) }&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; | mongosh --port 27017 --quiet
      interval: 5s
      timeout: 30s
      start_period: 0s
      retries: 10

  redis:
    image: redis
    restart: always
    volumes:
      - ./docker_volumes/redis_data:/data
    ports:
      - 6379:6379
    command: ['redis-server', '--save', '60', '1', '--loglevel', 'warning']
"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; docker-compose.yml

docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
docker ps
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; check-mongodb-1 mongosh &lt;span class="nt"&gt;--eval&lt;/span&gt; &lt;span class="s1"&gt;'print(db.check.find())'&lt;/span&gt;
&lt;span class="c"&gt;# You should see this output (item created in collection):&lt;/span&gt;
&lt;span class="c"&gt;# [ { _id: 1, test: true } ]&lt;/span&gt;

&lt;span class="nb"&gt;ls &lt;/span&gt;docker_volumes/
&lt;span class="c"&gt;# You should see this output (new directories created by volumes):&lt;/span&gt;
&lt;span class="c"&gt;# mongodb_data_db  redis_data&lt;/span&gt;

&lt;span class="c"&gt;# Clean up the check installs&lt;/span&gt;
docker compose down &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/colima_test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Volume note: Colima default behaviour: $HOME and /tmp/colima are mounted as writable.&lt;/p&gt;

&lt;h4&gt;
  
  
  References:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/abiosoft/colima"&gt;https://github.com/abiosoft/colima&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/abiosoft/colima/blob/main/docs/FAQ.md"&gt;https://github.com/abiosoft/colima/blob/main/docs/FAQ.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>O que é uma coleção NFT?</title>
      <dc:creator>W. Neto</dc:creator>
      <pubDate>Fri, 21 Jan 2022 03:54:48 +0000</pubDate>
      <link>https://dev.to/netoht/o-que-e-uma-colecao-nft-358k</link>
      <guid>https://dev.to/netoht/o-que-e-uma-colecao-nft-358k</guid>
      <description>&lt;p&gt;Comecei a estudar sobre o tema web3, e pra me ajudar a fixar o conteúdo decidi compartilhá-los, espero que curtam. Nesse artigo irei explicar o que é exatamente uma coleção NFT, que até o &lt;a href="https://twitter.com/neymarjr"&gt;Neymar JR&lt;/a&gt; entrou para a brincadeira e mudou seu avatar do twitter para a imagem que adquiriu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--62fx-u5n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2v4xobcq69ierzl9fqo8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--62fx-u5n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2v4xobcq69ierzl9fqo8.png" alt="Neymar JR troca Avatar do twitter pelo NFT adquirido" width="880" height="547"&gt;&lt;/a&gt;&lt;/p&gt;
Neymar JR troca Avatar do twitter pelo NFT adquirido



&lt;h2&gt;
  
  
  O que é exatamente uma coleção NFT?
&lt;/h2&gt;

&lt;p&gt;É um conjunto de Tokens Não Fungíveis (NFT - &lt;strong&gt;Non-Fungible Tokens&lt;/strong&gt;), são ativos digitais exclusivos. Geralmente representa uma obra de arte como uma imagem, mas também pode representar coisas como nomes de domínio e itens físicos no mundo real, mas muitas vezes você verá NFTs agrupados em uma coleção como &lt;a href="https://www.moonshotgarageproject.com/"&gt;Moonshot Garage Project&lt;/a&gt;, &lt;a href="https://opensea.io/collection/boredapeyachtclub"&gt;Bored Ape Yacht Club&lt;/a&gt;, &lt;a href="https://opensea.io/collection/doodles-official"&gt;Doodles&lt;/a&gt;, &lt;a href="https://opensea.io/collection/cryptopunks"&gt;CryptoPunks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jCkDeEPh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f9ya4itcjqdo11r3wt3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jCkDeEPh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f9ya4itcjqdo11r3wt3w.png" alt="Coleção Bored Ape Yacht Club" width="880" height="266"&gt;&lt;/a&gt;&lt;/p&gt;
Coleção Bored Ape Yacht Club



&lt;p&gt;Apenas para exemplificar algumas dessas imagens são criadas com várias camadas em cima de uma imagem base como cabelos, olhos, roupas, dentro outros acessórios e atributos. As camadas são então combinadas aleatoriamente para criar várias imagens únicas, o interessante é que várias características e atributos têm diferentes níveis de raridade quando uma imagem é gerada, é menos provável que tenha uma das características raras uma das outras.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gr7qwvK_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ez13ie4x0o5hol2ijvz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gr7qwvK_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ez13ie4x0o5hol2ijvz.png" alt="Imagem base com diversas características e atributos aplicados" width="880" height="526"&gt;&lt;/a&gt;&lt;/p&gt;
Imagem base com diversas características e atributos aplicados



&lt;p&gt;Você pode pensar em um &lt;a href="https://pt.wikipedia.org/wiki/Contrato_inteligente"&gt;contrato inteligente&lt;/a&gt; (&lt;a href="https://eips.ethereum.org/EIPS/eip-721"&gt;ERC-721&lt;/a&gt;) como uma Máquina de Vendas automática na nuvem quando uma coleção de NFTs é ofertada pela primeira vez, assemelhando-se a um &lt;a href="https://pt.wikipedia.org/wiki/Oferta_p%C3%BAblica_inicial"&gt;IPO&lt;/a&gt; na bolsa de valores.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qL6HDLvh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h5idov7gli5jnhvfqg2p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qL6HDLvh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h5idov7gli5jnhvfqg2p.png" alt="Similaridade de NFTs em IPO" width="486" height="606"&gt;&lt;/a&gt;&lt;/p&gt;
Similaridade de NFTs em IPO



&lt;p&gt;Você pode enviar por exemplo &lt;a href="https://ethereum.org/pt-br/eth/"&gt;criptomoedas ETH&lt;/a&gt; para esse endereço de carteira (&lt;a href="https://ethereum.org/pt-br/wallets/"&gt;Wallet&lt;/a&gt;), ele cunhará (Mint) um token único (NFT) e o transferirá para sua carteira e se tiver sorte você vai conseguir algo com uma característica realmente rara, não é muito diferente de abrir um pacote de cartas de Pokémon. A maioria das cartas são muito comuns mas há uma pequena chance de você conseguir algo que é muito raro e valioso.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tXVPPwv7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5f127llfu4aovz7g4z00.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tXVPPwv7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5f127llfu4aovz7g4z00.png" alt="Comparação NFT vs Cartas Pokémon" width="819" height="554"&gt;&lt;/a&gt;&lt;/p&gt;
Comparação NFT vs Cartas Pokémon



&lt;p&gt;Depois que você compra um NFT há um mercado secundário onde você pode revendê-lo para outra pessoa em um site como o &lt;a href="https://opensea.io/"&gt;OpenSea&lt;/a&gt;. Muitas pessoas investem em NFTs esperando vendê-los por um valor mais alto do que adquiriu. Com o passar do tempo se você é o criador original, você também pode configurar seu contrato inteligente para receber &lt;a href="https://pt.wikipedia.org/wiki/Royalty"&gt;royalties&lt;/a&gt; sempre que um NFT mudar de mãos no futuro, isso é muito bom, mas também há muitas coisas não tão legais assim sobre a web3, por exemplo o cara que criou o Signal &lt;a href="https://www.theverge.com/2021/10/14/22726556/signal-founder-moxie-marlinspike-nft-whim-change-platform-shit-emoji-fragility"&gt;criou um NFT que muda sua imagem com base em onde você a visualiza&lt;/a&gt;. Aqui você pode entender melhor &lt;a href="https://moxie.org/2022/01/07/web3-first-impressions.html"&gt;o motivo&lt;/a&gt; dele fazer isso.&lt;/p&gt;

&lt;p&gt;Bom, espero que você esteja entusiasmado(a) assim como eu sobre o tema, extraí o conteúdo &lt;a href="https://www.youtube.com/watch?v=meTpMP0J5E8"&gt;desse vídeo&lt;/a&gt; e adicionei algumas coisas a mais. &lt;/p&gt;

&lt;p&gt;Se curtiu ou não deixa seu comentário e vamos trocar idéia, acredito que seja enriquecedor qualquer feedback. Valeu! 🤠&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
      <category>crypto</category>
    </item>
  </channel>
</rss>
