<?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: Yash Pandey</title>
    <description>The latest articles on DEV Community by Yash Pandey (@yashdev).</description>
    <link>https://dev.to/yashdev</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%2F2469487%2F1936c1db-81a0-4fc4-8235-f29e1f1fa3bb.jpg</url>
      <title>DEV Community: Yash Pandey</title>
      <link>https://dev.to/yashdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yashdev"/>
    <language>en</language>
    <item>
      <title>Deep Dive: Mastering Active Record Queries &amp; Raw SQL</title>
      <dc:creator>Yash Pandey</dc:creator>
      <pubDate>Thu, 01 Jan 2026 14:13:04 +0000</pubDate>
      <link>https://dev.to/yashdev/deep-dive-mastering-active-record-queries-raw-sql-2h6m</link>
      <guid>https://dev.to/yashdev/deep-dive-mastering-active-record-queries-raw-sql-2h6m</guid>
      <description>&lt;p&gt;&lt;strong&gt;Happy New Year!&lt;/strong&gt; As we kick off 2026, many of us are looking at our codebases and thinking about optimization.&lt;/p&gt;

&lt;p&gt;When we first start with Ruby on Rails, ActiveRecord feels like magic. &lt;code&gt;User.find(id)&lt;/code&gt; or &lt;code&gt;Post.all&lt;/code&gt; are simple and intuitive. But as your application grows and your data becomes more complex, basic CRUD isn't enough. You need to perform aggregations, filter based on calculated values, and sometimes, drop down into raw SQL.&lt;/p&gt;

&lt;p&gt;In this article, we’ll dive deep into the "heavy lifting" side of ActiveRecord: &lt;strong&gt;Select vs. Pluck, Group &amp;amp; Having, and Raw SQL.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Select vs. Pluck: The Memory Battle
&lt;/h2&gt;

&lt;p&gt;Many developers use these interchangeably, but they behave very differently under the hood.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.select&lt;/code&gt;&lt;/strong&gt;: Fetches only the columns you specify but still returns an &lt;strong&gt;ActiveRecord Relation object&lt;/strong&gt;. This means Rails instantiates a Ruby object for every row returned.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.pluck&lt;/code&gt;&lt;/strong&gt;: Queries the database and returns a &lt;strong&gt;raw Ruby Array&lt;/strong&gt; of values. It skips the object instantiation entirely.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to use which?
&lt;/h3&gt;

&lt;p&gt;If you just need a list of IDs or names for a dropdown, use &lt;code&gt;pluck&lt;/code&gt;. If you need to call model methods on the results, use &lt;code&gt;select&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ❌ High memory usage (instantiates 10,000 User objects just to get emails)&lt;/span&gt;
&lt;span class="n"&gt;emails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:email&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="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# ✅ Low memory usage (returns a simple array of strings)&lt;/span&gt;
&lt;span class="n"&gt;emails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pluck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Group and Having: Filtering the Aggregates
&lt;/h2&gt;

&lt;p&gt;Grouping is essential for reporting. However, the biggest point of confusion is usually the difference between where and having.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.where&lt;/code&gt;&lt;/strong&gt;: Filters individual rows before they are grouped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.having&lt;/code&gt;&lt;/strong&gt;: Filters the groups after the aggregation is calculated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Scenario
&lt;/h3&gt;

&lt;p&gt;You want to find users who have spent more than $500 in total across all their orders. You can't use &lt;code&gt;where&lt;/code&gt; for the sum, because the sum hasn't happened yet when &lt;code&gt;where&lt;/code&gt; runs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# This query groups orders by user_id and filters for groups where the sum is &amp;gt; 500&lt;/span&gt;
&lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;joins&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:orders&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"users.id"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;having&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"SUM(orders.amount) &amp;gt; ?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"users.*, SUM(orders.amount) as total_spent"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Complex Ordering with Logic
&lt;/h2&gt;

&lt;p&gt;Sometimes, &lt;code&gt;order(created_at: :desc)&lt;/code&gt; isn't enough. You might need to sort by a specific logic, like "Urgent" items first, then "Pending," then "Completed."&lt;/p&gt;

&lt;p&gt;For this, we can use &lt;code&gt;Arel.sql&lt;/code&gt; to pass fragments of SQL logic safely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ordering by a custom CASE statement&lt;/span&gt;
&lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Arel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"
  CASE 
    WHEN status = 'urgent' THEN 1 
    WHEN status = 'pending' THEN 2 
    ELSE 3 
  END ASC"&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. When ActiveRecord Isn't Enough: Raw SQL
&lt;/h2&gt;

&lt;p&gt;ActiveRecord is powerful, but it’s not perfect. For highly complex reports or database-specific features (like Postgres window functions), raw SQL is the way to go.&lt;/p&gt;

&lt;p&gt;There are two main ways to execute raw SQL:&lt;/p&gt;

&lt;h3&gt;
  
  
  A. &lt;code&gt;find_by_sql&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Use this when you want the result to be returned as ActiveRecord objects.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_by_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"SELECT * FROM users WHERE some_complex_condition = true"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  B. &lt;code&gt;ActiveRecord::Base.connection.execute&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Use this for pure data manipulation or when you don't need Model objects back. It returns an ActiveRecord::Result object which behaves like an array of hashes.&lt;/p&gt;

&lt;p&gt;⚠️ Security Warning: Never interpolate strings directly into raw SQL (e.g., &lt;code&gt;"#{params[:id]}"&lt;/code&gt;). Always use placeholders &lt;code&gt;(?)&lt;/code&gt; or sanitized inputs to prevent SQL Injection.&lt;/p&gt;

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

&lt;p&gt;Mastering these complex queries is what moves you from a "Rails Developer" to a "Database Expert."&lt;/p&gt;

&lt;p&gt;As I move further into &lt;code&gt;AI Engineering in 2026&lt;/code&gt;, I’m finding that these data manipulation skills are the exact foundation needed for handling large datasets in Python and Pandas. If you can think in SQL sets, you are halfway to thinking in Data Frames!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s the most complex query you’ve ever had to write in Rails? Let me know in the comments!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>webdev</category>
      <category>database</category>
    </item>
    <item>
      <title>Mastering Middleware In Rails: Enhance Your App's Request Lifecycle</title>
      <dc:creator>Yash Pandey</dc:creator>
      <pubDate>Sat, 30 Nov 2024 10:18:42 +0000</pubDate>
      <link>https://dev.to/yashdev/mastering-middleware-in-rails-enhance-your-apps-request-lifecycle-28a1</link>
      <guid>https://dev.to/yashdev/mastering-middleware-in-rails-enhance-your-apps-request-lifecycle-28a1</guid>
      <description>&lt;p&gt;Middleware acts as a layer between the client and server. It processes requests before they reach the controller and modifies the response when it is sent back to the client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Middleware Lifecycle
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Request Phase&lt;/strong&gt;: Middlewares can intercept, modify, or reject the HTTP method before it reaches the rails routes and controllers.&lt;br&gt;
Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authenticate checks&lt;/li&gt;
&lt;li&gt;Logging request details&lt;/li&gt;
&lt;li&gt;Rate Limiting&lt;/li&gt;
&lt;li&gt;Data Transformation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Response Phase&lt;/strong&gt;: Middleware can also intercept or modify the response before it is returned to the client.&lt;br&gt;
Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding security headers&lt;/li&gt;
&lt;li&gt;compressing the response&lt;/li&gt;
&lt;li&gt;caching the response&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Create the custom middleware class
&lt;/h2&gt;

&lt;p&gt;We can create the custom middlewares inside the &lt;code&gt;lib&lt;/code&gt; directory of our rails controller, if it doesn't exist, create the &lt;code&gt;lib&lt;/code&gt; directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# lib/custom_middleware.rb&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomMiddleware&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Logic before the request reaches the controller&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Incoming request path: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'REQUEST_PATH'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; 

    &lt;span class="c1"&gt;# Call the next middleware&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="vi"&gt;@app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Logic before response reaches client&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'X-Custom-Header'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Hello from middleware'&lt;/span&gt;

    &lt;span class="c1"&gt;# Return the modified response&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rails does not automatically load files in the &lt;code&gt;lib&lt;/code&gt; directory, so we need to ensure it is loaded in &lt;code&gt;config/application.rb&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;autoload_paths&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'lib'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to register the middleware in the middleware stack&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt; &lt;span class="no"&gt;CustomMiddleware&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can verify that our middleware is loaded by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rails&lt;/span&gt; &lt;span class="n"&gt;middleware&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whenever we add or modify the rails middleware, we need to restart the rails server for the changes to take effect.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;rails&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Middleware in Rails is a set of components that process HTTP requests and responses. It provides a modular way to handle task like authentication, logging, and session management.&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Understanding Rails Initializers: Configuring Your Application Easily</title>
      <dc:creator>Yash Pandey</dc:creator>
      <pubDate>Sat, 23 Nov 2024 14:22:23 +0000</pubDate>
      <link>https://dev.to/yashdev/understanding-rails-initializers-configuring-your-application-easily-513f</link>
      <guid>https://dev.to/yashdev/understanding-rails-initializers-configuring-your-application-easily-513f</guid>
      <description>&lt;p&gt;Rails initializers are files that run when the Rails application starts. They allow developers to configure third-party libraries. In this post, we will cover the points below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the rails initializers?&lt;/li&gt;
&lt;li&gt;Why are they important in rails applications?&lt;/li&gt;
&lt;li&gt;Examples of common configurations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What are the rails initializers?
&lt;/h2&gt;

&lt;p&gt;Initializers are .rb files located inside the config/initializers directory. They are executed when Rails applications load up. Initializers are executed alphabetically, so consider file names if order matters. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why are they important in rails applications?
&lt;/h2&gt;

&lt;p&gt;Initializer provides a way to configure and customize applications during the bootup process. It allows developers to set the global configuration and initialize resources before the application starts accepting requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples of common configurations
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# config/initializers/time_zone.rb&lt;/span&gt;
&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;application&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time_zone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Asia/Kolkata'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will set the default timezone for the entire application's Indian Standard Time(IST).&lt;/p&gt;

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

&lt;p&gt;Rails initializers are key to managing your rail application's configuration and setup. They help centralize configuration, integrate third-party services, optimize performances, and create more modular code.&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
