<?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: wizmax8</title>
    <description>The latest articles on Forem by wizmax8 (@williamwizmax).</description>
    <link>https://forem.com/williamwizmax</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%2F3519529%2F2a0cd57e-90aa-478f-acca-d16bfe47c309.jpeg</url>
      <title>Forem: wizmax8</title>
      <link>https://forem.com/williamwizmax</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/williamwizmax"/>
    <language>en</language>
    <item>
      <title>Kubernetes DNS Delays Fixed: How We Eliminated Intermittent Downtime in Production (ChatGPT is best guide? lets see)</title>
      <dc:creator>wizmax8</dc:creator>
      <pubDate>Fri, 21 Nov 2025 11:46:21 +0000</pubDate>
      <link>https://forem.com/williamwizmax/kubernetes-dns-delays-fixed-how-we-eliminated-intermittent-downtime-in-production-chatgpt-is-best-1b5m</link>
      <guid>https://forem.com/williamwizmax/kubernetes-dns-delays-fixed-how-we-eliminated-intermittent-downtime-in-production-chatgpt-is-best-1b5m</guid>
      <description>&lt;p&gt;Hey there, fellow Kubernetes wranglers!&lt;br&gt;
William here, and I am glad to post my 3rd article! If you're knee-deep in cluster configs and scratching your head over mysterious DNS hiccups in your pods, this post is for you. As a senior who's spent more hours than I'd like debugging K8s networking quirks. This 5-minute read dives into a real-world saga of fixing DNS resolution delays in a production namespace (shoutout to "jasmine" – our quirky testbed for social media cron jobs). We'll cover the root cause, the fixes, the pitfalls (including why AI advice isn't always golden), and how we finally nailed it. By the end, you'll have actionable tips to tweak your pod DNS settings and avoid 5-second lookup nightmares. Let's debug!&lt;/p&gt;
&lt;h1&gt;
  
  
  Where it all started
&lt;/h1&gt;

&lt;p&gt;It all kicked off in our Kubernetes cluster (running v1.20-ish, based on some trial-and-error revelations we'll get to). We had a namespace packed with services and a whopping 33 CronJobs handling everything from social media posts to email notifications. Think &lt;code&gt;handle-socialmedia-video-posts&lt;/code&gt; firing every minute – high-frequency stuff.&lt;/p&gt;

&lt;p&gt;Pods were running fine... until they weren't. Logs showed intermittent DNS resolution failures or delays. A simple &lt;code&gt;curl&lt;/code&gt; to an internal service would hang for exactly 5 seconds before succeeding. This was killer for our time-sensitive CronJobs; missed schedules meant delayed posts and unhappy users. At first, I blamed the network overlay (we're on Calico), but &lt;code&gt;kubectl exec&lt;/code&gt; into a pod and running &lt;code&gt;nslookup&lt;/code&gt; revealed the culprit: every lookup was trying &lt;em&gt;five&lt;/em&gt; unnecessary resolutions before falling back.&lt;/p&gt;

&lt;p&gt;Enter the infamous &lt;code&gt;ndots:5&lt;/code&gt; default in &lt;code&gt;/etc/resolv.conf&lt;/code&gt;. In K8s, if your domain has fewer than 5 dots (e.g., &lt;code&gt;my-service.default.svc.cluster.local&lt;/code&gt;), it appends search domains &lt;em&gt;first&lt;/em&gt; – leading to timeouts on non-existent FQDNs.&lt;/p&gt;
&lt;h1&gt;
  
  
  Figuring out the reason
&lt;/h1&gt;

&lt;p&gt;Diving deeper, I grepped pod logs and ran &lt;code&gt;cat /etc/resolv.conf&lt;/code&gt; via &lt;code&gt;kubectl exec&lt;/code&gt;. Sure enough: &lt;code&gt;options ndots:5 timeout:2 attempts:2&lt;/code&gt;. That "ndots:5" is the Kubernetes default, inherited from the kubelet. For our setup – short domain names and frequent external API calls (e.g., to TikTok or YouTube) – it meant 4 extra failed lookups per request, each timing out after 1 second (hence the 5s delay).&lt;/p&gt;

&lt;p&gt;Cross-referencing official docs  and debugging guides , it clicked: we needed to override this with &lt;code&gt;dnsConfig&lt;/code&gt; in the pod spec, setting &lt;code&gt;ndots:2&lt;/code&gt; to prioritize absolute names and cut the fluff.&lt;/p&gt;

&lt;p&gt;But here's the twist – for Deployments (like our &lt;code&gt;php-service&lt;/code&gt;), it was straightforward. For CronJobs? The config lives deeper in the &lt;code&gt;jobTemplate&lt;/code&gt;.&lt;/p&gt;
&lt;h1&gt;
  
  
  What really helped
&lt;/h1&gt;

&lt;p&gt;The game-changer was patching the resources directly with &lt;code&gt;kubectl patch&lt;/code&gt;. For Deployments:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl patch deployment php-service &lt;span class="nt"&gt;-n&lt;/span&gt; jasmine &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;json &lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'[{"op":"add","path":"/spec/template/spec/dnsConfig","value":{"options":[{"name":"ndots","value":"2"}]}}]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This triggers a rollout, and new pods spawn with the updated &lt;code&gt;/etc/resolv.conf&lt;/code&gt;. Bam – our &lt;code&gt;php-service&lt;/code&gt; pods showed &lt;code&gt;ndots:2&lt;/code&gt; immediately after a &lt;code&gt;kubectl rollout restart&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For CronJobs, the path is longer (as per the API spec ):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl patch cronjob process-automatic-post &lt;span class="nt"&gt;-n&lt;/span&gt; jasmine &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;json &lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'[{"op":"add","path":"/spec/jobTemplate/spec/template/spec/dnsConfig","value":{"options":[{"name":"ndots","value":"2"}]}}]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To apply to all 33 at once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get cronjob &lt;span class="nt"&gt;-n&lt;/span&gt; jasmine &lt;span class="nt"&gt;--no-headers&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; name | xargs &lt;span class="nt"&gt;-I&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; kubectl patch &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; jasmine &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;json &lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'[{"op":"add","path":"/spec/jobTemplate/spec/template/spec/dnsConfig","value":{"options":[{"name":"ndots","value":"2"}]}}]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;New Jobs from future schedules now create pods with &lt;code&gt;ndots:2&lt;/code&gt;. To verify: &lt;code&gt;kubectl create job --from=cronjob/&amp;lt;name&amp;gt; test-ndots -n jasmine&lt;/code&gt; and check the logs.&lt;/p&gt;

&lt;p&gt;Bonus: We scripted a checker to scan running pods:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; jasmine &lt;span class="nt"&gt;--no-headers&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'$3=="Running" {print $1}'&lt;/span&gt; | &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;read &lt;/span&gt;pod&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nv"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$pod&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;cat&lt;/span&gt; /etc/resolv.conf | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="s1"&gt;'ndots:[0-9]\+'&lt;/span&gt; | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;: &lt;span class="nt"&gt;-f2&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"2"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"✓ &lt;/span&gt;&lt;span class="nv"&gt;$pod&lt;/span&gt;&lt;span class="s2"&gt; → ndots:2"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"✗ &lt;/span&gt;&lt;span class="nv"&gt;$pod&lt;/span&gt;&lt;span class="s2"&gt; → ndots:&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;value&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;5&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gave us instant feedback on which pods had picked up the change.&lt;/p&gt;

&lt;h1&gt;
  
  
  Major blockers
&lt;/h1&gt;

&lt;p&gt;Oh boy, the roadblocks were real. Here's what nearly derailed us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real bang: online git issues&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Scouring GitHub  , we hit classics like intermittent 5s DNS delays (#56903) and calls to let kubelet set default ndots (#127137). One eye-opener was a CronJob-specific issue (#76790) where fresh pods failed DNS right after creation – exactly our symptom! These threads validated &lt;code&gt;ndots&lt;/code&gt; as the villain but also warned about cluster-wide tweaks (e.g., via DaemonSet overrides) that could break other namespaces.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Do not blindly follow AI answer (had to hold back all)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Early on, an AI suggested patching CronJobs with a bogus path: &lt;code&gt;/spec/jobTemplate/spec/template/spec/podDNSConfig&lt;/code&gt;. Spoiler: &lt;code&gt;podDNSConfig&lt;/code&gt; doesn't exist! It threw "unknown field" errors and wasted hours. We had to cross-verify against official API docs  and test manually. Lesson: AI is great for ideas, but always &lt;code&gt;kubectl explain cronjob.spec.jobTemplate.spec.template.spec.dnsConfig&lt;/code&gt; to confirm paths.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Key Updates
&lt;/h1&gt;

&lt;p&gt;As we iterated, we added monitoring: a bash loop running the checker every 30s, logging to &lt;code&gt;ndots-full.log&lt;/code&gt; with timestamps. This captured the transition – from all pods at &lt;code&gt;ndots:5&lt;/code&gt; to a mix, then fully fixed.&lt;/p&gt;

&lt;p&gt;We also patched the sneaky &lt;code&gt;cron-service&lt;/code&gt; Deployment (a long-running worker mimicking cron behavior) the same way as others. And for future-proofing, we eyed cluster-wide defaults via kubelet flags, but stuck to per-resource patches to avoid side effects.&lt;/p&gt;

&lt;h1&gt;
  
  
  Successful resolve and big hug
&lt;/h1&gt;

&lt;p&gt;After the correct patches, victory! New CronJob pods (e.g., &lt;code&gt;process-automatic-posts-118ch&lt;/code&gt;) finally showed &lt;code&gt;ndots:2&lt;/code&gt;, slashing DNS times from 5s to &amp;lt;100ms. Our social feeds flowed smoothly, no more missed schedules. A big virtual hug to the K8s community – docs, GitHub threads, and even Stack Overflow rants saved the day. Special thanks to that one issue commenter who yelled "CHECK YOUR API VERSION!" – you were right.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Troubleshooting K8s DNS is a rite of passage: start with logs, verify configs, and don't trust unverified paths (AI or otherwise). Key takeaway: Set &lt;code&gt;ndots:2&lt;/code&gt; via &lt;code&gt;dnsConfig&lt;/code&gt; for snappy resolutions in high-lookup workloads. Test with manual Jobs, monitor rollouts, and always reference the API reference . If you're hitting similar snags, drop a comment – let's debug together. Happy clustering! 🚀&lt;/p&gt;

</description>
      <category>k8s</category>
      <category>debugging</category>
      <category>production</category>
      <category>william</category>
    </item>
    <item>
      <title>My AI-Powered Life as a Senior Software Engineer</title>
      <dc:creator>wizmax8</dc:creator>
      <pubDate>Tue, 11 Nov 2025 14:44:54 +0000</pubDate>
      <link>https://forem.com/williamwizmax/my-ai-powered-life-as-a-senior-software-engineer-4dm4</link>
      <guid>https://forem.com/williamwizmax/my-ai-powered-life-as-a-senior-software-engineer-4dm4</guid>
      <description>&lt;p&gt;...Continuing My Dev.to Blog Series on AI Adventures&lt;/p&gt;

&lt;p&gt;Hey Dev.to folks, Happy Veteran's Day!&lt;/p&gt;

&lt;p&gt;I'm a senior software engineer with over a decade in full-stack dev and AI architecture. From leading teams at consultancies to freelancing on cool projects, I've gone from building basic backends to creating AI-native apps that supercharge businesses. These days, I'm all about designing AI-driven back offices for solo pros—think code meets creativity with the latest tech. But why does this matter? Well, in a world where AI boosts what we humans do best, staying ahead isn't optional—it's exciting.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Go-To AI Tools and Builds
&lt;/h2&gt;

&lt;p&gt;I've had some game-changing moments with AI tools. Take Cursor, my AI IDE buddy—it helps brainstorm code, debug tricky bits, and whip up tests in no time. Ever wondered how to prototype a news analyzer or price predictor? I pair it with GPT models for agentic systems that handle real-time data like a pro. Then there's N8N for workflow automation and Gamma for quick UI mocks. In one project, I used N8N to link data pipelines to AI agents, making everything flow seamlessly.&lt;/p&gt;

&lt;p&gt;What about cutting-edge models? Open-source gems like TensorFlow, PyTorch, and Hugging Face Transformers let me deploy ML magic in stuff like an AI Trading Assistant with LSTM predictions or a Crypto Token simulator on Ethereum. Using RAG for context-aware responses? It's a staple in my chatbots and onboarding agents. Question for you: How much faster could your workflow get if you tapped into these free resources?&lt;/p&gt;

&lt;h2&gt;
  
  
  Essentials for Diving into AI
&lt;/h2&gt;

&lt;p&gt;To get good at this lately, you need basics like solid Python skills, plus JS and PHP for full-stack vibes. But hands-on is king—start small, like tweaking a Hugging Face model. Why not try a Coursera course or hit up Reddit communities? Tech-wise, know your clouds (AWS SageMaker, Kubernetes) and DevOps for scaling. Soft skills? Stay agile with new stuff like embeddings and vector DBs. Dedicate some playtime—say 20% of your day—to experiment in sandboxes. Think about it: What's stopping you from leveling up today?&lt;/p&gt;

&lt;h2&gt;
  
  
  Hang-Ups and Big Mistakes in Skipping AI
&lt;/h2&gt;

&lt;p&gt;Sure, there are hiccups—like over-relying on tools and losing that deep code know-how, or dealing with biases in unchecked models. Ethical stuff can linger if you're not careful. But hey, balance it out: Use AI as a sidekick, not the boss.&lt;/p&gt;

&lt;p&gt;The real pitfalls? Ignoring AI means slogging through manual debugging when it could be instant, or building clunky systems without ML smarts. Career-wise, you'll fall behind in hot fields like fintech—I've seen folks miss out on big gigs. Personally, skipping open-source means missing community wins. Ever felt that regret of watching others zoom ahead? That's the hangover of avoidance. As I chat about in my dev.to posts on AI agents and open-source, start small and iterate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Old Wisdom, New Edge
&lt;/h2&gt;

&lt;p&gt;At the end of the day, it's all about balance: &lt;strong&gt;"Read old books, use new tools."&lt;/strong&gt; Classics like "Clean Code" give timeless smarts, while RAG and agentic frameworks deliver the now. How can you blend them in your next project? For me, it's led to scalable systems and sharing insights through writing. Dive in, folks—let AI amp up your game!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cursor</category>
      <category>cuttingedge</category>
      <category>heckblog</category>
    </item>
    <item>
      <title>Sticky Notes, Big Dreams: My Masa Son Moment (and Why You Should Steal It)</title>
      <dc:creator>wizmax8</dc:creator>
      <pubDate>Mon, 10 Nov 2025 15:43:08 +0000</pubDate>
      <link>https://forem.com/williamwizmax/sticky-notes-big-dreams-my-masa-son-moment-and-why-you-should-steal-it-1i46</link>
      <guid>https://forem.com/williamwizmax/sticky-notes-big-dreams-my-masa-son-moment-and-why-you-should-steal-it-1i46</guid>
      <description>&lt;p&gt;Hey dev.to crew, here I am putting out my second post—feeling pumped despite the quiet start on my debut. Yeah, that first one didn't blow up with likes or comments, but hey, that's par for the course for a newbie like me. Even killer articles from pros sometimes fly under the radar, so I'm not sweating it. &lt;strong&gt;The win? I finally pinned dev.to as one of my top three bookmarks—boom&lt;/strong&gt;, now it's staring me down every time I open my browser, keeping me locked in.&lt;/p&gt;

&lt;p&gt;Ever since, I've been channeling my inner Masa Son, &lt;strong&gt;jotting down wild ideas&lt;/strong&gt; on sticky notes whenever inspiration hits. Who knows, one of these could turn into a multi-million-dollar pitch someday? Skeptics might roll their eyes, but it's fueling my fire and dropping breadcrumbs for killer future content. It's all about that momentum, turning sparks into full-blown strategies.&lt;br&gt;
Stay tuned, talking to myself and folks — I'm brewing something big for the next one, and we'll unpack how to spot (and chase) your own "next big thing" in tech. What's your go-to hack for staying motivated in the content game? Hit me up in the comments; let's swap stories and level up together.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Do You Really Need a Blog? My First Step as a Senior Software Engineer</title>
      <dc:creator>wizmax8</dc:creator>
      <pubDate>Wed, 05 Nov 2025 14:59:17 +0000</pubDate>
      <link>https://forem.com/williamwizmax/do-you-really-need-a-blog-my-first-step-as-a-senior-software-engineer-1lo</link>
      <guid>https://forem.com/williamwizmax/do-you-really-need-a-blog-my-first-step-as-a-senior-software-engineer-1lo</guid>
      <description>&lt;p&gt;Hello dev.to community! As a senior software engineer diving into my very first blog post, I'm excited (and a bit nervous) to share my thoughts on growing a professional network through writing. With years of experience exploring &lt;strong&gt;open source models&lt;/strong&gt;, crafting &lt;strong&gt;AI agents&lt;/strong&gt; for various purposes, and using &lt;strong&gt;no-code platforms&lt;/strong&gt; to quickly test ideas, I've realized blogging could be a game-changer for connecting with like-minded folks. Inspired by &lt;strong&gt;Atomic Habits&lt;/strong&gt; by James Clear, which highlights the impact of small, consistent actions, and TED talks on personal development, I'm starting this journey today—but let's kick off with a key question: &lt;em&gt;Do you really need a blog?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;From what I've gathered, blogging isn't essential for everyone, but it can be a powerful way to reflect on complex problem-solving in software development and spark discussions. As a newcomer to this, I'm not claiming expertise in writing; instead, I'm sharing my raw enthusiasm for turning personal experiences into shared knowledge. Think of it as an opening dialogue—recounting my path so far has already helped me clarify strategies, and I hope it encourages you too.&lt;/p&gt;

&lt;p&gt;My strategic roadmap is simple: begin with self-reflection on unique insights, build &lt;strong&gt;habit-building&lt;/strong&gt; routines like dedicated writing time (shoutout to James Clear), and post consistently on platforms like dev.to without chasing perfection. I've outlined future topics from AI explorations to no-code hacks, aiming to provide value in bite-sized reads. Small steps compound into meaningful growth, right?&lt;/p&gt;

&lt;p&gt;If you're on the fence about starting your own blog, remember it can turn passive networking into active opportunities, like collaborations or feedback loops. What's your take—do you really need one, or is there another way? Drop your thoughts in the comments; I'd love to hear from you and build this conversation together.&lt;/p&gt;

</description>
      <category>habit</category>
      <category>beginners</category>
      <category>inspiration</category>
      <category>network</category>
    </item>
  </channel>
</rss>
