<?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: Francis Adediran</title>
    <description>The latest articles on DEV Community by Francis Adediran (@francis04j).</description>
    <link>https://dev.to/francis04j</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%2F166005%2Fd899941e-c5d1-48f0-bffa-f74d654d9a3e.jpeg</url>
      <title>DEV Community: Francis Adediran</title>
      <link>https://dev.to/francis04j</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/francis04j"/>
    <language>en</language>
    <item>
      <title>Leadership musing: how do i positively influence others to do something?</title>
      <dc:creator>Francis Adediran</dc:creator>
      <pubDate>Sun, 28 Sep 2025 02:05:02 +0000</pubDate>
      <link>https://dev.to/francis04j/leadership-musing-how-do-i-positively-influence-others-to-do-something-4hcf</link>
      <guid>https://dev.to/francis04j/leadership-musing-how-do-i-positively-influence-others-to-do-something-4hcf</guid>
      <description>&lt;p&gt;..especially when you are not in a position of power? This is a question that challenges me regularly in my personal and professional life.&lt;/p&gt;

&lt;p&gt;I'm going to use this blog to note approaches that has worked for me. It'll be a reference note for future self and anyone that might face this challenge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Frc0kon7lpo0cewhj7sqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frc0kon7lpo0cewhj7sqn.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make it a shared goal&lt;/strong&gt;&lt;br&gt;
Communication is important here. I found that instead of framing a task like a chore they should do, frame it as something you can do together to achieve a commonly achievable goal. For example, cleaning a room. &lt;br&gt;
"Guys, let's clean the room after each meeting" can be better phrased as "Let's spend 5 minutes cleaning this room so that it's easy to find our items meetings after meetings." &lt;br&gt;
This is an example. The point is to set a specific, small goal with common benefit so that the task seem less daunting and more achievable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lead by example&lt;/strong&gt;&lt;br&gt;
Be the change you want to see. My father always tell me and i believe Micheal Jackson sang about this. The reason why this works is deeply rooted in behavioural science. If your act or task leads to a positive outcome, people will naturally gravitate to it. In software engineering, I'm a fan of documentation: README files, automated tests, confluence documents or code comments, i love them. They are critical components that reduce friction and accelerate knowledge transfer.&lt;br&gt;
A lot of the time when i join a team or mentoring a developer, i find myself trying to influence this good act. This is what i do that works. &lt;br&gt;
I start by consistently updating and adding documentation to any code or project i touch. The goal is to make this a normal constant part of your routine and not let the negative feeling of lack overcome me. When i see a project without readme file for example, i add one without complaining or making a fuss. &lt;br&gt;
I found that over time, others start start to follow suit.&lt;br&gt;
This aligns with the principles of Social proof by Robert Cialdini, which suggests the more people who sees any idea to be correct or beneficial, the more a given individual will perceive the idea to be correct.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make it Fun&lt;/strong&gt;&lt;br&gt;
I have my wife and son to thank for making me have this technique in my arsenal. Adding fun changes the emotional context of a task.&lt;br&gt;
Turn the task into a game. &lt;br&gt;
Put on some fun music. &lt;br&gt;
Race to see who can finish a task the fastest. &lt;br&gt;
Offer a small reward for finishing a task. &lt;br&gt;
Turn it into a fun routine, "Readme hour", "Cleanup saturday". &lt;br&gt;
I found that these changes the perception of a task from a chore to a more enjoyable activity. &lt;br&gt;
Principles of gamification by Zichermann &amp;amp; Cunningham in Gamification by Design support this as a way to engage others and solve problems.&lt;br&gt;
**&lt;br&gt;
Reinforce Positive Behavior**&lt;br&gt;
Appreciate, appreciate, appreciate. When your team or partner does the task, acknowledge and appreciate their effort.&lt;br&gt;
"I know this isn't easy, and i really value that you gave it a shot"&lt;br&gt;
"Your effort here makes a big difference even if it is not obvious yet"&lt;br&gt;
"Thank you for cleaning the kitchen, it looks great!" goes a long way. This positive reinforcement makes them feel good about their contribution and more likely to do it again.&lt;br&gt;
Add recognition or visibility to their effort to build goodwill and trust. &lt;br&gt;
A post in team's chat group. A post on social media. A mention in a speech. &lt;br&gt;
Acknowlegment and recognition are the real engines of change.&lt;/p&gt;

</description>
      <category>career</category>
      <category>discuss</category>
      <category>management</category>
    </item>
    <item>
      <title>README file is important</title>
      <dc:creator>Francis Adediran</dc:creator>
      <pubDate>Sun, 28 Sep 2025 02:00:41 +0000</pubDate>
      <link>https://dev.to/francis04j/readme-file-is-important-1jk9</link>
      <guid>https://dev.to/francis04j/readme-file-is-important-1jk9</guid>
      <description>&lt;p&gt;Having good technical documentation—like code README files, Redoc API definitions, and Confluence documentation—provides tangible business value in multiple ways. Here's a breakdown of the benefits across these documentation types:&lt;/p&gt;

&lt;p&gt;🔧 1. Improved Developer Productivity&lt;br&gt;
README files help developers quickly understand how to set up and run the codebase.&lt;/p&gt;

&lt;p&gt;Redoc API definitions provide clear, interactive API references so devs don't have to guess how to integrate or consume services.&lt;/p&gt;

&lt;p&gt;Confluence pages document architectural decisions, onboarding guides, and operational runbooks.&lt;/p&gt;

&lt;p&gt;📈 Business impact: Faster onboarding, fewer internal support questions, and less time lost deciphering undocumented systems.&lt;/p&gt;

&lt;p&gt;💸 2. Reduced Time-to-Market&lt;br&gt;
With clear docs, teams spend less time figuring out how things work and more time delivering features.&lt;/p&gt;

&lt;p&gt;External integrators (e.g., partners or clients using your API) can self-serve with Redoc, speeding up integrations.&lt;/p&gt;

&lt;p&gt;📈 Business impact: Deliver features faster, close partner deals sooner, and launch products quicker.&lt;/p&gt;

&lt;p&gt;👥 3. Easier Team Scaling &amp;amp; Onboarding&lt;br&gt;
Good documentation means new hires or cross-functional teams can ramp up quickly.&lt;/p&gt;

&lt;p&gt;Confluence often holds institutional knowledge that's otherwise locked in people's heads.&lt;/p&gt;

&lt;p&gt;📈 Business impact: Reduces training costs, dependency on specific employees, and risk of knowledge silos.&lt;/p&gt;

&lt;p&gt;📉 4. Fewer Bugs and Downtime&lt;br&gt;
README files ensure dev environments are set up consistently.&lt;/p&gt;

&lt;p&gt;API definitions reduce miscommunication between frontend/backend or internal/external services.&lt;/p&gt;

&lt;p&gt;Clear operational docs help teams diagnose and resolve incidents faster.&lt;/p&gt;

&lt;p&gt;📈 Business impact: Less downtime, better customer experience, and lower support costs.&lt;/p&gt;

&lt;p&gt;🔄 5. Better Cross-Team Collaboration&lt;br&gt;
Teams working on different services can align better through shared docs (Confluence, API specs).&lt;/p&gt;

&lt;p&gt;Documentation becomes a source of truth for contracts, dependencies, and interfaces.&lt;/p&gt;

&lt;p&gt;📈 Business impact: Prevents duplication, rework, and confusion across departments.&lt;/p&gt;

&lt;p&gt;📚 6. Stronger Developer Experience (DX) and Ecosystem&lt;br&gt;
A clean README and Redoc page make your project or API more attractive to open-source contributors or third-party developers.&lt;/p&gt;

&lt;p&gt;📈 Business impact: Improves adoption, encourages external innovation, and builds a more vibrant ecosystem around your product.&lt;/p&gt;

&lt;p&gt;🔒 7. Compliance and Audit Readiness&lt;br&gt;
Well-documented processes, data flows, and APIs help meet compliance requirements (e.g., GDPR, SOC 2).&lt;/p&gt;

&lt;p&gt;Confluence often stores critical business and security policies.&lt;/p&gt;

&lt;p&gt;📈 Business impact: Reduces audit time, ensures regulatory compliance, and builds customer trust.&lt;/p&gt;

&lt;p&gt;If you're ever trying to convince leadership or a stakeholder, the key message is:&lt;/p&gt;

&lt;p&gt;"Documentation isn't a cost—it's an investment in velocity, quality, and scalability."&lt;/p&gt;

&lt;p&gt;Let me know if you want to tailor this for a pitch deck or internal proposal—I can help you structure it.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>softwaredevelopment</category>
      <category>writing</category>
    </item>
    <item>
      <title>The efficient way to measure time in .NET</title>
      <dc:creator>Francis Adediran</dc:creator>
      <pubDate>Sat, 04 Jan 2025 16:03:09 +0000</pubDate>
      <link>https://dev.to/francis04j/the-efficient-way-to-measure-time-in-net-1i1k</link>
      <guid>https://dev.to/francis04j/the-efficient-way-to-measure-time-in-net-1i1k</guid>
      <description>&lt;p&gt;One of my new year resolution for 2025 is to share my coding and engineering challenges, learnings and musings.&lt;/p&gt;

&lt;p&gt;Today, i'll like to share a technique that i recently discovered whilst trying to measure how long it takes to execute a method or function in .NET. I faced this challenge when working with the vector search component of Weaviate. &lt;a href="https://github.com/weaviate/weaviate" rel="noopener noreferrer"&gt;Weaviate&lt;/a&gt; is open-source vector database state-of-the-art machine learning (ML) models to turn your data - text, images, and more - into a searchable vector database. It stores both objects and vectors, allowing for the combination of vector search with structured filtering.  Thus, the performance of search is integral especially for a database.&lt;/p&gt;

&lt;p&gt;Now, there are many ways to measure time in .NET. The common way these days is using Stopwatch class like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Stopwatch stopwatch = new Stopwatch();&lt;br&gt;
stopwatch.Start(); &lt;br&gt;
// Your code: Doing something e.g Thread.Sleep(3000); &lt;br&gt;
stopwatch.Stop();&lt;br&gt;
TimeSpan elapsedTime = stopwatch.Elapsed;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;However, i found the Stopwatch object creation and memory allocation time consuming in our app. I tried to factor the memory/time used by Stopwatch but it became an issue when you have more than one stopwatch. And in the vector search algorithm, every seconds counts. So my search for alternatives led me to this &lt;br&gt;
this performant and modern way introduced in .NET 7.&lt;/p&gt;

&lt;p&gt;This is how it's done&lt;/p&gt;

&lt;p&gt;&lt;code&gt;long startTime = Stopwatch.GetTimestamp(); &lt;br&gt;
  // Your code: Doing something e.g Thread.Sleep(3000);&lt;br&gt;
TimeSpan elapsedTime = Stopwatch.GetElapsedTime(startTime);&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;With this new approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;you are dont need to create a new Stopwatch instance hence no memory allocations on the heap, making it ideal for performance-critical paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The underlying timestamp for the Stopwatch methods is monotonic i.e. they are not affected by time changing due to Network Time Protocol (NTP) time sync changes or other sources of system time change. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The code is also simple and clear about its intent. I often see people forget to stop the StopWatch in the previous style. This new style is clean.&lt;br&gt;
Nick Chapsas gave a &lt;a href="https://www.youtube.com/watch?v=Lvdyi5DWNm4" rel="noopener noreferrer"&gt;nice video talk&lt;/a&gt; about this as well&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As i mentioned earlier, there are other ways to measure how long it takes to execute a method or function in .NET&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Through Professional tools like &lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/visualstudio/profiling/?view=vs-2022" rel="noopener noreferrer"&gt;Visual studio Performance tool&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/dotnet/BenchmarkDotNet" rel="noopener noreferrer"&gt;BenchmarkDotNet&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.jetbrains.com/profiler/" rel="noopener noreferrer"&gt;DotTrace Profiler by Rider&lt;/a&gt;, &lt;a href="https://github.com/Dynatrace/openkit-dotnet" rel="noopener noreferrer"&gt;Dynatrace&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/DataDog/dd-trace-dotnet" rel="noopener noreferrer"&gt;Datadog&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DateTime and TimeSpan&lt;br&gt;
Using DateTime, you can register the time before and after the execution of the code that you want to measure and &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;DateTime start = DateTime.UtcNow;           &lt;br&gt;
// Your code: Doing something e.g Thread.Sleep(3000);&lt;br&gt;
DateTime end = DateTime.UtcNow;&lt;br&gt;
TimeSpan timeDiff = end - start;&lt;br&gt;
Console.WriteLine(Convert.ToInt32(timeDiff.TotalMilliseconds));&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I wont recommend using the DateTime approach because it is not monotonic and relies on a lot of other variables as described in &lt;a href="https://www.youtube.com/watch?v=Lvdyi5DWNm4" rel="noopener noreferrer"&gt;Nick Chapsas video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading. Hope you find this useful&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>weaviate</category>
      <category>webdev</category>
      <category>api</category>
    </item>
    <item>
      <title>What are the best logging and monitoring tools for .NET apps</title>
      <dc:creator>Francis Adediran</dc:creator>
      <pubDate>Sun, 22 Dec 2024 00:50:44 +0000</pubDate>
      <link>https://dev.to/francis04j/what-are-the-best-logging-and-monitoring-tools-for-net-apps-1kj0</link>
      <guid>https://dev.to/francis04j/what-are-the-best-logging-and-monitoring-tools-for-net-apps-1kj0</guid>
      <description>&lt;p&gt;&lt;a href="https://exceptionless.com/" rel="noopener noreferrer"&gt;Exceptionless&lt;/a&gt;: Free, easy to use and contribute to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Frhplehft00ns91o5uu0l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frhplehft00ns91o5uu0l.png" alt="Image description" width="705" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SignozHQ: Another free open source and easy to use observability tool. It provides metrics, traces, and logs under a single pane of glass&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fjcpfmw1hwnjqb67wwquu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fjcpfmw1hwnjqb67wwquu.png" alt="Image description" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In enterprise environment, I've also used&lt;br&gt;
Splunk&lt;br&gt;
Azure Application Insights&lt;br&gt;
Sentry&lt;br&gt;
Serilog&lt;br&gt;
Grafana&lt;br&gt;
OpenTelemetry&lt;br&gt;
Datadog&lt;br&gt;
Seq&lt;br&gt;
Dynatrace&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>monitoring</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What are your pros and cons of working from home</title>
      <dc:creator>Francis Adediran</dc:creator>
      <pubDate>Tue, 02 Jun 2020 21:37:55 +0000</pubDate>
      <link>https://dev.to/francis04j/what-are-your-pros-and-cons-of-working-from-home-3o6</link>
      <guid>https://dev.to/francis04j/what-are-your-pros-and-cons-of-working-from-home-3o6</guid>
      <description>&lt;p&gt;Given the current pandemic situation, companies are now looking to allow working from home a permanent thing, some with no option to work in an office.&lt;/p&gt;

&lt;p&gt;We've all been working from home for some time now, what benefits and disadvantages have you seen when it comes to working from home? &lt;/p&gt;

&lt;p&gt;These are mine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No commute&lt;/strong&gt; - Work starts at 9.30am, i can be wake up at 9.15 and be ready.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quiet and little distraction&lt;/strong&gt; - It's easy to have a quiet environment now. My office is often noisy that having an earphone is essential.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cooked meal&lt;/strong&gt; - I've learnt to love home cooked meal. I have also learnt new recipes in this lockdown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More time&lt;/strong&gt; - I seem to have more time in my hand these days, i can sleep more, find time for exercise and entertainment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time control&lt;/strong&gt; - I often see myself working overtime or attending late meetings. Something that rarely happens in an office situation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting help&lt;/strong&gt; - As a developer, it is easy to run into tricky coding or technical difficulty, in an office situation, it's easy to pull your teammate around, pair-program etc. Now, i often find myself staring at the chat window for minutes or hours, hoping they still like to me enough to reply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meetings are sometimes awkward&lt;/strong&gt;&lt;br&gt;
In an office situation, developers meetings tend to be fun. Sprint review, retrospective meeting. Sprint planning is more energetic and often entertaining. Now, it's like &lt;em&gt;"sorry, i'm on mute"&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pros</category>
      <category>cons</category>
      <category>work</category>
      <category>home</category>
    </item>
    <item>
      <title>How to add .env and use process.env to your typescript project</title>
      <dc:creator>Francis Adediran</dc:creator>
      <pubDate>Sun, 26 Apr 2020 13:49:38 +0000</pubDate>
      <link>https://dev.to/francis04j/how-to-add-env-and-use-process-env-to-your-typescript-project-3d6b</link>
      <guid>https://dev.to/francis04j/how-to-add-env-and-use-process-env-to-your-typescript-project-3d6b</guid>
      <description>&lt;p&gt;I recently came across this problem in my project and the usual google search/Stackoverflow readings lead to partial and confusing solutions.&lt;br&gt;
So i’m going to document my solution, hopefully someone finds it useful.&lt;/p&gt;

&lt;p&gt;First install dotenv package&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install dotenv;
 OR 
yarn add dotenv;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Import to the entry point of your code. This is usually your &lt;em&gt;index.ts, main.ts or app.ts&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import * as dotenv from 'dotenv';

//inside your starter code, do this
...
...
dotenv.config();
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now you are ready to use, process.env.ENVIRONMENT_VARIABLE with your project.&lt;/p&gt;

&lt;p&gt;However, i will recommend creating a config module to put all your environment variables access. This approach has a lot of benefits such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ease of code refactoring: a single place to update, change any environment variable key or default value. This is better than doing All-files-search of a variable name.&lt;/li&gt;
&lt;li&gt;ease of testing: you can mock or intercept this.&lt;/li&gt;
&lt;li&gt;Clean code: this approach is modular and less typing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your config module could look like this. &lt;em&gt;endpoints.config.ts&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export default {
 UserBaseUrl: process.env.USER_SERVICE_URL ?? '',
 EtlUrl: process.env.ETL_SERVICE_URL ?? ''
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now in your code, you can do something like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import endpoint from '../endpoints.config';
... 
...
const user = await axios.get(endpoint.UserBaseUrl, { params})
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;That’s it!. Feel free to leave a comment if i missed anything or you are having issues with this.&lt;br&gt;
Thanks&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>env</category>
      <category>processenv</category>
      <category>environmentvariables</category>
    </item>
  </channel>
</rss>
