<?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: John M. Kuria</title>
    <description>The latest articles on DEV Community by John M. Kuria (@jontech).</description>
    <link>https://dev.to/jontech</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4091989%2F3ac96d3e-507e-4e00-a018-2c9574153c40.jpg</url>
      <title>DEV Community: John M. Kuria</title>
      <link>https://dev.to/jontech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jontech"/>
    <language>en</language>
    <item>
      <title>Data Engineering, Day 2: The Day the Terminal Stopped Feeling Like a Foreign Country</title>
      <dc:creator>John M. Kuria</dc:creator>
      <pubDate>Wed, 26 Aug 2026 07:57:04 +0000</pubDate>
      <link>https://dev.to/jontech/data-engineering-day-2-the-day-the-terminal-stopped-feeling-like-a-foreign-country-28df</link>
      <guid>https://dev.to/jontech/data-engineering-day-2-the-day-the-terminal-stopped-feeling-like-a-foreign-country-28df</guid>
      <description>&lt;p&gt;Day one was about learning to walk around the house. Day two was about actually turning the lights on and living in it.&lt;/p&gt;

&lt;p&gt;I won't lie — I came into class still tired from yesterday, still slightly proud of myself for typing &lt;code&gt;sudo&lt;/code&gt; correctly on the first try. And then day two happened, and it was a lot. Vim modes. A whole database engine. Remote connections. By the end of it my brain felt like a browser with forty tabs open. But it's the good kind of tired — the kind where you can actually feel yourself becoming someone who can do this job, one command at a time.&lt;/p&gt;

&lt;p&gt;Here's everything we covered, with the actual commands, because future-me is going to need to come back and re-read this more than once.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Logging Into the Server Remotely, Again — But It's Starting to Click
&lt;/h2&gt;

&lt;p&gt;We picked up right where day one left off: SSH-ing into our Ubuntu server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh username@server_ip_address
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yesterday this felt like magic I didn't fully trust. Today it just felt like... opening a door. That's the moment you know something is starting to sink in — when the "wow" wears off and it just becomes muscle memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Creating Our Own Linux User, Setting a Password, Switching Between Users
&lt;/h2&gt;

&lt;p&gt;Everyone in class created their own personal Linux user account on the server — no more sharing one login.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;adduser myusername
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setting or resetting a password for that user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;passwd myusername
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then the part that actually made the concept of "users" feel real — switching between accounts on the same machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;su - myusername
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Typing &lt;code&gt;su - anotheruser&lt;/code&gt; and suddenly being &lt;em&gt;that&lt;/em&gt; person, with their own home directory and their own permissions, made something click. A server isn't one identity. It's a shared space with clearly separated rooms, and Linux is very serious about who's allowed in which room.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Meeting Vim (And Immediately Getting Humbled By It)
&lt;/h2&gt;

&lt;p&gt;If you've never used Vim before, the first thing that happens is panic. You open a file, try to type, nothing happens, and you briefly wonder if you've broken the server. You haven't. You just don't know the modes yet.&lt;/p&gt;

&lt;p&gt;Opening a file in Vim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vim myfile.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Four Modes We Learned
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Normal mode&lt;/strong&gt; — this is where you land the moment Vim opens. You're not typing text here; you're &lt;em&gt;navigating and issuing commands&lt;/em&gt;. Pressing letters like &lt;code&gt;h&lt;/code&gt;, &lt;code&gt;j&lt;/code&gt;, &lt;code&gt;k&lt;/code&gt;, &lt;code&gt;l&lt;/code&gt; moves the cursor. This is the default, home-base mode.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insert mode&lt;/strong&gt; — this is where actual typing happens. You get here by pressing:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;from Normal mode. Once you're in Insert mode, you type like you would in any normal text editor. You get back to Normal mode by pressing &lt;code&gt;Esc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual mode&lt;/strong&gt; — for selecting text, the way you'd click-and-drag with a mouse anywhere else. Entered with:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;From there, moving the cursor highlights text, which you can then delete, copy, or edit as a block.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Command-line mode&lt;/strong&gt; — this is where the real power lives: saving, quitting, searching, and replacing. Entered by pressing &lt;code&gt;:&lt;/code&gt; from Normal mode, which drops a colon prompt at the bottom of the screen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Saving and Exiting (The Command Everyone Googles at Least Once)
&lt;/h3&gt;

&lt;p&gt;From Normal mode, pressing &lt;code&gt;:&lt;/code&gt; and then typing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;w&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;saves the file. Typing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;q&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;quits Vim. And the one everyone actually needs on day one — save &lt;em&gt;and&lt;/em&gt; quit in one motion:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;wq&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you've made a mess and just want out without saving anything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;q&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last one saved me today. No shame in it.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Basic Linux Navigation Commands, Practiced Until They Felt Boring (In a Good Way)
&lt;/h2&gt;

&lt;p&gt;We drilled the fundamentals again, and repetition is genuinely making them automatic now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;          &lt;span class="c"&gt;# list what's in the current folder&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;projects &lt;span class="c"&gt;# move into the "projects" folder&lt;/span&gt;
&lt;span class="nb"&gt;pwd&lt;/span&gt;         &lt;span class="c"&gt;# print exactly where you are right now&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;data  &lt;span class="c"&gt;# create a new folder called "data"&lt;/span&gt;
&lt;span class="nb"&gt;touch &lt;/span&gt;notes.txt   &lt;span class="c"&gt;# create a new, empty file&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;notes.txt     &lt;span class="c"&gt;# print the contents of a file to the screen&lt;/span&gt;
&lt;span class="nb"&gt;whoami&lt;/span&gt;      &lt;span class="c"&gt;# confirm which user you're currently logged in as&lt;/span&gt;
clear       &lt;span class="c"&gt;# wipe the terminal screen&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update    &lt;span class="c"&gt;# run a command with administrator privileges&lt;/span&gt;
su - anotheruser   &lt;span class="c"&gt;# switch to a different user account&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Small, unglamorous commands. But every single one of them showed up again later in the day, embedded inside bigger tasks — which is exactly when you realize why the fundamentals matter so much.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Installing PostgreSQL and Checking That It's Actually Running
&lt;/h2&gt;

&lt;p&gt;This is where the day shifted from "operating system basics" into genuinely feeling like data engineering.&lt;/p&gt;

&lt;p&gt;Installing PostgreSQL on the Ubuntu server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;postgresql postgresql-contrib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Checking whether the service is actually running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Watching that status come back "active (running)" for the first time felt disproportionately exciting for something so small. But it was the first real database engine I've ever installed with my own hands, not a hosted service someone else set up for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Controlling the PostgreSQL Service with systemctl
&lt;/h2&gt;

&lt;p&gt;We learned the full lifecycle of managing the service, not just turning it on and hoping for the best:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start postgresql     &lt;span class="c"&gt;# start the service&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl stop postgresql      &lt;span class="c"&gt;# stop the service&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart postgresql   &lt;span class="c"&gt;# restart the service (needed after config changes)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status postgresql    &lt;span class="c"&gt;# check current status&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;restart&lt;/code&gt; became the command I'd use most, since almost every configuration change later in the day required PostgreSQL to reload before it would take effect.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Creating a Database, a Database User, and a Password
&lt;/h2&gt;

&lt;p&gt;First, we switched into the built-in &lt;code&gt;postgres&lt;/code&gt; system account, which has admin rights inside PostgreSQL itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; postgres
psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From inside the &lt;code&gt;psql&lt;/code&gt; prompt, we created a new database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;mydatabase&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then a new database user, with a password:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="n"&gt;myuser&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="k"&gt;ENCRYPTED&lt;/span&gt; &lt;span class="n"&gt;PASSWORD&lt;/span&gt; &lt;span class="s1"&gt;'mypassword'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And gave that user full rights over the database we just created:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;mydatabase&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;myuser&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There's a genuine sense of ownership that comes from typing &lt;code&gt;CREATE DATABASE&lt;/code&gt; and having it just... exist. Something I've queried a hundred times from the outside, and today I built one from the inside.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Getting to Know the Configuration Files: postgresql.conf and pg_hba.conf
&lt;/h2&gt;

&lt;p&gt;This is the part that felt the most "real" — the two files that quietly control everything about how PostgreSQL behaves and who's allowed to talk to it.&lt;/p&gt;

&lt;p&gt;Opening the main configuration file with Vim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;vim /etc/postgresql/&lt;span class="k"&gt;*&lt;/span&gt;/main/postgresql.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside, the key setting we needed was &lt;code&gt;listen_addresses&lt;/code&gt;, which controls which network interfaces PostgreSQL accepts connections on. By default it's often locked to &lt;code&gt;localhost&lt;/code&gt;, meaning nothing outside the server itself can reach it. We changed it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;listen_addresses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'*'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the client authentication file, which controls &lt;em&gt;who&lt;/em&gt; is allowed to connect and &lt;em&gt;how&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;vim /etc/postgresql/&lt;span class="k"&gt;*&lt;/span&gt;/main/pg_hba.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we added a line allowing remote connections from outside the server, authenticated with a password:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;host&lt;/span&gt;    &lt;span class="n"&gt;all&lt;/span&gt;             &lt;span class="n"&gt;all&lt;/span&gt;             &lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;/&lt;span class="m"&gt;0&lt;/span&gt;               &lt;span class="n"&gt;md5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Editing these two files back to back really underlined the point our instructor kept making: &lt;code&gt;postgresql.conf&lt;/code&gt; controls &lt;em&gt;how the server behaves&lt;/em&gt;, and &lt;code&gt;pg_hba.conf&lt;/code&gt; controls &lt;em&gt;who's allowed through the door&lt;/em&gt;. Two very different jobs, two very different files.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Restarting PostgreSQL So the Changes Actually Took Effect
&lt;/h2&gt;

&lt;p&gt;None of those edits do anything until the service reloads:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the step it's easy to forget in the moment — you edit a config file, feel accomplished, and then wonder why nothing changed. Nothing changes until you restart the service.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Connecting Remotely with DBeaver and Power BI
&lt;/h2&gt;

&lt;p&gt;This was the payoff for the entire day. After all the SSH, Vim, and config file editing, we opened DBeaver on our own laptops and connected straight into the PostgreSQL database sitting on the remote Ubuntu server — using the database name, username, and password we'd created ourselves earlier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;server_ip_address&lt;/span&gt;
&lt;span class="na"&gt;Port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5432&lt;/span&gt;
&lt;span class="na"&gt;Database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mydatabase&lt;/span&gt;
&lt;span class="na"&gt;Username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myuser&lt;/span&gt;
&lt;span class="na"&gt;Password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mypassword&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we plugged the exact same connection details into Power BI, pulling that same PostgreSQL database in as a live data source.&lt;/p&gt;

&lt;p&gt;Seeing our own database — one we built from an empty terminal, line by line — show up as a connectable data source in a tool like Power BI was the moment the whole day clicked into place. It wasn't abstract anymore. It was infrastructure we'd actually built, being used the way real infrastructure gets used.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Taking Away From Today
&lt;/h2&gt;

&lt;p&gt;Yesterday was about learning to move around a Linux system. Today was about realizing that Linux is just the floor you stand on to build the things that actually matter — like a working database that other tools can plug into.&lt;/p&gt;

&lt;p&gt;The instructor's closing note stuck with me: these fundamentals aren't a box to check once and move on from. Vim, navigation commands, PostgreSQL users and databases, &lt;code&gt;pg_hba.conf&lt;/code&gt;, &lt;code&gt;postgresql.conf&lt;/code&gt; — we're going to be living inside these for the rest of the program.&lt;/p&gt;

&lt;p&gt;So tonight's homework to myself is simple: open Vim again, on purpose, just to practice switching modes until &lt;code&gt;:wq&lt;/code&gt; stops feeling like a spell I'm reciting from memory and starts feeling like my own handwriting.&lt;/p&gt;

&lt;p&gt;See you in the next class.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>cli</category>
      <category>dataengineering</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
