<?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: Sherfin Shamsudeen</title>
    <description>The latest articles on Forem by Sherfin Shamsudeen (@sherfin94).</description>
    <link>https://forem.com/sherfin94</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%2F714363%2F93adb88e-b1ca-40fc-b92e-0ab915b2d96b.jpeg</url>
      <title>Forem: Sherfin Shamsudeen</title>
      <link>https://forem.com/sherfin94</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sherfin94"/>
    <language>en</language>
    <item>
      <title>How to build a cryptocurrency dashboard in 10 minutes using ToolJet</title>
      <dc:creator>Sherfin Shamsudeen</dc:creator>
      <pubDate>Thu, 18 Nov 2021 11:02:19 +0000</pubDate>
      <link>https://forem.com/sherfin94/how-to-build-a-cryptocurrency-dashboard-in-10-minutes-using-tooljet-11i2</link>
      <guid>https://forem.com/sherfin94/how-to-build-a-cryptocurrency-dashboard-in-10-minutes-using-tooljet-11i2</guid>
      <description>&lt;p&gt;In this tutorial, I will walk you through building a cryptocurrency dashboard in less than 10 minutes, using the &lt;strong&gt;ToolJet&lt;/strong&gt; platform. ToolJet is a free, open-source, low-code platform that allows you to quickly build tools(&lt;a href="https://github.com/ToolJet/ToolJet" rel="noopener noreferrer"&gt;https://github.com/ToolJet/ToolJet&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.tooljet.io/applications/crypto" rel="noopener noreferrer"&gt;Here&lt;/a&gt; is the final application that you would have at the end of this tutorial. (This dashboard was created with desktop screens in mind, please make sure you open it from your desktop).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Get ToolJet&lt;/strong&gt;&lt;br&gt;
You can run ToolJet locally or you can create a free ToolJet cloud account (which will be the easiest way to get started).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create an application&lt;/strong&gt;&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FcreateApplication-2.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FcreateApplication-2.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create a query to list the major cryptocurrencies&lt;/strong&gt;&lt;br&gt;
I'm using the API provided by &lt;a href="https://coinstats.app/" rel="noopener noreferrer"&gt;coinstats.app&lt;/a&gt;, feel free to use any other API you'd like.&lt;br&gt;
API-URL: &lt;br&gt;
&lt;code&gt;https://api.coinstats.app/public/v1/coins?skip=0&amp;amp;limit=100&amp;amp;currency=USD&lt;/code&gt;&lt;br&gt;
And I'm calling it &lt;code&gt;coinList&lt;/code&gt;&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FcreateQuery1.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FcreateQuery1.gif"&gt;&lt;/a&gt;&lt;br&gt;
And make the query run whenever the application is opened:&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FrunOnLoad.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FrunOnLoad.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Add a table and list all the coins on it&lt;/strong&gt;&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FaddTable-1.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FaddTable-1.gif"&gt;&lt;/a&gt;&lt;br&gt;
The data returned by the query can be fed into the table using its inspector panel which opens up when you click on the table component's handle. Make sure that you've run the query by pressing the play button next to its name, otherwise, the query's data wont be available.&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Ftable-config.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Ftable-config.gif"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Step 4: Create a query to fetch historical price data&lt;/strong&gt;&lt;br&gt;
The table row which was last clicked by the user is available in the global variable &lt;code&gt;components&lt;/code&gt; as &lt;code&gt;components.table1.selectedRow&lt;/code&gt;. Therefore the id of the coin that the user clicked last is available as &lt;code&gt;components.table1.selectedRow.id&lt;/code&gt;. &lt;em&gt;(Note that &lt;code&gt;table1&lt;/code&gt; is the name of the table, if you change this, the above code fragment will also change accordingly).&lt;/em&gt;&lt;br&gt;
The URL for the query shall therefore be: &lt;code&gt;https://api.coinstats.app/public/v1/charts?period=1m&amp;amp;coinId={{components.table1.selectedRow.id}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Let's call this query &lt;code&gt;monthData&lt;/code&gt;.&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Fquery2.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Fquery2.png"&gt;&lt;/a&gt;&lt;br&gt;
Click on one of the rows of the table and run the &lt;code&gt;monthData&lt;/code&gt; query to ensure that the query has run and therefore that its response is available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Make sure that the query is run whenever a row is clicked&lt;/strong&gt;&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FonSelectRunQuery.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FonSelectRunQuery.gif"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Step 6: Add a chart to visualize price history&lt;/strong&gt;&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FaddChart.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FaddChart.gif"&gt;&lt;/a&gt;&lt;br&gt;
The chart takes in data in the format &lt;code&gt;[{x: 1, y: 1}, {x: 2, y: 2},..]&lt;/code&gt;.&lt;br&gt;
We can use this snippet to convert the response of our &lt;code&gt;monthData&lt;/code&gt; API to this format, where &lt;code&gt;x&lt;/code&gt; values are day numbers and &lt;code&gt;y&lt;/code&gt; values are the price of the coin in US dollars.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="nx"&gt;queries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;monthData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;point&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;y&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;point&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}))}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FchartData-1.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2FchartData-1.gif"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;OPTIONAL: Step 7: Repeat step 4 to step 6 to visualize weekly price history as well&lt;/strong&gt;&lt;br&gt;
This time, for &lt;strong&gt;step 4,&lt;/strong&gt; the URL would become &lt;code&gt;https://api.coinstats.app/public/v1/charts?period=1w&amp;amp;coinId={{components.table1.selectedRow.id}}&lt;/code&gt; as we need to get data for one week instead of one month.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;step 5&lt;/strong&gt;, the query to be run will be the newly created &lt;code&gt;weekData&lt;/code&gt; query.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;step 6&lt;/strong&gt;, the code snippet would become the following, &lt;em&gt;as the query name is different as well as, instead of day, this endpoint brings us price per hour of the coin, hence the variable 'day' is renamed to 'hour'.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="nx"&gt;queries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weekData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;point&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;y&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;point&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}))}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Fimage-12.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Fimage-12.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Step 8: Save, deploy and launch the application!&lt;/strong&gt;&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Fdemo.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Fdemo.gif"&gt;&lt;/a&gt;&lt;br&gt;
Done!, we now have a fully functional cryptocurrency dashboard!.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optional: Make the dashboard look a little better
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Styling the table&lt;/strong&gt;&lt;br&gt;
The appearance of the table can be configured from the inspector panel.&lt;br&gt;
Click on the table, on the inspector panel that opened up on the right, make the following changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Turn off 'Show search box'&lt;/li&gt;
&lt;li&gt;Turn on 'Highlight selected row'&lt;/li&gt;
&lt;li&gt;Change 'Table type' to borderless&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You may also adjust the width of the columns to make the table look like this:&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Fimage-15.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Fimage-15.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Loading icons and titles for the charts&lt;/strong&gt;&lt;br&gt;
To show loading icons on the charts, simply fill in their &lt;code&gt;Loading state&lt;/code&gt; field on the inspector with &lt;code&gt;{{queries.monthData.isLoading}}&lt;/code&gt; for the month level chart and &lt;code&gt;{{queries.weekData.isLoading}}&lt;/code&gt; for the week level chart. The &lt;code&gt;isLoading&lt;/code&gt; variable is made available with every query, and it indicates whether the query is loading or not.&lt;/p&gt;

&lt;p&gt;You can also type in relevant titles for the charts on their &lt;code&gt;Title&lt;/code&gt; field, on the inspector.&lt;/p&gt;

&lt;p&gt;Making these changes would finally make our application more interactive:&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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Ffinal.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%2Fblog.tooljet.com%2Fcontent%2Fimages%2F2021%2F11%2Ffinal.gif"&gt;&lt;/a&gt;&lt;br&gt;
What would you like to build with ToolJet? I'm eager to listen to your ideas, questions and comments.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>lowcode</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Code to Low-code: It’s A Happy Journey</title>
      <dc:creator>Sherfin Shamsudeen</dc:creator>
      <pubDate>Mon, 27 Sep 2021 15:01:12 +0000</pubDate>
      <link>https://forem.com/sherfin94/code-to-low-code-it-s-a-happy-journey-1380</link>
      <guid>https://forem.com/sherfin94/code-to-low-code-it-s-a-happy-journey-1380</guid>
      <description>&lt;p&gt;If you’re anything like me, then you appreciate what a superpower and privilege it is to write code. Coding, to me, is the ability to pour one’s ideas, emotions, and feelings into electronic devices and networks. It is a way to make one’s self manifest in the digital world.&lt;/p&gt;

&lt;p&gt;If you’re even more like me, then you also worried when you heard about the rising trend of No-code/Low-code products such as Bubble. Because these are the kind of tools that threatens to make developers like you and me invalid. Or at least that was my first impression of them.&lt;br&gt;
However, it would be arrogant of me to assume without trying it out myself. So I went ahead to work with a company named ToolJet(&lt;a href="https://github.com/ToolJet/ToolJet"&gt;https://github.com/ToolJet/ToolJet&lt;/a&gt;) which is building an open-source low code platform to build internal tools for enterprises.&lt;/p&gt;

&lt;p&gt;In addition to building the platform, I was tasked with using the platform to create internal tools for a large enterprise. I ended up delivering them a production-grade application which they now use to record and keep track of their service delivery, all within two weeks.&lt;br&gt;
What should have taken several months of programming effort was done in two weeks, with minimal code. Contrary to what I expected to feel, I now felt even more capable as a developer: developers are now equipped to quickly come up with software products, iterate with several startup ideas without having to write thousands of lines of code. No-code/Low-code tools don’t relegate developers, it empowers us!&lt;/p&gt;

&lt;p&gt;What the No-code revolution truly represents is perhaps the solution to a fundamental issue that the software development community has not addressed: It has factionalized into several cultures centred on different technologies that attempt to solve the same problems, making it difficult to abstract and automate features every app would need.&lt;br&gt;
Let me try to draw an example: To develop a web front-end, we have React, Angular, Svelte, Vue, and so forth, all philosophizing the greatness of their fundamental technical decisions, which may very well have been made by some developer while he was drunk or stoned. And this, for instance, makes it difficult to build a universal login/sign-up mechanism that developers can just plugin with minimal configuration.&lt;/p&gt;

&lt;p&gt;The bulk of the effort made in building software is currently about finding one’s way through this mesh of technologies, and in making them all work together, instead of writing code just where it matters. And this is precisely the selling point of low-code.&lt;br&gt;
I started this write-up by sharing my experience, but let me happily upgrade it to an invitation to try out a low-code tool. And while you’re at it, ToolJet would be a good place to start.&lt;/p&gt;

&lt;p&gt;NB: I use No-code and Low-code interchangeably in this article. However, No-code refers to application development without any code. While it is an ambitious proposition, I’m personally more inclined towards Low-code as it seems to solve a real issue with software development today, as opposed to No-code which focuses on arming non-coders with software development capability.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
