<?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: Kudakwashe Paradzayi</title>
    <description>The latest articles on DEV Community by Kudakwashe Paradzayi (@kudapara).</description>
    <link>https://dev.to/kudapara</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%2F112269%2F2838faf8-6b9b-4287-9071-d377c534e1a8.jpg</url>
      <title>DEV Community: Kudakwashe Paradzayi</title>
      <link>https://dev.to/kudapara</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kudapara"/>
    <language>en</language>
    <item>
      <title>What the Rails!</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Tue, 02 Aug 2022 07:35:00 +0000</pubDate>
      <link>https://dev.to/kudapara/what-the-rails-3g5f</link>
      <guid>https://dev.to/kudapara/what-the-rails-3g5f</guid>
      <description>&lt;p&gt;In 2003, a Danish programmer by the name &lt;a href="https://dhh.dk/"&gt;David Heinemeier Hansson&lt;/a&gt; created a web development framework that became known as Ruby On Rails. He extracted it from the work he was doing for 37signals building Basecamp.&lt;/p&gt;

&lt;p&gt;Since then this framework has gone on to be used to build world scale applications such as Github, Shopify and Airbnb.&lt;/p&gt;

&lt;p&gt;According to the &lt;a href="https://rubyonrails.org/"&gt;official definition&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Rails is a full-stack framework. It ships with all the tools needed to build amazing web apps on both the front and back end.&lt;br&gt;
Rendering HTML templates, updating databases, sending and receiving emails, maintaining live pages via WebSockets, enqueuing jobs for asynchronous work, storing uploads in the cloud, providing solid security protections for common attacks. Rails does it all and so much more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This framework solves the problem writing boilerplate code all over again for new projects and with &lt;a href="https://rubyonrails.org/doctrine#convention-over-configuration"&gt;convention over configuration&lt;/a&gt;, it introduces &lt;a href="https://www.youtube.com/watch?v=zKyv-IGvgGE&amp;amp;t=1037s"&gt;conceptual compression&lt;/a&gt;, which means that you can focus more on writing code that actually adds value to the business.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rubyonrails.org/doctrine"&gt;ROR has a doctrine&lt;/a&gt;, which I highly recommend you read, lays out the values and principles that guide the main decisions that shape ROR:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rubyonrails.org/doctrine#optimize-for-programmer-happiness"&gt;Optimize for programmer happiness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubyonrails.org/doctrine#convention-over-configuration"&gt;Convention over Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubyonrails.org/doctrine#omakase"&gt;The menu is omakase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubyonrails.org/doctrine#no-one-paradigm"&gt;No one paradigm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubyonrails.org/doctrine#beautiful-code"&gt;Exalt beautiful code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubyonrails.org/doctrine#provide-sharp-knives"&gt;Provide sharp knives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubyonrails.org/doctrine#integrated-systems"&gt;Value integrated systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubyonrails.org/doctrine#progress-over-stability"&gt;Progress over stability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubyonrails.org/doctrine#big-tent"&gt;Push up a big tent&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;In this series we will be building an application from scratch to show the features of rails. The goal is for me to dig deeper into rails and become a better programmer. You might learn a thing or two, so let's go on this journey together.&lt;/p&gt;

&lt;p&gt;Printshops is an imaginary printing app, where a printing shop can receive document submissions through the app, print them and ship them or have them collected.&lt;/p&gt;

&lt;p&gt;In the next article we will have a deep dive into the requirements of this application and we start building it.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>demo</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introducing Rails mini series</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Tue, 19 Jul 2022 05:33:30 +0000</pubDate>
      <link>https://dev.to/kudapara/introducing-rails-mini-series-413p</link>
      <guid>https://dev.to/kudapara/introducing-rails-mini-series-413p</guid>
      <description>&lt;p&gt;For the past 3 years I have been developing web applications with &lt;a href="https://rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;. It is arguably one of the most robust programming frameworks out there being used to develop the likes of &lt;a href="https://github.com/"&gt;Github&lt;/a&gt;, &lt;a href="https://shopify.com/"&gt;Shopify&lt;/a&gt;, &lt;a href="https://basecamp.com/"&gt;Basecamp&lt;/a&gt;, &lt;a href="https://airbnb.com/"&gt;Airbnb&lt;/a&gt;, &lt;a href="https://twitch.tv/"&gt;Twitch&lt;/a&gt;, just to name a few.&lt;/p&gt;

&lt;p&gt;I will be documenting my experience with Ruby on Rails from the initial command &lt;code&gt;rails new&lt;/code&gt; to deploying to a remote instance that is accessible from anywhere in the world.&lt;/p&gt;

&lt;p&gt;Stay tuned!&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>devops</category>
    </item>
    <item>
      <title>Encrypting ActiveRecords with Lockbox in Rails 6.1</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Thu, 08 Jul 2021 10:21:16 +0000</pubDate>
      <link>https://dev.to/kudapara/encrypting-activerecords-with-lockbox-in-rails-6-1-45d2</link>
      <guid>https://dev.to/kudapara/encrypting-activerecords-with-lockbox-in-rails-6-1-45d2</guid>
      <description>&lt;p&gt;Before I dive in, I will give you a bit of context.&lt;/p&gt;

&lt;p&gt;I am currently working on an application that uses the &lt;a href="https://stellar.org"&gt;Stellar blockchain&lt;/a&gt; behind the scenes to open up access to capital to farmers in developing countries like Zimbabwe.&lt;/p&gt;

&lt;p&gt;The purpose of the blockchain is to provide transparency from the moment the investor parts with their hard-earned money, to the time the farmer starts sharing profits with investors. By nature, blockchain is very complex and the average farmer can not be bothered to worry about setting up wallets, ensuring their keys are safely secured, and all the jargon that is associated with blockchain technologies.&lt;/p&gt;

&lt;p&gt;It is essential that we hide the complexity from the end-users, and make their experiences as seamless as possible. Sort of how when we browse websites, we do not even think about entangled mess of TCP/IP connections happening, or worse still the 1s and 0s being executed by CPUs in data centers all over the world. This is how we apply &lt;a href="https://m.signalvnoise.com/conceptual-compression-means-beginners-dont-need-to-know-sql-hallelujah/"&gt;conceptual compression&lt;/a&gt; to make our systems easier and delightful to use.&lt;/p&gt;

&lt;p&gt;This application I am talking about is built on &lt;a href="https://rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;. And we will be the custodians of the crypto wallets of both the farmers and the investors. However, this is fraught with risk as &lt;a href="https://selfkey.org/list-of-cryptocurrency-exchange-hacks/"&gt;crypto exchanges are prone to hacking&lt;/a&gt;, but it is a risk we acknowledge and are working on adding layers of security to mitigate that risk.&lt;/p&gt;

&lt;p&gt;The first one being, Encryption! It would be very irresponsible to store seed phrases (a.k.a secret keys) to the crypto wallets in plain text. Hackers would have one hell of a tea party and thank the heavens for such an easy hack. When I saw &lt;a href="https://edgeguides.rubyonrails.org/active_record_encryption.html"&gt;ActiveRecord encrypted attributes&lt;/a&gt; I was happy because Rails has always been the battery included framework that came with everything you needed out of the box. However, I was disappointed to discover it was only available for Rails 7, which is yet to be officially released.&lt;/p&gt;

&lt;p&gt;So I decided to go on with &lt;a href="https://github.com/ankane/lockbox"&gt;lockbox&lt;/a&gt;, a modern encryption gem for Ruby and Rails, created by one highly reputable &lt;a href="https://twitter.com/andrewkane"&gt;Andrew Kane&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Lockbox
&lt;/h2&gt;

&lt;p&gt;Add the gem to your Gemfile.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Gemfile.rb

gem 'lockbox'

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

&lt;/div&gt;



&lt;p&gt;Then run &lt;code&gt;bundle install&lt;/code&gt; to complete your installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup your application to encrypt using Lockbox
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;It's very important to try this on your local machine first, then on a staging server, then finally on your production server, to avoid loss of (sometimes irrecoverable) data - &lt;a href="https://twitter.com/KUDAPARA/status/1412807738996969475"&gt;@kudapara&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Generate a key
&lt;/h3&gt;

&lt;p&gt;In the project directory run &lt;code&gt;rails console&lt;/code&gt; and run the following code to generate the key that will be used to encrypt your records.&lt;br&gt;
&lt;/p&gt;

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

# "daa846ef907a5b44a6b83ac6991a9ff63126b869b2f97afc43d8329b46328abe"

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

&lt;/div&gt;



&lt;p&gt;Copy the generated key and use it in your preferred way to handle secrets in your Rails application, either&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. rails credentials&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add your generated key to your credentials for each environment (rails credentials:edit --environment for Rails 6+)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lockbox:
  master_key: daa846ef907a5b44a6b83ac6991a9ff63126b869b2f97afc43d8329b46328abe

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. rails credentials without environment specific master_key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;or create &lt;code&gt;config/initializers/lockbox.rb&lt;/code&gt; with something like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lockbox_master_key = Rails.application.credentials.lockbox[:master_key]
Lockbox.master_key = lockbox_master_key

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

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;lockbox_master_key&lt;/code&gt; could be coming from rails credentials or a key management service like &lt;a href="https://www.vaultproject.io/"&gt;VaultProject&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Use LOCKBOX_MASTER_KEY environment variable&lt;/strong&gt; (not recommended in production)&lt;br&gt;
&lt;/p&gt;

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

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Migrate the model you want to encrypt attributes for
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class AddSeedCiphertextToAccounts &amp;lt; ActiveRecord::Migration[6.1]
  def change
    add_column :accounts, :seed_ciphertext, :text

    # add this line if you are encrypting an existing column
    Lockbox.migrate(User)
  end
end

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

&lt;/div&gt;



&lt;p&gt;and add the following code to your model&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Account &amp;lt; ApplicationRecord
  encrypts :seed, migrating: true

  # for existing columns. remove this line after dropping seed column
  self.ignored_columns = ["seed"]
end

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

&lt;/div&gt;



&lt;p&gt;Take note of the &lt;code&gt;migrating:true&lt;/code&gt;. That is to ensure you encrypt an existing column without downtime. If you are adding a new sensitive column to your model, you can ignore it.&lt;/p&gt;

&lt;p&gt;Commit your changes and run the migrations. Confirm that your secret fields have been encrypted properly and everything is working without issue.&lt;/p&gt;

&lt;p&gt;Once you are satisfied that all is well, you can now add the migration to drop the original column that stored the data in plaintext.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class DropSeedFromAccounts &amp;lt; ActiveRecord::Migration[6.1]
  def change
    remove_column :accounts, :seed
  end
end

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

&lt;/div&gt;



&lt;p&gt;Once you run this migration, there is no turning back, that original unencrypted data is gone forever, please, please, I beg, verify 10 times if possible before running this migration.&lt;/p&gt;

&lt;p&gt;Then you're good to go. No need to change anywhere else in your codebase. It still works the same as before, so code like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;current_user.accounts.create(address: blockchain_account.address, seed: blockchain_account.seed, account_type: 'regular')

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

&lt;/div&gt;



&lt;p&gt;will still work, and the seed will be automatically encrypted.&lt;/p&gt;

&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stellar::KeyPair.from_seed(current_user.accounts.regular.first.seed)

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

&lt;/div&gt;



&lt;p&gt;will still work and the seed will be automatically decrypted.&lt;/p&gt;

&lt;p&gt;This is the first step in the right direction. We are still exploring more ways we can secure this system from internal threats, but for now, this is good to go.&lt;/p&gt;

&lt;p&gt;🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you for reading, If you enjoyed this content you can donate some &lt;a href="https://www.stellar.org/lumens"&gt;Stellar Lumens (XLM)&lt;/a&gt; or &lt;a href="https://dev.toLink"&gt;USDC&lt;/a&gt; to my stellar wallet&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://stellar.expert/explorer/public/account/GBFAKFE3X6WTWPL7D4XKSGHBODHFCROPCTGQNF27VRFLQS26GLZUP6KS"&gt;https://stellar.expert/explorer/public/account/GBFAKFE3X6WTWPL7D4XKSGHBODHFCROPCTGQNF27VRFLQS26GLZUP6KS&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>ruby</category>
      <category>rails</category>
      <category>security</category>
    </item>
    <item>
      <title>Why? What's the point? For what purpose?</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Fri, 02 Jul 2021 10:48:22 +0000</pubDate>
      <link>https://dev.to/kudapara/why-what-s-the-point-for-what-purpose-3pfa</link>
      <guid>https://dev.to/kudapara/why-what-s-the-point-for-what-purpose-3pfa</guid>
      <description>&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;This question constantly rings in my head!&lt;/p&gt;

&lt;p&gt;Why am I here, what is my purpose?&lt;/p&gt;

&lt;p&gt;Why do I constantly feel like a fraud?&lt;/p&gt;

&lt;p&gt;Why do people always awe at the work I do, yet I see it as mediocre?&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Why do I feel cursed, when in fact I'm blessed beyond measure?&lt;/p&gt;

&lt;p&gt;Why do I not get satisfied, even though the work of my hands is transforming thousands of lives?&lt;/p&gt;

&lt;p&gt;Why do I always ask myself why?&lt;/p&gt;

&lt;p&gt;Why do I always feel like a million people in my head?&lt;/p&gt;

&lt;p&gt;Why? Why? Why?&lt;/p&gt;

&lt;p&gt;Why, even though I am winning, I feel like self-sabotaging?&lt;/p&gt;

&lt;p&gt;Tried music. Tried art. Tried coding. Tried design.&lt;/p&gt;

&lt;p&gt;None seem to answer my question.&lt;/p&gt;

&lt;p&gt;I am going to make it my life's mission to be able to answer this question.&lt;/p&gt;

&lt;p&gt;So simple, yet seemingly like I can not find answers for it.&lt;/p&gt;

&lt;p&gt;Until then, I am going to ask you the same question.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Cover Photo by Oladimeji Ajegbile from Pexels&lt;/code&gt;&lt;/p&gt;

</description>
      <category>mentalhealth</category>
      <category>coding</category>
    </item>
    <item>
      <title>Making Hotwire play nice with ViewComponent</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Mon, 10 May 2021 12:51:04 +0000</pubDate>
      <link>https://dev.to/kudapara/making-hotwire-play-nice-with-viewcomponent-51lf</link>
      <guid>https://dev.to/kudapara/making-hotwire-play-nice-with-viewcomponent-51lf</guid>
      <description>&lt;p&gt;Have you ever wondered if you could use &lt;a href="//hotwire.dev"&gt;hotwire&lt;/a&gt; with &lt;a href="https://github.com/github/view_component"&gt;&lt;code&gt;view_component&lt;/code&gt;&lt;/a&gt; instead of partials. If you have, maybe tried and failed, welcome here.&lt;/p&gt;

&lt;p&gt;By default &lt;a href="https://hotwire.dev"&gt;hotwire&lt;/a&gt; is made to work with partials, which is the built in way to extract 'components' in the context of rails based apps. In a certain application I was building I have used &lt;a href="https://github.com/github/view_component"&gt;&lt;code&gt;view_component&lt;/code&gt; (inspired by react)&lt;/a&gt; in place of partials because it is a framework for building reusable, testable &amp;amp; encapsulated view components in Ruby on Rails.&lt;/p&gt;

&lt;p&gt;It was all fun and games until I wanted to make &lt;a href="https://hotwire.dev"&gt;hotwire&lt;/a&gt; to work with the view components I had made.&lt;/p&gt;

&lt;p&gt;We will use an e-commerce application as an example to demonstrate the problem at hand.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LJ7ASqJD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1620650508471/XwXipgBgf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LJ7ASqJD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1620650508471/XwXipgBgf.gif" alt="freshstore-gif.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;NB: no JavaScript was used in making this interactive, except for displaying the loading spinners&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hotwire uses websockets to broadcast changes to all clients listening, and this is very fast considering websockets maintain a persistent open connection with the client and the changes feel almost instantaneous. In this example when a user adds a product to cart, &lt;a href="https://hotwire.dev"&gt;hotwire&lt;/a&gt; will broadcast the new product component and it will be replaced on the frontend, smooth as an SPA, with minimum javascript.&lt;/p&gt;

&lt;p&gt;When a product is added to cart, we want to show it change on the UI, unlike a traditional API request which returns JSON, hotwire returns html, in the form of turbo streams. When the response arrives it will only change the specific section in the page that has a turbo frame that matches a specific id.&lt;/p&gt;

&lt;p&gt;Using view components in this context would also help reduce the response's payload to only contain that section that has to be replaced. However view components and turbo streams dont play nice together so I googled around for a quick solution and found &lt;a href="https://discuss.hotwire.dev/t/viewcomponents-not-rendering-with-rails-stream-helper/1813/2"&gt;this answer&lt;/a&gt; on the hotwire forum. I then used that answer to successfully render a ViewComponent in the response.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# app/controller/carts_controller.rb

class CartsController &amp;lt; ApplicationController
  def update
    product = Product.find(cart_params[:product_id])
    line_item = CartUpdateService.call(@product, cart_params[:quantity])
    product_component = ProductComponent.new(
      product: product,
      quantity_in_cart: @line_item.quantity
    )

    respond_to do |format|
      format.turbo_stream {
        stream = turbo_stream.replace product do
           view_context.render(product_component)
        end

        render turbo_stream: stream

        head :ok
      }
    end
end

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

&lt;/div&gt;



&lt;p&gt;This was a good solution until I realised that you can only render a stream once, so this crumbled when I wanted to broadcast changes to other areas of the application, like adding &lt;code&gt;line_items&lt;/code&gt; to the cart in the UI, updating cart count, etc. This is because, by design turbo broadcasts are meant to be initiated in the model, which I sort of thought as a code smell because not only was the model responsible for data persistence, validations and business logic, it was also responsible for the way the UI worked. We all strive for &lt;a href="https://thoughtbot.com/blog/skinny-controllers-skinny-models"&gt;skinny models&lt;/a&gt;, don't we.&lt;/p&gt;

&lt;p&gt;This was how it was before, when using partials&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# app/models/line_item.rb
class LineItem &amp;lt; ApplicationRecord
  ...

  after_create_commit :broadcast_prepend_line_item, if: :current_user_present?

  private def broadcast_prepend_line_item
    broadcast_prepend_to "#{Current.user.id}:line_items", partial: 'line_items/line_item', locals: { line_item: self, store: self.order.store }
  end
  ...
end

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

&lt;/div&gt;



&lt;p&gt;And as far as I had researched there was no way to use View Component instead of partials to broadcast these updates.&lt;/p&gt;

&lt;p&gt;So I went and dug into the &lt;a href="https://github.com/hotwired/turbo-rails"&gt;hotwire source code&lt;/a&gt; to look for clues whether it was possible or not.&lt;/p&gt;

&lt;p&gt;After series of iterations I came up with the concept of &lt;code&gt;LiveComponent&lt;/code&gt;, a class that would inherit from &lt;code&gt;ViewComponent::Base&lt;/code&gt; but also include hotwire modules to allow broadcasts and streams. Here is the complete code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# app/components/live_component.rb

class LiveComponent &amp;lt; ViewComponent::Base
  include Turbo::FramesHelper, Turbo::Streams::StreamName, Turbo::Streams::Broadcasts

  attr_reader :streamable, :target

  def initialize(view_context: nil, **args)
    @view_context = view_context
  end

  def broadcast_replace
    return unless @view_context.present?

    broadcast_replace_later_to(
      streamable,
      target: target,
      content: @view_context.render(self)
    )
  end

  def broadcast_prepend
    return unless @view_context.present?

    broadcast_prepend_to(
      streamable,
      target: broadcast_target_default,
      content: @view_context.render(self)
    )
  end

  def broadcast_remove
    return unless @view_context.present?

    broadcast_remove_to(
      streamable,
      target: target
    )
  end

  private def broadcast_target_default
    target.class.model_name.plural
  end
end

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

&lt;/div&gt;



&lt;p&gt;And this is exactly a ViewComponent with some live extras baked in. Continuing with out illustration of broadcasting changes to the line_items in the cart, we would implement it as a live component like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# app/components/live_line_item_component.rb

class LiveLineItemComponent &amp;lt; LiveComponent
  def initialize(view_context: nil, line_item:, current_user:)
    @line_item = line_item

    # these will be used by LiveComponent to identify
    # the stream channel and the targeted frame-tag on the UI
    @streamable = "#{current_user.id}:line_items"
    @target = @line_item

    super
  end

  def render?
    @line_item.quantity &amp;gt; 0
  end
end

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

&lt;/div&gt;



&lt;p&gt;and in the html templates you can then define&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;%= turbo_frame_tag dom_id(@line_item) do %&amp;gt;
   &amp;lt;!-- line item html logic --&amp;gt;
&amp;lt;% end %&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;Now in &lt;code&gt;cart_controller.rb&lt;/code&gt; when you add to cart you can then use the live component&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    respond_to do |format|
      format.turbo_stream {
        live_line_item_component = LiveLineItemComponent.new(view_context: view_context, line_item: @line_item, current_user: Current.user)
        if @line_item.destroyed?
          live_line_item_component.broadcast_remove
        elsif @line_item.quantity == 1 &amp;amp;&amp;amp; @line_item.updated_at == @line_item.created_at
          live_line_item_component.broadcast_prepend
        else
          live_line_item_component.broadcast_replace
        end

        ...
    }

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

&lt;/div&gt;



&lt;p&gt;I know the code is a little bit 'dirty' and I'm sure some of you smart people will find ways to improve on it.&lt;/p&gt;

&lt;p&gt;It was a fun little exploration and I am happy it worked out.&lt;/p&gt;

&lt;p&gt;Cheers 🥂&lt;/p&gt;

</description>
      <category>rails</category>
    </item>
    <item>
      <title>📚 Awesome links from dev.to and around the web #6</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Sun, 24 Nov 2019 06:52:05 +0000</pubDate>
      <link>https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-6-7ei</link>
      <guid>https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-6-7ei</guid>
      <description>&lt;p&gt;Hey fellow developers and designers 👋🏽&lt;/p&gt;

&lt;h2&gt;
  
  
  ✍🏽 Links you might find interesting
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;a href="https://dev.to/saurabhdaware/i-rebuilt-my-portfolio-now-it-has-100-lighthouse-score-here-s-how-i-did-477a"&gt;I rebuilt my portfolio, now it has 100 lighthouse score. How did I do that&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/saurabhdaware"&gt;@saurabhdaware&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://dev.to/kiarathedev/how-to-tackle-a-technical-interview-by-using-soft-skills-2dkn"&gt;How to tackle a technical interview using soft skills&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/kiarathedev"&gt;@kiarathedev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://uxdesign.cc/personas-e60c1c06ead1"&gt;Make your personas great again in 7 simple steps&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://almanac.httparchive.org/en/2019/table-of-contents"&gt;The Web Almanac is a comprehensive report on the state of the web, backed by real data and trusted web experts.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ &lt;a href="https://www.framer.com/books/framer-guide-to-react"&gt;Framer's Guide to react&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  ✨ Random delights from around the world
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;a href="https://github.com/GoogleChrome/lighthouse-ci"&gt;Lighthouse CI&lt;/a&gt; - Automate running Lighthouse for every commit, viewing the changes, and preventing regressions&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://inertiajs.com"&gt;Inertia.js&lt;/a&gt; - Build single-page apps, without building an API. Inertia.js lets you quickly build modern single-page React, Vue and Svelte apps using classic server-side routing and controllers.&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://bruno-simon.com"&gt;bruno-simon.com&lt;/a&gt; - A fun personal website for Bruno Simon, a Creative developer living in Paris, freelancer, former lead developer at Immersive Garden, former developer at Uzik and teacher.&lt;/p&gt;




&lt;h2&gt;
  
  
  🙈 Shameless Plugs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://twitter.com/intent/follow?screen_name=kudapara"&gt;Follow me on Twitter&lt;/a&gt;, I post mainly about programming, design and some updates on the projects I'm working on.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Make it work, make it right, make it fast&lt;br&gt;
– Kent Beck&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Cheers 🥂&lt;br&gt;
&lt;a href="https://twitter.com/kudapara"&gt;@kudapara&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>career</category>
      <category>ux</category>
      <category>inertiaj</category>
    </item>
    <item>
      <title>My DEV feature wishlist 🌠</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Thu, 14 Nov 2019 10:01:11 +0000</pubDate>
      <link>https://dev.to/kudapara/my-dev-feature-wishlist-1in5</link>
      <guid>https://dev.to/kudapara/my-dev-feature-wishlist-1in5</guid>
      <description>&lt;h2&gt;
  
  
  Scheduled Posts
&lt;/h2&gt;

&lt;p&gt;It is a Friday and I have finished writing the week's segment of &lt;a href="https://dev.to/kudapara/amazing-links-from-dev-to-and-around-the-web-1-48ck"&gt;📚 Awesome links from dev.to and around the web&lt;/a&gt;. I'm done revising and saved the draft and everything is ready to go.&lt;/p&gt;

&lt;p&gt;Now Saturday comes, when it is scheduled to go live to all the amazing folk on on this platform. I'm full of excitement and I'm ready to hit the &lt;code&gt;publish&lt;/code&gt; button, but alas there is no electricity and no internet connectivity (💡 Fun fact: electicity is not available from 5am to 9pm, here in Zimbabwe, everyday, but randomly comes back during the day, during weekends).&lt;/p&gt;

&lt;p&gt;My heart sinks in despair - "But I promised these people I would deliver them awesome curated links every Saturday, how am I going to do that now 😭", I say to myself.&lt;/p&gt;

&lt;p&gt;And then a bright idea strikes my mind 🤯, the week's segment is finished and ready to go, it's already on the DEV servers, so what if there was a way I could have scheduled the post to be automatically submitted on a specific time that would have saved me so much headache.&lt;/p&gt;

&lt;h2&gt;
  
  
  Post templates/Ability to clone Posts
&lt;/h2&gt;

&lt;p&gt;For the past 5 weeks I have been religiously posting curated links of interesting things I have found around the web under the series &lt;a href="https://dev.to/kudapara/amazing-links-from-dev-to-and-around-the-web-1-48ck"&gt;📚 Awesome links from dev.to and around the web&lt;/a&gt; every Saturday.&lt;/p&gt;

&lt;p&gt;The first three posts I would hand craft every heading and structure of the Post. But after that I realized I was repeating myself so much so I made a draft post that served as a template (&lt;a href="https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-3-1o5g-temp-slug-9085729?preview=3d95a3e19f5fe070b2bd0f02b719c08be943f01b2a0923177bec5c67b5d5ce67a8eaa60154c6faa383bb7d8d77eb9c01dd17b4ee77ce6ed17ac69070"&gt;The draft template, if you are interested in seeing it&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Now things became a lot easier. Every time I would create a new segment, I would simply copy all the text in the draft post into the new one and walaah it all works magically. Until one day I forgot to enter the series name (I am using Version 2 of the editor), which I discovered on a Monday that there was this segment of the series, just floating alone and not connected to it's related posts.&lt;/p&gt;

&lt;p&gt;I quickly fixed it, and that got me thinking again, what if there was a way to clone an existing post, with all of its metadata, in a single click, wouldn't that be awesome?&lt;/p&gt;

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

&lt;p&gt;So yeah these are the 2 features that i think would really improve my workflow on the DEV platform. They may not be applicable to everyone but I'm sure there's a certain group of DEVers who would be interested. I'm still leveling up my rails skills, and at this point I do not think I have the competency to implement this so this is a cry for help to anyone interested in making this happen&lt;/p&gt;

&lt;p&gt;Cheers 🥂&lt;br&gt;
&lt;a href="https://twitter.com/kudapara"&gt;@kudapara&lt;/a&gt;&lt;/p&gt;

</description>
      <category>meta</category>
    </item>
    <item>
      <title>📚 Awesome links from dev.to and around the web #5</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Sat, 09 Nov 2019 21:09:32 +0000</pubDate>
      <link>https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-5-3ci9</link>
      <guid>https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-5-3ci9</guid>
      <description>&lt;p&gt;Hey fellow developers and designers 👋🏽&lt;/p&gt;

&lt;p&gt;I appreciate the love you are showing for these awesome links. Here is this weeks's curation, I hope you like it too.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✍🏽 Links you might find interesting
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;a href="https://dev.to/harshil1712/my-github-campus-expert-journey-and-how-you-can-become-one-4den"&gt;My Github Campus expert journey, and how you can become one&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/harshil1712"&gt;@harshil1712&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://dev.to/nickytonline/what-arewere-your-go-to-resources-for-learning-ruby-and-rails-5611"&gt;What are your go to resources for learning ruby and rails&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/nickytonline"&gt;@nickytonline&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;⭐⭐ &lt;a href="https://dev.to/devteam/the-future-of-dev-160n"&gt;The future of DEV&lt;/a&gt; - @devteam &lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://dev.to/brittanytinnin/nested-resources-in-rails-5-4oea"&gt;Nested resources in Rails 5&lt;/a&gt; - @brittanytinnin&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://reinink.ca/articles/server-side-apps-with-client-side-rendering"&gt;Server side apps with client side rendering&lt;/a&gt; - &lt;a href="https://reinink.ca"&gt;reinink.ca&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ Random delights from around the world
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;a href="https://railseventstore.org"&gt;Rails Event Store&lt;/a&gt; - Rails Event Store is a library for publishing, consuming, storing and retrieving events. It's your best companion for going with an Event-Driven Architecture for your Rails application.&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://octoverse.github.com/"&gt;Github State of the Octoverse Report&lt;/a&gt; - Github's analysis of how open source is being used everywhere and the trending programming languages and more. Check it out. &lt;/p&gt;

&lt;p&gt;⭐⭐ &lt;a href="https://youtu.be/6xgMkGMIudE"&gt;Adam Watham's live TailwindCSS streams&lt;/a&gt; - Adam Watham live streams as he builds a fancy Inbox UI with TailwindCSS, as designed by Steve Schoger. A must watch for someone who wants to up their design skills.&lt;/p&gt;




&lt;h2&gt;
  
  
  🙈 Shameless Plugs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://twitter.com/intent/follow?screen_name=kudapara"&gt;Follow me on Twitter&lt;/a&gt;, I post mainly about programming, design and some updates on the projects I'm working on.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Live as if you were to die tomorrow. Learn as if you were to live forever.&lt;br&gt;
 – Mahatma Gandhi&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Cheers 🥂&lt;br&gt;
&lt;a href="https://twitter.com/kudapara"&gt;@kudapara&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>meta</category>
      <category>css</category>
    </item>
    <item>
      <title>📚 Awesome links from dev.to and around the web #4</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Sat, 02 Nov 2019 17:20:09 +0000</pubDate>
      <link>https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-4-opg</link>
      <guid>https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-4-opg</guid>
      <description>&lt;p&gt;Hey fellow developers and designers 👋🏽&lt;/p&gt;

&lt;p&gt;How have your week been? I hope you are all well and no one is suffering from burn out. This week I compiled some interesting articles on career, entrepreneurship and technical topics.&lt;/p&gt;

&lt;p&gt;Happy reading :)&lt;/p&gt;

&lt;h2&gt;
  
  
  ✍🏽 Links you might find interesting
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;a href="https://dev.to/arelyskywalker/my-journey-to-landing-my-dream-job-at-amazon-2a39"&gt;My journey to landing my dream job at amazon&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/arelyskywalker"&gt;@arelyskywalker&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://dev.to/ben/firefox-and-other-browsers-will-be-making-better-use-of-height-and-width-attributes-for-modern-sites-4kpm"&gt;Firefox and other browsers will be making better use of the height and width attributes for modern sites&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/ben"&gt;@ben&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://dev.to/justaashir/do-design-systems-prevent-creativity-8pa"&gt;Do design systems prevent creativity?&lt;/a&gt; - &lt;a class="mentioned-user" href="https://dev.to/justaashir"&gt;@justaashir&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://www.freecodecamp.org/news/building-jamstack-apps"&gt;How to Build Authenticated Serverless JAMstack Apps with Gatsby and Netlify&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://crazypolymath.substack.com/p/how-are-people-making-money-selling"&gt;How are people making money selling knowledge on the internet&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ Random delights from around the world
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://podhunt.app"&gt;Podhunt.App&lt;/a&gt; - Pod Hunt is a daily curation of the best new podcasts (Like Product Hunt, but for podcasts). Discover the latest podcasts that everyone is listening to.&lt;br&gt;
&lt;a href="https://bethevalley.com"&gt;Be the valley&lt;/a&gt; - If you like Silicon Valley (the TV series) this website gives you the ability to create your own custom title sequence.&lt;br&gt;
&lt;a href="https://swr.now.sh"&gt;SWR By Zeit&lt;/a&gt; - SWR is a React Hooks library for remote data fetching. Visit the site to learn more about it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🙈 Shameless Plugs
&lt;/h2&gt;

&lt;p&gt;Today I am not going to plug anything for myself. If you are building cool stuff you can share in the comments.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1Zw3JlFJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/iw3sdgh0lzvqsqqy0v4f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1Zw3JlFJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/iw3sdgh0lzvqsqqy0v4f.jpg" alt="Alt Text" width="650" height="600"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Cheers 🥂&lt;br&gt;
&lt;a href="https://twitter.com/kudapara"&gt;@kudapara&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>frontend</category>
      <category>podcast</category>
    </item>
    <item>
      <title>📚 Awesome links from dev.to and around the web #3</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Sat, 26 Oct 2019 10:40:30 +0000</pubDate>
      <link>https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-3-3937</link>
      <guid>https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-3-3937</guid>
      <description>&lt;p&gt;Hey fellow developers and designers 👋🏽&lt;/p&gt;

&lt;p&gt;Thank you all for showing interest in this series and it's a huge motivation for me to keep sharing awesome links I stumble upon on the internet. If you also find cool stuff on the internet you could &lt;a href="https://dev.to/connect/@kudapara"&gt;send them to me&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✍🏽 Links you might find interesting
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;a href="https://dev.to/blarzhernandez/why-you-should-learn-javascript-principles-first-not-the-hottest-frameworks-kb9"&gt;Why you should learn Javascript principles first (Not the hottest framework)&lt;/a&gt; // &lt;a class="mentioned-user" href="https://dev.to/blarzhernandez"&gt;@blarzhernandez&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://dev.to/emmawedekind/101-tips-for-being-a-great-programmer-human-36nl"&gt;101 Tips for being a great programmer human&lt;/a&gt; // @emmawedekind&lt;br&gt;
⭐ &lt;a href="https://dev.to/acupoftee/25-days-of-css-animations-teaching-myself-css-through-motion-design-4l10"&gt;25 Days of CSS animations - Teaching myself CSS through motion design&lt;/a&gt; // @acupoftee&lt;br&gt;
⭐ &lt;a href="https://medium.com/google-design/the-obvious-ui-is-often-the-best-ui-7a25597d79fd"&gt;The obvious UI is often the best UI&lt;/a&gt; // &lt;a href="https://medium.com/google-design"&gt;medium.com/google-design&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://adamwathan.me/css-utility-classes-and-separation-of-concerns/"&gt;CSS Utility Classes and "Separation of Concerns"&lt;/a&gt; // &lt;a href="https://adamwathan.me"&gt;adamwathan.me&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ Random delights from around the world
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;a href="https://amiareal.dev"&gt;amiareal.dev&lt;/a&gt; - If you ever struggled with impostor syndrome and you constantly ask yourself &lt;strong&gt;Am I a real Dev?&lt;/strong&gt; click that link to find out.&lt;br&gt;
⭐ &lt;a href="https://fullstackradio.com"&gt;fullstackradio.com&lt;/a&gt; - A podcast for developers interested in building great software products. Every episode, &lt;a href="https://twitter.com/adamwathan"&gt;Adam Watham&lt;/a&gt; is joined by a guest to talk about everything from product design and user experience to unit testing and system administration.&lt;br&gt;
⭐ &lt;a href="https://education.github.com/pack"&gt;Github Student Pack&lt;/a&gt; - If you are a student and you would like to access services like &lt;a href="https://heroku.com"&gt;Heroku&lt;/a&gt;, &lt;a href="https://aws.amazon.com"&gt;Amazon Web Services&lt;/a&gt;, &lt;a href="https://sendgrid.com"&gt;Sendgrid&lt;/a&gt;, &lt;a href="https://github.com/pricing"&gt;Github Pro&lt;/a&gt;, &lt;a href="https://gorails.com"&gt;Go Rails Tutorials&lt;/a&gt;, &lt;strong&gt;and more&lt;/strong&gt;, check this out. I have personally benefited from the student pack and I ❤️ it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🙈 Shameless Plugs
&lt;/h2&gt;

&lt;p&gt;Let us connect on instagram. My handle is &lt;a href="https://instagram.com/kudapara"&gt;@kudpara&lt;/a&gt;. Follow me and I will gladly follow you back 🤞🏽&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;"Like all forms of design, visual design is about problem solving, not about personal preference or unsupported opinion." — Bob Baxley, 2003&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Cheers 🥂&lt;br&gt;
&lt;a href="https://twitter.com/kudapara"&gt;@kudapara&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>ux</category>
      <category>javascript</category>
      <category>podcast</category>
    </item>
    <item>
      <title>Is it true that here are no actual full stack developers in 2019.</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Tue, 22 Oct 2019 07:31:38 +0000</pubDate>
      <link>https://dev.to/kudapara/is-it-true-that-here-are-no-actual-full-stack-developers-in-2019-m1o</link>
      <guid>https://dev.to/kudapara/is-it-true-that-here-are-no-actual-full-stack-developers-in-2019-m1o</guid>
      <description>&lt;p&gt;I came across this tweet this morning.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--zZLh_skZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1122618025142890507/-S_kjRTY_normal.jpg" alt="Tomasz Łakomy push —force 👻 profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Tomasz Łakomy push —force 👻
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="mentioned-user" href="https://dev.to/tlakomy"&gt;@tlakomy&lt;/a&gt;
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      There are no actual full stack developers in 2019.&lt;br&gt;&lt;br&gt;The stack has become too large for a single person
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      14:42 PM - 20 Oct 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1185929305202802695" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1185929305202802695" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1185929305202802695" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;What do you think?&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>📚 Awesome links from dev.to and around the web #2</title>
      <dc:creator>Kudakwashe Paradzayi</dc:creator>
      <pubDate>Sat, 19 Oct 2019 20:25:45 +0000</pubDate>
      <link>https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-2-42k1</link>
      <guid>https://dev.to/kudapara/awesome-links-from-dev-to-and-around-the-web-2-42k1</guid>
      <description>&lt;p&gt;Hey fellow developers and designers 👋🏽&lt;/p&gt;

&lt;h2&gt;
  
  
  ✍🏽 Links you might find interesting
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;a href="https://dev.to/ben/what-it-takes-to-render-a-complex-webapp-in-milliseconds"&gt;What it takes to render a complex app in milliseconds&lt;/a&gt; by &lt;a class="mentioned-user" href="https://dev.to/ben"&gt;@ben&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://dev.to/dmfay/the-ultimate-postgres-vs-mysql-blog-post-1l5f"&gt;The ultimate postgres vs mysql blog post&lt;/a&gt; by &lt;a class="mentioned-user" href="https://dev.to/char_bone"&gt;@char_bone&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://dev.to/char_bone/using-netlify-lambda-functions-to-send-emails-from-a-gatsbyjs-site-3pnb"&gt;Using Netlify lambda functions to send emails from a GatsbyJS site&lt;/a&gt; by &lt;a class="mentioned-user" href="https://dev.to/char_bone"&gt;@char_bone&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://basecamp.com/shapeup"&gt;Shape Up, stop running in circles and ship work that matters&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://adamwathan.me/the-book-launch-that-let-me-quit-my-job/"&gt;The $61,392 book launch that made me quit my job&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✨ Random delights from around the world
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;a href="https://krita.org"&gt;Krita&lt;/a&gt; - A professional FREE and open source painting program. It is made by artists that want to see affordable art tools for everyone.&lt;br&gt;
⭐ &lt;a href="https://www.youtube.com/watch?v=wXaC0YvDgIo&amp;amp;list=PL9wALaIpe0Py6E_oHCgTrD6FvFETwJLlx"&gt;On writing software well youtube&lt;/a&gt; - A playlist by David Heinemeier Hansson (creator of ruby on rails) on some patterns he uses to write basecamp&lt;br&gt;
⭐ &lt;a href="https://twitter.com/i/moments/994601867987619840"&gt;Steve Schoger's design tips moment on twitter&lt;/a&gt; - A collection of byte sized practical design tips that you can start applying in your applications now&lt;br&gt;
⭐ &lt;a href="https://www.youtube.com/channel/UCtnxTjHsbYVLrsKHbaqZbYQ"&gt;Draw simple things channel on youtube&lt;/a&gt; - A youtube channel that shows you how to draw simple but beatiful illustrations with inkscape, an open source vector graphics software&lt;/p&gt;


&lt;h2&gt;
  
  
  🙈 Shameless Plugs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://twitter.com/intent/follow?screen_name=kudapara"&gt;Follow me on twitter&lt;/a&gt;, I post mostly about web development and design tips and tricks like &lt;br&gt;
&lt;/p&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bda61J5b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/EHK9UEmX0AA_rKA.png" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mm8bG4TI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1177215759895990280/-4dgLyn__normal.jpg" alt="Kudakwashe Paradzayi profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Kudakwashe Paradzayi
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="mentioned-user" href="https://dev.to/kudapara"&gt;@kudapara&lt;/a&gt;
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      🔔 Progress Notification 🔔&lt;br&gt;&lt;br&gt;I RefactoredUI™ and while in the process that I built a design system I'll call Ruva🌹.&lt;br&gt;&lt;br&gt;I'll open source once it once I fix some issues.&lt;br&gt;&lt;br&gt;Feedback is always welcome 🙏🏽&lt;br&gt;&lt;br&gt;Ruva 🌹, built on &lt;a href="https://twitter.com/tailwindcss"&gt;@tailwindcss&lt;/a&gt;, inspired by &lt;a href="https://twitter.com/stripe"&gt;@stripe&lt;/a&gt; 👇🏽&lt;br&gt;&lt;a href="https://t.co/a1QpNr6we4"&gt;github.com/kudapara/ruva&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      15:35 PM - 18 Oct 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1185217823322320896" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1185217823322320896" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1185217823322320896" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;





&lt;blockquote&gt;
&lt;p&gt;The only way to learn a new programming language is by writing programs in it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dennis Ritchie&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;p&gt;Cheers 🥂&lt;br&gt;
&lt;a href="https://twitter.com/kudapara"&gt;@kudapara&lt;/a&gt;&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>mysql</category>
      <category>design</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
