<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://www.baszerr.eu/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>BaSzErr - blog:2010:11</title>
        <description></description>
        <link>https://www.baszerr.eu/</link>
        <lastBuildDate>Wed, 06 May 2026 06:58:37 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://www.baszerr.eu/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
            <title>BaSzErr</title>
            <link>https://www.baszerr.eu/</link>
        </image>
        <item>
            <title>03</title>
            <link>https://www.baszerr.eu/doku.php?id=blog:2010:11:03</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;funny_memory&quot;&gt;2010.11.03 - funny memory&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
today at work i was testing our application for memory leaks and other memory-related issues and came across interesting side effect of memory handing mechanism in linux. though it&amp;#039;s correct, it looks at least surprising when you haven&amp;#039;t seen that before. it appears that kernel nowadays perform lazy memory deallocation. consider &lt;a href=&quot;https://www.baszerr.eu/lib/exe/fetch.php?media=blog:2010:11:funny_mem_test.cpp&quot; class=&quot;media mediafile mf_cpp&quot; title=&quot;blog:2010:11:funny_mem_test.cpp (776 B)&quot;&gt;following code&lt;/a&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code cpp&quot;&gt;&lt;span class=&quot;co2&quot;&gt;#include &amp;lt;vector&amp;gt;&lt;/span&gt;
&lt;span class=&quot;co2&quot;&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span class=&quot;co2&quot;&gt;#include &amp;lt;boost/shared_array.hpp&amp;gt;&lt;/span&gt;
&lt;span class=&quot;co2&quot;&gt;#include &amp;lt;cstring&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;namespace&lt;/span&gt; std&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;namespace&lt;/span&gt; boost&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw4&quot;&gt;int&lt;/span&gt; main&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  vector&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt; shared_array&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;&amp;gt;&lt;/span&gt; v&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// (1)&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;cout&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;size: &amp;quot;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw4&quot;&gt;size_t&lt;/span&gt; size&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;cin&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;size&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;cout&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;(re)allocating to &amp;quot;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;size&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;MB&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
    size&lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// (2)&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;size_t&lt;/span&gt; i&lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt;v.&lt;span class=&quot;me1&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;size&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;++&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      shared_array&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&lt;/span&gt; tmp&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;kw3&quot;&gt;memset&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; tmp.&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span class=&quot;nu12&quot;&gt;0xF0&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
      v.&lt;span class=&quot;me1&quot;&gt;push_back&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;tmp&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// (3)&lt;/span&gt;
    random_shuffle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; v.&lt;span class=&quot;me1&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, v.&lt;span class=&quot;me1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// (4)&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; size&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;v.&lt;span class=&quot;me1&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
      v.&lt;span class=&quot;me1&quot;&gt;resize&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;size&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// (5)&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; size&lt;span class=&quot;sy1&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;kw3&quot;&gt;cout&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;deallocating&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
      vector&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt; shared_array&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;&amp;gt;&lt;/span&gt; tmp&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
      v.&lt;span class=&quot;me1&quot;&gt;swap&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;tmp&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// (6)&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;cout&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;size is &amp;quot;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;v.&lt;span class=&quot;me1&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;MB&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
this is a sample program that loops forever allocating given amount of memory (in &lt;abbr title=&quot;Megabyte&quot;&gt;MB&lt;/abbr&gt;), in 1kB chunks. user gives amount of memory to allocate interactively. it goes like this:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; get size of memory to use (explicitly - remember that there are counting pointers in back ground as well!) from user&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; expand vector if it is too small&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; set the order of elements to be random (this introduces extra entropy when deallocating part of memory only); this step is optional&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; truncate out memory, if too much is allocated.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; special case - if size is to be zero, ensure vector is empty&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; display current vector&amp;#039;s size (to see if it works)&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
now compile and run this application on one terminal and open (h)top on the second, so that you&amp;#039;ll be able to see them both. assuming you have 1GB of memory, ~200MB taken by the system (say: 800MB is free), try following sequence of allocations, taking look at (h)top after each step:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 50&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 500&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 5&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 500&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 0&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
in the first run memory usage increases - good, we expected that. in second the same happens – so far, so good. the surprise is 3rd step, when memory usage usually does NOT drop! when you set it back to 500MB size it&amp;#039;s still on the same level. now decreasing it to 0 (all memory is freed in program - remember our &amp;#039;if&amp;#039;)… usually does not free memory still. after some time, and some more (de)allocations memory will stabilize at the “real” level. confusing, huh? wait – there&amp;#039;s more. now open one more terminal and run out application on it too. try sequence of allocating 500MB and then going back to 0MB on first terminal ((h)top still shows huge memory usage) and now do the same thing on the second terminal. since previous instance freed memory it should be available, right? in my case - on my machines kernel killed application because memory run out!
&lt;/p&gt;

&lt;p&gt;
this is visible side effect of memory handling mechanism. funny, though quite surprising at first. keep in mind that what (h)top shows is now how much memory application uses at that very moment, but instead how much memory system has currently assigned to it.
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:08:59 +0000</pubDate>
        </item>
        <item>
            <title>05</title>
            <link>https://www.baszerr.eu/doku.php?id=blog:2010:11:05</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;universal_stepper_motor_controller&quot;&gt;universal stepper motor controller&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
after doing some datasheet reading and experiments with &lt;a href=&quot;http://www.atmel.com/dyn/resources/prod_documents/doc2535.pdf&quot; class=&quot;urlextern&quot; title=&quot;http://www.atmel.com/dyn/resources/prod_documents/doc2535.pdf&quot; rel=&quot;ugc nofollow&quot;&gt;ATiny13&lt;/a&gt; uC &lt;a href=&quot;https://www.baszerr.eu/doku.php?id=prjs:usmc:usmc&quot; class=&quot;wikilink1&quot; title=&quot;prjs:usmc:usmc&quot; data-wiki-id=&quot;prjs:usmc:usmc&quot;&gt;universal stepper motor controller&lt;/a&gt; has finally grown up enough to show it! :) final version uses &lt;a href=&quot;http://www.atmel.com/atmel/acrobat/doc0368.pdf&quot; class=&quot;urlextern&quot; title=&quot;http://www.atmel.com/atmel/acrobat/doc0368.pdf&quot; rel=&quot;ugc nofollow&quot;&gt;AT89C2051&lt;/a&gt; uC, uses interrupts and enters idle mode often, in order to minimize power consumption. it supports both unipolar and bipolar stepper motors, has step-by-step mode along with continuous (aka: “turbo”) mode of operations.
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:08:59 +0000</pubDate>
        </item>
        <item>
            <title>25</title>
            <link>https://www.baszerr.eu/doku.php?id=blog:2010:11:25</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;this_is_a_thread_we_live_in&quot;&gt;2010.11.25 - this is a thread we live in&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
i&amp;#039;ve already wrote how threading affect us (&lt;a href=&quot;https://www.baszerr.eu/doku.php?id=blog:2009.11.28&quot; class=&quot;wikilink1&quot; title=&quot;blog:2009.11.28&quot; data-wiki-id=&quot;blog:2009.11.28&quot;&gt;the free lunch is over&lt;/a&gt;) and that threading is the future (&lt;a href=&quot;https://www.baszerr.eu/doku.php?id=blog:2009.12.04&quot; class=&quot;wikilink1&quot; title=&quot;blog:2009.12.04&quot; data-wiki-id=&quot;blog:2009.12.04&quot;&gt;here come the cores&lt;/a&gt;). today i came across two interesting articles about practices for multithread programming:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.drdobbs.com/go-parallel/article/showArticle.jhtml;jsessionid=GNH3AJ01IFN5DQE1GHRSKHWATMY32JVN?articleID=224701827&amp;amp;pgno=1&quot; class=&quot;urlextern&quot; title=&quot;http://www.drdobbs.com/go-parallel/article/showArticle.jhtml;jsessionid=GNH3AJ01IFN5DQE1GHRSKHWATMY32JVN?articleID=224701827&amp;amp;pgno=1&quot; rel=&quot;ugc nofollow&quot;&gt;Associate Mutexes with Data to Prevent Races&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.drdobbs.com/go-parallel/article/showArticle.jhtml;jsessionid=GNH3AJ01IFN5DQE1GHRSKHWATMY32JVN?articleID=227500074&quot; class=&quot;urlextern&quot; title=&quot;http://www.drdobbs.com/go-parallel/article/showArticle.jhtml;jsessionid=GNH3AJ01IFN5DQE1GHRSKHWATMY32JVN?articleID=227500074&quot; rel=&quot;ugc nofollow&quot;&gt;Know When to Use an Active Object Instead of a Mutex&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
if you&amp;#039;re doing any concurrency, these are must-read ones!
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 15 Jun 2021 20:08:59 +0000</pubDate>
        </item>
    </channel>
</rss>
