<?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: Aryan Kaushik</title>
    <description>The latest articles on DEV Community by Aryan Kaushik (@aryank21).</description>
    <link>https://dev.to/aryank21</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%2F829696%2Fb5082a5f-7f22-4969-8480-cb0432723504.jpg</url>
      <title>DEV Community: Aryan Kaushik</title>
      <link>https://dev.to/aryank21</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aryank21"/>
    <language>en</language>
    <item>
      <title>ContextCache: AI that remembers so your team doesn’t have to.</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Fri, 08 Aug 2025 15:27:38 +0000</pubDate>
      <link>https://dev.to/aryank21/contextcache-ai-that-remembers-so-your-team-doesnt-have-to-11go</link>
      <guid>https://dev.to/aryank21/contextcache-ai-that-remembers-so-your-team-doesnt-have-to-11go</guid>
      <description>&lt;p&gt;Another Day, another ridiculous idea. Another win.&lt;br&gt;
This time, at the AINATIVEHACK: SDLC Hackathon, where we asked one simple question:&lt;br&gt;
Why does no one remember WHY we made that decision?&lt;/p&gt;

&lt;p&gt;😵 The Problem, Let’s set the scene:&lt;br&gt;
You join a new product team.&lt;br&gt;
You’re looking at some deeply suspicious retry logic in the codebase.&lt;/p&gt;

&lt;p&gt;You ask, “Why was this added?”&lt;br&gt;
And then it begins…&lt;br&gt;
Slack messages get forwarded.&lt;br&gt;
Someone linked a Notion doc last edited in 2021.&lt;br&gt;
The engineer who made the decision has moved to Bali and now makes NFTs.&lt;br&gt;
Everyone shrugs and says, “Must’ve been important.”&lt;/p&gt;

&lt;p&gt;Welcome to modern software development:&lt;/p&gt;

&lt;p&gt;In a world where teams are remotely collaborating, rapidly iterating, and constantly forgetting, we realized something critical was missing:&lt;/p&gt;

&lt;p&gt;🧠 Memory.&lt;/p&gt;

&lt;p&gt;Not the RAM kind. The “why-did-we-do-this” kind.&lt;/p&gt;

&lt;p&gt;✨ The Solution: ContextCache&lt;br&gt;
Enter ContextCache — your AI-powered, passive-aggressive team memory agent.&lt;/p&gt;

&lt;p&gt;It silently listens to:&lt;br&gt;
-Slack messages (even those cursed 30-thread debates),&lt;br&gt;
-MS Teams transcriptions (yes, even the ones where Bob forgot to unmute),&lt;br&gt;
-GitHub PRs, Notion docs, and more.&lt;/p&gt;

&lt;p&gt;Then it asks itself:&lt;br&gt;
-What was the decision?&lt;br&gt;
-Why was it made?&lt;br&gt;
-Who made it?&lt;br&gt;
-Is this gonna get us sued?&lt;/p&gt;

&lt;p&gt;It then summarizes, tags, and stores that info in a vector database. So next time you ask:&lt;/p&gt;

&lt;p&gt;“Why did we choose Kubernetes over ECS?”&lt;br&gt;
It answers:&lt;br&gt;
“On April 12, DevOps Dan argued for better autoscaling support in Slack #infra. Legal Lisa also needed HIPAA compliance which ECS lacked. Karen approved the change. You’re welcome.”&lt;/p&gt;

&lt;p&gt;🛠️ How We Built It (in 8 Hours Because... Hackathon)&lt;br&gt;
Ingestion Layer&lt;br&gt;
Slack and Teams APIs pumped in conversations and transcripts.&lt;br&gt;
(Yes, some of those were us arguing about what to build.)&lt;/p&gt;

&lt;p&gt;LLM Magic via ACI.dev&lt;br&gt;
We piped chunks of conversation into custom agents on ACI.dev, which:&lt;/p&gt;

&lt;p&gt;-Extracted decisions,&lt;br&gt;
-Flagged compliance risks,&lt;br&gt;
-Gave structured JSON summaries like a nerdy robot secretary.&lt;/p&gt;

&lt;p&gt;Vector Memory Layer&lt;br&gt;
Stored in Pinecone, so we could semantically search decisions by topic, date, or confusion level.&lt;/p&gt;

&lt;p&gt;Slackbot Interface&lt;br&gt;
Ask a question like:&lt;/p&gt;

&lt;p&gt;“Why did we remove login with Google?”&lt;br&gt;
And boom — instant context.&lt;/p&gt;

&lt;p&gt;🥇 The Win&lt;br&gt;
The judges loved it. The devs wanted it.&lt;br&gt;
And the compliance folks? They nearly cried.&lt;/p&gt;

&lt;p&gt;We won as An Idea with more Potential&lt;br&gt;
And now we’re thinking — why stop here?&lt;/p&gt;

&lt;p&gt;🚀 What’s Next&lt;br&gt;
💬 VSCode plugin so devs can pull decision context without leaving their IDE.&lt;br&gt;
🛡️ Auto-flag compliance issues before audits become horror stories.&lt;br&gt;
🤝 Integrations with Notion, Jira, and whatever comes next.&lt;/p&gt;

&lt;p&gt;Our Team: Shivang, Emil, Dave, Mustafa&lt;/p&gt;

&lt;p&gt;🎉 Final Thoughts&lt;br&gt;
ContextCache wasn’t just a hackathon project. It was a love letter to every developer who’s ever whispered:&lt;/p&gt;

&lt;p&gt;“Why the hell did we do this?”&lt;br&gt;
And now, the answer won’t be:&lt;/p&gt;

&lt;p&gt;“¯_(ツ)_/¯"&lt;/p&gt;

&lt;p&gt;It’ll be:&lt;br&gt;
“Here’s the full thread, rationale, and approval notes. I got you.”&lt;/p&gt;

&lt;p&gt;Chekout the Viral Video:&lt;a href="https://www.instagram.com/reel/DND2QewtAKx/?utm_source=ig_web_button_share_sheet&amp;amp;igsh=MzRlODBiNWFlZA==" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
Checkout the Presentation:&lt;a href="https://docs.google.com/presentation/d/1P2htyyyGUhA06yTsypUhnu4mjvsj4oE_fYhmwt-eKyg/edit?usp=sharing" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>From EmpowerAI to Clueless: How a B2C Dream Became a B2B Superpower</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Tue, 05 Aug 2025 13:18:47 +0000</pubDate>
      <link>https://dev.to/aryank21/from-empowerai-to-clueless-how-a-b2c-dream-became-a-b2b-superpower-8dh</link>
      <guid>https://dev.to/aryank21/from-empowerai-to-clueless-how-a-b2c-dream-became-a-b2b-superpower-8dh</guid>
      <description>&lt;p&gt;Every breakthrough starts with a simple, stubborn question: “Why is this still so hard?”&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spark: Inspiration Strikes at YC
&lt;/h2&gt;

&lt;p&gt;EmpowerAI was born at the intersection of two worlds. It all started when I attended a YC (Y Combinator) event hosted by Tom, the co-founder of Monzo. Listening to Tom talk about building products that are the next-gen of AI Revolution, AI that could take control of the system and do your tasks. I found myself reflecting on something closer to home—my parents.&lt;/p&gt;

&lt;p&gt;Both are smart, resourceful, and independent, but they’re late adopters of technology. And every time they need to do something online—book a ticket, update a form, use a new app—they end up waiting for me to walk them through every single step. It’s not just my family. Millions of people feel left behind by tech, and I realized this isn’t a niche problem. It’s a global barrier.&lt;/p&gt;

&lt;h2&gt;
  
  
  The B2C Vision: EmpowerAI—Technology That Teaches, Not Replaces
&lt;/h2&gt;

&lt;p&gt;My initial solution? An on-screen AI guide that empowers, not automates. I imagined a tool that could highlight buttons and fields in real time, gently guiding users step by step on top of the apps they already use. It wasn’t about making things automatic—it was about building confidence and independence. I wanted people like my parents to feel empowered, not helpless.&lt;/p&gt;

&lt;p&gt;EmpowerAI’s target audience started with people like them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Older adults and late technology adopters&lt;/li&gt;
&lt;li&gt;Parents returning to the workforce&lt;/li&gt;
&lt;li&gt;Teachers and community workers navigating digital transformation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The vision was to launch a product that offered real value for individuals and families, but also had potential for partnerships with NGOs, government programs, and anyone committed to digital inclusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Research: The Need Was Bigger Than I Thought:
&lt;/h2&gt;

&lt;p&gt;Digging into the numbers and talking to users, the opportunity was massive. Over 1 billion people face digital barriers, and the global assistive tech market is worth over $30 billion, growing at a staggering 27% a year. Most importantly, almost every existing solution failed to actually teach—they either overwhelmed users or automated away the learning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hackathon Shift: Bringing EmpowerAI to Life:
&lt;/h2&gt;

&lt;p&gt;Then came the &lt;a href="https://aiengine.build/" rel="noopener noreferrer"&gt;AI Engine Hackathon in London&lt;/a&gt;. Surrounded by ambitious, creative minds, many thought it was a waste, and many liked but they had an idea they wanted to work on. So, I met a duo who wanted to work on the Dev Tools, and my other friend suggested an AI agent to prevent employee poaching. I shared the EmpowerAI idea with them and due to its virality and need, they agreed to join. The excitement was instant—everyone saw the need and the potential. The team worked around the clock, building a prototype that could turn everyday tech struggles into moments of guided success- Kudos to them.&lt;/p&gt;

&lt;p&gt;But as we started testing and talking to mentors, another insight emerged: Businesses have the exact same problem. Whether it’s onboarding customers, training employees, or supporting users, companies are constantly fighting digital friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pivot: Clueless—Visual B2B Workflows for Every Business.
&lt;/h2&gt;

&lt;p&gt;That’s how Clueless was born. We realized our technology could transform not just individual lives, but entire organizations. With Clueless, businesses can deliver real-time, visual guidance to every user, turning confusion into clarity and frustration into confidence.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User onboarding becomes intuitive&lt;/li&gt;
&lt;li&gt;Customer support becomes proactive&lt;/li&gt;
&lt;li&gt;Adoption of new features skyrockets&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What started as a tool for my parents has become a B2B superpower—helping businesses empower thousands, not just one person at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next: The Journey Continues:
&lt;/h2&gt;

&lt;p&gt;Looking back, it’s amazing how a conversation at a YC event, a problem at my parents’ kitchen table, and a hackathon with strangers could lead to something this big. The lesson? Start with real human problems, listen hard, and stay open to the pivot.&lt;/p&gt;

&lt;p&gt;Clueless now stands for every company that wants its users—and its team—to truly feel at home in the digital world. - In Progress&lt;/p&gt;

&lt;p&gt;Check out the Demo: &lt;a href="https://drive.google.com/file/d/12R-9gunMLZeoBiKVmRp61yndvWW6FLNA/view?usp=drive_link" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Viral Video: &lt;a href="https://www.instagram.com/reel/DM5JhL4Nanz/?utm_source=ig_web_copy_link&amp;amp;igsh=MzRlODBiNWFlZA==" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway: Sometimes, the most scalable B2B solutions are born from deeply personal B2C insights. When you focus on empowering people, you find game-changing opportunities everywhere.
&lt;/h2&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>My Key Takeaways From The Campus DevRel Show | Juan Pablo Flores E2</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Mon, 05 Sep 2022 17:44:36 +0000</pubDate>
      <link>https://dev.to/aryank21/my-key-takeaways-from-the-campus-devrel-show-juan-pablo-flores-e2-3m5p</link>
      <guid>https://dev.to/aryank21/my-key-takeaways-from-the-campus-devrel-show-juan-pablo-flores-e2-3m5p</guid>
      <description>&lt;p&gt;🎉Welcome to the 2nd Blog of &lt;a href="https://www.twitch.tv/githubeducation/video/967610096"&gt;The Campus DevRel Show&lt;/a&gt;&lt;br&gt;
 series where we focus on the lessons from the experience of the amazing guest DevRels.&lt;/p&gt;

&lt;p&gt;As you can read from the title, today we gonna talk about the experience of &lt;a href="https://twitter.com/juanpflores_"&gt;Juan Pablo Flores&lt;/a&gt; who is a Senior Program Manager at GitHub and has also been leading the Campus Expert Program. I am sure most of the folks who are part of GitHub’s student community already know him. He is a celebrity in the Mexican student communities for the amazing work he has done and still does for uplifting the community culture in LATAM.&lt;/p&gt;

&lt;p&gt;Before we dive more into his journey, If you are new here make sure you check out &lt;a href="https://www.devrel.page/"&gt;DevRel.Page&lt;/a&gt; and also do check out the blog on the &lt;a href="https://aryank21.hashnode.dev/my-key-takeaways-from-jon-gottfried-e1"&gt;Ist Episode&lt;/a&gt; of “The Campus DevRel Show” with Jon Gottfried. &lt;/p&gt;

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

&lt;p&gt;At the time when Juan started getting involved with tech communities, the ecosystem was very small. There were only a handful of people in the ecosystem who were “that influential”. Even a hackathon with 15–20 people was considered big, where everything was organized on a contribution basis. His journey into the tech community started in 2014 when he organized a hackathon known as “MX Hacks”. One of the biggest challenges he wanted to tackle was the interaction between the students.  He focused on building a space where students could build whatever they had in their minds, work with folks they have never met before, and of course FREE FOOD!&lt;/p&gt;

&lt;p&gt;Juan started attending community events and eventually attended a meetup for Google Developer Group for Dart, where he met a few folks and got the idea for organizing hackathons for student communities in Mexico. Juan met Jon, co-founder of Major League Hacking through a meetup. He mentions that the networks and connections he has made over the last 7 years have been the key to his and his community’s development.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Random people that you meet at random places at the right time lead to better opportunities.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When Juan started building MX hacks, he was also having conversations with Jon and Swift, the founders of Major League Hacking, about building the league in Mexico that they had in the US. He also wanted to see if the developer audience would like the idea of the hackathon in Mexico — experimenting with MX Hacks which turned out to be a success. At this point, they started organizing hackathons for governments, and corporates, having built a decent community built around it. That’s when Juan and other organizers felt they needed a bigger league for this and started the “La Liga Mexicana de Hackatones” (LMH). He also mentions that not only helped him make connections with the MLH team in the US but also with the DevRel folks in the UK.&lt;/p&gt;

&lt;p&gt;The very first thing Juan mentioned was about finding the right people to partner with while you start an organization and then sharing the same vision with them. He also talks about the process of separation, where the team that he was part of separated to focus on very different aspects of the same idea. This involved a lot of friction, the experience of which helped him develop a different perception and approach at a very young age. Juan also derives the importance of opportunities presented to the student communities for their success and growth.&lt;/p&gt;

&lt;p&gt;After working with MLH for almost 18 months, Juan had a lot of offers that he wanted to take but he couldn’t due to his delayed degree. Juan decided to go back to university to finish his degree at the same time when he was approached by his friend, who was working at an IT consultancy company, to start Inventive Hack. He went on working and managing his school at the same time, but after 2 years it was getting harder and harder for him to manage time. At that time, they were building apps for various companies and also made an app for Mexico City to solve their traffic problems. He recalls that within a week they were having conversations with the CEO of Uber Mexico and similar big startups. He and his team were just paving their way through this new journey being total beginners in their early ’20s. They ended up getting a lot of media coverage that made their firm explode leading to big partnerships. Juan also secured a summer internship at CMU, the US to work with “top-top-top” researchers in the field of human-computer interaction.&lt;/p&gt;

&lt;p&gt;Juan recalls that learning how to react to incidents had been great learning, during his MLH days. He also recalls his biggest learning through his journey — “Importance of access to opportunities”. He felt the need to bring change to the community around him and then branch out to provide the same opportunities wherever possible, which lead him to join GitHub as a community manager. He also knew that he wanted it, but at the same time, he could contribute to the role and make the existing program even better.&lt;/p&gt;

&lt;p&gt;Juan's journey into communities and his learnings&lt;br&gt;
When GitHub was launching its first-ever batch of campus experts, Joe Nash from GitHub, approached him to talk about the program wanting to know if he was interested in joining in. Juan continued his community work alongside his other ventures all along. Juan joined the program and he never felt the need to sell GitHub or force himself to do so. He had already been talking about GitHub right from his college days and he was always fascinated to see students transition from learning about GitHub to their first PR merge. He also had a deeper involvement with GitHub as he became a campus expert and then a field expert. The training in the program was very hard but at the same time, he could also pinpoint the places where the program was struggling. He later also became responsible for reviewing the training of other campus experts. He wanted to be influential in this space to make more students from Latin America and the European region to be involved in the tech space.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;What advice would you give looking back at your journey, would you give to students exploring the DevRel field as a career option?&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Work on your communication skills. - Juan&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Communicating effectively, and correctly and making sure that you can express yourself will always pay off in some way or another in the future. DevRels, CMGRs, and PMs — are all expected to write &amp;amp; communicate a lot. If you aren’t the best at it, start early! Start writing blogs, there are lots of platforms out there.&lt;/p&gt;

&lt;p&gt;Yes! Juan's journey into the tech community and the tech space is fascinating! &lt;/p&gt;

&lt;p&gt;Do you think reading this made your pathway to #DevRel a little clear? Or Is it still a little blurry?&lt;/p&gt;

&lt;p&gt;You can always check out &lt;a href="https://www.devrel.page/"&gt;DevRel.page&lt;/a&gt; to understand more about #DevRel.&lt;/p&gt;

&lt;p&gt;Watch the Highlights on &lt;a href="https://www.youtube.com/watch?v=gOadD9XlRt4&amp;amp;list=PLEB_UQyQfsMTYjPrxNX5K1iwqBa3ggRLg&amp;amp;ab_channel=DevRelPage"&gt;Youtube&lt;/a&gt; and Full Episode on &lt;a href="https://www.twitch.tv/videos/976284319?collection=AbPaglh2dRayAg"&gt;Twitch&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Follow DevRel.Page on &lt;a href="https://twitter.com/devrelpage"&gt;Twitter&lt;/a&gt; &lt;a href="https://www.instagram.com/devrelpage/"&gt;Instagram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do share your thoughts related to this blog &amp;amp; DevRel and feel free to connect with me on &lt;a href="https://twitter.com/aryankaushik21"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>beginners</category>
      <category>github</category>
      <category>career</category>
    </item>
    <item>
      <title>What is version control? Why Git &amp; GitHub are so popular?</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Wed, 31 Aug 2022 12:11:27 +0000</pubDate>
      <link>https://dev.to/aryank21/what-is-version-control-why-git-github-are-so-popular-3ed3</link>
      <guid>https://dev.to/aryank21/what-is-version-control-why-git-github-are-so-popular-3ed3</guid>
      <description>&lt;p&gt;Hi Folks, thanks for dropping by!&lt;/p&gt;

&lt;p&gt;Today, We gonna learn about Version Control, it's use cases and why git and GitHub are so popular among developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is version control?
&lt;/h2&gt;

&lt;p&gt;Version control, also known as source control, is the practice of tracking and managing changes to software code. Version control systems are software tools that help software teams manage changes to source code over time. As development environments have accelerated, version control systems help software teams work faster and smarter. They are especially useful for DevOps teams since they help them to reduce development time and increase successful deployments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PBupSUvJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658072682505/dJ33zvCgt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PBupSUvJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658072682505/dJ33zvCgt.png" alt="Version Control Examples.png" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Purpose of Version Control.
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Multiple people can work simultaneously on a single project. Everyone works on and edits their own copy of the files and it is up to them when they wish to share the changes made by them with the rest of the team.&lt;/li&gt;
&lt;li&gt;It also enables one person to use multiple computers to work on a project, so it is valuable even if you are working by yourself.&lt;/li&gt;
&lt;li&gt;It integrates the work that is done simultaneously by different members of the team. In some rare cases, when conflicting edits are made by two people to the same line of a file, then human assistance is requested by the version control system in deciding what should be done.&lt;/li&gt;
&lt;li&gt;Version control provides access to the historical versions of a project. This is insurance against computer crashes or data loss. If any mistake is made, you can easily roll back to a previous version. It is also possible to undo specific edits that too without losing the work done in the meanwhile. It can be easily known when, why, and by whom any part of a file was edited.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why VCS(Version Control System)  is important for Developers?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Enhances the project development speed by providing efficient collaboration,&lt;/li&gt;
&lt;li&gt;Leverages the productivity, expedites product delivery, and skills of the employees through better communication and assistance,&lt;/li&gt;
&lt;li&gt;Reduce possibilities of errors and conflicts meanwhile project development through traceability to every small change,&lt;/li&gt;
&lt;li&gt;Employees or contributors of the project can contribute from anywhere irrespective of the different geographical locations through this VCS.&lt;/li&gt;
&lt;li&gt;For each different contributor to the project, a different working copy is maintained and not merged to the main file unless the working copy is validated. The most popular example is Git, Helix core, Subversion, etc .&lt;/li&gt;
&lt;li&gt;Helps in recovery in case of any disaster or contingent situation.&lt;/li&gt;
&lt;li&gt;It informs us about Who, What, When, and Why changes have been made.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q8CK_3x---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658074862782/PfLO0s5jx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q8CK_3x---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658074862782/PfLO0s5jx.png" alt="image.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Branches in the version control system&lt;/p&gt;


&lt;p&gt;&lt;a href="https://giphy.com/gifs/the-mandalorian-boba-fett-dave-filoni-TdLg5H0boC8FxQcC17"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Git &amp;amp; Why it is widely used?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---vXszzx2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658079711986/E0RWxeGmi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---vXszzx2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658079711986/E0RWxeGmi.png" alt="image.png" width="348" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Git is a version control system used for tracking changes in computer files. It is generally used for source code management in software development.&lt;/p&gt;

&lt;p&gt;Git is used to track changes in the source code&lt;br&gt;
The distributed version control tool is used for source code management&lt;br&gt;
It allows multiple developers to work together&lt;br&gt;
It supports non-linear development through its thousands of parallel branches&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features of Git&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tracks history&lt;/li&gt;
&lt;li&gt;Free and open source&lt;/li&gt;
&lt;li&gt;Supports non-linear development&lt;/li&gt;
&lt;li&gt;Creates backups&lt;/li&gt;
&lt;li&gt;Scalable&lt;/li&gt;
&lt;li&gt;Supports collaboration&lt;/li&gt;
&lt;li&gt;Branching is easier&lt;/li&gt;
&lt;li&gt;Distributed development&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  The Git workflow is divided into three states:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Working directory - Modify files in your working directory&lt;/li&gt;
&lt;li&gt;Staging area (Index) - Stage the files and add snapshots of them to your staging area&lt;/li&gt;
&lt;li&gt;Git directory (Repository) - Perform a commit that stores the snapshots permanently in your Git directory. Check out any existing version, make changes, stage them and commit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Download git&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This link has details on how to install Git in multiple operating systems: &lt;a href="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git"&gt;Link&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What is Github and why it is so popular?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--by5Q8JtT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658086662226/Y5eTTA6of.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--by5Q8JtT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658086662226/Y5eTTA6of.png" alt="Untitled (1920 × 700 px) (1).png" width="800" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub is an online software development platform used for storing, tracking, and collaborating on software projects. It is a cloud-based version control system. It enables developers to upload their own code files and to collaborate with fellow developers on open-source projects. GitHub also serves as a social networking site in which developers can openly network, collaborate, and pitch their work.&lt;/p&gt;

&lt;p&gt;In simple words, Github might be considered as a social media which is made for developers where they share their work. it might be any project regarding website development or any design of a website, or some operating systems like Android, Linux, etc. &lt;/p&gt;
&lt;h3&gt;
  
  
  How To Use Git &amp;amp; Github Effectively
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Let us see how to host a local repository on Github, from the very beginning&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step 1. Configure your global username and email:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Set your username:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
git config --global user.name "FIRST_NAME LAST_NAME"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Set your email address:&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;
git config --global user.email "email@example.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Step 2. Creating your workspace
By creating a new working directory:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir gitrepo

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eYFIKqdM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088101566/WX8Ki7fkP.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eYFIKqdM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088101566/WX8Ki7fkP.png" alt="image.png" width="756" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, move into that working directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd gitrepo

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f4gwk4YL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088115352/hkfGGsbph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f4gwk4YL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088115352/hkfGGsbph.png" alt="image.png" width="800" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once inside that directory, you will need to create a sample file to demonstrate Git’s functionality. You can create an empty file with the touch command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touch file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a8YAdkNq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088142466/SGxbzQwHN.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a8YAdkNq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088142466/SGxbzQwHN.png" alt="image.png" width="735" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step 3. Initializing a Git repository in an existing directory by using the git init command.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RH1HgFNi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088171137/B0oSf_abz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RH1HgFNi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088171137/B0oSf_abz.png" alt="image.png" width="800" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Git will never track new files automatically, so git add is a necessary step when adding new content to a repository that Git has not previously tracked.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rl1yle9s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088187813/YFn0KMLJI.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rl1yle9s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088187813/YFn0KMLJI.png" alt="image.png" width="759" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You now have an actively tracked Git repository. From now on, each of the steps in this tutorial will be consistent with a regular workflow for updating and committing to an existing Git repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a commit message:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each time you commit changes to a Git repository, you’ll need to provide a commit message. Commit messages summarize the changes that you’ve made.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "first Commit" -a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gr0v0F6g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088231840/PBmhWiAVo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gr0v0F6g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088231840/PBmhWiAVo.png" alt="image.png" width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are two important parameters of the above command. The first is &lt;strong&gt;-m&lt;/strong&gt;, which signifies that your commit message (in this case “Initial Commit”) is going to follow. Secondly, the -a signifies that your commit should include all added or modified files. Git does not treat this as the default behavior, but when working with Git in the future, you may default to including all updated files in your future commits most of the time.&lt;/p&gt;

&lt;p&gt;In order to commit a single file or a few files, you could have used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "first Commit" file1 file2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Step 3. Sign up for GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b8ezOWtg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658087572889/3dEBM7vfQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b8ezOWtg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658087572889/3dEBM7vfQ.png" alt="image.png" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step 4. Create a repository on github&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TnT34UHj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088325504/nFxKjtb_a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TnT34UHj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088325504/nFxKjtb_a.png" alt="image.png" width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copy the Github Repository URL:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8aQHdrPy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088876444/3H7WbHmLF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8aQHdrPy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658088876444/3H7WbHmLF.png" alt="image.png" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In the Command prompt, add the URL for the remote repository where your local repository will be pushed.&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;// Sets the new remote
git remote add origin URL

//Verifies the new remote URL
git remote -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TaJkNyoC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658089038958/xlkcYcy3X.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TaJkNyoC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658089038958/xlkcYcy3X.png" alt="image.png" width="700" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have a remote configured, you are able to push your code. You can push code to a remote server by typing the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push --set-upstream origin master
// Only for the first time
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1yNX5_IJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658089481164/cIsJqV1PI.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1yNX5_IJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1658089481164/cIsJqV1PI.png" alt="image.png" width="579" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are many more uses of git like Inspecting &amp;amp; comparing code, Sharing &amp;amp; updating code, tracking path changes, rewriting history, etc&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://education.github.com/git-cheat-sheet-education.pdf"&gt;Check out Git Cheat Sheet at this link&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;&lt;a href="https://giphy.com/gifs/cbs-united-states-of-al-usofal-cbs-IB1yI7h963KxMyXR7L"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This Blog was about getting started with git and GitHub. Stay tuned for more amazing blogs.&lt;/p&gt;

&lt;p&gt;Do comment your thoughts and suggestions related to the blog and please share if you found it useful.&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>devops</category>
      <category>git</category>
    </item>
    <item>
      <title>My Key Takeaways From The Campus DevRel Show | Jon Gottfried E1</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Tue, 30 Aug 2022 15:03:05 +0000</pubDate>
      <link>https://dev.to/aryank21/my-key-takeaways-from-the-campus-devrel-show-jon-gottfried-e1-aei</link>
      <guid>https://dev.to/aryank21/my-key-takeaways-from-the-campus-devrel-show-jon-gottfried-e1-aei</guid>
      <description>&lt;p&gt;Heya 👋, Welcome to this Blog Series of &lt;a href="https://www.twitch.tv/githubeducation/video/967610096"&gt;The Campus DevRel Show&lt;/a&gt;, focusing on the lessons from the experience of the amazing guest DevRels.&lt;/p&gt;

&lt;p&gt;Before we get started! Let's take a moment to understand what exactly is &lt;strong&gt;DevRel&lt;/strong&gt;. &lt;br&gt;
As the name suggests, Developer Relations (or DevRel) focuses on maintaining relationships with the folks responsible for developing an organization's technology or product. Depending on the company and its goals, roles in this field can take various forms, as well as tasks. &lt;br&gt;
Communication between organizations and developers is often the responsibility of a DevRel in order to ensure a better information flow and feedback loop. This is a job for people who have a deep understanding of development, who are inherently developers, and who are able to relate to and empower developers. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DevRel functions as a bridge between the product and the community. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;By &lt;a href="https://twitter.com/AutomationPanda"&gt;Pandy Knight&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A Brief about Jon's Background
&lt;/h2&gt;

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

&lt;p&gt;&lt;a href="https://twitter.com/jonmarkgo?lang=en"&gt;Jon Gottfried&lt;/a&gt; is the co-founder of MLH, previously National Director of the StartupBus, and was formerly a Developer Evangelist at Twilio. Having grown up around computers, he has always been fascinated by them. Since graduating from history school, he found his own niche in software engineering. Research and academics were initially what attracted him to computer science, but soon he discovered that building things and writing code were his passions. Even so, he never strayed too far from the tech side, always finding a balance between the two.&lt;/p&gt;

&lt;p&gt;Community building and evangelism were something that Jon was always interested in. He grew up going to summer camp and being super involved in it and liked being involved in building communities and experiences for people. At the Music Hack Day, he met folks from a company whom he later pitched for being a part-time developer evangelist, and joined as a developer evangelist after graduating, which shaped his further understanding of the field.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I just happened to be at the right place at the right time and meet amazing people. -Jon&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jon's understanding of DevRel when he just started working for Twilio was to show up at hackathons, do a really cool demo and support developers throughout the weekend. While working there, he realized there was much more than that going in that background, and a lot of it was about figuring it out as he moved forward. As a company, their strategy was to build something that developers love, which also inspires them to use it! He did mention numbers, and that someone had to keep in mind getting “X number of users”, but he was focused on making something that would make developers super excited. A lot of things their team did involve trial and error.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Story of MLH
&lt;/h2&gt;

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

&lt;p&gt;&lt;strong&gt;About MLH:&lt;/strong&gt; It is a 500k+ global community empowering the next generation of developers to learn through hackathons and many MLH fellowships.&lt;/p&gt;

&lt;p&gt;Jon and Swift worked as developer evangelists and attended multiple events, spoke at and founded community meet-ups together in New York. Their frequent meeting places were student hackathons, which were still a growing trend at that time. The two had been working together on different projects, a few small ideas here and there, which led them to agree that they want to work together in the future. Eventually, they found co-founders before they came up with an idea for a startup. Jon had registered the domain for MLH years before they for a completely different idea and eventually agreed to form a global community hackathon community.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Learnings from this Episode:
&lt;/h2&gt;

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

&lt;p&gt;&lt;strong&gt;1. What exactly do companies look for in student communities?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Companies' goals have changed from the time they started. At first, when MLH was just getting started, most of its sponsors were Jon's personal &amp;amp; professional friends. As MLH grew it changed a lot as now they had to focus on making sure it was mutually beneficial for companies along with student communities. Sponsorships are sort of give and take relationships.&lt;/p&gt;

&lt;p&gt;Connections and relationships play a huge part in developer relations as a huge chunk of it is about creating meaningful relations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. What does Jon think is the best part about working in Developer Relations?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you do something to help someone, just as a nice thing to do, and years later they come back and you realize how impactful it has been.&lt;/p&gt;

&lt;p&gt;When you are into developer relations there are hundreds of interactions that you carry out as your day-to-day job. The interaction might be casual for a DevRel, but that for the other person can be really impactful. &lt;br&gt;
That’s one of the best parts about this job — impacting people in a positive way and being able to scale that impact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. What is Jon’s advice for undergrads getting into DevRel space?&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Start with becoming a community organizer” — Jon&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Attend conferences, organize hackathons, or volunteer under organizations that do the same, basically to gain the initial experience that you can showcase both, the community and the engineering side of things when you apply for a job. A little bit of experience in marketing — blogs, videos, and speaking helps too. When Jon worked at Twilio and his team would look for developer relations roles, they would often look for full-time engineers who did part-time community work because of their enjoyment around it. So they would approach them and basically ask them to do what they enjoyed doing, but full time!&lt;br&gt;
But now community managers and content creators from college can also be DevRel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. What exciting things companies are doing for student communities right now?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/"&gt;Dev.to&lt;/a&gt; does really cool stuff” — when it comes to folks getting started with writing about tech, Dev provides an accessible platform for doing so. Jon was personally excited about &lt;a href="https://play.battlesnake.com/"&gt;Battlesnake&lt;/a&gt; and its unique way of exercising creativity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Jon’s takeaway for DevRel metrics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;According to Jon, DevRels may not struggles to measure success or struggles to determine what their success metrics are.&lt;/p&gt;

&lt;p&gt;Here, he means is that DevRel teams have so many metrics, but fail to agree on which metric is more important for measuring their success. Which category DevRel fits into is still a very debatable question. Most would say that it depends on the company and its goals, and which team you fit in, helps in determining what your success metric will be.&lt;/p&gt;

&lt;p&gt;The companies that have been most successful have had a mix of beliefs in the strategy and metrics. One has to be willing to take creative risks while proving that they’re doing something valuable because otherwise, it’s hard to justify spending money on the team.&lt;/p&gt;

&lt;p&gt;That was literally a lot of info to get started. Make sure you take your own time to understand every piece of information to pave your path toward becoming a DevRel. &lt;/p&gt;

&lt;p&gt;This is just the beginning of this Series. We've many more blogs coming up with a lot more different experiences.&lt;/p&gt;

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

&lt;p&gt;Do you think reading this made your pathway to #DevRel a little clear? Or Is it still a little blurry?&lt;/p&gt;

&lt;p&gt;You can always check out &lt;a href="https://www.devrel.page/"&gt;DevRel.page&lt;/a&gt; to understand more about #DevRel.&lt;/p&gt;

&lt;p&gt;Watch the Highlights on &lt;a href="https://www.youtube.com/watch?v=n7SKUwV8pdA&amp;amp;list=PLEB_UQyQfsMREQt97uMYbhTHqBBcqQPCX&amp;amp;ab_channel=DevRelPage"&gt;Youtube&lt;/a&gt; and Full Episode on &lt;a href="https://www.twitch.tv/githubeducation/video/967610096"&gt;Twitch&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Follow us on &lt;a href="https://twitter.com/devrelpage"&gt;Twitter&lt;/a&gt; &lt;a href="https://www.instagram.com/devrelpage/"&gt;Instagram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do share your thoughts related to this blog &amp;amp; DevRel and feel free to connect with me on &lt;a href="https://twitter.com/aryankaushik21"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>opensource</category>
      <category>mlhgrad</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>Cryptle - Wordle clone for Enarx</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Wed, 08 Jun 2022 17:09:54 +0000</pubDate>
      <link>https://dev.to/aryank21/cryptle-wordle-clone-for-enarx-bdf</link>
      <guid>https://dev.to/aryank21/cryptle-wordle-clone-for-enarx-bdf</guid>
      <description>&lt;p&gt;Hi Folks, Welcome to another exciting Blog.&lt;/p&gt;

&lt;p&gt;In the previous blog, we learned about "The Enarx Project" an open-source framework for running applications in TEEs (Trusted Execution Environments) using WebAssemby. It is the part of Confidential Computing Consortium from the Linux Foundation. But today we'll try hands on Enarx application using Cryptle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enarx in brief
&lt;/h3&gt;

&lt;p&gt;Enarx aims to minimize the trust relationships required when executing applications, meaning that the only components which need to be trusted are: the CPU and associated firmware, the workload itself, and the Enarx middleware, which is fully open source and auditable. Applications run without any of the layers in the stack (e.g. hypervisor, kernel, user-space) being able to look into or alter the Keep or its contents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tOWCI_qN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/zlfqf1x7kxmud27aotiq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tOWCI_qN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/zlfqf1x7kxmud27aotiq.png" alt="Image description" width="800" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today, we will deep dive into Cryptle - a &lt;a href="https://www.nytimes.com/games/wordle/index.html"&gt;Wordle&lt;/a&gt; clone for Enarx. The Cryptle game is developed using Rust on the server-side and JavaScript on the client-side. It can either be run on wasmtime which is not secure or on Enarx a trusted secure platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wordle
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DCIhy1Ky--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/njk4v2z8d0ssd8927xix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DCIhy1Ky--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/njk4v2z8d0ssd8927xix.png" alt="Wordle" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In Addition Cryptle has a multiplayer support&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Steps to run Cryptle on your Machine
&lt;/h3&gt;

&lt;p&gt;1) Install Rust&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain nightly -y

source $HOME/.cargo/env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Install Enarx&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/enarx/enarx
cd enarx/
cargo build


cargo install --bin enarx --path ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) Clone and Run Cryptle&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/enarx/cryptle.git
cd cryptle/
cd Rust/

CARGO_TARGET_WASM32_WASI_RUNNER="wasmtime run --tcplisten 127.0.0.1:8443 --env FD_COUNT=1"  cargo +nightly run --target wasm32-wasi

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

&lt;/div&gt;



&lt;p&gt;Server is running on &lt;code&gt;http://127.0.0.1:8443.&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Cryptle
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OjRuGtAz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/ezt2k9tvrc28k42gq5ec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OjRuGtAz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/ezt2k9tvrc28k42gq5ec.png" alt="Cryptle" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal of Cryptle is to demonstrate data encryption in use, where the processing of the data is done in a Trusted Execution Environment (TEE), and only accessible to the Cryptle application.&lt;/p&gt;

&lt;p&gt;The Single Player mode is similar to Wordle. A player has to guess a five-letter secret word (selected by the application), with yellow/green colored titles shown as hints in each round, indicating letters that match with the secret word.&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;Multi Player mode&lt;/strong&gt;, the secret word is not selected by the application itself, but instead is (or rather are) suggested by the players themselves. Each player proposes words that are most likely to match those sent by others. The words are sent to the Cryptle application running in an Enarx Keep (a specific TEE instance) and are only revealed to the players when there’s a match between the secret words. &lt;br&gt;
Standard engagement with the game involves playing Cryptle from the client-side and guessing the secret words. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FIv4k2Bb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/ohusr5ksywgpggvknps7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FIv4k2Bb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/ohusr5ksywgpggvknps7.png" alt="Cryptle Hack Challenge" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Cryptle Hack Challenge
&lt;/h3&gt;

&lt;p&gt;Alternatively, players may also write their own application that run on the host side and attempts to deduce or otherwise guess the secret words. Implementers have the option to choose a mechanism, but the application must be publicly available (under an OSI license) on GitHub or GitLab. Any programming language may be used, but it should not be intentionally obscured. All root privileges should be granted to the application. It should be documented how the application can derive the secret words or guess them. Applications will be executed as ELF binaries on a host running a modern Linux kernel. There will be no physical access allowed to the host.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yxqnscBJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/43o1xfjgw8nw400cyhxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yxqnscBJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/43o1xfjgw8nw400cyhxt.png" alt="Hack Challenge" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Profian CTO- Mr. Nathaniel McCallum announcing The Cryptle Hack Challenge at &lt;a href="https://www.youtube.com/watch?v=353mpfL8r3s&amp;amp;list=PLj6h78yzYM2Ni0u-ONljTkv4uOutyjwq9&amp;amp;index=8&amp;amp;t=1023s"&gt;CloudNativecon'22.&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can still win prizes if you can hack Cryptle and report it to the team. Reach us out via our &lt;a href="https://chat.enarx.dev/"&gt;Chat&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;References:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/enarx/cryptle"&gt;https://github.com/enarx/cryptle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.wasm.builders/nick/cryptle-a-secure-multi-party-wordle-clone-with-enarx-3cg9"&gt;https://www.wasm.builders/nick/cryptle-a-secure-multi-party-wordle-clone-with-enarx-3cg9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nytimes.com/games/wordle/index.html"&gt;https://www.nytimes.com/games/wordle/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enarx/enarx"&gt;https://github.com/enarx/enarx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://enarx.dev/"&gt;https://enarx.dev/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=353mpfL8r3s&amp;amp;list=PLj6h78yzYM2Ni0u-ONljTkv4uOutyjwq9&amp;amp;index=8&amp;amp;t=1023s"&gt;https://www.youtube.com/watch?v=353mpfL8r3s&amp;amp;list=PLj6h78yzYM2Ni0u-ONljTkv4uOutyjwq9&amp;amp;index=8&amp;amp;t=1023s&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do comment your ideas and suggestions related to the blog and please share if you found it useful.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>opensource</category>
      <category>rust</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Building Tic Tac Toe Game in Cpp using Wasm</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Thu, 05 May 2022 22:59:31 +0000</pubDate>
      <link>https://dev.to/aryank21/building-tic-tac-toe-game-in-cpp-using-wasm-43eo</link>
      <guid>https://dev.to/aryank21/building-tic-tac-toe-game-in-cpp-using-wasm-43eo</guid>
      <description>&lt;p&gt;Hi Folks, Welcome to another fanatstic blog where we will build a Tic tac toe game in Cpp using WebAssembly and will run it on browser.&lt;/p&gt;

&lt;p&gt;So lets get started.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Install Emscripten
&lt;/h4&gt;

&lt;p&gt;Enscrypten directly converts your C/C++ code to JavaScript which means you don’t even need to write any glue code for reading your .wasm file. This gives you enough flexibility to solely focus on the logic rather than implementation.&lt;br&gt;
Secondly, it is very intuitive in terms of calling functions written in your C++ file to your JS file. You will see this once we dive into the code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Get the emsdk repo
git clone https://github.com/emscripten-core/emsdk.git

# Enter that directory
cd emsdk

Fetch the latest version of the emsdk (not needed the first time you clone)
git pull

# Download and install the latest SDK tools.
./emsdk install latest

# Make the "latest" SDK "active" for the current user. (writes .emscripten file)
./emsdk activate latest

# Activate PATH and other environment variables in the current terminal
source ./emsdk_env.sh

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

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Write the Logic for tic tac toe
&lt;/h4&gt;

&lt;p&gt;We will be building a 3×3 tic-tac-toe game. Our game logic includes:&lt;/p&gt;

&lt;p&gt;a. Computing which player has won&lt;br&gt;
b. Calculating if there is no winner&lt;br&gt;
c. Indicating pending moves&lt;/p&gt;

&lt;p&gt;Here is the program:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;emscripten/bind.h&amp;gt;
#include &amp;lt;emscripten/val.h&amp;gt;


using namespace emscripten;

val tic_tac_toe() {
    val board_values = val::global("BoardValues");
    val moves_pending_label = val::global("movesPendingLabel");
    val no_winner_label = val::global("noWinnerLabel");
    val empty_block = val::global("emptyBlock");
    bool moves_pending = false;

    val solutions[8][3]= {
        { board_values[0][0], board_values[0][1], board_values[0][2]},
        { board_values[1][0], board_values[1][1], board_values[1][2]},
        { board_values[2][0], board_values[2][1], board_values[2][2]},
        { board_values[0][0], board_values[1][0], board_values[2][0]},
        { board_values[0][1], board_values[1][1], board_values[2][1]},
        { board_values[0][2], board_values[1][2], board_values[2][2]},
        { board_values[0][0], board_values[1][1], board_values[2][2]},
        { board_values[0][2], board_values[1][1], board_values[2][0]},
    };

    for ( int i = 0; i &amp;lt; 8; i++ ){
        if((solutions[i][0] != empty_block) &amp;amp;&amp;amp; (solutions[i][1] != empty_block) &amp;amp;&amp;amp; (solutions[i][2] != empty_block)&amp;amp;&amp;amp; (solutions[i][0] == solutions[i][1]) &amp;amp;&amp;amp; ( solutions[i][1] == solutions[i][2] )) {
            return solutions[i][1];
        } else if((solutions[i][0] == empty_block) || (solutions[i][1] == empty_block) || (solutions[i][2] == empty_block)){
            moves_pending = true;
        }
   }

   if (moves_pending) {
       return moves_pending_label;
   }

    return no_winner_label;


}

EMSCRIPTEN_BINDINGS(my_module) {
    function("tic_tac_toe", &amp;amp;tic_tac_toe);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Build command for converting C++ files to .wasm &amp;amp; .js files
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;emcc --bind -o tic_tac_toe.js tic_tac_toe.cpp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now a index.html, tic_tac_toe.js &amp;amp; tic_tac_toe.wasm file will be genereated&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IsUr1QYc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/t854814j1w19x8qrj6ha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IsUr1QYc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/t854814j1w19x8qrj6ha.png" alt="wasm" width="706" height="99"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remember our tic_tac_toe() C++ function which was exposed by Embind, that is now available on the Emscripten module object.&lt;/p&gt;

&lt;p&gt;However, we can only call our tic_tac_toe() once it’s fully loaded i.e, it’s runtime(.js glue code and .wasm file) is initialized. For this, we use onRuntimeInitialized callback which will run when the runtime is ready.&lt;/p&gt;

&lt;p&gt;Now whenever any player clicks on any cell we call our C++ function as Module.tic_tac_toe() which will return the appropriate results.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Install Live Server to deploy &amp;amp; view your changes
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g live-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  5. Open the project
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m http.server 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Go to browser and type in localhost:8080 or &lt;a href="http://127.0.0.1:8080/"&gt;http://127.0.0.1:8080/&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZHGQjUZ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/k9yo4w9qel1n1tdb1476.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZHGQjUZ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/k9yo4w9qel1n1tdb1476.png" alt="localhost" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hence our the game is ready to play on the browser. Two players can play it together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0uxkvu62--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/u3gkja042hpufccz8otl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0uxkvu62--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/u3gkja042hpufccz8otl.png" alt="final" width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;WebAssembly is truly remarkable and has indeed allowed us to do things that were previously impossible. This game can be your first step to work with wasm. &lt;/p&gt;

&lt;p&gt;Do check our previously created projects: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/aryank21/video-to-gif-convertor-using-wasm-4c41"&gt;Video to gif convertor using Wasm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/aryank21/image-recognition-app-using-golang-tensorflow-wasmedge-dapr-docker-4h78"&gt;Image Recognition App using GoLang | Tensorflow | WasmEdge | Dapr | Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;References:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://emscripten.org/"&gt;https://emscripten.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/arwalokhandwala/tictactoe-game-wasm"&gt;https://github.com/arwalokhandwala/tictactoe-game-wasm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Canop/wasm-tictactoe"&gt;https://github.com/Canop/wasm-tictactoe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dystroy/an-exploration-or-rust-wasm50gpgame-blazor-webassembly"&gt;https://dev.to/dystroy/an-exploration-or-rust-wasm50gpgame-blazor-webassembly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.logrocket.com/first-game-in-webassembly/"&gt;https://blog.logrocket.com/first-game-in-webassembly/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tapio/live-server#readme"&gt;https://github.com/tapio/live-server#readme&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do comment your ideas and suggestions related to the blog and please share if you found it useful.&lt;br&gt;
Write your queries in comment section, we'll help you to resolve your errors.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>gamedev</category>
      <category>webassembly</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Video to gif converter using Wasm</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Wed, 04 May 2022 22:08:05 +0000</pubDate>
      <link>https://dev.to/aryank21/video-to-gif-convertor-using-wasm-4c41</link>
      <guid>https://dev.to/aryank21/video-to-gif-convertor-using-wasm-4c41</guid>
      <description>&lt;p&gt;Welcome to the another Blog.&lt;br&gt;
This one is going to be Super exciting!&lt;/p&gt;

&lt;p&gt;Today, we're going to create &lt;strong&gt;Video to .gif convertor&lt;/strong&gt; using &lt;strong&gt;wasm&lt;/strong&gt;.&lt;br&gt;
This could be used as your wasm projects or a mini project.&lt;/p&gt;

&lt;p&gt;WebAssembly has made things so easy as traditionally we use to upload our apps to cloud server, where the server was working at the back end. But wasm allow us to perform CPU intensive jobs directly on our browser.&lt;/p&gt;

&lt;p&gt;Here, we will use &lt;a href="https://ffmpeg.org/"&gt;FFmpeg&lt;/a&gt; library(written in c language) to convert a video to gif. We will download wasm binary for ffmpeg directly into a react app which can enable us to offload the video editing work into our system directly through the browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_V7h7dUC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/le9ry34idhw5db2bx588.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_V7h7dUC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/le9ry34idhw5db2bx588.png" alt="gif Workflow" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, Lets get Started.&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Creating a Directory
&lt;/h4&gt;

&lt;p&gt;a. Create a new directory &lt;code&gt;wasm-gif&lt;/code&gt;.&lt;br&gt;
b. Move into the directory &lt;code&gt;cd wasm-gif/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jBx9yyG1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/ikdm8aqc7gkpcvqm2x2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jBx9yyG1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/ikdm8aqc7gkpcvqm2x2k.png" alt="1" width="433" height="118"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Generating a new react app using snowpack:
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-snowpack-app gifmakr --template @snowpack/app-template-react

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

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--owauaiV5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/rfnpe9zq08f6ivhe6r0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--owauaiV5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/rfnpe9zq08f6ivhe6r0y.png" alt="2" width="800" height="52"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4Ww-Pv77--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/7xkn16lhvfv39b5nlddp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Ww-Pv77--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/7xkn16lhvfv39b5nlddp.png" alt="3" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will automatically fetch files for the react app.&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Install FFmpeg
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @ffmpeg/ffmpeg @ffmpeg/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---zdeorjh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/6w5bd55qj5obhu197euf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---zdeorjh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/6w5bd55qj5obhu197euf.png" alt="4" width="584" height="173"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  4. Run the App
&lt;/h4&gt;


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

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yh1pAr-D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/7nk8b6ame2aed8xpy39x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yh1pAr-D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/7nk8b6ame2aed8xpy39x.png" alt="5" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fCyCIzbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/5u8yu761jd0bevpcr2a9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fCyCIzbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/5u8yu761jd0bevpcr2a9.png" alt="6" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This command will let the default react app run in the browser.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If we check the Sources tab in elements/developer tools of the Browser, we can see the code converted into WebAssembly Text.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0RV_VQL4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/l5afhrbl0o6eshhz0xgr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0RV_VQL4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/l5afhrbl0o6eshhz0xgr.png" alt="WebAssembly Text" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  5. Writing the react code.
&lt;/h4&gt;

&lt;p&gt;a. Go to src/ and open App.jsx and remove the boilerplate.&lt;br&gt;
b. Add&lt;/p&gt;

&lt;p&gt;(i) working with this library we'll set the log option to true so we can see everything that it does directly in the console now it's important to understand at this point that the actual webassembly binary has not been bundled in our application it's a pretty large file so we don't want it to block our web application right away.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg';
const ffmpeg = createFFmpeg({ log: true });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3LPbNWGq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/6wxy9b38d5mmfy7nc8oa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3LPbNWGq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/6wxy9b38d5mmfy7nc8oa.png" alt="7" width="620" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(ii) To keep track of the loading state we'll go ahead and add a stateful property here called ready with the use state hook it has a default value of false and then we'll create an async function here called load that can flip it to true after the binary has been loaded.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function App() {
  const [ready, setReady] = useState(false);

  const load = async () =&amp;gt; {
    await ffmpeg.load();
    setReady(true);
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OyeQR0ff--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/yaerqfypeybk1et6ztck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OyeQR0ff--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/yaerqfypeybk1et6ztck.png" alt="8" width="657" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(iii) Now we just need a place to call this function in react, So we can do that with the use effect hook to run this function when the component is first initialized use effect takes a function as its argument then notice how i'm adding an empty array as the second argument this will ensure that the function is only called once when the component is first initialized or mounted then inside the effect we can simply call our load function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; useEffect(() =&amp;gt; {
    load();
  }, [])


  return ready ? () : ( &amp;lt;p&amp;gt; Loading...&amp;lt;/p&amp;gt; );
}

export default App;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  6. Loading the Video file into the application
&lt;/h4&gt;

&lt;p&gt;a. The first step is to add additional state to the component in this case a video file which will initially start undefined in the html we can add an input element with a type of file when this input changes we'll run an event handler that will set the video state and it gets the actual file from the event the event emits a file list and then we use item 0(FILE Object) to select the first file from that list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function App() {
  const [ready, setReady] = useState(false);
  const [video, setVideo] = useState();
  const [gif, setGif] = useState();

  const load = async () =&amp;gt; {
    await ffmpeg.load();
    setReady(true);
  }

  useEffect(() =&amp;gt; {
    load();
  }, [])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;b. Now that we have access to a video file we want to display it in an html video element we'll use a logical and operator to only show the video when the video file is defined the element has controls a width of 250 but a tricky thing here is that we can't just pass the raw file to the source attribute we need to convert it to a url that the&lt;br&gt;
browser can fetch therefore assign a file to the URL.&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;div className="App"&amp;gt;
      { video &amp;amp;&amp;amp; &amp;lt;video
        controls
        width="250"
        src={URL.createObjectURL(video)}&amp;gt;

      &amp;lt;/video&amp;gt;}


      &amp;lt;input type="file" onChange={(e) =&amp;gt; setVideo(e.target.files?.item(0))} /&amp;gt;

      &amp;lt;h3&amp;gt;Result&amp;lt;/h3&amp;gt;

      &amp;lt;button onClick={convertToGif}&amp;gt;Convert&amp;lt;/button&amp;gt;

      { gif &amp;amp;&amp;amp; &amp;lt;img src={gif} width="250" /&amp;gt;}

    &amp;lt;/div&amp;gt;
  )
    :
    (
      &amp;lt;p&amp;gt;Loading...&amp;lt;/p&amp;gt;
    );
}

export default App;

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tffEOObE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/n0hx9hkutmyhnspdkfu8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tffEOObE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/n0hx9hkutmyhnspdkfu8.png" alt="Image description" width="727" height="1010"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;c. Now, we'll do here is add one more piece of state to the component called gif and it will be used to hold the end result which is a url of an image file from there we'll create a function called convert to gif which the user can run when they're ready to make the conversion now one thing to understand here is that webassembly is managing its own&lt;br&gt;
in-memory file system and in order to run ffmpeg on that file we need to make it known to that file system we can do that by calling fs or filesystem along with the write file method along with the name of the fileand then we fetch the actual video file that we've collected from the end user what we've done is taken the video file and saved it to a place in memory as test.mp4 it can be now accessed by webassembly while it's in memory and it only stays in memory until the browser is refreshed from there we can run an actual ffmpeg&lt;br&gt;
command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, { useState, useEffect } from 'react';
import './App.css';

import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg';
const ffmpeg = createFFmpeg({ log: true });

function App() {
  const [ready, setReady] = useState(false);
  const [video, setVideo] = useState();
  const [gif, setGif] = useState();

  const load = async () =&amp;gt; {
    await ffmpeg.load();
    setReady(true);
  }

  useEffect(() =&amp;gt; {
    load();
  }, [])

  const convertToGif = async () =&amp;gt; {
    // Write the file to memory 
    ffmpeg.FS('writeFile', 'test.mp4', await fetchFile(video));

    // Run the FFMpeg command
    await ffmpeg.run('-i', 'test.mp4', '-t', '2.5', '-ss', '2.0', '-f', 'gif', 'out.gif');

    // Read the result
    const data = ffmpeg.FS('readFile', 'out.gif');

    // Create a URL
    const url = URL.createObjectURL(new Blob([data.buffer], { type: 'image/gif' }));
    setGif(url)
  }

  return ready ? (

    &amp;lt;div className="App"&amp;gt;
      { video &amp;amp;&amp;amp; &amp;lt;video
        controls
        width="250"
        src={URL.createObjectURL(video)}&amp;gt;

      &amp;lt;/video&amp;gt;}


      &amp;lt;input type="file" onChange={(e) =&amp;gt; setVideo(e.target.files?.item(0))} /&amp;gt;

      &amp;lt;h3&amp;gt;Result&amp;lt;/h3&amp;gt;

      &amp;lt;button onClick={convertToGif}&amp;gt;Convert&amp;lt;/button&amp;gt;

      { gif &amp;amp;&amp;amp; &amp;lt;img src={gif} width="250" /&amp;gt;}

    &amp;lt;/div&amp;gt;
  )
    :
    (
      &amp;lt;p&amp;gt;Loading...&amp;lt;/p&amp;gt;
    );
}

export default App;

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ThWvE30r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/0pqf0m07otlsod2hxupq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ThWvE30r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/0pqf0m07otlsod2hxupq.png" alt="Finally" width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, now we be able to open up your demo select a video file then when you click the convert button it uses webassembly to convert that file to an animated gif and it should log the entire process here in the console you could then take this file and upload it to giphy or use it on twitter or whatever you want and that's how easy it is to start incorporating webassembly into your web applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a929eDgs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/35enxbc7gqgsgnruqih6.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a929eDgs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/35enxbc7gqgsgnruqih6.jpeg" alt="memme" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We Can also use CSS to make this app more interactive and beautiful.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: This application will only work on the browsers which support SharedArrayBuffer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Try to install previous version of browsers if you are unable to build this app. &lt;/p&gt;

&lt;p&gt;Reference:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://ffmpeg.org/documentation.html"&gt;https://ffmpeg.org/documentation.html&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fireship-io/react-wasm-gif-maker/"&gt;https://github.com/fireship-io/react-wasm-gif-maker/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codeburst.io/getting-started-with-react-and-webassembly-using-hooks-441818c91608"&gt;https://codeburst.io/getting-started-with-react-and-webassembly-using-hooks-441818c91608&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@anksaiki/using-web-assembly-in-a-react-app-8b59e5e9f5aa"&gt;https://medium.com/@anksaiki/using-web-assembly-in-a-react-app-8b59e5e9f5aa&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do comment your ideas and suggestions related to the blog and please share if you found it useful.&lt;br&gt;
Write your queries in comment section, we'll help you to resolve your errors.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webassembly</category>
      <category>discuss</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Image Recognition App using GoLang | Tensorflow | WasmEdge | Dapr | Docker</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Tue, 03 May 2022 06:25:23 +0000</pubDate>
      <link>https://dev.to/aryank21/image-recognition-app-using-golang-tensorflow-wasmedge-dapr-docker-4h78</link>
      <guid>https://dev.to/aryank21/image-recognition-app-using-golang-tensorflow-wasmedge-dapr-docker-4h78</guid>
      <description>&lt;p&gt;Hi Folks, welcome to another super interesting blog featuring another cool WebAssembly application.&lt;/p&gt;

&lt;p&gt;It is an Image Recognition Application made using Go Language, works on a &lt;a href="(https://www.tensorflow.org/)"&gt;Tensorflow&lt;/a&gt; model and it requires &lt;a href="https://docs.dapr.io/"&gt;Dapr&lt;/a&gt; and &lt;a href="https://wasmedge.org/"&gt;WasmEdge runtime&lt;/a&gt; for execution.&lt;/p&gt;

&lt;h4&gt;
  
  
  Small brief about these technologies:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;In order to build microservices, Dapr is a versatile framework. Containers are required to initialise Dapr, here we are using Docker.&lt;/li&gt;
&lt;li&gt;A WebAssembly VM, like WasmEdge, provides a secure and high-performance runtime for microservices.&lt;/li&gt;
&lt;li&gt;WebAssembly-based microservices can be written in a number of programming languages, including Rust, C/C++, Swift, and JavaScript.&lt;/li&gt;
&lt;li&gt;WebAssembly programs are embedded into Dapr sidecar applications and are therefore portable and agnostic to Dapr host environments.&lt;/li&gt;
&lt;li&gt;A WasmEdge SDK makes it easy to create Tensorflow inference microservices.&lt;/li&gt;
&lt;li&gt;WasmEdge is a Kubernetes compatible runtime and could play an important role as a lightweight container alternative to run microservices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Let's get started:
&lt;/h4&gt;

&lt;p&gt;1) We need to install Go, Docker, Dapr, WasmEdge.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt  install golang-go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;WasmEdge
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ts_S-D4Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/2kaoejydqntawuhyx524.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ts_S-D4Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/2kaoejydqntawuhyx524.png" alt="2" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get remove docker docker-engine docker.io containerd runc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Dapr
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ACOTBMuG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/xop3w8yxjeth4knqo8v8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ACOTBMuG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/xop3w8yxjeth4knqo8v8.png" alt="3" width="800" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3aSWW8p0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/27tmoyek4e7muvxghoei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3aSWW8p0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/27tmoyek4e7muvxghoei.png" alt="4" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initialise Dapr
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dapr init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uxC4b81_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/2jtvimiiq2cyrkngy26t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uxC4b81_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/2jtvimiiq2cyrkngy26t.png" alt="5" width="800" height="191"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check your Docker to verify
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QkVONqLD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/gtusec9dpzm00ajfo980.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QkVONqLD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/gtusec9dpzm00ajfo980.png" alt="6" width="800" height="46"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2) Make a directory, for me its &lt;code&gt;imgpro_wasm&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;mkdir imgpro_wasm
cd imgpro_wasm/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dMZIWN9n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/hetlhvz6dwxt3f4gpuej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dMZIWN9n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/hetlhvz6dwxt3f4gpuej.png" alt="1" width="396" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3) Clone this git repo created by &lt;a href="https://www.secondstate.io/"&gt;Second Stage&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;git clone https://github.com/second-state/dapr-wasm.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s2P_jxUa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/e14pijxvsyykragkhn72.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s2P_jxUa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/e14pijxvsyykragkhn72.png" alt="7" width="800" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4) Go to fuctions/classify and build the classify function&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd functions/classify
 ./build.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9R4QScqY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/xqrj6oh69y5h3y2z342s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9R4QScqY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/xqrj6oh69y5h3y2z342s.png" alt="9" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5) Start Web Service for User GUI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd web-port
go build
./run_web.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--smwHy-XM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/ixe8sgp9rk45c689catk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--smwHy-XM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/ixe8sgp9rk45c689catk.png" alt="10" width="742" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6) Build and start the microservice for tensorflow-based image classification:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd image-api-go
go build --tags "tensorflow image"
./run_api_go.sh
cd ../
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EXYivx-X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/1m750w7gt9cyy3nqjeik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EXYivx-X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/1m750w7gt9cyy3nqjeik.png" alt="11" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7) The App is ready to Work&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your default browser and go to:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8080/static/home.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KigB8M3m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/nkyc1jvfiwsu1qh8a7r6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KigB8M3m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/nkyc1jvfiwsu1qh8a7r6.png" alt="11" width="800" height="678"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Hence the model will detech the objects in the images that will be uploaded to the application.
&lt;/h4&gt;

&lt;p&gt;Wasm is an opportunity make more efficient, powerful, fast applications. Daily alot of Contributors are making a really good progress. Let's make much more interesting and cool applications using WebAssembly to make it more fun!&lt;/p&gt;

&lt;p&gt;This ML model was created by Second State team. Do check their cool developments on their &lt;a href="https://github.com/second-state"&gt;github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;References:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://wasmedge.org/book/en/start/install.html"&gt;https://wasmedge.org/book/en/start/install.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.dapr.io/"&gt;https://docs.dapr.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/second-state/dapr-wasm"&gt;https://github.com/second-state/dapr-wasm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.infoq.com/articles/webassembly-dapr-wasmedge/"&gt;https://www.infoq.com/articles/webassembly-dapr-wasmedge/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04"&gt;https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do comment your thoughts and suggestions related to the blog and please share if you found it useful.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>beginners</category>
      <category>machinelearning</category>
      <category>webassembly</category>
    </item>
    <item>
      <title>Enarx: The future of Trusted Execution Environment Frameworks</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Sun, 01 May 2022 22:58:11 +0000</pubDate>
      <link>https://dev.to/aryank21/enarx-the-future-of-trusted-execution-environment-frameworks-20ok</link>
      <guid>https://dev.to/aryank21/enarx-the-future-of-trusted-execution-environment-frameworks-20ok</guid>
      <description>&lt;p&gt;Hi Folks, Welcome to an another blog where we will learn about a leading Open Source Framework used for executing applications in TEEs (Trusted Execution Environments). It's part of the CCC(Confidential Computing Consortium) from the Linux Foundation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n_M0ul5t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/nle3moh16h6gwlqr0cjx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n_M0ul5t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/nle3moh16h6gwlqr0cjx.png" alt="CCC" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;br&gt;
Organizations from different sectors move their computing workloads across multiple environments, from on-premises to public cloud to Edge, they require greater assurances that their sensitive code and data are protected. This is especially true for sectors like banking &amp;amp; finance, government &amp;amp; public sector, telecommunications, Internet of Things, healthcare, customer data sensitive enterprise functions, defence, and human rights.&lt;/p&gt;

&lt;p&gt;There are three states in which data can be protected: at rest, in transit, and in use. Encrypting data at rest and in transit have become a common practice in cloud computing, while encrypting data in use (the core idea behind Confidential Computing) is still an emerging concern:&lt;/p&gt;

&lt;p&gt;a. Data at rest includes files, objects, and storage.&lt;/p&gt;

&lt;p&gt;b. Data in transit includes data that is moving from one location to another such as across the Internet or a private network.&lt;/p&gt;

&lt;p&gt;c. Data in use is data that is being processed in the CPU or memory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LO9IN0rC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/dtw7nivfsu16qk5235hn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LO9IN0rC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/dtw7nivfsu16qk5235hn.png" alt="TEE" width="225" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trusted Execution Environments (TEEs) provide a hardware-based solution to this need to maintain data confidentiality and integrity in use, regardless of who might own or have access to the host system on which the application is running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x6QVirpF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/ajriye1dibusx6omeibk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x6QVirpF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/ajriye1dibusx6omeibk.png" alt="Image description" width="272" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enarx&lt;/strong&gt; aims to minimize the trust relationships required when executing applications, meaning that the only components which need to be trusted are: the CPU and associated firmware, the workload itself, and the Enarx middleware, which is fully open source and auditable. Applications run without any of the layers in the stack (e.g. hypervisor, kernel, user-space) being able to look into or alter the Keep or its contents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kf7mcBiH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/m04c84toekdxaiqawo15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kf7mcBiH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/m04c84toekdxaiqawo15.png" alt="Enarx" width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is CPU-architecture independent, enabling the same application code to be deployed across multiple targets, abstracting issues such as cross-compilation and differing attestation mechanisms between hardware vendors.&lt;/p&gt;

&lt;p&gt;Provides attestation, packaging and provisioning of the application to take place in a way which is transparent to the user. Every instance of an application goes through three steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Attestation: Enarx checks that the host to which you’re planning to deploy is a genuine TEE instance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Packaging: Once the attestation is complete and the TEE instance verified, the Enarx management component encrypts the application, along with any required data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provisioning: Enarx then sends the application and data along to the host for execution in the Enarx Keep.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lets try it:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Install Rust
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y

# set path variable
$ source $HOME/.cargo/env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Install WebAssembly Rust toolchain
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ rustup target install wasm32-wasi
$ cd~/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Install Enarx from Github:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git clone https://github.com/enarx/enarx
$ cd enarx/
$ cargo build

$ cargo install --bin enarx --path ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;so now Enarx is installed in your system and it's globally accessible everywhere in the system.&lt;/p&gt;

&lt;p&gt;Since Enarx supports binary files for so to convert that we'll Build and run a WebAssembly module.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Create a simple Rust program
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cargo init --bin hello-world
$ cd hello-world
$ echo 'fn main() { println!("Hello, Enarx!"); }' &amp;gt; src/main.rs
$ cargo build --release --target=wasm32-wasi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can now run the WebAssembly program in an Enarx keep.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ enarx run target/wasm32-wasi/release/hello-world.wasm
[…]
Hello, Enarx!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Latest Version of Enarx is &lt;a href="https://blog.enarx.dev/enarx-0-4-0-fort-dhat-al-hajj/"&gt;Enarx 0.4.0&lt;/a&gt;: Fort of Dhat al-Hajj &lt;br&gt;
Check out the changelog for more details.&lt;/p&gt;

&lt;p&gt;Enarx was built to be simple to use. It abstracts away complex concepts and supports multiple architectures transparently so that users don't have to worry about these.&lt;/p&gt;

&lt;p&gt;Checkout Enarx on &lt;a href="https://github.com/enarx/enarx"&gt;Github&lt;/a&gt; and give it a star.&lt;/p&gt;

&lt;p&gt;Join the Community using this &lt;a href="https://chat.enarx.dev/home"&gt;Link&lt;/a&gt;, everyone is welcomed to share their contribution and thoughts.&lt;/p&gt;

&lt;p&gt;References:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://enarx.dev/docs"&gt;https://enarx.dev/docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.intel.com/t5/Blogs/Products-and-Solutions/Security/Confidential-Computing-the-emerging-paradigm-for-protecting-data/post/1335003"&gt;https://community.intel.com/t5/Blogs/Products-and-Solutions/Security/Confidential-Computing-the-emerging-paradigm-for-protecting-data/post/1335003&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://enarx.dev/resources/2022-04-12-enarx-0-4-4"&gt;https://enarx.dev/resources/2022-04-12-enarx-0-4-4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gartner.com/smarterwithgartner/top-actions-from-gartner-hype-cycle-for-cloud-security-2020"&gt;https://www.gartner.com/smarterwithgartner/top-actions-from-gartner-hype-cycle-for-cloud-security-2020&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ibm.com/cloud/learn/confidential-computing"&gt;https://www.ibm.com/cloud/learn/confidential-computing&lt;/a&gt;. &lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>opensource</category>
      <category>security</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Confidential Computing Consortium- The next generation of Data Security</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Sat, 30 Apr 2022 23:39:13 +0000</pubDate>
      <link>https://dev.to/aryank21/confidential-computing-consortium-the-next-generation-of-data-security-42ae</link>
      <guid>https://dev.to/aryank21/confidential-computing-consortium-the-next-generation-of-data-security-42ae</guid>
      <description>&lt;p&gt;It's good to be back with another interesting blog!&lt;/p&gt;

&lt;p&gt;WASM is considered as the third generation of Cloud Computing, and it is expected to boom in the upcoming time therefore Data Security needs an upgrade to keep up.&lt;/p&gt;

&lt;p&gt;In previous blogs, we explored the properties &amp;amp; applications of WebAssembly, &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8qYqIvIg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/nehtxxtii657ojq3zu0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8qYqIvIg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/nehtxxtii657ojq3zu0n.png" alt="CCC" width="300" height="83"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But today we're going to learn about CCC (&lt;strong&gt;Confidential Computing Consortium&lt;/strong&gt;) is an open-source community powered by The Linux Foundation, which works as the icing on the cake for Wasm. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confidential Computing&lt;/strong&gt; protects data in use by performing the computation in a hardware-based Trusted Execution Environment. These secure and isolated environments prevent unauthorized access or modification of applications and data while in use, thereby increasing the security assurances for organizations that manage sensitive and regulated data.&lt;/p&gt;

&lt;p&gt;Importantly, the definition is not limited to “cloud” uses, but can be applied anywhere including public cloud servers, on-premises servers, gateways, IoT devices, Edge deployments, user devices, etc. It is also not limited to such trusted execution being done by any particular processor, since trusted processing might also be in various other places such as a GPU or a network interface card. Neither is it limited to solutions that use encryption, though this is the most common technique employed.&lt;/p&gt;

&lt;h4&gt;
  
  
  Trusted Execution Environments (TEEs):
&lt;/h4&gt;

&lt;p&gt;A Trusted Execution Environment (TEE) is defined by the CCC, following common industry practice, as an environment that provides a level of assurance of the following three properties:&lt;br&gt;
a. Data confidentiality: Unauthorized entities cannot view data while it is in use within the TEE.&lt;br&gt;
b. Data integrity: Unauthorized entities cannot add, remove, or alter data while it is in use within the TEE.&lt;br&gt;
c. Code integrity: Unauthorized entities cannot add, remove, or alter code executing in the TEE.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O8_OqKyZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/43ipbflrew28rzqybgrv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O8_OqKyZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/43ipbflrew28rzqybgrv.png" alt="TEE" width="794" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the context of confidential computing, unauthorized entities could include other applications on the host, the host operating system and hypervisor, system administrators, service providers, and the infrastructure owner—or anyone else with physical access to the hardware. &lt;/p&gt;

&lt;h4&gt;
  
  
  Technologies that will be benefited by CC:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tg75n7Ih--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/yyrszmsj7nz77huv4tyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tg75n7Ih--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/yyrszmsj7nz77huv4tyq.png" alt="tech" width="800" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  There are several projects within CCC with the main focus on the security and privacy of digital data. They are as follows:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Enarx&lt;/li&gt;
&lt;li&gt;Gramine&lt;/li&gt;
&lt;li&gt;Keystone&lt;/li&gt;
&lt;li&gt;Occlum&lt;/li&gt;
&lt;li&gt;Open Enclave SDK&lt;/li&gt;
&lt;li&gt;Veracruz&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Organisations that are part of this initiative:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nni0g3mE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/bvgjq36nngdu8ldy1j6d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nni0g3mE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/bvgjq36nngdu8ldy1j6d.png" alt="members" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Overall Expected Market growth of Confidential Computing:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l9zjQlMG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/9nyuiaxjjfkvqi0o28a7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l9zjQlMG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.wasm.builders/remoteimages/uploads/articles/9nyuiaxjjfkvqi0o28a7.png" alt="Market" width="475" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;h4&gt;
  
  
  In a report generated by the &lt;a href="https://confidentialcomputing.io/wp-content/uploads/sites/85/2021/10/Everest_Group_-_Confidential_Computing_-_The_Next_Frontier_in_Data_Security_-_2021-10-19.pdf"&gt;Everest&lt;/a&gt; group, it is expected about CCC is
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;The Total Addressable Market (TAM) for CC is likely to grow at least 26x over the next five years in the best-case scenario due to growing enterprise awareness of confidential computing.&lt;/li&gt;
&lt;li&gt;The CC hardware and software markets are poised for exponential growth backed by expanding regulations, demand for comprehensive security postures, and an appetite for new revenue generators.&lt;/li&gt;
&lt;li&gt;Multi-party computing and security-specific use cases across industries will be the biggest growth drivers for the technology.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Conclusion:
&lt;/h4&gt;

&lt;p&gt;As a result, due to the increasing complexity of technology, privacy and security have become more difficult to protect. The Confidential Computing Consortium is a great initiative that is working to keep data secure in any system by creating a sophisticated enviornment. Getting more and more contributors in will put this on a meteoric rise within a short time.&lt;/p&gt;

&lt;p&gt;Keep an eye out for the next blog in this series in which we will learn about the various projects that make up the Confidential Computing Consortium.&lt;/p&gt;

&lt;p&gt;References:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://confidentialcomputing.io/"&gt;https://confidentialcomputing.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://confidentialcomputing.io/wp-content/uploads/sites/85/2021/10/Everest_Group_-_Confidential_Computing_-_The_Next_Frontier_in_Data_Security_-_2021-10-19.pdf"&gt;https://confidentialcomputing.io/wp-content/uploads/sites/85/2021/10/Everest_Group_-_Confidential_Computing_-_The_Next_Frontier_in_Data_Security_-_2021-10-19.pdf&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://confidentialcomputing.io/scope/"&gt;https://confidentialcomputing.io/scope/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.trustonic.com/technical-articles/what-is-a-trusted-execution-environment-tee/"&gt;https://www.trustonic.com/technical-articles/what-is-a-trusted-execution-environment-tee/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://embeddedbits.org/introduction-to-trusted-execution-environment-tee-arm-trustzone/"&gt;https://embeddedbits.org/introduction-to-trusted-execution-environment-tee-arm-trustzone/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do comment your thoughts and suggestions related to the blog and please share if you found it useful.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>discuss</category>
      <category>serverless</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Why Wasm is the perfect runtime for server-side applications.</title>
      <dc:creator>Aryan Kaushik</dc:creator>
      <pubDate>Fri, 29 Apr 2022 12:18:28 +0000</pubDate>
      <link>https://dev.to/aryank21/why-wasm-is-the-perfect-runtime-for-server-side-applications-2cfd</link>
      <guid>https://dev.to/aryank21/why-wasm-is-the-perfect-runtime-for-server-side-applications-2cfd</guid>
      <description>&lt;p&gt;Namaskar, welcome to another fantastic blog, previously we've tried to work with wasm on the user/client-side and learned its advantages but today in this blog we will try to understand the broader applications and advantages of Wasm in the tech industry i.e. using it on the server-side, it is much more functional than we've thought.&lt;/p&gt;

&lt;p&gt;Every two years, the number of transistors on a microchip doubles e, though the cost of computers is halved. Moore's Law states that we can expect the speed and capability of our computers to increase every couple of years, and we will pay less for them. Another tenet of Moore's Law asserts that this growth is exponential. The machine learning tasks can run 60,000x times faster when we replace Python with native code and specialized hardware. WebAssembly is a key technology that makes the software more efficient, while preserving safety, portability, and software engineering best practices we built up in the past 25 years.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.wasm.builders%2Fremoteimages%2Fuploads%2Farticles%2Fzwez9z19edczvpj6havk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.wasm.builders%2Fremoteimages%2Fuploads%2Farticles%2Fzwez9z19edczvpj6havk.png" alt="Moore"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;WebAssembly was invented as a client-side technology, but it is also proven very useful on the server-side. Server-side WebAssembly provides crucial benefits for modern web and service applications. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fast:&lt;/strong&gt; WebAssembly achieves near-native performance. Compared with the Java, Python, or JavaScript runtimes, it can be 10x to 100x faster (how is this possible?). It is also much faster than Docker, especially in the cold start and system access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Safe:&lt;/strong&gt; WebAssembly is a sandbox with a capability-based security model. It is not only safer than native binaries but also safer than OS-level containers like Docker. Yet it provides access to the underlying system, including new hardware features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Portable:&lt;/strong&gt; WebAssembly apps can be written in C, C++, Rust, Go, and run without change on different OS and hardware platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manageable:&lt;/strong&gt; WebAssembly programs can be provisioned, started, hot-swapped, stopped, and moved around by other applications.&lt;/p&gt;

&lt;p&gt;To run WebAssembly outside of the browser, You need a runtime. A runtime is an application that runs on the command line or via a static library that allows you to load your Wasm module and run it as if it was just any other program. SSVM, Wasmer, WasmTime, Wasm3, WAVM, and Lucet, are some common emerging Wasm runtimes that have been coming out from the community as of late.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SSVM:&lt;/strong&gt; Second State provides an open-source WebAssembly implementation (Second State Virtual Machine, or SSVM) that is specifically optimized for server-side applications. It is&lt;/p&gt;

&lt;p&gt;Best-in-class in performance. It is 1000x faster than Docker for cold starts.&lt;br&gt;
Seamlessly supports server application frameworks, such as Node.js. You can build high-performance Node.js apps with SSVM.&lt;br&gt;
Supports safe access to external resources, such as databases, message queues, and even new AI hardware&lt;br&gt;
Allows precise metering of computational resources for serverless apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wasmer:&lt;/strong&gt; Wasmer is designed to provide three key features:&lt;br&gt;
Enable programs to run in any programming language&lt;br&gt;
Enable extremely portable binaries to run unmodified on any "OS" supported by Wasmer (for example, Linux, macOS, Windows and FreeBSD).&lt;br&gt;
Act as a secure bridge for Wasm modules to interact with native "OS" functionality, via Application Binary Interfaces (ABIs) such as WASI and Emscripten (version 1.38.43 and earlier).&lt;/p&gt;

&lt;p&gt;In a blog written by &lt;a href="https://www.libhunt.com/compare-SSVM-vs-wasmtime" rel="noopener noreferrer"&gt;Libhunt&lt;/a&gt;, they compared SSVM &amp;amp; Wasmer&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.wasm.builders%2Fremoteimages%2Fuploads%2Farticles%2Fnp4xpnxyxw7r3l3a8rrx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.wasm.builders%2Fremoteimages%2Fuploads%2Farticles%2Fnp4xpnxyxw7r3l3a8rrx.png" alt="1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Emerging Tech Stacks where Wasmer is making a Significant Difference:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;a) Blockchain:&lt;/strong&gt; Wasmer's Single-pass compiler helps eliminate JIT bombs, enabling blockchain providers with a high-quality-of-service infrastructure for their applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;b) Function-as-a-Service (Faas):&lt;/strong&gt; Wasmer is a market leader for enabling WebAssembly on the server. It nearly eliminates all the challenges developers must deal with to fully adopt FaaS as a part of their application development strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;c) Machine Learning and AI:&lt;/strong&gt; Wasmer nearly eliminates all the challenges developers must deal with for deploying machine learning applications in and outside of data center environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SSVM&lt;/strong&gt; is also running with pace to make its runtime more efficient and progressing exponentially, while other WebAssembly runtimes are in the development stage and are making progress day by day. Soon we will see a lot of efficient Wasm runtimes on the server-side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; &lt;br&gt;
Lately in the server-side development community, which is the desire to simplify, and is coming in the form of things like Functions as a Service, or serverless technology. There's AWS Lambda, OpenFaaS the serverless framework, things like that are really designed to make things simpler, again, because things have gotten much more complex in the last 5 or 10 years, with the rise of microservices and whatnot. It's made things more difficult. &lt;br&gt;
Wasm can really help with this goal by building these very tightly constrained, highly composable modules from various languages, really whatever you want, and fitting them together into whatever configuration that you need for your application, is pretty compelling.&lt;/p&gt;

&lt;p&gt;Check this &lt;a href="https://www.infoq.com/presentations/wasm-server-api/" rel="noopener noreferrer"&gt;Blog&lt;/a&gt; by &lt;a class="mentioned-user" href="https://dev.to/cohix"&gt;@cohix&lt;/a&gt; where he explains Server-Side WASM: Today and Tomorrow!&lt;/p&gt;

&lt;p&gt;References:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.infoq.com/presentations/wasm-server-api/" rel="noopener noreferrer"&gt;https://www.infoq.com/presentations/wasm-server-api/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.libhunt.com/compare-SSVM-vs-wasmer" rel="noopener noreferrer"&gt;https://www.libhunt.com/compare-SSVM-vs-wasmer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.secondstate.io/articles/why-webassembly-server/" rel="noopener noreferrer"&gt;https://www.secondstate.io/articles/why-webassembly-server/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.wasmer.io/ecosystem/wasmer" rel="noopener noreferrer"&gt;https://docs.wasmer.io/ecosystem/wasmer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://noti.st/lostinbrittany/hsL7QE" rel="noopener noreferrer"&gt;https://noti.st/lostinbrittany/hsL7QE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webassembly.org/docs/use-cases/" rel="noopener noreferrer"&gt;https://webassembly.org/docs/use-cases/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do comment your thoughts and suggestions related to the blog and please share if you found it useful.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>opensource</category>
      <category>webassembly</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
