<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Amy's Vue on this</title>
    <description>The latest articles on Forem by Amy's Vue on this (@detwiler_amy).</description>
    <link>https://forem.com/detwiler_amy</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%2F868520%2F30b7a8a7-c129-4d12-8fa0-d1568ff8e98f.jpg</url>
      <title>Forem: Amy's Vue on this</title>
      <link>https://forem.com/detwiler_amy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/detwiler_amy"/>
    <language>en</language>
    <item>
      <title>Creating a New Nuxt 3 Application with Pinia and TailwindCSS</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Sat, 24 Dec 2022 00:25:19 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/creating-a-new-nuxt-3-application-with-pinia-and-tailwindcss-5938</link>
      <guid>https://forem.com/detwiler_amy/creating-a-new-nuxt-3-application-with-pinia-and-tailwindcss-5938</guid>
      <description>&lt;p&gt;First of all: I'm not saying that it's been too long since I last posted on here, but I am saying that I had to google options for developer blogs to remember which site I was using -.-'&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Nuxt3 application
&lt;/h2&gt;

&lt;p&gt;I had a really rough time because I didn't have nvm installed before. I vaguely remembered it being fairly difficult on my Mac M1 laptop, but I powered through 🥳&lt;/p&gt;

&lt;p&gt;But I am using &lt;code&gt;v18.12.1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;They changed the startup script that we are supposed to use. It's located in the &lt;a href="https://nuxt.com/docs/getting-started/installation"&gt;documentation&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx nuxi init &amp;lt;project-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I started following &lt;a href="https://codybontecou.com/nuxt3-and-pinia.html"&gt;this blog&lt;/a&gt; with its instructions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I DO NOT USUALLY ALLOW YARN ANYWHERE NEAR MY PERSONAL PROJECTS. IT IS REALLY UNNECESSARY.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;However, there is a bug and you cannot currently install Pinia without forever errors without using it so &lt;strong&gt;just this time&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add pinia
yarn add @pinia/nuxt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then go to the &lt;code&gt;nuxt.config.ts&lt;/code&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export default defineNuxtConfig({
  modules: ['@pinia/nuxt'],
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and then finally, we'll import this into a page/component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// stores/images.js

import { defineStore } from 'pinia'

export const useImagesStore = defineStore({
  id: 'image-store',
  state: () =&amp;gt; {
    return {
      images: [
        {src: 'https://upload.wikimedia.org/wikipedia/commons/b/bc/Juvenile_Ragdoll.jpg'}, 
        {src: 'https://cdn.hpm.io/wp-content/uploads/2018/04/26174519/Roger-H-Goun.jpg'}
      ],
    }
  },
  actions: {},
  getters: {
    ImageList: state =&amp;gt; state.images,
  },
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  NOW ONTO TAILWIND!
&lt;/h2&gt;

&lt;p&gt;There is now going to be forever problems due to using yarn that one time to install Pinia. For the most part followed the github &lt;a href="https://github.com/nuxt-modules/tailwindcss"&gt;instructions&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install --save-dev --legacy-peer-deps @nuxtjs/tailwindcss
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add the following to the modules section in the nuxt.config.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  modules: [
    '@nuxtjs/tailwindcss'
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The basic Nuxt application is now setup!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>nuxt</category>
      <category>vue</category>
    </item>
    <item>
      <title>Day 1 of getting back into Solidity Course</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Thu, 18 Aug 2022 19:26:30 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/day-1-of-getting-back-into-solidity-course-d1d</link>
      <guid>https://forem.com/detwiler_amy/day-1-of-getting-back-into-solidity-course-d1d</guid>
      <description>&lt;p&gt;Timeline until: 02:12:12&lt;/p&gt;

&lt;p&gt;The worst part about starting over is actually having to admit and confess that you have to start over. However, this is like the 100 days of code like you go, I needed two months, basically, of just not doing this. And now I'm back. Fun fact, I had to change my password on my work computer. And now I'm giving myself 179 days to get through this course and find a job in web three, let's see if I can make the self imposed deadline. &lt;/p&gt;

&lt;p&gt;It's been a month and a half since I watched any of the Solidity course video, so I decided to restart the solidity coding section.&lt;/p&gt;

&lt;p&gt;So, thankfully we were able to skip the first 2 hours of the video. &lt;/p&gt;

&lt;p&gt;I was able to refamiliarize myself with Remix, and I have a new goal of having a job in web3 by 174 days (February 8th, 2023) from today!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>blockchain</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Stripe No signatures found matching the expected signature for payload.</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Mon, 25 Jul 2022 01:03:27 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/stripe-no-signatures-found-matching-the-expected-signature-for-payload-49ba</link>
      <guid>https://forem.com/detwiler_amy/stripe-no-signatures-found-matching-the-expected-signature-for-payload-49ba</guid>
      <description>&lt;p&gt;I've been working on this error for more than a week:&lt;/p&gt;

&lt;p&gt;No signatures found matching the expected signature for payload. Are you passing the raw request body you received from Stripe?&lt;/p&gt;

&lt;p&gt;For some reason, it was erroring because I was defining bodyParser before routes in my express server.&lt;/p&gt;

&lt;p&gt;This has been virtually impossible to debug, and I even asked an outside developer for help. Hopefully this helps someone when debugging their Stripe implementation.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Web3 Solidity + JavaScript 32 hour course recap #14</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Tue, 21 Jun 2022 01:51:36 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-14-12k</link>
      <guid>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-14-12k</guid>
      <description>&lt;p&gt;timestamps 4:33:33 - 4:50:26&lt;/p&gt;

&lt;p&gt;As an aside, I applied for the gitcoin grant program, and then pretty much immediately had to put this training on hiatus. I was launching my new website (Banned Books Art)[&lt;a href="https://www.bannedbooks.art"&gt;https://www.bannedbooks.art&lt;/a&gt;]. It's a VR art gallery that advocates for free speech, and I decided to make the VR from scratch using the A-Frame library. It was a lot of work, and there's still some cleanup, but overall the launch went well.&lt;/p&gt;

&lt;p&gt;So this is more of a review than usual for me....&lt;/p&gt;

&lt;p&gt;Anyways, the first thing we did was go to a previous version of Solidity to demonstrate what safe numbers are. It's a little wild that we could accidentally reset everything to zero before Solidity 8.&lt;/p&gt;

&lt;p&gt;The unchecked keyword makes our code a little bit more gas efficient.&lt;/p&gt;

&lt;p&gt;We instantiated a pretty standard for loop to reset the funders after we withdraw the funds.&lt;/p&gt;

&lt;p&gt;for (uint256 i = 0; i &amp;lt; funders.length; i++) {}&lt;/p&gt;

&lt;p&gt;which, I know how to do from basic javascript, but that's a little old school for JS, and we now favor forEach, entries, and mappings.&lt;/p&gt;

&lt;p&gt;We also reset the array like this: &lt;code&gt;funders = new address[](0);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Arrays can be tricky when you don't actually assign them as new objects, so this makes sense that we're setting it to a new array with 0 elements - which makes it empty.&lt;/p&gt;

&lt;p&gt;Apparently we went over 3 ways to Ethereum to a wallet, but the third way is to use the call statement. Which is the preferred method in version 8+.&lt;/p&gt;

&lt;p&gt;(bool callSuccess, ) = payable(msg.sender).call{value: address(this).balance}("");&lt;br&gt;
        require(callSuccess, "Call Failed");&lt;/p&gt;

&lt;p&gt;I'm going to wind up rewatching this portion because I'm pretty sure the ("") is because we don't actually have a callback function that we want to use. We're only checking on the balance.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>solidity</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Web3 Solidity + JavaScript 32 hour course recap #13</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Thu, 09 Jun 2022 18:53:10 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-13-2nia</link>
      <guid>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-13-2nia</guid>
      <description>&lt;p&gt;timestamps: 4:20:00 - 4:33:33&lt;/p&gt;

&lt;p&gt;This is a recap of me making my way through the 32 hour course by Patrick Collins posted on &lt;a href="https://www.youtube.com/watch?v=gyMwXuJrbJQ"&gt;FreeCodeCamp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I started off by reviewing mapping vs arrays, because we're going through this material rather quickly and needed the refreshers. Mappings are hashes (key/value pair), and arrays are arrays.&lt;/p&gt;

&lt;p&gt;Then we reviewed interfaces, which define which functions are available in a contract, and can be imported and used as the ABI since we need the ABI &lt;em&gt;and&lt;/em&gt; the contract address to interact with 3rd part contracts.&lt;/p&gt;

&lt;p&gt;Here is the &lt;a href="https://docs.soliditylang.org/en/v0.8.14/cheatsheet.html?highlight=global%20variable#global-variables"&gt;Global Variable Cheatsheet&lt;/a&gt; from the Solidity documentation. It lists all of the variables that are available to us "for free" globally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://solidity-by-example.org/"&gt;Solidity by Example&lt;/a&gt; was mentioned as a good resource yesterday, but we specifically went to the library lesson.&lt;/p&gt;

&lt;p&gt;It turns out that Solidity libraries are like contracts except they're defined as &lt;code&gt;library&lt;/code&gt; instead of &lt;code&gt;contract&lt;/code&gt; and the functions should be &lt;code&gt;internal&lt;/code&gt; instead of &lt;code&gt;public&lt;/code&gt;. They also cannot have any state variables, and they cannot handle Ethereum.&lt;/p&gt;

&lt;p&gt;It was also a cool trick to import the library, and then define a type &lt;code&gt;as&lt;/code&gt; that, so that we could then just chain it on uint256. In a library function, the thing that's changed on that is that result is the first parameter inside that goes to that library function.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import "./PriceConverter.sol";&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;using PriceConverter for uint256;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;msg.value.getConversionRate()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;the PriceConverter.sol has the &lt;code&gt;getConversionRate&lt;/code&gt; defined as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;function getConversionRate(uint256 ethAmount) internal view returns (uint256){&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As an aside: if you have a section collapsed in Remix, and you try to search for a term; it will not find it.&lt;/p&gt;

&lt;p&gt;I did not learn for a full hour tonight, but I &lt;strong&gt;did&lt;/strong&gt; learn about libraries, so I've got that going for me - which is nice.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>blockchain</category>
      <category>solidity</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Web3 Solidity + JavaScript 32 hour course recap #12</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Thu, 09 Jun 2022 02:12:13 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-12-590d</link>
      <guid>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-12-590d</guid>
      <description>&lt;p&gt;timestamps: 4:11:11 - 4:22:02&lt;/p&gt;

&lt;p&gt;This is a recap of me making my way through the 32 hour course by Patrick Collins posted on &lt;a href="https://www.youtube.com/watch?v=gyMwXuJrbJQ"&gt;FreeCodeCamp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There was a lot of user error this time -.-;&lt;/p&gt;

&lt;p&gt;However, we made a lot of progress in our "FundMe" SmartContract. &lt;/p&gt;

&lt;p&gt;Basically, to have $50 in ethereum, we have to use 50 and set it to 10e18:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;uint256 public minimumUsd = 50 * 1e18;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is because WEI is 18 decimal places.&lt;/p&gt;

&lt;p&gt;Then we completed the &lt;code&gt;getBlockchainPrice&lt;/code&gt; function. Which connects to the Aggregator with the address provided in Chainlink.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;AggregatorV3Interface priceFeed = AggregatorV3Interface(ethToUsdAddress);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This function also taught us about Solidity destructing, which is possible as long as you leave in the commas to account for the values that you don't need to use.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;(, int256 price, , ,) = priceFeed.latestRoundData();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;One of the variables lets you know about the decimal place, but in order for it to display the correct currency amount is is only e10.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;return uint256(price * 1e10);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, the &lt;code&gt;getConversionRate&lt;/code&gt; method takes in the global value that was sent with the transaction, and converts it to the correct amount of Ethereum, by getting the current price of Ethereum:&lt;br&gt;
&lt;code&gt;uint256 ethPrice = getBlockchainPrice();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and then &lt;/p&gt;

&lt;p&gt;&lt;code&gt;uint256 ethAmountInUsd = (ethPrice * ethAmount) / 1e18;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;With solidity, you have to multiply first and then divide so basically 101/100 to get 1%. Something Something floating point math, and we want to be accurate when it comes to money.&lt;/p&gt;

&lt;p&gt;I didn't get terribly far today, but we made good progress in the app. If I had to guess, we'll be getting to the meat of the &lt;code&gt;fund&lt;/code&gt; method soon!&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>tutorial</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Web3 Solidity + JavaScript 32 hour course recap #11</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Wed, 08 Jun 2022 17:55:01 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-11-32mp</link>
      <guid>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-11-32mp</guid>
      <description>&lt;p&gt;timestamps: 3:57:00 - 4:11:11&lt;/p&gt;

&lt;p&gt;This is a recap of me making my way through the 32 hour course by Patrick Collins posted on &lt;a href="https://www.youtube.com/watch?v=gyMwXuJrbJQ"&gt;FreeCodeCamp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The first thing that we talked about is the fact that Oracle networks take ERC-20.&lt;/p&gt;

&lt;p&gt;I then took it up on myself to look up the different Ethereum protocols (the gemini resource)[&lt;a href="https://www.gemini.com/cryptopedia/ethereum-token-standards-erc777-erc1155-erc223-erc1337#section-what-is-erc-1155"&gt;https://www.gemini.com/cryptopedia/ethereum-token-standards-erc777-erc1155-erc223-erc1337#section-what-is-erc-1155&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;I'm pretty sure that ERC-20, ERC-721, and ERC-1155 are the only ones that I need to be aware of for now.&lt;/p&gt;

&lt;p&gt;Chainlink is a technology for getting external data in a decentralized manner.&lt;/p&gt;

&lt;p&gt;When interacting with another contract; you need both the address and the ABI. The address can be found in the chainlink documentation, but the ABI is found as an interface in the chainlink npm package. Solidity apparently is "smart enough" to be able to make calls to npm the find files.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;code&gt;address ethToUsdAddress = 0x8A753747A1Fa494EC906cE90E9f37563A8AF630e;&lt;/code&gt;&lt;br&gt;
        &lt;code&gt;AggregatorV3Interface(ethToUsdAddress).version();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;are both pretty much what I would expect this to look like.&lt;/p&gt;

&lt;p&gt;One side note: I was in Kovan when running the test, but we had copied the Rinkeby wallet address. So make sure that your metamask token selection matches what you're wanting to use.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Web3 Solidity + JavaScript 32 hour course recap #10</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Tue, 07 Jun 2022 20:02:00 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-10-2a4a</link>
      <guid>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-10-2a4a</guid>
      <description>&lt;p&gt;timestamps: 3:30:30 - 3:57:00&lt;/p&gt;

&lt;p&gt;This is a recap of me making my way through the 32 hour course by Patrick Collins posted on &lt;a href="https://www.youtube.com/watch?v=gyMwXuJrbJQ"&gt;FreeCodeCamp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The first few minutes went over what had been learned in the previous lesson. Which is always a convenient place to stop.&lt;/p&gt;

&lt;p&gt;Let's take a moment to emphasize that in order to override a function from a child contract, the parent function has to have the keyword &lt;code&gt;virtual&lt;/code&gt;, and the child function has to have &lt;code&gt;override&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I also spent some time trying to figure out a good way to export the desktop remix workspace to my local machine. The best bet is to either export it into a gist, and/or create a new workspace as soon as you start a new project.&lt;/p&gt;

&lt;p&gt;Patrick Collins explained really well how chainlink and things like that work to allow decentralized apps have access to real-world information in a decentralized way. It involved pretty graphs, and I recommend that you watch that part if you're interested in the specifics.&lt;/p&gt;

&lt;p&gt;tl;dr use Chainlink.&lt;/p&gt;

&lt;p&gt;In order to make a function payable, you have to add the keyword... payable.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;function fund() public payable {}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It also has the added benefit of making the button in the deploy section of remix &lt;strong&gt;red&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The value of the etherium (or whatever currency) is at the top level of the request, so the value can be accessed through &lt;code&gt;msg.value&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;When you have a function that has a revert function (payable), put the stuff that has the option to fail at the top of the function to help the user save on gas fees if the transaction is cancelled.&lt;/p&gt;

&lt;p&gt;I also went on a bit of a tangent to get the revert message to show a concatenated message that was descriptive with the proper amount that was expected:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;function uint2str(uint _i) internal pure returns (string memory _uintAsString) {&lt;br&gt;
        if (_i == 0) {&lt;br&gt;
            return "0";&lt;br&gt;
        }&lt;br&gt;
        uint j = _i;&lt;br&gt;
        uint len;&lt;br&gt;
        while (j != 0) {&lt;br&gt;
            len++;&lt;br&gt;
            j /= 10;&lt;br&gt;
        }&lt;br&gt;
        bytes memory bstr = new bytes(len);&lt;br&gt;
        uint k = len;&lt;br&gt;
        while (_i != 0) {&lt;br&gt;
            k = k-1;&lt;br&gt;
            uint8 temp = (48 + uint8(_i - _i / 10 * 10));&lt;br&gt;
            bytes1 b1 = bytes1(temp);&lt;br&gt;
            bstr[k] = b1;&lt;br&gt;
            _i /= 10;&lt;br&gt;
        }&lt;br&gt;
        return string(bstr);&lt;br&gt;
    }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;string public insufficientFundsMessage = string.concat("A minimum of $", uint2str(minimumUsd), " is required");&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Web3 Solidity + JavaScript 32 hour course recap #9</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Sun, 05 Jun 2022 19:28:59 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-9-4lp4</link>
      <guid>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-9-4lp4</guid>
      <description>&lt;p&gt;timestamps: 3:00:00 - 3:30:30&lt;/p&gt;

&lt;p&gt;This is a recap of me making my way through the 32 hour course by Patrick Collins posted on &lt;a href="https://www.youtube.com/watch?v=gyMwXuJrbJQ"&gt;FreeCodeCamp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Today revolved around learning how to import other contracts into a master contract, and to extend the functionality of contracts with inheritance.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pragma solidity ^0.8.0;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import "./SimpleStorage.sol";&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;contract ExtraStorage is SimpleStorage{&lt;/code&gt;&lt;br&gt;
    // overrides the function called 'store'&lt;br&gt;
    &lt;code&gt;function store(uint256 _favoriteNumber) public override{&lt;/code&gt;&lt;br&gt;
        &lt;code&gt;favoriteNumber = _favoriteNumber +/ 5;&lt;/code&gt;&lt;br&gt;
    &lt;code&gt;}&lt;/code&gt;&lt;br&gt;
&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;When importing contracts and/or extending them it is important to keep the versioning compatible. So a pragma of 0.7.0 will not be compatible with ^0.8.0&lt;/p&gt;

&lt;p&gt;In order to interact with any contract you need two things: contract address, and its ABI (application binary interface). The ABI lets you know what inputs and outputs the contract has.&lt;/p&gt;

&lt;p&gt;Things that I learned: EVM stands for Ethereum Virtual Machine, which is what the Solidity code compiles down to. Polygon, Avalanche, and Fantom are all EVM compatible. Solona uses Rust.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Web3 Solidity + JavaScript 32 hour course recap #8</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Fri, 03 Jun 2022 18:45:12 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-8-1eea</link>
      <guid>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-8-1eea</guid>
      <description>&lt;p&gt;timestamps: 2:44:10-3:00:00&lt;/p&gt;

&lt;p&gt;This is the recap of my sixth day of making my way through the 32 hour course by Patrick Collins posted on &lt;a href="https://www.youtube.com/watch?v=gyMwXuJrbJQ"&gt;FreeCodeCamp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Today we celebrate the milestone of completing 3 hours of the course! We're &lt;strong&gt;almost&lt;/strong&gt; 10% of the way through!&lt;/p&gt;

&lt;p&gt;We went over how to define an object, and how to call it from an external source.&lt;/p&gt;

&lt;p&gt;We also went over how to connect (remix)[&lt;a href="https://remix.ethereum.org/"&gt;https://remix.ethereum.org/&lt;/a&gt;] to our Metamask test wallet.&lt;/p&gt;

&lt;p&gt;There are six places where memory can be stored in a SmartContract: stack, memory, storage, calldata, code, and logs. However, memory and calldata are the only places where the storage can be specified. Calldata and memory are both temporary pieces of data. However calldata is like declaring a const, while memory is like declaring a let. By that I mean that calldata is read only and the information cannot be changed within the SmartContract, but memory can be reassigned a value within the SmartContract.&lt;/p&gt;

&lt;p&gt;One thing that I found out was that the metamask extension doesn't like for you to switch accounts, and if you have 0 eth in your wallet the 2+ accounts won't reconnect automatically. But you can manually add them back, and they will have the original amount that existed before. This happened in a dev account, but I still did not like the fact that all of my accounts didn't appear right away.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>solidity</category>
      <category>learning</category>
    </item>
    <item>
      <title>Web3 Grant Opportunity with the Sherwood Project</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Fri, 03 Jun 2022 00:45:29 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/web3-grant-opportunity-with-the-sherwood-project-4456</link>
      <guid>https://forem.com/detwiler_amy/web3-grant-opportunity-with-the-sherwood-project-4456</guid>
      <description>&lt;p&gt;The other day, someone that knew about my quest to find and apply to Web3 grants let me know about &lt;a href="https://www.thesherwoodproject.com/"&gt;The Sherwood Project&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'm going to share about why I was excited about this, and then ultimately decided that I was not going to pursue this particular grant at this time.&lt;/p&gt;

&lt;p&gt;A part of this is, well, everything about this project reads like a scam.&lt;/p&gt;

&lt;p&gt;The introductory text is very convoluted, and the &lt;a href="https://www.thesherwoodproject.com/artist-application"&gt;Visionary Grant&lt;/a&gt; description is not much better. Earning a $50-60k commission doesn't sound like a bad deal on the surface, but there is &lt;strong&gt;a lot&lt;/strong&gt; of work involved in this, and the community building is mostly for the Sherwood Project. On the plus-side, they claim that there is additional funding for the engineering for actually implementing the project. On the con-side, there are no actual mentions of amounts dedicated for additional resources. &lt;/p&gt;

&lt;p&gt;The creators had a podcast episode, but I only made it about 1/4 of the way through it.&lt;/p&gt;

&lt;p&gt;One of the factors of judging whether something is a scam or not is figuring out who are is in leadership. In this case it is &lt;a href="https://www.linkedin.com/in/lukedale505/"&gt;Luke Dale&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/mbsilverman/"&gt;Matt Silverman&lt;/a&gt;. They both seem to have a lot of experience with film, but this is their first major NFT project (or at least that is how it seems to be through their LinkedIn Bio.)&lt;/p&gt;

&lt;p&gt;The Treehouse Grants seems like a better deal because it is a request for funding for your own project. However, that definitely struck me as being scammy due to needing to be an NFTree NFT holder to be eligible for the program. However, there are definitely non-scam organizations that have scholarships for only members of the organization - so maybe it's just a soft red flag (?)&lt;/p&gt;

&lt;p&gt;Their podcast introducing the project was very convincing, at least what I heard. Overall, it's really hard to figure out what is the Web3 Hype Way vs a transparent scam.&lt;/p&gt;

&lt;p&gt;One other thing that I'll touch on: The Sherwood Project is an official partner of Polygon DAO. I assumed that being a partner with a large DAO like Polygon meant that the company had done their due diligence. &lt;/p&gt;

&lt;p&gt;I don't know people in their network. I am a member of their discord, and I am going to purchase a $160 NFT tomorrow in their pre-sale. I'm curious about whether it is a scam, and less than $200 to find out is certainly one way to do it while keeping the possibility of applying for the Treehouse grant open.&lt;/p&gt;

&lt;p&gt;I tried to convince my night job to submit an application for the Visionary Artist grant, with myself and one other person being the face of the night job project. However, we decided that it would benefit the Sherwood Project too much for us to delay our own product and all of that community building is better off done with our own branding.&lt;/p&gt;

&lt;p&gt;For the "Visionary Artist" grant, they really should be paying the artist an amount of money, probably closer to $100k, or an amount of equity of the project, and then the commission for incentivisation for the completion of the project. The artist will have a lot of responsibility in coordinating so many artists in order to complete the vision of making 8,333 NFTs.&lt;/p&gt;

&lt;p&gt;So, is it a scam? Maybe.&lt;br&gt;
Is the amount of work that goes along with the grant outsized compared to the compensation? yes.&lt;br&gt;
Am I applying to be a visionary? no.&lt;br&gt;
Am I going to purchase an NFT? one.&lt;br&gt;
Will I apply to the Treehouse grant? We'll see once it gets opened up.&lt;/p&gt;

&lt;p&gt;What are your thoughts on The Sherwood Project? What Web3 grants are you aware of?&lt;/p&gt;

&lt;p&gt;EDIT: the first Visionary Artist Grant application is open until June 15th, 2022.&lt;/p&gt;

</description>
      <category>nft</category>
      <category>artist</category>
      <category>grants</category>
    </item>
    <item>
      <title>Web3 Solidity + JavaScript 32 hour course recap #7</title>
      <dc:creator>Amy's Vue on this</dc:creator>
      <pubDate>Thu, 02 Jun 2022 23:54:18 +0000</pubDate>
      <link>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-7-2j5e</link>
      <guid>https://forem.com/detwiler_amy/web3-solidity-javascript-32-hour-course-recap-7-2j5e</guid>
      <description>&lt;p&gt;timestamps: 2:23:32-2:44:10&lt;/p&gt;

&lt;p&gt;This is the recap of my sixth day of making my way through the 32 hour course by Patrick Collins posted on &lt;a href="https://www.youtube.com/watch?v=gyMwXuJrbJQ"&gt;FreeCodeCamp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I really like the more hands-on portions of these tutorials.&lt;/p&gt;

&lt;p&gt;I learned that there are 4 ways to set the visibility specifiers: internal, external, public, and private. If it is not specified, then it is internal. External functions are only available externally, internal functions are only available to the contract and the contract's children.&lt;/p&gt;

&lt;p&gt;We learned more about arrays and structures. The naming convention of person vs Person vs people vs People is rather confusing. But, in general, the definition of what a Person object looks like feels like a typescript interface. Then you can define Person[], as an array that contains the objects of single a single person. &lt;/p&gt;

&lt;p&gt;It was a good day, and I learned a lot!&lt;/p&gt;

</description>
      <category>web3</category>
      <category>solidity</category>
      <category>remix</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
