<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: iamndeleva </title>
    <description>The latest articles on Forem by iamndeleva  (@iamndeleva).</description>
    <link>https://forem.com/iamndeleva</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%2F254538%2Fdfb3c835-cd10-4337-97ec-03562627b326.jpg</url>
      <title>Forem: iamndeleva </title>
      <link>https://forem.com/iamndeleva</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/iamndeleva"/>
    <language>en</language>
    <item>
      <title>Generics in typescript</title>
      <dc:creator>iamndeleva </dc:creator>
      <pubDate>Wed, 08 Mar 2023 05:35:52 +0000</pubDate>
      <link>https://forem.com/iamndeleva/generics-in-typescript-hjj</link>
      <guid>https://forem.com/iamndeleva/generics-in-typescript-hjj</guid>
      <description>&lt;p&gt;when building react applications , writing reusable components is one of the key concept that is highly prioritized But most a times this components only receive a specific type that allows them to be reliable .Using Typescript allows you to write components that can have several types which makes it more flexible than opposed to the single type they had before .The concept of generics then comes in to bridge this  gap &lt;br&gt;
&lt;strong&gt;What are generics&lt;/strong&gt;&lt;br&gt;
In summary from the typescript official docs , generics let you write components that can take multiple types instead of one type .You define generics using &lt;code&gt;&amp;lt;T&amp;gt;&lt;/code&gt; but in real sense you can name it whatever you like  .&lt;br&gt;
&lt;em&gt;example in ES6&lt;/em&gt;&lt;br&gt;
&lt;code&gt;const myGeneric = &amp;lt;T&amp;gt;(params:T):T =&amp;gt;{}&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;em&gt;for ES5&lt;/em&gt;&lt;br&gt;
&lt;code&gt;function myGeneric&amp;lt;T&amp;gt;(params:T):T{}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;where T can be &lt;em&gt;string ,array ,boolean&lt;/em&gt; etc&lt;br&gt;
_lets define some interface here for IAnimal _&lt;br&gt;
&lt;code&gt;interface IAnimal{&lt;br&gt;
  type: string;&lt;br&gt;
  age:number;&lt;br&gt;
  eat: () =&amp;gt; void;&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;code&gt;class Dog implements IAnimal{&lt;br&gt;
   type = 'dog';&lt;br&gt;
   age=10;&lt;br&gt;
    eat(): void {&lt;br&gt;
        console.log('eating')&lt;br&gt;
    }&lt;br&gt;
}&lt;br&gt;
const results = &amp;lt;T extends IAnimal&amp;gt;(value:T):void=&amp;gt;{&lt;br&gt;
  console.log(value)&lt;br&gt;
}&lt;br&gt;
results(new Dog())&lt;/code&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>react</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Deploying a react application to Amazon s3 and github actions</title>
      <dc:creator>iamndeleva </dc:creator>
      <pubDate>Wed, 20 Jul 2022 00:10:11 +0000</pubDate>
      <link>https://forem.com/iamndeleva/deploying-a-react-application-to-amazon-s3-and-github-actions-4558</link>
      <guid>https://forem.com/iamndeleva/deploying-a-react-application-to-amazon-s3-and-github-actions-4558</guid>
      <description>&lt;p&gt;Github actions were introduced by GitHub in mid-december 2020, which is a platform to automate developer workflows. Some of these workflows are CI/CD  which involves continuous integration, continuous delivery, and continuous deployment.CI/CD pipeline enables developers to ship software efficiently  &amp;amp; easily and less risky.&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%2Fb8t7i4f4946ycxzbla6f.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%2Fb8t7i4f4946ycxzbla6f.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;The process of GitHub actions is sub-divided into several components which are&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.&lt;strong&gt;Event&lt;/strong&gt;&lt;br&gt;
We can define event as any specific activity that happens to repository to trigger a workflow .Literally it can a pull request  ,push  ,contribution or even a issue&lt;br&gt;
2.&lt;strong&gt;Job&lt;/strong&gt;&lt;br&gt;
This are steps in a workflow that run once a event has been triggered&lt;br&gt;
3.&lt;strong&gt;Action&lt;/strong&gt;&lt;br&gt;
Actions are individual tasks that you can combine to create jobs and customize your Workflow&lt;br&gt;
4.&lt;strong&gt;Runners&lt;/strong&gt;&lt;br&gt;
A runner is a server that runs your workflows when they're triggered.Each runner   can run a single job at a time&lt;br&gt;
5.&lt;strong&gt;Workflow&lt;/strong&gt;&lt;br&gt;
A workflow is an automated procedure that can be configured to execute one or more operations. Workflows are defined by a &lt;em&gt;YAML&lt;/em&gt; file that is checked into your repository and run when prompted by an event there, manually, or according to a set schedule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To get started ,We will do a demo using a react app .&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Follow this steps to create a basic react app&lt;/em&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%2Fei5p0t8mq4c1j1l8oggv.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%2Fei5p0t8mq4c1j1l8oggv.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Then proceed to your github account and create a repository  from github as shown below.Fill the fields as required&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%2Fzmd79mmdrrptal9qvwke.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%2Fzmd79mmdrrptal9qvwke.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
To set up a github actions you can create directly from the action tab on github as shown below or in the root of your project  create a folder called &lt;strong&gt;.github&lt;/strong&gt; , inside it create another folder called &lt;strong&gt;workflows&lt;/strong&gt; and in this folder &lt;strong&gt;create a yml file&lt;/strong&gt;&lt;br&gt;
Once your done creating your repository ,select action tab&lt;br&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%2F9beroce7evy0bf4mzqsx.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%2F9beroce7evy0bf4mzqsx.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Pick a template you would like to use ,Since we are working on a react application, we are choosing the &lt;strong&gt;node js&lt;/strong&gt; as shown below&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%2Fdrzjrz3esy9emu48jv20.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%2Fdrzjrz3esy9emu48jv20.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Once you selected ,Click configure to setup and the click to &lt;strong&gt;Start commit&lt;/strong&gt; in the far top right corner.By the end of this you would have set up your github action as required.&lt;br&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%2F0o2g7jj85ecr0ag9tkeq.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%2F0o2g7jj85ecr0ag9tkeq.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lets discuss the content of  this &lt;strong&gt;YML file created **&lt;br&gt;
It has the following parts as shown in the figure below&lt;br&gt;
**Name:&lt;/strong&gt;&lt;br&gt;
This defines the name of your workflow that is displayed on the github action field.You can call your workflow the name of your choice .&lt;br&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%2F9hw7ra7lkdbozpxp4hcx.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%2F9hw7ra7lkdbozpxp4hcx.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;On:&lt;/strong&gt;&lt;br&gt;
It defines the events that trigger the workflow.It can be a single event or a array of events.&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%2F5hwz614vpl3tykphdz0h.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%2F5hwz614vpl3tykphdz0h.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Jobs&lt;/strong&gt;&lt;br&gt;
Jobs define the functionality that will run the workflow&lt;br&gt;
&lt;strong&gt;Note&lt;/strong&gt;&lt;br&gt;
By default , jobs run in parallel&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%2Fuscx3x9qmh3v2tvq0c3v.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%2Fuscx3x9qmh3v2tvq0c3v.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Runs-on:&lt;/strong&gt;&lt;br&gt;
Its a keyword that defines the &lt;strong&gt;OS **your workflow should run on.&lt;br&gt;
Examples of runs-on you can define here are **ubuntu-latest ,self-hosted etc&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Build matrix&lt;/strong&gt;&lt;br&gt;
Allows you to test across across multiple platforms and languages&lt;br&gt;
&lt;strong&gt;&lt;u&gt;Example of a sample  yml file&lt;/u&gt;&lt;/strong&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%2Fgoyc9mbc0zw87io4z1b7.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%2Fgoyc9mbc0zw87io4z1b7.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Now you have successfully configured your yml  file.&lt;/p&gt;

&lt;p&gt;Lets connect with &lt;strong&gt;aws&lt;/strong&gt; for deployment&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites for AWS s3 **&lt;br&gt;
Amazon Web Service Account&lt;br&gt;
You can create one at AWS  if you haven’t and follow the **steps&lt;br&gt;
Step one . Creating a s3 bucket&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Login to your &lt;strong&gt;aws&lt;/strong&gt; account and from the services select &lt;strong&gt;s3&lt;/strong&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%2F33jnynlte64jajzizm01.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%2F33jnynlte64jajzizm01.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Click on the create bucket account  and fill the details as shown here&lt;br&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%2Fsnvo614mgo8eto5h0ihw.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%2Fsnvo614mgo8eto5h0ihw.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Your bucket will be available here &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%2Ffi7k6anxhnaj7xji42kh.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%2Ffi7k6anxhnaj7xji42kh.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click&lt;/strong&gt; you bucket (mine is called &lt;strong&gt;foodiesbucket-react&lt;/strong&gt;)  , select the permissions tab&lt;br&gt;
And make your object public&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%2Fyyrryvi82bll6bfcv3xw.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%2Fyyrryvi82bll6bfcv3xw.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
make sure you edit the object ownership to appear as shown here to  avoid getting the  error &lt;strong&gt;AccessControlListNotSupported:&lt;/strong&gt;&lt;br&gt;
Having setup your bucket successfully  , its time to update our &lt;strong&gt;yml file&lt;/strong&gt; by adding some &lt;strong&gt;env variables&lt;/strong&gt; to connect our bucket with github repository.&lt;br&gt;
Back to your github repository , click on settings the select secrets,in the dropdown select &lt;strong&gt;actions&lt;/strong&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%2Fmqjj5gom4ox92qrca3gr.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%2Fmqjj5gom4ox92qrca3gr.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on new repository secrets and we are going to add three secrets ie &lt;strong&gt;AWS_ACCESS_KEY_ID **,&lt;/strong&gt;AWS_S3_BUCKET,AWS_SECRET_ACCESS_KEY.**&lt;br&gt;
These keys will be generated directly from your** aws account** by heading to the top right corner of your account then selecting security credentials &lt;br&gt;
Copy the secrets and add them as shown on the above&lt;/p&gt;

&lt;p&gt;We are going to use &lt;strong&gt;jakejarvis/s3-sync-action&lt;/strong&gt; which is a simple action to sync a directory (either from your repository or generated during your workflow) with a remote S3 bucket.&lt;br&gt;
&lt;strong&gt;Update your yml file as shown here&lt;/strong&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%2F1ea6y4rlwbmo0o0m2w3n.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%2F1ea6y4rlwbmo0o0m2w3n.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After updating the &lt;strong&gt;yml&lt;/strong&gt;   re-run your workflow .This syncs your github repository with aws s3 bucket and it updates the changes on your dashboard.&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%2F5bvkn7nfyvsf95ft97b6.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%2F5bvkn7nfyvsf95ft97b6.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
You have successfully deployed your app.&lt;br&gt;
Click on the index.html to visit and click the object link which is the url of your deployed app&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%2Frsv0xyqnqx3lfcs0hvlj.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%2Frsv0xyqnqx3lfcs0hvlj.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congrats!!!Lets keep building!.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>react</category>
      <category>githubactions</category>
      <category>s3</category>
    </item>
  </channel>
</rss>
