<?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: Anh Dung</title>
    <description>The latest articles on DEV Community by Anh Dung (@anhdung).</description>
    <link>https://dev.to/anhdung</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%2F47700%2F2c6e477f-6fb1-46e7-afc8-c6e08ca8b022.jpg</url>
      <title>DEV Community: Anh Dung</title>
      <link>https://dev.to/anhdung</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anhdung"/>
    <language>en</language>
    <item>
      <title>Install/Use Any Version of Node.js with nvm (Node Version Manager)</title>
      <dc:creator>Anh Dung</dc:creator>
      <pubDate>Mon, 11 Nov 2024 00:23:40 +0000</pubDate>
      <link>https://dev.to/anhdung/installuse-any-version-of-nodejs-with-nvm-node-version-manager-kl9</link>
      <guid>https://dev.to/anhdung/installuse-any-version-of-nodejs-with-nvm-node-version-manager-kl9</guid>
      <description>&lt;p&gt;Managing multiple versions of Node.js can be frustrating if you don’t have a quick way to install the needed version, especially across different OS platforms.&lt;/p&gt;

&lt;p&gt;Thankfully, nvm (Node Version Manager) supports Unix, MacOS, and WSL for managing Node.js versions efficiently.&lt;/p&gt;

&lt;p&gt;Initially, I thought of writing a lot, but here has everything you need and more 😥😥&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faj0bnexst2zu2gy6l11p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faj0bnexst2zu2gy6l11p.png" alt="Image description" width="368" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run this command in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] &amp;amp;&amp;amp; printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] &amp;amp;&amp;amp; \. "$NVM_DIR/nvm.sh" # This loads nvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done. Now, &lt;code&gt;use nvm install&lt;/code&gt; node to install the latest version or &lt;code&gt;nvm ls&lt;/code&gt; to view available Node.js versions.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover photo by Lautaro Andreani&lt;/em&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>nvm</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to publish a package on Nuget.org</title>
      <dc:creator>Anh Dung</dc:creator>
      <pubDate>Thu, 07 Nov 2024 09:42:43 +0000</pubDate>
      <link>https://dev.to/anhdung/how-to-publish-a-package-on-nugetorg-4l6p</link>
      <guid>https://dev.to/anhdung/how-to-publish-a-package-on-nugetorg-4l6p</guid>
      <description>&lt;p&gt;&lt;em&gt;NuGet Package Manager streamlines .NET development by enabling quick installation, update, and management of libraries, saving time and reducing manual work. It handles dependencies automatically, ensuring compatibility and stability, while also supporting version control and private repositories. Integrated with tools like Visual Studio, NuGet promotes efficient teamwork and enhances productivity in managing open-source or internal packages.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  1. What is Nuget?
&lt;/h1&gt;

&lt;p&gt;Someone has already answered this, so check it out here: What is Nuget. If you’re unfamiliar with Nuget, you may not need to proceed with the following steps.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Register an account on nuget.org
&lt;/h1&gt;

&lt;p&gt;Go to Nuget.org. You can log in using a Microsoft account (e.g., Office 365, Hotmail/Outlook/Live). Once logged in, click on your account name, select &lt;strong&gt;API Keys&lt;/strong&gt;, and click &lt;strong&gt;Create&lt;/strong&gt; to generate a key. Be sure to copy this key for step 3.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Build code and publish
&lt;/h1&gt;

&lt;p&gt;Do what you like with your code, and here are some useful attributes to add in the &lt;strong&gt;.csproj&lt;/strong&gt; file to display on Nuget. The &lt;strong&gt;GenerateDocumentationFile&lt;/strong&gt; attribute keeps comments intact.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Description&amp;gt;My Awesome Package&amp;lt;/Description&amp;gt;
&amp;lt;GenerateDocumentationFile&amp;gt;true&amp;lt;/GenerateDocumentationFile&amp;gt;
&amp;lt;PackageId&amp;gt;AwesomePackage&amp;lt;/PackageId&amp;gt;
&amp;lt;Version&amp;gt;1.0.0&amp;lt;/Version&amp;gt;
&amp;lt;Authors&amp;gt;Fun Corp&amp;lt;/Authors&amp;gt;
&amp;lt;Company&amp;gt;Fun Inc&amp;lt;/Company&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once done, build the project and pack it. In the &lt;strong&gt;bin/Debug&lt;/strong&gt; folder, you’ll see the file &lt;strong&gt;xxx.version.nupkg&lt;/strong&gt;—this is what you’ll publish. Open a terminal, navigate to the folder with the .nupkg file, and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet nuget push xxx.version.nupkg --api-key [your copied key] --source https://api.nuget.org/v3/index.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  4. Done
&lt;/h1&gt;

&lt;p&gt;Go back to nuget.org, select &lt;strong&gt;Manage Packages&lt;/strong&gt;, and check if your package is approved and listed. Here, you can also update Readme info and more.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover photo by Bernd 📷 Dittrich&lt;/em&gt;&lt;/p&gt;

</description>
      <category>nuget</category>
      <category>dotnet</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Deploying an NFTs Marketplace Solution on AWS Super Fast</title>
      <dc:creator>Anh Dung</dc:creator>
      <pubDate>Sat, 02 Nov 2024 00:06:00 +0000</pubDate>
      <link>https://dev.to/anhdung/deploying-an-nfts-marketplace-solution-on-aws-super-fast-411o</link>
      <guid>https://dev.to/anhdung/deploying-an-nfts-marketplace-solution-on-aws-super-fast-411o</guid>
      <description>&lt;h1&gt;
  
  
  Background
&lt;/h1&gt;

&lt;p&gt;To align with the Fourth Industrial Revolution (4IR) and embrace rapid technological changes globally, I decided to deploy an NFTs Marketplace on AWS quickly. After some exploration, it indeed turned out to be very fast!&lt;/p&gt;

&lt;p&gt;The choice of AWS (or any cloud provider) is because, as time and energy become limited, managing physical servers isn't feasible. Cloud infrastructure, as people say, is much more convenient!&lt;/p&gt;

&lt;p&gt;We will use the Ethereum Ropsten Testnet with support from &lt;strong&gt;Amazon Managed Blockchain&lt;/strong&gt;, along with a few other AWS services, all initiated via &lt;strong&gt;CloudFormation&lt;/strong&gt;. The highest cost will likely be from Amazon Managed Blockchain, as it’s billed hourly on-demand, while other services mostly fall under the free tier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mwbwz28o1w99uk8r24b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mwbwz28o1w99uk8r24b.png" alt="Image description" width="800" height="513"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Source: AWS Sample&lt;/em&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Getting Started
&lt;/h1&gt;

&lt;p&gt;Check the Node.js version; older versions can cause compatibility issues. On Ubuntu, the default is often version 10.x, so update if necessary: &lt;a href="https://thocode.net/blog/cai-dat-node-js-phien-ban-moi-nhat-tren-ubuntu-wsl2/" rel="noopener noreferrer"&gt;https://thocode.net/blog/cai-dat-node-js-phien-ban-moi-nhat-tren-ubuntu-wsl2/&lt;/a&gt;. CDK won’t run with outdated Node.js versions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj6yu0f5j3gb25agxdz5b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj6yu0f5j3gb25agxdz5b.png" alt="Image description" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clone the source and install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/aws-samples/simple-nft-marketplace.git
npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Deploy Contract
&lt;/h1&gt;

&lt;p&gt;We’ll use Hardhat to deploy an ERC721 contract written in Solidity on the Ethereum Ropsten Testnet. Hardhat is like the JDK for Java or .NET SDK for .NET.&lt;/p&gt;

&lt;p&gt;In the /contract folder, run:&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
npx hardhat compile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Testing Locally
&lt;/h2&gt;

&lt;p&gt;Open two terminals to simulate a server-client setup.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First terminal: Run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx hardhat node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates 20 Accounts, each with 10,000 ETH. You can use a wallet like MetaMask or Trust Wallet, set to the testnet, and import a test account.&lt;/p&gt;

&lt;p&gt;Example account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Account #0: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (10000 ETH)
Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Second terminal: Run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx hardhat console --network localhost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see: &lt;strong&gt;Contract deployed at 0x5FbDB2315678afecb367f032d93F642f64180aa3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the Hardhat console, generate an NFT token using SimpleERC721 in &lt;code&gt;contracts/SimpleERC721.sol&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const SimpleERC721 = await ethers.getContractFactory('SimpleERC721');
const contract = await SimpleERC721.attach('&amp;lt;contract address&amp;gt;');
await contract.newItem('dummy');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see confirmation of success!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfe2bj1tthcpphm4zvs2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfe2bj1tthcpphm4zvs2.png" alt="Image description" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Returning to MetaMask, you'll see the transaction cost incurred.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkpgzu8sume5kcl7n7smc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkpgzu8sume5kcl7n7smc.png" alt="Image description" width="432" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you check Terminal 1 (server), you’ll also see information like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwb34zkieeh083qqe9z9p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwb34zkieeh083qqe9z9p.png" alt="Image description" width="800" height="127"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Testing on Ethereum Ropsten Testnet
&lt;/h2&gt;

&lt;p&gt;Log in to &lt;strong&gt;AWS Console &amp;gt; Managed Blockchain &amp;gt; Networks &amp;gt; Ethereum Testnet Ropsten &amp;gt; create a node&lt;/strong&gt; &amp;gt; copy the &lt;strong&gt;HTTP Endpoint&lt;/strong&gt; and insert it into the following command. Make sure it includes &lt;strong&gt;https&lt;/strong&gt;, as missing it can cause errors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export AMB_HTTP_ENDPOINT='&amp;lt;my-endpoint&amp;gt;'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, create an account to deploy the contract. Unlike the 20 accounts with 10K ETH above, this new account has no ETH, so you’ll need to find Ropsten Faucets to add some rETH to cover gas fees. Search Google for faucet sites; some are easy, others may require captcha verification.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx hardhat account
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Take the output and insert it here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export PRIVATE_KEY='&amp;lt;0x...&amp;gt;'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, go to &lt;strong&gt;AWS Console &amp;gt; Identity and Access Management (IAM)&lt;/strong&gt; to create an access key and secret access key. In IAM, click &lt;em&gt;Manage access keys&lt;/em&gt; to switch to the old version if you're using IAMv2. Fill in the information here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export AWS_ACCESS_KEY_ID='&amp;lt;...&amp;gt;'
export AWS_SECRET_ACCESS_KEY='&amp;lt;...&amp;gt;'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this command to deploy with Amazon Managed Blockchain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx hardhat run --network amb scripts/deploy-amb.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you’re using a region other than &lt;strong&gt;us-east-1&lt;/strong&gt;, set it below and then rerun the &lt;strong&gt;deploy-amb.js&lt;/strong&gt; file. Success will display “Contract deployed at,” along with the gas fee deduction.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export AWS_DEFAULT_REGION='&amp;lt;your-region&amp;gt;'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Deploy API for Backend
&lt;/h1&gt;

&lt;p&gt;Install AWS CDK:&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 -g aws-cdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The commands below should be run in the &lt;strong&gt;/provision&lt;/strong&gt; directory:&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
export CONTRACT_ADDRESS='&amp;lt;contract from (1)&amp;gt;'
cdk bootstrap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running the above creates a **CDKToolkit **stack with CloudFormation to prepare for deployment.&lt;/p&gt;

&lt;p&gt;Run the following to install dependencies and return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd lambda; npm install; cd -;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the compiled contract (&lt;strong&gt;SimpleERC721.json&lt;/strong&gt;) to &lt;strong&gt;/lambda/contracts/&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;cp ../contract/artifacts/contracts/SimpleERC721.sol/SimpleERC721.json lambda/contracts/.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build CDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check that environment variables are correctly set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo $AMB_HTTP_ENDPOINT
echo $CONTRACT_ADDRESS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If everything’s correct, deploy, and CloudFormation will create the &lt;strong&gt;SimpleNftMarketplaceStack&lt;/strong&gt; stack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cdk deploy SimpleNftMarketplaceStack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Encountering Node.js compatibility issues can lead to random errors if the supported CDK version isn’t updated. After resolving such an error with &lt;strong&gt;electron&lt;/strong&gt; permissions, the correct solution is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo npm uninstall -g electron
sudo npm install -g electron --unsafe-perm=true --allow-root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Successful deployment will output something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SimpleNftMarketplaceStack.NftApiEndpoint = https://***.execute-api.ap-southeast-1.amazonaws.com/prod/
SimpleNftMarketplaceStack.UserPoolClientId = ***
SimpleNftMarketplaceStack.UserPoolId = ap-southeast-1***
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  4. Frontend
&lt;/h1&gt;

&lt;p&gt;In the &lt;strong&gt;/marketplace&lt;/strong&gt; folder, set environment variables as below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; .env.local
VUE_APP_AWS_REGION=&amp;lt;region&amp;gt;
VUE_APP_API_ENDPOINT=&amp;lt;api-endpoint&amp;gt;
VUE_APP_USER_POOL_ID=&amp;lt;user-pool&amp;gt;
VUE_APP_USER_POOL_WEB_CLIENT_ID=&amp;lt;web-client&amp;gt;
EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run: &lt;code&gt;sudo npm install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you see an error like &lt;strong&gt;Response timeout while trying to fetch &lt;a href="https://registry.npmjs.org/fs-extra" rel="noopener noreferrer"&gt;https://registry.npmjs.org/fs-extra&lt;/a&gt;&lt;/strong&gt;, adjust the timeout: &lt;code&gt;npm set timeout=100000&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Clean the npm cache: &lt;code&gt;npm cache clean --force&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then, run: &lt;code&gt;sudo npm run serve&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For errors related to &lt;strong&gt;vue-cli-service&lt;/strong&gt;, install the necessary dependency and retry npm run serve: &lt;code&gt;npm i @vue/cli-service&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;When you see the Local and Network addresses, open the browser to confirm it’s working correctly.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover Photo by Rapha Wilde on Unsplash.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>blockchain</category>
      <category>nft</category>
    </item>
    <item>
      <title>For Dummies: What is Terraform? How to use it with AWS?</title>
      <dc:creator>Anh Dung</dc:creator>
      <pubDate>Tue, 29 Oct 2024 05:25:25 +0000</pubDate>
      <link>https://dev.to/anhdung/for-dummies-what-is-terraform-how-to-use-it-with-aws-949</link>
      <guid>https://dev.to/anhdung/for-dummies-what-is-terraform-how-to-use-it-with-aws-949</guid>
      <description>&lt;h1&gt;
  
  
  I. Introduction
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. What is Terraform?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F572uwwulfnkm84jaszid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F572uwwulfnkm84jaszid.png" alt="Image description" width="800" height="290"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Source: HashiCorp Developer&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Terraform is a powerful tool developed by HashiCorp for managing infrastructure as code (IaC). With Terraform, instead of manually configuring infrastructure, you write code to define how to build and manage infrastructure resources. This makes it easy to reuse, scale, and manage changes.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. What is AWS?
&lt;/h2&gt;

&lt;p&gt;Amazon Web Services (AWS) is a popular cloud platform offering over 200 services, from virtual servers and storage to databases, AI, and data analytics. AWS enables businesses to build and scale infrastructure flexibly, quickly, and efficiently.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Why combine Terraform and AWS?
&lt;/h2&gt;

&lt;p&gt;Combining Terraform with AWS leverages the strengths of both: Terraform automates infrastructure management on AWS, allowing users to deploy, change, and scale without manual intervention. Terraform also reduces human error risk, keeps infrastructure synchronized, and provides easy rollback options.&lt;/p&gt;
&lt;h1&gt;
  
  
  II. Key Components and Concepts in Terraform AWS
&lt;/h1&gt;
&lt;h2&gt;
  
  
  1. Providers
&lt;/h2&gt;

&lt;p&gt;Providers are central in Terraform, enabling it to interact with third-party services. The AWS Provider helps Terraform connect to and manage resources on AWS, like EC2, S3, VPC, etc. Configuring the AWS Provider is straightforward—just provide your AWS account credentials, such as Access Key and Secret Key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "aws" {
  region = "us-west-1"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Resources
&lt;/h2&gt;

&lt;p&gt;Resources are the actual objects you create and manage on AWS, like an EC2 instance, S3 bucket, or VPC. Resources are the most basic building blocks in a Terraform configuration file.&lt;/p&gt;

&lt;p&gt;Example of creating an EC2 instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Modules
&lt;/h2&gt;

&lt;p&gt;Modules are reusable sets of configuration files that help manage complex configurations and reduce code duplication. By using modules, you can organize Terraform code clearly and make it easier to maintain.&lt;/p&gt;

&lt;p&gt;Example of using a module:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module "vpc" {
  source = "terraform-aws-modules/vpc/aws"
  version = "3.0.0"
  ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. State
&lt;/h2&gt;

&lt;p&gt;Terraform State stores information about the resources it manages. This is an essential component that allows Terraform to track the current state of infrastructure and compare it with the configuration file to apply necessary changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0t8ivsmj850kv1bvsa0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0t8ivsmj850kv1bvsa0.png" alt="Image description" width="191" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you run &lt;code&gt;terraform apply&lt;/code&gt;, Terraform creates or updates the state file to track the current status of the infrastructure.&lt;/p&gt;

&lt;p&gt;Example: When you create an EC2 instance with Terraform, the details of this instance are saved in the state file &lt;code&gt;terraform.tfstate&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After running terraform apply, a &lt;code&gt;terraform.tfstate&lt;/code&gt; file is created, storing the state of the EC2 instance, such as its IP address, instance ID, etc. Terraform relies on the state file to determine which resources need to be created or updated.&lt;/p&gt;

&lt;p&gt;State File (terraform.tfstate)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "resources": [
    {
      "type": "aws_instance",
      "name": "example",
      "instances": [
        {
          "attributes": {
            "ami": "ami-0c55b159cbfafe1f0",
            "instance_type": "t2.micro",
            "private_ip": "10.0.0.1",
            "public_ip": "3.101.23.14",
            "id": "i-1234567890abcdef"
          }
        }
      ]
    }
  ]
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Variables
&lt;/h2&gt;

&lt;p&gt;Variables make your configuration more flexible by defining changeable values for different environments or resources.&lt;/p&gt;

&lt;p&gt;File &lt;code&gt;variables.tf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;variable "instance_type" {
  description = "Instance type for EC2 instance"
  default     = "t2.micro"
}

variable "aws_region" {
  description = "AWS Region"
  default     = "us-west-2"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;File &lt;code&gt;main.tf&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "aws" {
  region = var.aws_region
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = var.instance_type
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If no value is provided, Terraform will use the default values in the &lt;code&gt;variables.tf&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;terraform apply -var="instance_type=t2.medium" -var="aws_region=us-east-1"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Outputs
&lt;/h2&gt;

&lt;p&gt;Outputs are values you can retrieve after Terraform completes deployment, such as the IP address of an EC2 instance or the name of an S3 bucket.&lt;/p&gt;

&lt;p&gt;File &lt;code&gt;main.tf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

output "instance_public_ip" {
  description = "The public IP address of the EC2 instance"
  value       = aws_instance.example.public_ip
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After running terraform apply, you will see output like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

instance_public_ip = "3.101.23.14"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This output makes it easy to access necessary information without manually searching through the state file or the AWS Console.&lt;/p&gt;

&lt;h1&gt;
  
  
  III. How Terraform Works with AWS
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Workflow with Terraform
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Write Configuration Files: First, write Terraform configuration files in HCL (HashiCorp Configuration Language) to describe the infrastructure you want to deploy.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;terraform init&lt;/code&gt;: Initialize the Terraform environment and download the necessary providers.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;terraform plan&lt;/code&gt;: Create a plan outlining the changes to be made.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;terraform apply&lt;/code&gt;: Execute the plan, deploying or modifying the infrastructure according to the configuration.&lt;/li&gt;
&lt;li&gt;Update Infrastructure: If changes are needed, just update the configuration file and rerun &lt;code&gt;terraform apply&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Example of Deploying Infrastructure on AWS with Terraform
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "aws" {
  region = "us-west-1"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  IV. Benefits of Using Terraform with AWS
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Fully Automated Infrastructure Deployment: Terraform enables complete automation of infrastructure management and deployment on AWS, saving time and reducing the risk of manual errors.&lt;/li&gt;
&lt;li&gt;Multi-Region and Multi-Account Management: Terraform makes it easy to manage infrastructure resources across multiple AWS regions and accounts.&lt;/li&gt;
&lt;li&gt;Scalability: With Terraform, you can easily scale infrastructure without the complexity of managing a large setup.&lt;/li&gt;
&lt;li&gt;Easy Rollback: Terraform tracks and manages infrastructure changes, allowing you to revert to a previous state if needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Terraform is a powerful and flexible infrastructure management tool, especially valuable when working with AWS. It helps automate, manage, and optimize cloud infrastructure deployment efficiently, reducing errors and saving time. As the trend for Infrastructure as Code (IaC) continues to grow, Terraform will play a key role in managing complex infrastructure on AWS and other cloud platforms.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>terraform</category>
      <category>cloud</category>
      <category>infrastructureascode</category>
    </item>
    <item>
      <title>Choosing Tools for Technical Architecture Diagrams</title>
      <dc:creator>Anh Dung</dc:creator>
      <pubDate>Sun, 27 Oct 2024 15:36:34 +0000</pubDate>
      <link>https://dev.to/anhdung/choosing-tools-for-technical-architecture-diagrams-237e</link>
      <guid>https://dev.to/anhdung/choosing-tools-for-technical-architecture-diagrams-237e</guid>
      <description>&lt;p&gt;There are many tools available, mostly web-based applications supporting cross-platform usage. Some are entirely free, others offer a trial period, and some are free but limited…&lt;/p&gt;

&lt;h2&gt;
  
  
  Microsoft Visio
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuov9r03neotyvhpf82ec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuov9r03neotyvhpf82ec.png" alt="Image description" width="800" height="650"&gt;&lt;/a&gt;&lt;br&gt;
Despite many tools on the market, the most familiar one is probably Visio from the classic Office suite. It comes in both a traditional desktop and a modern web app, but none are free. For Office 365 users, it's highly suitable (additional licensing required) as it integrates well with MS Teams for sharing, editing, and commenting. A notable feature is Re-Layout Page, which automatically arranges diagrams with one click.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zlecg48p48ph3uqu7v1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zlecg48p48ph3uqu7v1.png" alt="Image description" width="540" height="685"&gt;&lt;/a&gt;&lt;br&gt;
Templates/icons: &lt;a href="https://support.microsoft.com/en-us/office/featured-visio-templates-and-diagrams-27d4274b-5fc2-4f5c-8190-35ff1db34aa5#p2-aws" rel="noopener noreferrer"&gt;https://support.microsoft.com/en-us/office/featured-visio-templates-and-diagrams-27d4274b-5fc2-4f5c-8190-35ff1db34aa5#p2-aws&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Draw.io
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwrwyvdj9ii0yjxjsvc9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwrwyvdj9ii0yjxjsvc9.gif" alt="Image description" width="1557" height="1026"&gt;&lt;/a&gt;&lt;br&gt;
Draw.io comes next due to being free and integrating well with cloud services for easy sync and sharing, making it a top choice today. It allows custom templates, which is very helpful for large projects needing reusable components across teams. While dynamic flow animations are supported, exporting as GIFs or videos isn’t available. You can, however, export as a URL or screen capture to display an animated diagram.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4vo0hztx36fay7f0xjte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4vo0hztx36fay7f0xjte.png" alt="Image description" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6tdnl4wb1a93b28p78w9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6tdnl4wb1a93b28p78w9.png" alt="Image description" width="698" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Excalidraw.com
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpulch5fk7o5sd9yxglv0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpulch5fk7o5sd9yxglv0.png" alt="Image description" width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Interestingly, Excalidraw.com also provides a library that allows you to quickly build a similar application (&lt;a href="https://codesandbox.io/p/github/excalidraw/excalidraw/master" rel="noopener noreferrer"&gt;https://codesandbox.io/p/github/excalidraw/excalidraw/master&lt;/a&gt;), and you can try a live demo at Excalidraw Demo. The interface is very simple, focusing solely on drawing, and the output has a hand-made, artistic feel.&lt;/p&gt;

&lt;p&gt;Icon sets for major tech stacks are redesigned to match the sketch style, giving a harmonious overall look. For regular users, however, the free version has a few minor limitations, such as no support for cloud storage syncing. While it allows adding custom templates/icons, any added items are public across the entire system, making it unsuitable for projects requiring data confidentiality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloudairy.com
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdqfb9igu1bsme5g0voq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdqfb9igu1bsme5g0voq.gif" alt="Image description" width="1728" height="1026"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s no exaggeration to say that Cloudairy has greatly contributed to the trend of “animated architecture diagrams.” They share many beautifully designed technical architecture diagrams with various animation effects. The interface is very modern and easy to use, even for first-time users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43k39xskah6b4d4fl99z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43k39xskah6b4d4fl99z.png" alt="Image description" width="800" height="192"&gt;&lt;/a&gt;&lt;br&gt;
Stylish and visually impressive, reminiscent of Apple’s design style! There’s a free version available for trial, and registration doesn’t require a credit card. The Export feature is comprehensive, even allowing you to crop and export only a specific section of the drawing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2yd0qrjp9ypjd413rv3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2yd0qrjp9ypjd413rv3.png" alt="Image description" width="800" height="460"&gt;&lt;/a&gt;&lt;br&gt;
The minimap feature, similar to those in strategy games, is very useful for navigating large diagrams. Surprisingly, the free account still includes AI Gen, and it seems to understand Vietnamese—I was quite amazed!&lt;/p&gt;

&lt;h2&gt;
  
  
  IcePanel.io
&lt;/h2&gt;

&lt;p&gt;It’s a unique tool because it supports the C4 Model, a technique for describing software architecture in a clear and useful way to explain information to both non-technical and technical stakeholders in a project.&lt;/p&gt;

&lt;p&gt;C4 stands for Context, Container, Component, and Code, with each layer represented differently to suit various audiences. IcePanel offers strong linking capabilities, allowing for easy drill-down or drill-up, making it simpler to explain complex technical issues.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxnh8wj4a3tqqc3sczg6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxnh8wj4a3tqqc3sczg6.png" alt="Image description" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Markdown support allows you to document directly with objects in the diagram. It also lets you use multiple versions to show the system's development over time. The Flow-building feature is highly convenient and intuitive for illustrating how a process or data flow is managed.&lt;/p&gt;

&lt;h2&gt;
  
  
  In Summary
&lt;/h2&gt;

&lt;p&gt;While there are countless other tools—Textografo, SmartDraw, Whimsical, Lucidchart, Figma… even AWS has a list of Drawing and Diagramming Tools on their AWS architecture icons page (&lt;a href="https://aws.amazon.com/architecture/icons" rel="noopener noreferrer"&gt;https://aws.amazon.com/architecture/icons&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Looking forward to your discussions and other tool recommendations you may have experienced!&lt;/p&gt;

&lt;p&gt;Saigon, a weekend day without sun or rain&lt;/p&gt;

</description>
      <category>aws</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
