<?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: Daniel Madalitso Phiri</title>
    <description>The latest articles on DEV Community by Daniel Madalitso Phiri (@malgamves).</description>
    <link>https://dev.to/malgamves</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%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg</url>
      <title>DEV Community: Daniel Madalitso Phiri</title>
      <link>https://dev.to/malgamves</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/malgamves"/>
    <language>en</language>
    <item>
      <title>Articles that made my Week #008 &amp; #009 - 😢</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Fri, 03 Apr 2020 11:00:02 +0000</pubDate>
      <link>https://dev.to/malgamves/articles-that-made-my-week-008-009-3i59</link>
      <guid>https://dev.to/malgamves/articles-that-made-my-week-008-009-3i59</guid>
      <description>&lt;p&gt;Hey! Getting into the week I hadn't published my weekly blog post on time and felt really sad about it.  I hate that I haven't been consistent enough with these mini updates. I don't feel like I'm the most motivated at the moment.. but really who is?&lt;/p&gt;

&lt;p&gt;Something nice happened though! &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1243251471015129088-71" src="https://platform.twitter.com/embed/Tweet.html?id=1243251471015129088"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1243251471015129088-71');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1243251471015129088&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Last week was err tough too! A lot of my time went into getting this article about my career up. Loving writing it. Definitely different.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/devrel-to-me-1l62" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;DevRel to Me...&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Apr 1 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#devrel&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#community&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;So jumping right into it. I'm happy that I have been reading content I should be. As a conference and developer event organizer I'm really getting into running events online seeing as offline isn't possible at the moment. I love a good hackathon and this article by &lt;a href="https://dev.to/arkodyutisaha"&gt;Arkodyuti&lt;/a&gt; is super informative for anyone in the developer events space.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/arkodyutisaha" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F266046%2F18b83b68-bb87-405d-a4d1-84b33d21077a.jpg" alt="arkodyutisaha"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/arkodyutisaha/how-to-host-successful-online-hackathons-4ocg" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How to host successful Online Hackathons🎉&lt;/h2&gt;
      &lt;h3&gt;Arkodyuti Saha  ・ Mar 26 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#hackathon&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#github&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devrel&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;This is a little cheeky but I really liked reading the articles I wrote. I didn't write up my mini update because I was busy writing articles, coping and healing. So sharing these was really nice, and hearing that people loved reading them was even better. So if you want it. Last weeks article is here.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/articles-that-made-my-week-007-sorta-2baa" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Articles that made my Week #007 - Sorta&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Mar 24 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#watercooler&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;The folks at &lt;a href="https://dev.to/orbit"&gt;Orbit&lt;/a&gt; are great!! Their newsletter is always fun and engaging. This particular release though mentioned a tool I love - &lt;a href="https://auxparty.com" rel="noopener noreferrer"&gt;auxparty&lt;/a&gt;. It's one of the only thinks keeping sane right now and they shared how you can add the audio from an auxparty to a Zoom call and I'm here for it. There's a lot more though, check it out.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/orbit" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1292%2F4e73c733-6009-4657-9035-091cd5530122.png" alt="Orbit" width="800" height="800"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F96322%2Fe4f350a1-fae4-4815-8934-8214017dad8e.png" alt="" width="400" height="400"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/orbit/the-observatory-3-hot-takes-and-cool-tools-for-building-community-remotely-2917" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;The Observatory #3: Hot takes and cool tools for building community remotely&lt;/h2&gt;
      &lt;h3&gt;Patrick Woods for Orbit ・ Mar 24 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#devrel&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#community&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Networking in Docker can be nightmare, I'm working on some Docker content and I'm trying to get as much information as I can before putting anything out. Check out &lt;a href="https://dev.to/maximization"&gt;Maxim&lt;/a&gt; (who has the coolest username btw) and his article to get you past those networking blues. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/maximization" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F295594%2F6376048f-1d76-4a41-be20-63e660c00d39.jpg" alt="maximization"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/maximization/4-reasons-why-your-docker-containers-can-t-talk-to-each-other-19bn" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;4 Reasons Why Your Docker Containers Can't Talk to Each Other&lt;/h2&gt;
      &lt;h3&gt;Maxim Orlov ・ Mar 26 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#docker&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#node&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;I'm slowly getting back into my rhythm so I'm happy about that. How was your week?&lt;/p&gt;

</description>
      <category>career</category>
      <category>watercooler</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>DevRel to Me...</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Wed, 01 Apr 2020 04:36:26 +0000</pubDate>
      <link>https://dev.to/malgamves/devrel-to-me-1l62</link>
      <guid>https://dev.to/malgamves/devrel-to-me-1l62</guid>
      <description>&lt;p&gt;Amidst interviewing for my next developer relations gig I kept asking “What does all this mean to me?" It wasn’t until early in 2020 that I got the answer to this. I was at a launch party for a product and someone clearly in finance asked me what I do. Developer Relations felt too vague and like vomit out of a baby awkwardly I said “I do growth for SaaS startups”. That night was over, thankfully! A few days later I found myself on a quick call with &lt;a href="https://twitter.com/kelseyhightower" rel="noopener noreferrer"&gt;Kelsey Hightower&lt;/a&gt;. He does these amazing &lt;a href="https://twitter.com/kelseyhightower/status/1234608420940111875" rel="noopener noreferrer"&gt;office hours&lt;/a&gt; now and then. During our chat, we went deep into modern software development, tooling and how developer relations ties into everything. As with almost every conversation around developer relations, metrics came up and I was left with so much to think about. This article is a result of that conversation.  &lt;/p&gt;

&lt;p&gt;I won't lie, even though I was doing so much community work before getting into developer relations. For the most part it only looked appealing to me because everyone made it seem like I would be traveling and speaking all the time. Spoiler alert, most of the time I wasn’t and you probably won’t either. The most people facing of our kind are obviously noticed and it reinforces the idea that really, that is all there is to developer relations. These two tweets sum it up.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1063745195223724033-840" src="https://platform.twitter.com/embed/Tweet.html?id=1063745195223724033"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1063745195223724033-840');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1063745195223724033&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1167054172899938306-875" src="https://platform.twitter.com/embed/Tweet.html?id=1167054172899938306"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1167054172899938306-875');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1167054172899938306&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I write this because I feel like so many people new to the field, particularly younger, less experienced folk feel they’ll travel the globe and go stage-to-stage - sharing your experiences with the masses or writing killer articles one after the other (I know I did). When I talk to hiring managers for DevRel positions, they all see promising candidates concentrate on a very small part of the job. According to them, that is usually a red flag. So many miss some of the finer more process oriented parts of the job. Funny enough, these have become my favorite part of it all. I was curious to know what effect my activities as a developer relations professional had on the companies I worked for. My professional experience started off with a part-time role at Hasura before shifting into a full-time role at PubNub and eventually into full-time consulting which I do at the moment. I wouldn’t have a short answer for you if you asked me what a day in any of these roles looks like, hopefully you get that out of what I have to say next. My modest and somewhat broad DevRel experience has brought out three key words for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Awareness | Adoption |  Revenue
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember when I said I do growth for startups? Bet…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nothing drives growth like a good and well refined product that people actually want. Getting there however is another story. I think this is where DevRel shines. Done right, collaboration with multiple departments, the ability to advocate for both the community (sometimes customers) and the company creates some of the best products and communities. Most times, if not all - a welcoming and inclusive community is all it takes to put you ahead of the pack. How? Every internet entrepreneur shouts out “Don’t sell a product, sell a solution.” As ubiquitous as that phrase has become it does hold some truth. Now I have to point out that DevRel isn’t all about driving sales. If we’re honest with ourselves, we know that we work for companies that need to make payroll somehow. You can’t run on VC money forever. I’m not telling you to start selling to your open source community - please don’t. More often than not, DevRel does help drive the growth of some sort of metric that is important for the company. If it doesn’t then you might have a problem. Where am I going with this? DevRel gives you the unique ability to refine your product while growing a community of people who will/want to actually use it. How?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Three syllables - stra-te-gy&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When coming up with a team strategy, it is important to get a good idea of what stage your products are at. Keeping in mind different products can be in different stages and you will have to tweak your actions to suit them. While also remembering that in everything you do, you must have your communities best interests at heart. Back to those three stages i.e Awareness, Adoption, Revenue Generation. From my experience companies want to drive at least one of these in one way or another.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Awareness is getting people to know about you exist&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adoption is getting people to actually use your product &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Revenue Generation is getting your product to make money&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before getting deeper into each and the the actions associated or that represent them. I think it is worth mentioning that the core of developer relations are advocacy and community enablement. Advocacy means you might have to work with a few departments here and there. Departments like marketing, product and yes sometimes sales. The aim here of course being to advocate for your community inside various departments and to do the same for your company and some teams to your community. Community enablement is at least in my opinion, best achieved with some sort of community management. An efficient feedback loop between your community and company better serves the needs of your community. More importantly, it also drives product refinement. I find applying various principles of community management necessary. &lt;/p&gt;

&lt;p&gt;To me, initially awareness &amp;amp; adoption sounded very similar. Luckily for me the difference became more apparent as I got deeper into both. Taking a step back, my experience with the different stages of DevRel made me realize that each requires a different skill-set &amp;amp; a different approach.&lt;br&gt;
In awareness we’re trying to get people to know about the company, the product, we’re doing things like event sponsorship, stickers, t-shirts, conference talks, banners, blog posts and the whole lot. The concept of developer personas was a little confusing for me. Driving adoption of a product helped me realize what events make sense in terms of content and approach. I had to adjust for different types of developers and ecosystems whilst trying not to get caught in the ROI trap. I developed my own writing style, built processes around my activities - fun times. I definitely think if you have the resources, keeping these things in mind can really help you get a candidate the speaks to your strategy and what your team or company are trying to achieve. This helped me discover a tonne of cool developer spaces and ecosystems and understand how the dynamics of each are different.  &lt;/p&gt;

&lt;p&gt;For me, simply put - adoption sees you try and get more developers using your product. This might be getting developers moving from just trying it out to possibly using it in production. Sometimes it might even be trying to find out why people aren’t using your product a certain way &amp;amp; working towards fixing that. In my experience, when driving adoption, people are aware of your product or tool but aren’t really captivated by it. At this stage it makes more sense to add nuance into how you approach content and engagement. I started to do much smaller and more personal meetups/user groups and webinars. If you’re at adoption, your community must have grown quite a bit. Lurking around Slack or StackOverflow answering questions becomes your life. How-to guides, documentation refinement and detailed tutorials make perfect sense for this stage, it's the small things that matter. I loved my experience with driving adoption, I think it was extremely important. It was here that I really started to get feedback to drive product refinement and in hindsight, company growth. I noticed how I grew and became more empathetic to pain points developers face. Trying out non-traditional means of content creation was also very rewarding. &lt;/p&gt;

&lt;p&gt;Revenue - when they say DevRel takes time, they mean it. Not to say that revenue is the endgame for everyone, it is for most. People need to be aware, before they can adopt and you can refine, then you can sell. Driving revenue is a little different for different companies. It depends on how they’re getting this revenue. I like to ask things like this because if it’s my job to do it, I must be in the know. Does revenue come from a subscription? Enterprise users? Support? When you know this then you can build a strategy around it. Sometimes it requires less flashy actions &amp;amp; more deliberate actions to even engage individually with specific customers or users. It can be tricky talking about money, pricing and payment plans. Luckily I’ve never had to but nonetheless it is information you must know - thus the revenue question. &lt;/p&gt;

&lt;p&gt;I choose to see my experiences with each stage, adjusting to the activities and getting new skills as me growing professionally. The DevRel career path is still being paved. For me doing things like growing and engaging different communities, discovering different ways to look at and approach various customer problems, and reporting to execs all look like things that leave some very nice career doors open for me.  So now that you see that developer relations isn’t all talks and stickers, here is what I take it to be.&lt;/p&gt;

&lt;p&gt;Awareness is getting eyes and attention. You usually see people work more with the marketing team. Ideally I'd call them evangelists. Adoption is getting users and improving retention. You usually see people work more with the product or developer experience team. Ideally I'd call them advocates  Revenue is getting sales, ensuring developer happiness and reducing churn. You see such a person work a little more closely with sales or customer success. Ideally I would call them solutions or happiness engineers.&lt;/p&gt;

&lt;p&gt;When you consider these, you don’t really care about the title you have. What matters is getting where you need to go and how you get there. Of course making sure your community is at the core of those plans. That is DevRel to me...&lt;/p&gt;

&lt;p&gt;Do say hello on &lt;a href="https://twitter.com/malgamves" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; if you want to keep the discussion going or contact/hire me. I’m more than happy to engage. Stay safe and take care.&lt;/p&gt;

</description>
      <category>devrel</category>
      <category>community</category>
      <category>career</category>
    </item>
    <item>
      <title>Articles that made my Week #007 - Sorta</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Tue, 24 Mar 2020 06:41:29 +0000</pubDate>
      <link>https://dev.to/malgamves/articles-that-made-my-week-007-sorta-2baa</link>
      <guid>https://dev.to/malgamves/articles-that-made-my-week-007-sorta-2baa</guid>
      <description>&lt;p&gt;Hey! So I'm trying to setup my week so I can publish this 3 days earlier. I'm trying to get back to doing this Friday nights. &lt;/p&gt;

&lt;p&gt;Before I continue. This is last weeks article. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/articles-that-made-my-week-005-006-2ih" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Articles that made my Week #005 &amp;amp; #006 🤭&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Mar 15 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#watercooler&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#todayilearned&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Sort of looking back to why I started doing this. I wanted to be consistent and intentional with what I'm consuming and doing this every week was my way of remaining aligned with my goals both professionally and personally. I love doing it, I go back and read the ones I've done before this. Lately though life has just been harder than usual and even though routine in a time like this has been advised. It is insanely hard to follow at the moment. I won't lie... I didn't read much this week. I've been battling with very unexpected rejections, having to self isolate. It's a hard time for everyone, sending out good vibes! &lt;/p&gt;

&lt;p&gt;Back to this, I use this as a diary. I gauge past week, like Dev as a Diary (DaaD) and I guess this is just a reflection of where I'm at. I want to use this as a reset for the week. Rekindling the flame! I'll share articles I've written recently and hopefully they can make your week.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/vuex-why-we-need-spa-state-management-42cj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Vuex: Why We Need SPA State Management&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Mar 12 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/dynamic-styling-in-vue-js-inline-css-3me1" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Dynamic Styling in Vue.js: Inline CSS&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Mar 5 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#todayilearned&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/event-triggered-graphql-1p6n" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Event Triggered GraphQL: Making Static Sites Dynamic&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Feb 5 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#graphql&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#hasura&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#gridsome&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/building-a-realtime-collaborative-microsoft-paint-1h7f" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Building a Realtime Collaborative Microsoft Paint&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Feb 12 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#showdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Just some of my writing over the last month. &lt;/p&gt;

&lt;p&gt;If they do make your week. Let me know - it'll make my week. Have great one!&lt;/p&gt;

</description>
      <category>career</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Articles that made my Week #005 &amp; #006 🤭</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Sun, 15 Mar 2020 11:29:11 +0000</pubDate>
      <link>https://dev.to/malgamves/articles-that-made-my-week-005-006-2ih</link>
      <guid>https://dev.to/malgamves/articles-that-made-my-week-005-006-2ih</guid>
      <description>&lt;p&gt;I want to start this by saying I'm sorry??&lt;/p&gt;

&lt;p&gt;As you can see! I've merged two posts into one! I missed last weeks post - time is quite the thing... very unpredictable. It's been a really tough few days, really busy too! Yet here we are! &lt;/p&gt;

&lt;p&gt;Per the newly minted tradition, this is last weeks article.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/articles-that-made-my-week-004-3lno" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Articles that made my Week #004&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Feb 29 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#watercooler&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#todayilearned&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;So if you've been watching (or reading), I've really committed to this writing thing. I want to get better at it do it right and make sure it serves me or at least adds value to the people around me. &lt;a href="https://dev.to/rachel_cheuk"&gt;Rachel&lt;/a&gt; was pretty spot on with this!&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/rachel_cheuk" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F108002%2F861e480e-b177-40de-92c1-cc0eb26dc652.jpeg" alt="rachel_cheuk"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/rachel_cheuk/better-blogging-building-your-brand-4b6e" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Better Blogging - Building Your Brand&lt;/h2&gt;
      &lt;h3&gt;Rachel ・ Mar 13 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#writing&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;This week has been tough - interviewing, finishing up projects and trying keep my health in check it's only normal that some thoughts of inadequacy pop up. I dealt with them as best as I saw fit but &lt;a href="https://dev.to/sarah_bean"&gt;Sarahs&lt;/a&gt; article was so nice to read, a quick reminder to compare myself to.. myself? I wrote up all my experience and work and immediately felt so much better. Sometimes we just need a boost.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/sarah_bean" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F232831%2Fe2a8d206-4057-48df-9037-4768b0bfec11.jpg" alt="sarah_bean"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/sarah_bean/you-re-better-than-your-impostor-syndrome-1eo6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;You're Better Than Your Impostor Syndrome &lt;/h2&gt;
      &lt;h3&gt;Sarah Beecroft ・ Mar 12 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#codenewbie&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#motivation&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#100daysofcode&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;You might not be aware, at the moment I'm jobless. It's not as sad as it sounds lol but yeah it can be hard to feel technically proficient amidst the hoops of interviewing but it is still very important to stay on top of your game, there are some really cool tips by &lt;a href="https://dev.to/inidaname"&gt;Hassan&lt;/a&gt; in his article. Staying positive can be hard especially with everything going on in life, I'm just learning to take it as it comes.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/inidaname" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F32769%2Fa6a3d4f8-f12c-4dfb-96a4-ef69c371f575.jpg" alt="inidaname"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/inidaname/developers-how-to-stay-on-top-of-your-game-even-without-a-job-2iam" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Developers: How to stay on top of your game even without a job.&lt;/h2&gt;
      &lt;h3&gt;Hassan Sani ・ Jan 24 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#learning&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#recruiting&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#developer&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#growing&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;This one is pretty straight forward, being a community manager right now is tough. Having to switch from in-person meetups to online ones can be a lot! There's a lot to consider and &lt;a href="https://dev.to/remotesynth"&gt;Brian&lt;/a&gt; was kind enough to share his vast experience with everyone.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/remotesynth" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2939%2Fa11acfc4-249c-4194-8172-29d0dad6b181.png" alt="remotesynth"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/remotesynth/tips-for-running-virtual-meetups-and-events-2bo1" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Tips for Running Virtual Meetups and Events&lt;/h2&gt;
      &lt;h3&gt;Brian Rinaldi ・ Mar 12 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#discuss&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;A few weeks ago, I was building a CI/CD pipeline for my package &lt;a href="https://www.npmjs.com/package/dzina" rel="noopener noreferrer"&gt;dzina&lt;/a&gt; the experience has great and writing tests to add to it was dope! Adding more tests to my applications has been at the back of my mind since. &lt;a href="https://dev.to/astagi"&gt;Andrea Stagi&lt;/a&gt; did a pretty thorough tutorial for testing Vue.js applications. You don't see much content on that.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/astagi" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F267923%2Fb025d89c-9910-44a9-afb3-17d0f7a2eaec.png" alt="astagi"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/astagi/writing-a-vue-component-using-tdd-a-gentle-introduction-4n2d" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Writing a Vue component using TDD: a gentle introduction&lt;/h2&gt;
      &lt;h3&gt;Andrea Stagi ・ Mar 5 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#typescript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tdd&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Like the article says we probably don't think too much about deploying single page applications - stuff like Netlify or Zeit make everything so easy. I've been working a lot with Docker lately and this article sort of cemented a lot of my thoughts around the idea. Might just do it for Vue.js. Thank you &lt;a href="https://dev.to/bpaulino0"&gt;Bruno Paulino&lt;/a&gt; for sharing!!&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/bpaulino0" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F263418%2F464eea65-cf43-4d77-8b62-7498bc830dfe.jpg" alt="bpaulino0"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/bpaulino0/dockerizing-react-apps-591l" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Dockerizing React Apps&lt;/h2&gt;
      &lt;h3&gt;Bruno Paulino ・ Mar 3 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#react&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#docker&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webapp&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://dev.to/lexaprogrammer"&gt;Will&lt;/a&gt; wrote a really good article that sort of takes you back to the earlier days of software development. It's always good to hear the perspectives of people who have been doing something for a long time. To me it spoke to not losing touch to yourself. That is extremely important.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/lexaprogrammer" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F303791%2F6a1ee730-cdd6-4d8b-8027-5d90e33dcaab.jpeg" alt="lexaprogrammer"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/lexaprogrammer/coming-back-to-development-after-a-decade-away-2443" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Coming back to development after a decade away&lt;/h2&gt;
      &lt;h3&gt;Will👨🏾‍💻✨(he/they) ・ Mar 3 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#codenewbie&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#blog&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;That's been my two weeks. How were yours?&lt;/p&gt;

</description>
      <category>career</category>
      <category>watercooler</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Vuex: Why We Need SPA State Management</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Thu, 12 Mar 2020 17:57:47 +0000</pubDate>
      <link>https://dev.to/malgamves/vuex-why-we-need-spa-state-management-42cj</link>
      <guid>https://dev.to/malgamves/vuex-why-we-need-spa-state-management-42cj</guid>
      <description>&lt;p&gt;One of the most beautiful things about Vue.js is the relative simplicity it brings to modern web development, building Single Page Applications has never been easier. JavaScript frameworks like Vue came with component based design patterns. Whole web applications are just a collection of individual pieces (components) sharing data, the bigger the application gets, the harder it is for data to remain consistent and be managed in each individual component. This data is commonly referred to as application state. For Vue.js, Vuex is the most widely used state management library, today we’ll go into adding and integrating Vuex into a Vue.js applications.&lt;/p&gt;

&lt;p&gt;Not only does Vuex work as a central store for your application state, it sets rules to ensure data is changed in a  way that is expected. Vuex ensures your views remain consistent with your application data. Don't worry if this doesn't make sense now, it'll all come together as we go on and build something.&lt;/p&gt;

&lt;p&gt;As an semi-regular conference and event goer, I tend to meet a bunch of people, during our interactions I agree to do certain stuff that I most certainly always forget. So we’re going to build something literally no one else but me will use - a reminder (glorified to-do list) app.  &lt;/p&gt;

&lt;p&gt;Before we dive into it, here’s a few things you’ll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic knowledge of Vue.js&lt;/li&gt;
&lt;li&gt;Node.js and Yarn installed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alright!! We’ve already covered what Vuex does and why it does it. We need to setup our project, open your terminal and type  &lt;code&gt;vue create &amp;lt;project-name&amp;gt;&lt;/code&gt; to do so, you’d need the Vue CLI installed. If you don’t have that installed you can get it &lt;a href="https://cli.vuejs.org/" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Select the default project setup and once everything is done and we have our project initialized, run &lt;code&gt;cd &amp;lt;project-name&amp;gt;&lt;/code&gt; and  &lt;code&gt;yarn serve&lt;/code&gt;. You should see your usual vue starter page&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbc5oy5wp40mzh3rq3u0r.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbc5oy5wp40mzh3rq3u0r.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After getting this running, we need to add vuex to our project. In your terminal, type &lt;code&gt;vue add vuex&lt;/code&gt; and after, you should see your directory structure change quite a bit. As with most state management tools, Vuex has a central store/single state tree to store application state, ours is in the src folder, you get a &lt;strong&gt;store.js&lt;/strong&gt; file or a store folder with an index.js file. If not you can create them and paste the following code in&lt;/p&gt;

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

    import Vue from 'vue'
    import Vuex from 'vuex'
    Vue.use(Vuex)
    export default new Vuex.Store({
      state: {
      },
      mutations: {
      },
      actions: {
      }
    })


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

&lt;/div&gt;

&lt;p&gt;You will also see a change in &lt;strong&gt;src/main.js&lt;/strong&gt;,  as we import the store. If not, paste the following code, &lt;/p&gt;

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

    import Vue from 'vue'
    import App from './App.vue'
    import store from './store'
    Vue.config.productionTip = false
    new Vue({
      store,
      render: h =&amp;gt; h(App)
    }).$mount('#app')


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

&lt;/div&gt;

&lt;p&gt;At this point looking at store, you’re probably wondering what all the sections are for. We’ll briefly go over them before we can go deeper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State:&lt;/strong&gt; Application state is the data your application uses. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mutations:&lt;/strong&gt; Synchronous method of changing store state and directly commit to change state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actions:&lt;/strong&gt; Commit mutations and give way for for asynchronous operations.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;bonus&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Getters:  Computed properties derived from store state.&lt;/p&gt;

&lt;p&gt;Don’t worry if it doesn’t all make sense now, we’ll get into building to make it easier. We’ve just added Vuex to our project, now we have to test it. We’ll start out by defining some data for our store. In your store, we’ll define a new data property called username by pasting &lt;code&gt;username: "danielphiri"&lt;/code&gt;  into the state portion of our store. We want to make this show on our webpage, in &lt;strong&gt;HelloWorld.vue&lt;/strong&gt;, clear the  tag and paste the following&lt;/p&gt;

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

    &amp;lt;template&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;h1&amp;gt; {{ username }} &amp;lt;/h1&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/template&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;In the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; section of the same file, we need to add &lt;code&gt;import mapState from 'vuex'&lt;/code&gt; and paste the following &lt;/p&gt;

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

    computed: {
        ...mapState(["username"])
      }


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

&lt;/div&gt;

&lt;p&gt;We should then see the value we kept in our store displayed on the screen.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqlywontzg4y6o5kd8m4.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqlywontzg4y6o5kd8m4.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now getting into the core of the reminder app we want to build, we will need to be able to input task details and who we need to perform them for. We should also be able to dismiss all tasks or individual tasks.  We need to conceptualize a data model for the state so we know what data we’re using up in the HTML portion of our application. In your store,  paste the following code&lt;/p&gt;

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

    state: {
        username: "danielphiri",
        tasks: [
          { taskName: "take pictures", taskReciever: "mom and dad" },
          { taskName: "email organisers slides", taskReciever: "myself" },
          { taskName: "send resume", taskReciever: "dev job" },
        ]
      },
      mutations: {
        ADD_TASK: (state, task) =&amp;gt; {

          state.tasks.push(task);
        },
        REMOVE_TASK: (state, task) =&amp;gt; {
          state.tasks.splice(task, 1);
        },
      actions: {
        removeTask: (context, task) =&amp;gt; {
          context.commit("REMOVE_TASK", task);
        },
      }


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

&lt;/div&gt;

&lt;p&gt;In our state, we define a username and an array that holds our tasks and related data.  We define two mutations, &lt;code&gt;ADD_TASK&lt;/code&gt; which changes the state by adding a task to the tasks array, and &lt;code&gt;REMOVE_TASK&lt;/code&gt; that removes a task from the tasks array. Lastly we define an action &lt;code&gt;removeTask&lt;/code&gt; that gives the option a remove tasks asynchronously with some custom logic. You will notice the &lt;code&gt;context&lt;/code&gt; object as the first argument in &lt;code&gt;removeTask&lt;/code&gt;, actions in vuex use &lt;code&gt;context&lt;/code&gt; which gives them access to store properties and methods like &lt;code&gt;context.commit()&lt;/code&gt; which it used to commit a mutation.&lt;/p&gt;

&lt;p&gt;To get started we’ll create a component to allow us to input tasks and display them as well as remove them. Let’s call this &lt;strong&gt;Main.vue&lt;/strong&gt; and we’ll paste the following code in the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; section:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don’t forget to add your Main component to your &lt;strong&gt;App.vue&lt;/strong&gt; file.&lt;/p&gt;
&lt;/blockquote&gt;

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

    &amp;lt;script&amp;gt;
    import { mapState, mapMutations, mapActions } from "vuex";
    export default {
      name: "Main",
      data() {
        return {
          taskName: "",
          taskReciever: "",
        };
      },
      computed: {
        ...mapState(["tasks", "username"])
      },
      methods: {
        ...mapMutations(["ADD_TASK"]),
        ...mapActions(["removeTask"]),
        addTask: function() {
          let newTask = Object.create(null);
          newTask["taskName"] = this.taskName;
          newTask["taskReciever"] = this.taskReciever;
          this.ADD_TASK(newTask);
          this.taskReciever = "";
          this.taskName = "";
        },
        removeTasks: function(task) {
          this.removeTask(task);
        }
      }
    };
    &amp;lt;/script&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;At the top of the file, you will notice that we import a couple of helper functions. They’re all pretty similar in functionality, &lt;code&gt;mapState&lt;/code&gt; for example helps us map store state to local (component) computed properties. So &lt;code&gt;mapMutations&lt;/code&gt; does the same for store mutations and &lt;code&gt;mapActions&lt;/code&gt; for store Actions.  We go on to use &lt;code&gt;mapState&lt;/code&gt; to enable us display “username" and “tasks" in our component. We also use &lt;code&gt;mapMutations&lt;/code&gt; in the methods property so we can call store mutations as functions with parameters as we did when we defined &lt;code&gt;addTask()&lt;/code&gt;  which we use to perform mutations while passing the newTask object as a parameter. &lt;/p&gt;

&lt;p&gt;In the  section of our Main.vue, we paste the following code&lt;/p&gt;

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

    &amp;lt;template&amp;gt;
      &amp;lt;div class="home"&amp;gt;
        &amp;lt;div class="hello center"&amp;gt;
          &amp;lt;div &amp;gt;
            &amp;lt;h1 class="header-text"&amp;gt; Hi 👋, {{ username }}&amp;lt;/h1&amp;gt;
            &amp;lt;h3 class="header-text"&amp;gt; Add a few tasks&amp;lt;/h3&amp;gt;
            &amp;lt;form @submit.prevent="addTask"&amp;gt;
              &amp;lt;input class="input" type="text" placeholder="I'm supposed to.." v-model="taskName" /&amp;gt;
              &amp;lt;input class="input" type="text" placeholder="for this person..." v-model="taskReciever" /&amp;gt;
              &amp;lt;button class="add-button" type="submit" placeholder="Add task to list"&amp;gt;Add task to list&amp;lt;/button&amp;gt;
            &amp;lt;/form&amp;gt;
            &amp;lt;ul&amp;gt;
              &amp;lt;li v-for="(task, index) in tasks" v-bind:key="index"&amp;gt;
                {{ task.taskName }} for {{task.taskReciever}}
                &amp;lt;button
                  v-on:click="removeTasks(index)"class="remove"&amp;gt;Done ✅&amp;lt;/button&amp;gt;
              &amp;lt;/li&amp;gt;
            &amp;lt;/ul&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;div class&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/template&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;We can directly interpolate our username from store because we mapped it as a computed property using &lt;code&gt;mapState&lt;/code&gt;, the same goes for the tasks. We use &lt;code&gt;v-for&lt;/code&gt; to loop over the tasks array from our store and display all our tasks their properties i.e &lt;code&gt;taskName&lt;/code&gt; and &lt;code&gt;taskReciever&lt;/code&gt; . We also use a form to mutate tasks to our store. On submit (&lt;code&gt;@submit&lt;/code&gt;) a.k.a when we press the button after filling in tasks, we call the &lt;code&gt;addTask&lt;/code&gt; method which then changes our state by adding whatever we input to the tasks array. Optionally you can add a style section by pasting this&lt;/p&gt;

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

    &amp;lt;style&amp;gt;
    html,
    #app,
    .home {
      height: 100%;
    }
    body {
      background-color: #050505;
      margin: 0;
      height: 100%;
    }
    input {
      border: none;
      padding: 5%;
      width: calc(100% - 40px);
      box-shadow: 0 3px 3px lightgrey;
      margin-bottom: 5%;
      outline: none;
    }
    .header-text {
      color: #e9e9e9;
    }
    .add-button {
      border: none;
      border-radius: 2px;
      padding: 5%;
      background-color: #0cf50cbb;
      box-shadow: 0 2px 2px #fff;
      width: calc(100% - 100px);
      margin-bottom: 2%;
      outline: none;
    }
    .main {
      display: grid;
      grid-template-columns: repeat(2, 50%);
      grid-template-rows: 100%;
      height: 100%;
    }
    .center {
      display: flex;
      justify-content: center;
    }
    .left,
    .right {
      padding: 30px;
    }
    ul {
      list-style-type: none;
      padding: 0;
    }
    ul li {
      padding: 4%;
      background: white;
      margin-bottom: 8px;
      border-radius: 5px;
    }
    .right {
      grid-area: right;
      background-color: #e9e9e9;
    }
    .remove {
      float: right;
      text-transform: uppercase;
      font-size: 0.8em;
      background: #050505;
      border: none;
        border-radius: 5px;
      padding: 5px;
      color: #00ff88de;
      cursor: pointer;
    }
    &amp;lt;/style&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;Save your work and run it you should see this.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszpx3xklcjel9f235snz.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszpx3xklcjel9f235snz.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Right now, we have some basic vuex operations working but you can’t really tell why we use vuex, we’re only using a single component. Let’s create another compenent called &lt;strong&gt;Stats.vue&lt;/strong&gt;, we’ll use this to display a few stats and show how vuex actions can be properly put to use. &lt;/p&gt;

&lt;p&gt;For starters, we want to be able to display the number of pending tasks we have, in our store we can define a getter to do this by pasting the following text below the state object, &lt;/p&gt;

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

    getters: {
        taskCount: state =&amp;gt; {
          return state.tasks.length;
        }
      },


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

&lt;/div&gt;

&lt;p&gt;We then add another mutation to the store&lt;/p&gt;

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

    REMOVE_ALL: state =&amp;gt; {
          state.tasks = [];
        },


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

&lt;/div&gt;

&lt;p&gt;This lets us clear every task in our list. Finally in our state, we add another action to the store right below &lt;code&gt;removeTask&lt;/code&gt; by adding the following code.&lt;/p&gt;

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

    removeAll({ commit }) {
          return new Promise((resolve) =&amp;gt; {
            setTimeout(() =&amp;gt; {
              commit("REMOVE_ALL");
              resolve();
            }, 2000);
          });
        }


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

&lt;/div&gt;

&lt;p&gt;You notice we define a promise and use &lt;code&gt;setTimeout&lt;/code&gt; function to add a bit of a delay (2 seconds) before we commit our &lt;code&gt;REMOVE_ALL&lt;/code&gt; mutation. Thus the asynchronous nature of vuex actions. We’re free to play around with the logic that dictates how we perform actions, this could be used in a shopping cart, trading website, chat application - it has so many uses.&lt;/p&gt;

&lt;p&gt;Back to our &lt;strong&gt;Stats.vue&lt;/strong&gt; file, we paste the following in the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; section&lt;/p&gt;

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

    &amp;lt;script&amp;gt;
    import { mapGetters, mapActions, mapMutations, mapState } from 'vuex'
    export default {
      name: 'Stats',
      computed: {
        ...mapGetters(['taskCount']),
        ...mapState(["username"])
      },
      data() {
        return {
          message: ""
        }
      },
      methods: {
        ...mapMutations(['REMOVE_ALL']),
        ...mapActions(['removeAll']),
        removeAllTasks() {
          this.removeAll().then(() =&amp;gt; {
            this.message = 'Self care - tasks are gone'
          });
        }
      }
    }
    &amp;lt;/script&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;In &lt;strong&gt;Stats.vue&lt;/strong&gt;, like we said, we wanted to be able to count how many tasks we have pending. We use the &lt;code&gt;mapGetters&lt;/code&gt; helper to display that computed property.  In methods, we initialize our &lt;code&gt;removeAll&lt;/code&gt; action and &lt;code&gt;REMOVE_ALL&lt;/code&gt; mutations as well as define &lt;code&gt;removeAllTasks&lt;/code&gt; which remember, has a promise and lets us use the &lt;code&gt;then()&lt;/code&gt; prototype to display text once the promise is fulfilled.&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; section of &lt;strong&gt;Stats.vue&lt;/strong&gt;, paste the following code&lt;/p&gt;

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

    &amp;lt;template&amp;gt;
      &amp;lt;div class="stats"&amp;gt;
        &amp;lt;h3 class="header-text"&amp;gt;Here are your numbers, {{username}} 😬 &amp;lt;/h3&amp;gt;
        &amp;lt;p class="header-text"&amp;gt;You need to perform {{ taskCount }} tasks fam&amp;lt;/p&amp;gt;
        &amp;lt;button class="" v-on:click="removeAllTasks"&amp;gt;Nope, can't even..&amp;lt;/button&amp;gt;
        &amp;lt;p class="header-text"&amp;gt;{{ message }}&amp;lt;/p&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/template&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;Here we have a button to remove all the tasks and a message that gets displayed when our promise is fulfilled. &lt;/p&gt;

&lt;p&gt;Run your app and you should have a pretty nifty web app like this&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbvs54mtg2l8h7tx2nj4u.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbvs54mtg2l8h7tx2nj4u.gif" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We went over why we need Vuex, Vuex operations and helpers and built an app using it. We have a functional web app that you can test out &lt;a href="https://eloquent-archimedes-bc8b6f.netlify.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;, we say how we can use Vuex to manipulate a single data source and avoid inconsistencies. We built a multi component app and shared data between them, &lt;/p&gt;

&lt;p&gt;Should you want to dive deeper in the topic I recommend the following resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vuex.vuejs.org/" rel="noopener noreferrer"&gt;Vuex Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vuejsdevelopers.com/2017/05/15/vue-js-what-is-vuex/" rel="noopener noreferrer"&gt;WTF is Vuex? A Beginner's Guide To Vue's Application Data Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/localeai/architecting-vuex-store-for-large-scale-vue-js-applications-4f1f"&gt;Architecting Vuex store for large-scale Vue.js applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/decoeur_/managing-state-with-vuex---the-guide-i-wish-id-had-28h"&gt;Managing State with Vuex - the Guide I Wish I'd Had&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the full version this on &lt;a href="https://github.com/malgamves/vuex-remindrr-app" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or &lt;a href="https://codesandbox.io/s/vuex-remindrr-app-cvf9u" rel="noopener noreferrer"&gt;CodeSandbox&lt;/a&gt;. I hope you enjoyed this and if you have any questions or want to say hi, feel free to &lt;a href="https://twitter.com/malgamves" rel="noopener noreferrer"&gt;tweet&lt;/a&gt; at me. Till next time.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Dynamic Styling in Vue.js: Inline CSS</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Thu, 05 Mar 2020 03:22:40 +0000</pubDate>
      <link>https://dev.to/malgamves/dynamic-styling-in-vue-js-inline-css-3me1</link>
      <guid>https://dev.to/malgamves/dynamic-styling-in-vue-js-inline-css-3me1</guid>
      <description>&lt;p&gt;If you know me, you know I like Vue.js fro some reason, I don't hide my love for it's simplicity and elegance. I almost always learn something super cool that you can do with it. You know - developers, always learning. Today in my Vue adventures, I'm sharing a brief into to dynamic styling.&lt;/p&gt;

&lt;p&gt;I was putting together a project and thought, "Wouldn't it be cool if we could change background colours dynamically by injecting a JavaScript data object into CSS?" - sort of.. A few google searches later I came found that Vue.js supports this. &lt;/p&gt;

&lt;p&gt;In the official Vue.js Documentation, it's referred to as &lt;a href="https://vuejs.org/v2/guide/class-and-style.html" rel="noopener noreferrer"&gt;Class and Style Bindings&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have a look ✨&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/x6pnl"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please don't shame me for my crappy CSS, I really had to put this together quick  😖&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anyways I think it's a pretty cool way to do styling for some very specific use cases.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Animating buttons for user actions&lt;/li&gt;
&lt;li&gt;Highlighting fields to emphasize a certain flow&lt;/li&gt;
&lt;li&gt;Customizing user display options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my example, I used inline CSS to change the styling of tags. You could change the font size, text decoration or colour. In theory as long as it is a CSS property, Vue can change it dynamically. If you look through the CodeSandbox code, you notice a couple of data properties - &lt;code&gt;textSize&lt;/code&gt;,&lt;code&gt;textColor&lt;/code&gt; and &lt;code&gt;textDec&lt;/code&gt; all interpolated into some inline CSS as a reference value for specific CSS properties and that's it. Super fun.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: CSS has uses kebab case (&lt;em&gt;font-size&lt;/em&gt;) and that throws errors for inline styling. Vue lets you use the camel case equivalent (&lt;em&gt;fontSize&lt;/em&gt;) to style things dynamically just in case you get into some trouble.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We can keep adding a bunch of inline CSS with the data properties but it's messy and does make the most readable code ever. So lets over complicate things (jokes) and go for CSS classes!  Hopefully they'll be cleaner. &lt;/p&gt;

&lt;p&gt;Just as we did for styling, we can bind classes to HTML in. We'll do that next time with hopefully &lt;em&gt;much&lt;/em&gt; better CSS and more real world examples. Let me know if you try it and how it works out for you.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>webdev</category>
      <category>css</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Articles that made my Week #004</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Sat, 29 Feb 2020 22:11:14 +0000</pubDate>
      <link>https://dev.to/malgamves/articles-that-made-my-week-004-3lno</link>
      <guid>https://dev.to/malgamves/articles-that-made-my-week-004-3lno</guid>
      <description>&lt;p&gt;Hey! Getting into the week I hadn't published my weekly blog post on time and felt really sad about it. &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1232247644258521089-951" src="https://platform.twitter.com/embed/Tweet.html?id=1232247644258521089"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1232247644258521089-951');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1232247644258521089&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I eventually published it a few days later and was so happy to get the 4 consecutive weeks of writing badge so on wards we goo!&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1232684784549273600-908" src="https://platform.twitter.com/embed/Tweet.html?id=1232684784549273600"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1232684784549273600-908');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1232684784549273600&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Per the newly minted tradition, this is last weeks article.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/articles-that-made-my-week-003-mbf" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Articles that made my Week #003&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Feb 25 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#discuss&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#watercooler&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#todayilearned&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;I know at the beginning of the these posts, I talked about matching intention with action and looking at what I've been consuming, there's been a huge shift. This week I guess was the worst - having noticed these I changed it soon enough and tried to consume content that actually matches my intentions. &lt;/p&gt;

&lt;p&gt;Decided to get up to speed on this, I've built a couple of microservices in the past and I was curious to see how things have changed. I love how &lt;a href="https://dev.to/jamesmh"&gt;James Hickey&lt;/a&gt; added a chart of major technologies and how far they are in terms of main stream adoption. Then he gets pretty deep into microservices. It a long read but it's pretty good.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/jamesmh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F93505%2Fc8881a55-01b1-4504-a36c-24606b1bb3c6.png" alt="jamesmh"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/jamesmh/should-i-use-a-microservices-architecture-4751" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Should I Use A Microservices Architecture?&lt;/h2&gt;
      &lt;h3&gt;James Hickey ・ Feb 25 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#architecture&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#microservices&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;It's always good to see people share how they've found developer relations. I loved reading about &lt;a href="https://dev.to/joshalphonse"&gt;Josh Alphonse&lt;/a&gt; and his journey. It made me think about my own journey and since I've been thinking about what has changed for me.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/joshalphonse" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F338514%2F077c9908-81f2-45c6-ab94-d187a250c3fe.jpg" alt="joshalphonse"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/joshalphonse/a-few-lessons-i-ve-learned-as-a-developer-advocate-so-far-4b4n" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;A Few Lessons I've Learned As A Developer Advocate (So Far...)&lt;/h2&gt;
      &lt;h3&gt;Josh Alphonse ・ Feb 24 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#devrel&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://dev.to/elliehtml"&gt;ellie-html&lt;/a&gt; brought it with this one, I've been playing around with the possibility of putting up a nice site for my music and mixes and I think it was really nice to see what's possible you know. Sometimes we tend to limit ourselves.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/elliehtml" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F339780%2F30e04eec-f890-481a-8db6-9750ab8ab70b.jpeg" alt="elliehtml"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/elliehtml/creating-a-spooky-website-4ojk" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;CREATING A SPOOKY WEBSITE&lt;/h2&gt;
      &lt;h3&gt;ellie-html ・ Feb 22 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;In thinking about what's next for me, I've been thinking about whether remote work is something I want to do again. So I guess reading this article by &lt;a href="https://dev.to/karaluton"&gt;Kara Luton&lt;/a&gt; made a lot of my feelings around remote work feel valid. I've been craving that in-person interaction and it shows aha.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/karaluton" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F7624%2Fcb682b98-f3a6-4c3a-bc8a-9aa94f18c3d6.jpg" alt="karaluton"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/karaluton/reflecting-on-one-year-of-remote-work-1nkp" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Reflecting On One Year of Remote Work&lt;/h2&gt;
      &lt;h3&gt;Kara Luton ・ Feb 27 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#remote&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;I'll be honest, when I looked at this, I thought &lt;a href="https://dev.to/steelwolf180"&gt;Max Ong Zong Bao&lt;/a&gt; was going to teach me how to not forget peoples names. Reading into it more, it's really what it says it is - how to remember as a developer. The sprinkle effect of developer blogs though, it's something I forgot about. At the moment I'm learning so much and it was a good reminder to document it because surely enough,  future me will forget and I will have to reference something. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/steelwolf180" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F119064%2Fb6d9734b-739c-43d1-ad24-71c8b9e24a85.jpg" alt="steelwolf180"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/steelwolf180/how-do-you-remember-as-a-developer-1e21" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How Do You Remember as a Developer?&lt;/h2&gt;
      &lt;h3&gt;Max Ong Zong Bao ・ Feb 26 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;It wasn't the easiest week, I haven't been well but that little boost at the beginning made me feel so much better. How was your week?&lt;/p&gt;

</description>
      <category>career</category>
      <category>watercooler</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Articles that made my Week #003</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Tue, 25 Feb 2020 10:14:14 +0000</pubDate>
      <link>https://dev.to/malgamves/articles-that-made-my-week-003-mbf</link>
      <guid>https://dev.to/malgamves/articles-that-made-my-week-003-mbf</guid>
      <description>&lt;p&gt;I figure if you read these then you're pretty aware of what I'm doing :p &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/articles-that-made-my-week-002-50i8" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Articles that made my Week #002&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Feb 15 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#discuss&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#watercooler&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#todayilearned&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;I ended up posting it much later than I was supposed to (Friday the 21st Feb). I had quite a busy week with family coming over and my health taking quite the dive. Regardless here it is... also I'm sad that I won't get my 4 weeks of consecutive posting badge as soon as I wanted but hey 🤷&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/tlakomy" rel="noopener noreferrer"&gt;Tomasz Łakomy&lt;/a&gt; tweeted asking about what content people are creating and I replied with a few things I'm doing.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1229712929517424641-359" src="https://platform.twitter.com/embed/Tweet.html?id=1229712929517424641"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1229712929517424641-359');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1229712929517424641&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;It made me think of my npm package and plans I have for growing it. &lt;a href="https://dev.to/felladrin"&gt;Victor Nogueira&lt;/a&gt; brought out some really good points on what to consider when he shared his experience publishing and sharing a package. I don't want to put too much on my plate at the moment but this is definitely something I want to refine.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://dev.to/zubairmohsin33"&gt;Zubair Mohsin&lt;/a&gt; asked something I've always wanted to. CSS isn't my strongest skill and so many people have mentioned how revolutionary flexbox is, I loved the answers. They pointed me towards some really great resources and cheat sheets.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/zubairmohsin33" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F141972%2Fe64f8fb9-ccc0-4ed6-910c-d47370551230.jpg" alt="zubairmohsin33"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/zubairmohsin33/explain-flexbox-like-i-m-five-3g2f" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Explain FlexBox Like I'm Five&lt;/h2&gt;
      &lt;h3&gt;Zubair Mohsin  ・ Feb 16 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#explainlikeimfive&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;The who idea of JamStack sites always confused me and like I'm just happy &lt;a href="https://dev.to/remotesynth"&gt;Brian Rinaldi&lt;/a&gt; put this article out. It gives us a very brief and concise history of the term and what it actually means. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"JavaScript, APIs and markup (the JAM in JAMstack) can describe pretty much every site on the web. Overly generic sounding buzzwords immediately set off most developer's BS detector." &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;did it for me haha.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/remotesynth" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2939%2Fa11acfc4-249c-4194-8172-29d0dad6b181.png" alt="remotesynth"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/remotesynth/is-jamstack-all-branding-and-little-substance-1pih" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Is JAMstack All Branding and Little Substance?&lt;/h2&gt;
      &lt;h3&gt;Brian Rinaldi ・ Feb 18 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#jamstack&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Headless CMS is another term that always threw me off. I've worked with them without knowing it, reading this article by &lt;a href="https://dev.to/lauragift21"&gt;Gift Egwuenu&lt;/a&gt; explains what they are, what they do and which ones are worth using - all things worth knowing if that's your cup of tea.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/lauragift21" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F19000%2Fc8919037-c4bc-41d7-9c9c-4230dfd51f74.gif" alt="lauragift21"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/lauragift21/what-s-a-headless-cms-and-why-should-you-care-1k04" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;What’s a Headless CMS and Why Should You Care?&lt;/h2&gt;
      &lt;h3&gt;Gift Egwuenu ・ Feb 20 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#jamstack&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#headlesscms&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;The folks at Orbit are always dropping community gems. I've never seen anyone put out a newsletter on dev.to and as if the idea alone isn't appealing, the content is just so nice and helpful. For a first edition, somethings in the newsletter really caught my eye - the idea of a high gravity community is an interesting one. You should check out the latest edition by &lt;a href="https://dev.to/dzello"&gt;Josh Dzielak&lt;/a&gt;.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/orbit" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1292%2F4e73c733-6009-4657-9035-091cd5530122.png" alt="Orbit" width="800" height="800"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F49012%2F2e9bb623-2238-46e2-ad1a-f27eb1cad442.jpg" alt="" width="800" height="800"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/orbit/the-observatory-1-high-gravity-4kp2" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;The Observatory #1: High Gravity&lt;/h2&gt;
      &lt;h3&gt;Josh Dzielak 🔆 for Orbit ・ Feb 21 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#devrel&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#community&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;To make up for putting this out late, I added the full five articles lol. How was your week??&lt;/p&gt;

</description>
      <category>career</category>
      <category>discuss</category>
      <category>watercooler</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Articles that made my Week #002</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Sat, 15 Feb 2020 15:34:43 +0000</pubDate>
      <link>https://dev.to/malgamves/articles-that-made-my-week-002-50i8</link>
      <guid>https://dev.to/malgamves/articles-that-made-my-week-002-50i8</guid>
      <description>&lt;p&gt;Hello again! I started this thing where I share five articles I read that meant a lot to me for some reason. This is last weeks..&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/articles-that-made-my-week-001-k00" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Articles that made my Week #001&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Feb 8 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#watercooler&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#discuss&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#todayilearned&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;This  week has been a little tougher for some reason. Random events, terrible scheduling, below par health and just a bunch of other things. Regardless here they are.&lt;/p&gt;

&lt;p&gt;A lot of my week has been spent doing prep and planning for &lt;a href="https://devcon.co.zm" rel="noopener noreferrer"&gt;DevCon Zambia&lt;/a&gt; (Yes, 6 months before). I've been trying to think about new ways to enable, speak about and promote collaboration in the community. Though not very related, this article by &lt;a href="https://dev.to/jerdog"&gt;Jeremy Meiss&lt;/a&gt; gave me more than a few things to think about and consider. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/jerdog" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F102542%2F0574248e-51b9-4ca0-b2fa-df672e2a1e13.png" alt="jerdog"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/jerdog/broaden-your-community-and-developer-relations-reach-through-collaboration-413" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Broaden your Community and Developer Relations reach through collaboration&lt;/h2&gt;
      &lt;h3&gt;Jeremy Meiss ・ Feb 11 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#devrel&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#community&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://dev.to/amrutaranade"&gt;Amrata Ranade&lt;/a&gt; makes a return to the list, I'm really enjoying her content. I'm trying to get better at writing, I realized that I'm really good at writing tutorials but really suck at in-depth analysis and opinion pieces. I'm trying to get better and this did help me figure out what I was doing wrong. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/amrutaranade" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F117224%2F99aa0b5e-4caa-4876-ba8d-c0e9f171cccd.jpeg" alt="amrutaranade"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/amrutaranade/how-to-write-a-blog-post-the-four-drafts-method-1k7b" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How to write a blog post: The four-drafts method&lt;/h2&gt;
      &lt;h3&gt;Amruta Ranade ・ Jan 5 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#writing&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devrel&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#showdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Career wise, if you're like me and want to be intentional with what you learn and how that helps you grow then this article will be really good for you. I'm at a stage in life where I just want to work towards being incredibly good at something. This piece by &lt;a href="https://dev.to/foundsiders"&gt;Foundsiders&lt;/a&gt; just spoke to that part of me and low-key reignited that flame to excel! Helps stay motivated with the job hunt at least.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/foundsiders" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1629%2Ffc84ff88-10cf-4c32-a3f8-01e3fd6ab011.png" alt="Foundsiders" width="720" height="720"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F34456%2Ffc0ad32a-b2cb-4af2-85bb-24281cfc60ca.jpg" alt="" width="450" height="450"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/foundsiders/when-is-the-perfect-time-to-move-on-as-a-developer-ofb" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;When Is the Perfect Time to Move on as a Developer?&lt;/h2&gt;
      &lt;h3&gt;Alex Fedorov for Foundsiders ・ Feb 11 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;On a list of things I've been wanting to go in-depth with, Kubernates is a close second. &lt;a href="https://dev.to/kodekloud"&gt;KodeKlouds&lt;/a&gt; idea of a Kubernates walk-through that is both engaging and informative was hard to ignore to be honest. Not to mention the Game Of Thrones vibes, if you're looking to learn too you should check it out. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/kodekloud" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F287899%2F000b41db-819a-4b9d-81d5-bce3c94cae34.png" alt="kodekloud"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/kodekloud/learn-kubernetes-by-playing-the-game-of-pods-43g4" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Learn Kubernetes by Playing the “Game of Pods”&lt;/h2&gt;
      &lt;h3&gt;KodeKloud ・ Feb 12 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#kubernetes&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;It's less than last week but hey, that's been my week - slow. How was your week??&lt;/p&gt;

</description>
      <category>career</category>
      <category>discuss</category>
      <category>watercooler</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Building a Realtime Collaborative Microsoft Paint</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Wed, 12 Feb 2020 10:41:27 +0000</pubDate>
      <link>https://dev.to/malgamves/building-a-realtime-collaborative-microsoft-paint-1h7f</link>
      <guid>https://dev.to/malgamves/building-a-realtime-collaborative-microsoft-paint-1h7f</guid>
      <description>&lt;p&gt;I built a thing, tweeted about it and promised to write about it. I didn't until now.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1142457275430461440-457" src="https://platform.twitter.com/embed/Tweet.html?id=1142457275430461440"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1142457275430461440-457');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1142457275430461440&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;In this tutorial, we’ll be building a realtime collaborative graphics editor to mimic the functionality of the iconic Microsoft Paint on Windows XP. We take the editors basic functionality to manipulate pixels and extend that to multiple users enabling realtime collaboration. Additionally, we want to be able to track the number of users working together on a project at a particular time, as well as create a medium for them to communicate via chat.&lt;/p&gt;

&lt;p&gt;At the end of this tutorial, you should have an in-browser graphics editor that looks like this.&lt;br&gt;
Try a &lt;a href="https://ms-paint-collab.netlify.com/" rel="noopener noreferrer"&gt;demo of it.&lt;/a&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fju3kkkxbyyohyhxeeka1.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fju3kkkxbyyohyhxeeka1.gif" alt="Collaborative Drawing" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The aim of the project is to enable realtime collaboration, with possible use cases on distributed design teams or to classrooms. Powering our realtime collaboration is PubNub, it provides a secure, scalable and reliable realtime infrastructure to power any application through its global Data Stream Network. We'll use the &lt;a href="https://www.pubnub.com/docs/web-javascript/pubnub-javascript-sdk" rel="noopener noreferrer"&gt;PubNub JavaScript SDK&lt;/a&gt; to connect multiple clients using the graphics editor. The goal is to have changes made on clients screens to reflect on all the others.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prerequisites for Building Collaborative Microsoft Paint
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Basic JavaScript knowledge&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.npmjs.com/downloading-and-installing-node-js-and-npm" rel="noopener noreferrer"&gt;Node and Npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A browser like Chrome, Firefox or Safari&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To start out, we'll need to create a few files and folders. We need to create the &lt;strong&gt;src&lt;/strong&gt; folder and make two new files - &lt;strong&gt;main.css&lt;/strong&gt; and &lt;strong&gt;app.js&lt;/strong&gt;, we'll get back to these a little later. We'll need a few image assets to make the graphics editor look appealing. In the root directory, create a folder called &lt;strong&gt;images&lt;/strong&gt;, &lt;a href="https://www.dropbox.com/s/2vzy0lu1uygsy2u/images.zip?dl=1" rel="noopener noreferrer"&gt;download the image assets&lt;/a&gt; and paste them in the images folder. Now we’ll create an &lt;strong&gt;index.html&lt;/strong&gt; file in the root directory and paste the following code:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;In &lt;strong&gt;index.html&lt;/strong&gt;, &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; holds our applications menu bar with a &lt;em&gt;save&lt;/em&gt; button that enables us to save our work locally. Right after the &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; we have a &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt; that houses the controls of our editor, we'll only use the brush option. &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt; is followed by a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tag with an id of &lt;em&gt;sketch&lt;/em&gt; that houses our &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; with an id of &lt;em&gt;paint&lt;/em&gt;, the &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; tag is important because it lets us draw graphics in the browser. Take note of ids for both because we'll need to reference them when adding functionality to our graphics editor using JavaScript. Another thing we need to take note of is the &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt; tag which houses a couple of &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tags which will enable us to change the colour of our brush and draw with multiple colours. At the end of the &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;, we have an &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tag that we'll use to keep track of the number of collaborators online.&lt;/p&gt;

&lt;p&gt;To add styling to our app, we need to paste the following into &lt;strong&gt;src &amp;gt; main.css&lt;/strong&gt;&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Post styling, we need to add functionality to our application. To do so, we'll paste the following into &lt;strong&gt;src &amp;gt; app.js&lt;/strong&gt; and run through what that code does.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Our &lt;strong&gt;app.js&lt;/strong&gt; file defines the functionality of our graphics editor. On the first line, we initialize PubNub and need to add our PubNub Publish and Subscribe keys. If you don't have a PubNub account, sign up for a free account to create your API keys. Sign up and log in using the form below:&lt;/p&gt;

&lt;p&gt;After that, we define an object called &lt;em&gt;mspaint&lt;/em&gt; that holds different properties. In the &lt;code&gt;start&lt;/code&gt; property, we use a function that initializes our canvas by doing a few things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We set the context to '2d' as we will be only drawing in 2d&lt;/li&gt;
&lt;li&gt;We set the height and width of our canvas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here, we use the &lt;code&gt;subscribe()&lt;/code&gt; method to subscribe to a channel, &lt;em&gt;draw&lt;/em&gt; which we defined earlier. We then define a callback function &lt;code&gt;drawFromStream()&lt;/code&gt; which collects drawings done by other users and makes those drawings reflect on a users canvas. Next, we initialize &lt;a href="https://www.pubnub.com/products/presence/" rel="noopener noreferrer"&gt;PubNub Presence&lt;/a&gt; to keep track of the number of users using the graphics editor at one time.&lt;/p&gt;

&lt;p&gt;We also have a few event listeners that track when the mouse button goes up, moves and goes back down. The event listeners translate these movements to drawings on the canvas. When a user is done drawing, we want a user’s activity on their canvas to appear on the canvases of every other user they are collaborating with. We know that a user is done drawing when their mouse button goes back up. So we take advantage of the event listener that tracks when a users mouse button goes up. It is here where we add the &lt;code&gt;publish()&lt;/code&gt; method from the PubNub JavaScript SDK so that a user’s drawing reflects on every other user’s canvas too.&lt;/p&gt;

&lt;p&gt;To run our graphics editor, we need to serve the files locally. To do this, we'll have to install &lt;code&gt;http-server&lt;/code&gt; by running &lt;code&gt;npm -g i http-server&lt;/code&gt;. In our projects root directory, run &lt;code&gt;http-server&lt;/code&gt; in your terminal and we have a working editor.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fju3kkkxbyyohyhxeeka1.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fju3kkkxbyyohyhxeeka1.gif" alt="Collaborative Drawing" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We've got the realtime collaborative portion done, now we want to enable communication between collaborators via chat. The &lt;a href="https://www.pubnub.com/solutions/chat/" rel="noopener noreferrer"&gt;PubNub Chat&lt;/a&gt; is a scalable and reliable In-App Messaging API that powers chat-based experiences.&lt;/p&gt;

&lt;p&gt;We'll implement this by adding another item to our menu bar that opens up a modal containing the chat section. In the &lt;strong&gt;index.html&lt;/strong&gt; file, add &lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#" id="openModal"&amp;gt;Chat&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/code&gt; to the &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; right after the last &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; tag. Now that we have the additional item in the menu bar, we need to paste this code that makes up our modal right after the closing &lt;code&gt;&amp;lt;/header&amp;gt;&lt;/code&gt; tag.&lt;/p&gt;

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

&amp;lt;!-- The Modal --&amp;gt;
      &amp;lt;div id="myModal" class="modal"&amp;gt;
        &amp;lt;!-- Modal content --&amp;gt;
        &amp;lt;div class="modal-content"&amp;gt;
          &amp;lt;span class="close"&amp;gt;&amp;amp;times;&amp;lt;/span&amp;gt;
          &amp;lt;p&amp;gt;Type your message and Press Enter.&amp;lt;/p&amp;gt;
          &amp;lt;input id="input" placeholder="Your Message Here" /&amp;gt;
          &amp;lt;p&amp;gt;Forum:&amp;lt;/p&amp;gt;
          &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;
          &amp;lt;div id="box"&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;The modal contains an input field where users can type messages they want to send to each other. The messages sent and received are displayed in the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tag with an ID of &lt;em&gt;box&lt;/em&gt;, we take note of the ID because we use it to update the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; with new messages in the chat. In &lt;strong&gt;app.js&lt;/strong&gt;, the code below adds functionality to the modal.&lt;/p&gt;

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

let modal = document.getElementById("myModal");
let btn = document.getElementById("openModal");
let span = document.getElementsByClassName("close")[0];
btn.onclick = function() {
  modal.style.display = "block";
};

span.onclick = function() {
  modal.style.display = "none";
};

window.onclick = function(event) {
  if (event.target == modal) {
    modal.style.display = "none";
  }
};


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

&lt;/div&gt;

&lt;p&gt;What this code does is give us different ways to interact with and use the modal. Now that we have it working, we need to work on connecting different user’s chats to each other using PubNub. At the bottom of &lt;strong&gt;app.js&lt;/strong&gt;, we have a function &lt;code&gt;chat()&lt;/code&gt; that subscribes to chat message data in our collaborative graphics editor as well as a callback function - &lt;code&gt;publishMessages()&lt;/code&gt; which publishes message data to the chat channel making all messages sent accessible for all the users of the chat in the graphics editor. We then initialize variables - &lt;em&gt;box&lt;/em&gt; for the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tag that holds chat responses, &lt;em&gt;input&lt;/em&gt; that handles data from the &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; tag and a channel where the communication occurs in PubNub’s Data Stream. We then subscribe to the channel using the &lt;code&gt;subscribe()&lt;/code&gt; method and add a listener that updates the users with the latest messages from the chat by pushing them into our chat modal. We also have an &lt;code&gt;eventListener()&lt;/code&gt; method to publish messages to the channel on a keypress. We then use the &lt;code&gt;onload()&lt;/code&gt; method to make sure the chat functionality is enabled when the window loads. Run &lt;code&gt;http-server&lt;/code&gt; and have a working chat to add to our collaborative graphics editor.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6zwhkf0knk89xsw79l1u.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6zwhkf0knk89xsw79l1u.gif" alt="PubNub Chat Demo" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have a Realtime Collaborative Microsoft Paint site that can track the number of online users and connect them through a chat. If you have any questions, feel free to reach out to me on &lt;a href="https://twitter.com/malgamves" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Sorry I took so long to release it. I hope you found it useful it.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Articles that made my Week #001</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Sat, 08 Feb 2020 17:19:13 +0000</pubDate>
      <link>https://dev.to/malgamves/articles-that-made-my-week-001-k00</link>
      <guid>https://dev.to/malgamves/articles-that-made-my-week-001-k00</guid>
      <description>&lt;p&gt;Hey! It's been a while since I've written to you all on a personal note. &lt;/p&gt;

&lt;p&gt;I said hi a while ago.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/malgamves" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75859%2Ffc2b395e-0a8d-4992-b77b-0d655759c931.jpg" alt="malgamves"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/malgamves/hello-devto-54h8" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;👋 Hello dev.to&lt;/h2&gt;
      &lt;h3&gt;Daniel Madalitso Phiri ・ Oct 11 '18&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#introduction&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#community&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;I haven't changed much (&lt;a href="https://twitter.com/malgamves/status/1219167492653883393?s=20" rel="noopener noreferrer"&gt;I have&lt;/a&gt;). For some reason I forgot how therapeutic writing on here was. &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1222503288593174528-374" src="https://platform.twitter.com/embed/Tweet.html?id=1222503288593174528"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1222503288593174528-374');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1222503288593174528&amp;amp;theme=dark"
  }



 &lt;/p&gt;

&lt;p&gt;I plan on doing this for a long time as a way of keeping track of my actions and trying to align them with my intentions. They say we are what we eat and reading is like eating for the brain lol. Your actions mirror your intentions and keeping track of what I'm consuming can help me gauge where I'm at and what I'm gravitating towards. It'll be nothing too deep, surface level reasons for why I read/enjoyed something and hopefully you can too.&lt;/p&gt;

&lt;p&gt;I've been looking for balance, balance in work and balance in my life. It can all be too much sometimes and figuring out ways to work through things is important. This post by &lt;a href="https://dev.to/amrutaranade"&gt;Amrata Ranade&lt;/a&gt; did just that for me. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/amrutaranade" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F117224%2F99aa0b5e-4caa-4876-ba8d-c0e9f171cccd.jpeg" alt="amrutaranade"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/amrutaranade/2020-wellness-theme-goals-healthy-life-in-tech-5hlj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;2020 Wellness Theme &amp;amp; Goals // Healthy Life in Tech&lt;/h2&gt;
      &lt;h3&gt;Amruta Ranade ・ Feb 7 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#showdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#health&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Lots of times you feel dormant and useless, like you've learned nothing despite your constant efforts or work. Figuring out something you like, sticking with it and moving forward has been something I'm working towards and this post by &lt;a href="https://dev.to/cjtaylor1990"&gt;Corbin Taylor&lt;/a&gt;, which by the way is filled with such gems, I guess helped me re-adjust and re-strategize. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/cjtaylor1990" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F242409%2F80364db3-efb3-4d88-8586-20f4e96b0206.jpg" alt="cjtaylor1990"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/cjtaylor1990/how-to-maximize-your-productivity-and-learning-by-keeping-your-goals-in-mind-423c" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How To Maximize Your Productivity And Learning By Keeping Your Goals In Mind&lt;/h2&gt;
      &lt;h3&gt;Corbin Taylor ・ Feb 5 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#codenewbie&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;I &lt;a href="https://www.youtube.com/playlist?list=PLdUgFHjW6lznXZ4_FbEYp-FxxsNja9HtE" rel="noopener noreferrer"&gt;speak&lt;/a&gt; at conferences and meetups and although I'm definitely not new at it, I haven't necessarily benefited a lot from it and was re-evaluating whether it's something worth spending time and money (it costs a lot to speak) on it. If somehow you feel the same, &lt;a href="https://dev.to/daedtech"&gt;Erik Dietrich&lt;/a&gt; wrote an amazing post that goes into how you can make public speaking benefit you.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/daedtech" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F135503%2F066e21de-889b-4bcf-884a-9e15ea9e178e.jpg" alt="daedtech"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/daedtech/conference-speaking-isn-t-good-for-your-career-until-you-make-it-good-pb9" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Conference Speaking Isn't Good for Your Career Until You Make it Good&lt;/h2&gt;
      &lt;h3&gt;Erik Dietrich ・ Feb 4 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#speaking&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;It was global game jam &lt;a href="https://media.tenor.com/images/8a043b8627abc23405130ffa4ce2ef3f/tenor.gif" rel="noopener noreferrer"&gt;about a week ago&lt;/a&gt;. My team and I built &lt;a href="https://github.com/Maria218/GlobalGameJamThing" rel="noopener noreferrer"&gt;this&lt;/a&gt; game with Vue.js and I wasn't too happy with how slow it was in production, it's been troubling me for the longest time and &lt;a href="https://dev.to/veebuv"&gt;Vaibhav Namburi&lt;/a&gt; offered some insight into what I might have to fix which was rather refreshing - I might just write about it.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/veebuv" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F154356%2F2a39fb27-eed0-4da9-9979-389276c16ae6.jpg" alt="veebuv"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/veebuv/5-extremely-easy-ways-to-drastically-improve-your-vuejs-app-s-speed-5k0" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;5 Extremely Easy ways to drastically improve your VueJS app’s speed&lt;/h2&gt;
      &lt;h3&gt;Vaibhav Namburi ・ May 27 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#frontend&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#optimisation&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Delayed is not denied! You always see people sharing their successes and &lt;a href="https://dev.to/edyasikpo"&gt;Didicodes&lt;/a&gt; choose to be different. It goes to show that behind so many stories of success are a number of failures, but because we only see one side, may people (including myself) find it hard to cope with their failures and push forward because we think no one else is going through anything similar. Such a good read.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;That's been my week. How was your week??&lt;/p&gt;

</description>
      <category>career</category>
      <category>watercooler</category>
      <category>discuss</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Event Triggered GraphQL: Making Static Sites Dynamic</title>
      <dc:creator>Daniel Madalitso Phiri</dc:creator>
      <pubDate>Wed, 05 Feb 2020 08:34:57 +0000</pubDate>
      <link>https://dev.to/malgamves/event-triggered-graphql-1p6n</link>
      <guid>https://dev.to/malgamves/event-triggered-graphql-1p6n</guid>
      <description>&lt;p&gt;I saw this amazing talk by Tanmai Gopal, one of the founders at JAMStack SF, on &lt;a href="https://youtube.com/" rel="noopener noreferrer"&gt;Making Static React Sites Dynamic&lt;/a&gt; . &lt;/p&gt;

&lt;p&gt;“I could probably cook up a Vue alternative,” I thought. &lt;/p&gt;

&lt;p&gt;My &lt;a href="https://blog.malgamves.dev" rel="noopener noreferrer"&gt;Blog&lt;/a&gt; happens to be built with Gridsome, a Vue powered static site generator for building blazing-fast static websites. &lt;/p&gt;

&lt;p&gt;I’ve played around with Hasura in the past: it’s a super fast GraphQL server that gives you instant, realtime GraphQL APIs over Postgres. So we’re going to build something with Gridsome, deploy it, and then make a portion of it dynamic (sort of) with GraphQL and Netlify. &lt;/p&gt;

&lt;p&gt;I have a list of books I've read in a GraphQL API and I want to use that as a data source for the content on our Gridsome site. We want this site to update dynamically when ever we add a new book to the list or take one out. &lt;/p&gt;

&lt;p&gt;I’ll show you how. &lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR: Hasura Event Triggers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://codesandbox.io/s/gridsome-remote-graphql-source-dkhn1?fontsize=14&amp;amp;hidenavigation=1&amp;amp;theme=dark" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I left my GraphQL endpoint open for the sake of this tutorial, but it’s not advisable for a production environment. &lt;/p&gt;

&lt;p&gt;Have a look at &lt;a href="https://dev.to/hasurahq/hasura-authentication-explained-2c95"&gt;this post&lt;/a&gt; on securing your API by adding authorization and managing users. &lt;/p&gt;

&lt;p&gt;We’ll start out by installing the Gridsome CLI tool with &lt;code&gt;npm install --global @gridsome/cli&lt;/code&gt; . &lt;/p&gt;

&lt;p&gt;When that’s done, we create a new Gridsome project with &lt;code&gt;gridsome create &amp;lt;project name&amp;gt;&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;After that, we &lt;code&gt;cd &amp;lt;project name&amp;gt;&lt;/code&gt;  and then run it locally with &lt;code&gt;gridsome develop&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;You’ll get a very simple page like this.&lt;/p&gt;

&lt;p&gt;Now go to &lt;a href="https://docs.hasura.io/1.0/graphql/manual/getting-started/heroku-simple.html" rel="noopener noreferrer"&gt;this page&lt;/a&gt; and click Deploy to Heroku. You might have to create a new Heroku account. &lt;/p&gt;

&lt;p&gt;When that’s sorted, you’ll be prompted to create an app name. Key one in and then click Deploy. &lt;/p&gt;

&lt;p&gt;Once it’s deployed, head over to .herokuapp.com to access your Hasura API Explorer. &lt;/p&gt;

&lt;p&gt;It should look this:&lt;/p&gt;

&lt;p&gt;On our API Console, we’ll head over to the data section and click add table. &lt;/p&gt;

&lt;p&gt;We then create a table called books and go on to create the following columns:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    - `id, Integer (AutoIncrement), Unique`
    - `name, text`
    -`author, text`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Set &lt;code&gt;id&lt;/code&gt; as the primary key. Then, click create.  &lt;/p&gt;

&lt;p&gt;Now that we’ve got a books table, we’ve got to insert data into it. &lt;/p&gt;

&lt;p&gt;In the data section, click on the books table and pick the insert data tab. Feel free to add any books and authors you enjoy. Mine looks something like this:&lt;/p&gt;

&lt;p&gt;We’re done with the Hasura API console for now. &lt;/p&gt;

&lt;p&gt;Next up, we want to be able to query a remote GraphQL source. &lt;/p&gt;

&lt;p&gt;First, we need to install the Gridsome source plugin. We’ll enter &lt;code&gt;npm install gridsome-source-graphql&lt;/code&gt; to do so. Once that’s done, we need to edit our gridsome.config.js. &lt;/p&gt;

&lt;p&gt;We then paste in the following code: &lt;/p&gt;

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

    plugins: [
        {
          use: 'gridsome-source-graphql',
          options: {
            url: 'https://example.com/api',
            fieldName: 'puppies',
            typeName: 'puppyTypes',

          },
        },
      ] 


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

&lt;/div&gt;

&lt;p&gt;Be sure to change &lt;code&gt;url&lt;/code&gt;, &lt;code&gt;fieldName&lt;/code&gt;, and &lt;code&gt;typeName&lt;/code&gt;  (although the latter is optional). &lt;/p&gt;

&lt;p&gt;You can get the &lt;code&gt;url&lt;/code&gt;  from the Hasura API console, i.e .herokuapp.com/v1alpha1/graphql. &lt;/p&gt;

&lt;p&gt;I’ll name &lt;code&gt;fieldType&lt;/code&gt; booksList and leave the &lt;code&gt;typeName&lt;/code&gt; blank. They’re important, so remember them. &lt;/p&gt;

&lt;p&gt;Now let's navigate to the src &amp;gt; pages &amp;gt; About.vue. This is where we want to display the data. &lt;/p&gt;

&lt;p&gt;Gridsome uses GraphQL to query data that it displays on pages.&lt;/p&gt;

&lt;p&gt;After the closing , we paste the following page query:&lt;/p&gt;

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

    &amp;lt;page-query&amp;gt;  
    query {
      books {
        author
        id
        name
      }
    }
    &amp;lt;/page-query&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;The query fetches the author, id, and name from the books table. Now we need to display the data we’re querying. &lt;/p&gt;

&lt;p&gt;To do so, add the following code below the sole &lt;/p&gt;
&lt;p&gt; tag:&lt;/p&gt;

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

    &amp;lt;h1&amp;gt;Books Read by Me&amp;lt;/h1&amp;gt;
    &amp;lt;div v-for="book in $page.books" v-bind:key="book.id"&amp;gt;
       &amp;lt;li&amp;gt;{{ book.author }} - {{ book.name }}&amp;lt;/li&amp;gt;
    &amp;lt;/div&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;We use &lt;code&gt;$page.books&lt;/code&gt; to access the query response and parse through it with the v-for directive, storing each value in the book variable. We then use this to display the book author and book name. &lt;/p&gt;

&lt;p&gt;This also happens to be a really nice way of understanding how Gridsome displays data. When we run this locally and click ‘about’, we can see the books and their authors displayed. &lt;/p&gt;

&lt;p&gt;If you head back to the Hasura API Console and insert one row into the books table, you’ll notice that the list on the site updates. &lt;/p&gt;

&lt;p&gt;This only happens locally because the data source is continuously refreshed. &lt;/p&gt;

&lt;p&gt;When you deploy the app, only the data available on deploy is displayed, meaning when we insert a row in the API console it will not show until the site is rebuilt.&lt;/p&gt;

&lt;p&gt;To solve this, we’ll leverage Hasura Event Triggers to trigger a Netlify build that will then update the data in your database.&lt;/p&gt;

&lt;p&gt;You will need to push your code to GitHub or GitLab and connect your repository to Netlify. &lt;/p&gt;

&lt;p&gt;Gridsome put together a great resource to help out if you have any trouble doing so. Check that out &lt;a href="https://gridsome.org/docs/deploy-to-netlify/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;Once deployed to Netlify, we need to create a build hook. &lt;/p&gt;

&lt;p&gt;I’ll call mine hasura-event-trigger. &lt;/p&gt;

&lt;p&gt;When you create one, you get a URL that triggers a build. &lt;/p&gt;

&lt;p&gt;Copy this URL and head back to your Hasura API console. &lt;/p&gt;

&lt;p&gt;This time, we’ll head over to the events section. &lt;/p&gt;

&lt;p&gt;Hasura event triggers capture events on specified tables and invoke webhooks to carry out any custom logic. &lt;/p&gt;

&lt;p&gt;Events could be inserts, updates, or deletes on a row. They also give you the flexibility to add manual triggers. &lt;/p&gt;

&lt;p&gt;We want to trigger a rebuild whenever we delete or add a book. After clicking ‘create’, we name it ‘author-update’, select the books table, tick ‘insert’, and update as trigger operations. &lt;/p&gt;

&lt;p&gt;We’re then asked to add a webhook URL. This is the build hook URL we copied from Netlify. &lt;/p&gt;

&lt;p&gt;After pasting that in, click ‘create’. &lt;/p&gt;

&lt;p&gt;Now, every time we insert or delete a row (be it manually in the API console or with a mutation using another web app), the event is triggered and a new build will start. &lt;/p&gt;

&lt;p&gt;This updates the side content—some would say dynamically. &lt;/p&gt;

&lt;p&gt;Add or delete a few rows to trigger builds and your events tab will look like this:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1zq18ru3i64w8fxv3rw.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1zq18ru3i64w8fxv3rw.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The builds on Netlify also show what triggered them. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5p526zm477cetqyx9f7.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5p526zm477cetqyx9f7.png" width="349" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Now we have a sort of dynamic static site that leverages Hasura GraphQL Event Triggers. &lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://github.com/malgamves/gridsome-remote-gql-source" rel="noopener noreferrer"&gt;full repo&lt;/a&gt; on my GitHub and feel free to &lt;a href="https://github.com/malgamves" rel="noopener noreferrer"&gt;tweet&lt;/a&gt; me any questions.&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>hasura</category>
      <category>gridsome</category>
      <category>vue</category>
    </item>
  </channel>
</rss>
