<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0"><channel><title>Meadow - Posts tagged with programming</title><description>Posts tagged with programming on Meadow</description><link>https://meadow.cafe/</link><language>en-us</language><item><title>Introducing Mochi — and thoughts on analytics and webmentions</title><link>https://meadow.cafe/blog/introducing-mochi-and-thoughts-on-analytics-and-webmentions/</link><guid isPermaLink="true">https://meadow.cafe/blog/introducing-mochi-and-thoughts-on-analytics-and-webmentions/</guid><description>&lt;p&gt;I&apos;ve been working on a new personal project for some months now. It started when I &lt;a href=&quot;/blog/tentative-steps-back-into-blogging/&quot;&gt;migrated&lt;/a&gt; my blog from Bearblog to a custom, statically generated site. I&apos;m not one to obsess about analytics (but god knows &lt;a href=&quot;/blog/falling-into-the-numbers-game/&quot;&gt;I have done so in the past&lt;/a&gt;) but I do care about when other people comment on the things I&apos;ve written in their own blogs. I&apos;m always happy to read what they say, be it good or bad.&lt;/p&gt;
&lt;p&gt;There&apos;s a cool technology floating around the Indie Webs called &lt;a href=&quot;https://indieweb.org/Webmention&quot;&gt;Webmentions&lt;/a&gt;, that is supposed to address exactly that issue. You write a post that tags my post and then let me know about it by sending an HTTP request to my Webmentions server. Sounds awfully technical for the average non-technical user, and it is.&lt;/p&gt;
&lt;p&gt;I spent some time researching this and saw a pretty clear pattern: webmentions have been set up for almost all sites whose authors have a technical background (often using a custom built server). But in the sphere of non-technical bloggers, almost no one has the ability to receive webmentions.&lt;/p&gt;
&lt;p&gt;Granted, there are some cool projects out there, (most notably &lt;a href=&quot;https://webmention.io/&quot;&gt;webmentions.io&lt;/a&gt;) that try to make it easy for anyone to add a webmention endpoint, all through a web UI. Still, it&apos;s not super clear how to use it. Though it&apos;s good that it exists. From what I&apos;ve seen this is the service that most non-technical people use.&lt;/p&gt;
&lt;p&gt;But all of this is about &quot;receiving&quot; webmentions. The sending of webmentions is actually more complex and harder to do for the average non-technical person. The best solution I found for this is &lt;a href=&quot;https://webmention.app/&quot;&gt;webmention.app&lt;/a&gt;, that finds and sends webmentions for every link in a given page. Still, it&apos;s a manual process, as the user needs to go to the app every time they want webmentions to be sent. It works, but it&apos;s tedious, meaning people won&apos;t do it consistently. There&apos;s the ability to automate it, but you need to write a script, which again is a barrier for non-technical folks.&lt;/p&gt;
&lt;p&gt;At the time I was also experimenting with different analytics services, most notably &lt;a href=&quot;https://tinylytics.app/&quot;&gt;Tinylytics&lt;/a&gt; and &lt;a href=&quot;https://umami.is/&quot;&gt;Umami&lt;/a&gt;. Both were great but I absolutely loved Tinylytics. So clean and simple to use. No weird, complex options. I realized that up until now my experience with analytics was constrained to corporate analytics: complex platforms catering to the &lt;em&gt;&quot;marketing department&quot;&lt;/em&gt; with tools to improve revenue. Here, in Tinylytics, I&apos;d found a platform that was truly aimed at the small web, with the average personal blogger in mind.&lt;/p&gt;
&lt;p&gt;So I set up Tinylytics on my site, but at the same time I could feel a seed starting to germinate in the back of my mind: &lt;em&gt;&quot;how does it work?&quot;&lt;/em&gt; As always, I gave myself to this thought and started experimenting with how I could go about building a simple analytics platform. It turned out to be a good technical challenge: hard enough to be fun, but easy enough not to be frustrating.&lt;/p&gt;
&lt;p&gt;Functionality wise, the first version of &lt;a href=&quot;https://mochi.meadow.cafe/&quot;&gt;Mochi&lt;/a&gt; was pretty much a carbon copy of Tinylytics, with some minor changes to accommodate the UX to my own personal preferences. Around this point I realized that I&apos;d built a platform that could be useful for others, but I didn&apos;t really want to make it public yet. It being so similar to Tinylytics, I felt it was &quot;immoral&quot;. So I sat on it. I kept using it as my analytics platform on my blog, but never announced it anywhere. I told myself I would keep it private until/unless it became a drastically different platform. For some months it was relegated to the background, I kept hacking on it when I had time, inspiration, or a bug, but it otherwise stood untouched. That is, until I started to seriously consider having it support Webmentions. In the past I&apos;d of course already heard about them and even set up a webmentions endpoint with webmentions.io, but I quickly grew discouraged with the technology, as everyone seemed to have webmentions set up, but no one was sending them. I just put it down as another failed attempt at bridging the gap between the islands that are personal blogs.&lt;/p&gt;
&lt;p&gt;Then I somehow stumbled on the &lt;a href=&quot;https://www.w3.org/TR/webmention/&quot;&gt;spec&lt;/a&gt;. &lt;em&gt;&quot;Holy shit, this is really easy to implement and it would be a great feature for Mochi&quot;&lt;/em&gt;! It became apparent that any analytics platform for the indie web also needed to support both the sending and receiving of webmentions.&lt;/p&gt;
&lt;p&gt;After some more months of hacking I think I can now say that Mochi is that platform I envisioned all those months ago. I&apos;m making this post as an invitation to anyone that wants to try it out. The project is &lt;a href=&quot;https://codeberg.org/meadowingc/mochi&quot;&gt;open source&lt;/a&gt; and in the near future I really want to make it possible for anyone to easily self-host it should they want to.&lt;/p&gt;
&lt;p&gt;Anyway, that&apos;s it 🤗 if you do decide to try it out please &lt;a href=&quot;/mailbox/&quot;&gt;let me know&lt;/a&gt; of any issues you encounter! The platform has some peculiar design choices (more on them below), and I don&apos;t know how the system will behave under stress. Currently, I&apos;ll only allow a max of 20 accounts to be created so I can see what happens, but if everything is stable then I&apos;ll quickly raise this number.&lt;/p&gt;
&lt;p&gt;Oh, and I know some people don&apos;t like analytics. Know that you can still use the webmentions functionality without using the analytics tracker!&lt;/p&gt;
&lt;h1&gt;Notes on technical details&lt;/h1&gt;
&lt;p&gt;Mochi is built in Golang, which allows for building and distributing a single binary that&apos;s easy to deploy and lowers the entry barrier to self-hosting.&lt;/p&gt;
&lt;p&gt;The main experiment I&apos;m running with Mochi is the database: I&apos;m using SQLite. This is mainly out of personal curiosity as I really want to see how the simpler SQLite holds up in this kind of application. To get around the &quot;single concurrent writes&quot; limitation what I&apos;m doing is having a separate database file per user, and then there&apos;s a shared database for less common operations (e.g., user settings and webmentions). Having one DB per user turned out to be a neat idea as it also enforces privacy (data from one user is very unlikely to be shown to another), and it makes exporting and deleting a user really easy and &lt;em&gt;safe&lt;/em&gt; (just export/delete their db file). &lt;/p&gt;
&lt;p&gt;I think this should work, though the whole thing is still bound by the filesystem I/O speed. That&apos;s why I&apos;m slowly increasing the allowed amount of accounts. We&apos;ll see. If it goes well I might do a follow-up post, as I think using SQLite is easier/better in most cases than requiring a more &quot;powerful&quot; hosted DB like PostgreSQL.&lt;/p&gt;
&lt;p&gt;Another thing I&apos;m experimenting with here are alternative modes of notifications. We all know that email is the golden standard, but from a developer&apos;s point of view it&apos;s so darn tedious to set up! So I thought &lt;em&gt;&quot;there are so many other communication services out there, why not use one of those?&quot;&lt;/em&gt;. So, for Mochi, I&apos;ve initially decided to send notifications through a Discord bot. Not only is it free (sending emails can get expensive) but it was also extremely easy to set up, and it also gave me a chance to play with the Discord bot API 😊&lt;/p&gt;
&lt;p&gt;Of course, the drawback here is that not everyone uses Discord, while most people do have email. But well, that&apos;s the benefit of building something that&apos;s &quot;free&quot;, I can do what I want and I don&apos;t have any stakeholders telling me to do otherwise. I might start adding other notification backends in the future (Telegram? Mastodon?)&lt;/p&gt;
</description><pubDate>Sun, 13 Apr 2025 14:23:36 GMT</pubDate></item><item><title>On the making of tools</title><link>https://meadow.cafe/blog/on-the-making-of-tools/</link><guid isPermaLink="true">https://meadow.cafe/blog/on-the-making-of-tools/</guid><description>&lt;p&gt;If you found your way to my blog, then it&apos;s likely you came here from one of the &lt;a href=&quot;/tools/&quot;&gt;tools&lt;/a&gt; I&apos;ve made rather than through more conventional means like &lt;a href=&quot;https://bearblog.dev/discover/&quot;&gt;Bear&apos;s Discover page&lt;/a&gt;. While the tools have indeed gained me some exposure, that&apos;s not the reason I made them.&lt;/p&gt;
&lt;p&gt;Why then? Well, out of sheer joy, of course. For me, there are few things as satisfying as making your own tools—being able to tell yourself, &lt;em&gt;&quot;Yeah, I want something like that,&quot;&lt;/em&gt; and then going ahead and creating it, watching it slowly evolve beyond your original intentions.&lt;/p&gt;
&lt;p&gt;I&apos;m a software developer by profession, and I do quite enjoy it. I understand that many people are not technically minded or at least don&apos;t know much about programming. But let me tell you a little secret that people in my profession might not want you to know: programming is really not that hard. Oh, it can get very complex and theoretical if you want it to, but for simple tools, you don&apos;t need any of that. In fact, all the tools I&apos;ve made forgo complex patterns; their functionality is dead simple, just composed in clever ways.&lt;/p&gt;
&lt;p&gt;Anyway, I don&apos;t intend for this to become a post about how to program. However, having given you &lt;em&gt;&quot;some rope,&quot;&lt;/em&gt; I&apos;ll also provide some pointers on where to begin. If you know absolutely nothing and want to create a web app in the spirit of &lt;a href=&quot;https://guestbooks.meadow.cafe/&quot;&gt;Guestbooks&lt;/a&gt;, take a look at &lt;a href=&quot;https://rubyonrails.org/&quot;&gt;Ruby on Rails&lt;/a&gt; (check out &lt;a href=&quot;https://www.theodinproject.com/paths/full-stack-ruby-on-rails&quot;&gt;The Odin Project&lt;/a&gt;) or &lt;a href=&quot;https://www.djangoproject.com&quot;&gt;Django&lt;/a&gt; (used by Bearblog). If you want to dive deeper into programming, I know of no better resource than the free book &lt;a href=&quot;https://natureofcode.com/&quot;&gt;The Nature of Code&lt;/a&gt;—a treasure trove of wisdom that&apos;s still useful to me after over ten years of experience.&lt;/p&gt;
&lt;p&gt;If you need help with anything, &lt;a href=&quot;/mailbox/&quot;&gt;send me an email&lt;/a&gt;! Really, you&apos;re not bothering me. There&apos;s nothing I enjoy more than helping people :)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I made all these tools for myself, yes, and the joy of being able to use them is its own reward. There&apos;s something freeing about creating without having to think about how you&apos;ll monetize things. In our culture, it seems we often think that if a software tool is not monetizable, then it&apos;s a failure. But that&apos;s not true! Besides the fact that adding monetization raises complexity exponentially, it also costs you your creative freedom. There&apos;s an implicit contract: if I pay you for some functionality, then I expect that functionality not to change.&lt;/p&gt;
&lt;p&gt;Of course, I&apos;m blessed in that I don&apos;t &lt;em&gt;need&lt;/em&gt; to monetize these things, and perhaps not everyone can afford that luxury. And that&apos;s fine—you do whatever you have to do. What I&apos;m saying is that you shouldn&apos;t create a tool just to make money (even if it is a viable source of income) simply because you feel it&apos;s expected.&lt;/p&gt;
&lt;p&gt;Then there are external users. I was especially surprised when I noticed that many people are using Guestbooks on their own blogs (98 as of right now!). I visit some of their sites occasionally and am continually amazed by all the creative ways people have been using and embedding them. There&apos;s even one site that edited the embedding code slightly and created something akin to a single-threaded message board.&lt;/p&gt;
&lt;p&gt;To me, that&apos;s truly satisfying—putting something out there and seeing people use it in ways you never directly intended. It&apos;s mind-boggling when you think about the scale. For instance, consider our own Bearblog, a project primarily developed by &lt;a href=&quot;https://herman.bearblog.dev/&quot;&gt;one person&lt;/a&gt;. Think about how many blogs it hosts, how many people have read them, how many lives have been impacted because of it, how many interactions, how many connections.&lt;/p&gt;
&lt;p&gt;And that&apos;s true for every great tool. It&apos;s a tool for humanity rather than for a select few, and it &lt;em&gt;&quot;above all&quot;&lt;/em&gt; enables and fosters connections.&lt;/p&gt;
&lt;p&gt;It reminds me of a quote by &lt;a href=&quot;https://www.youtube.com/@MalcolmGuitespell&quot;&gt;Malcolm Guite&lt;/a&gt; about poetry, and how, when you put it out there, it becomes something other than what you intended—it takes on a life of its own.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&quot;As soon as the poem is even conceived, it begins to take on a life of its own: even in the literary womb, it gives its mothering poet the occasional lively and independent kick, and there is certainly some labour in bringing it to birth from the mind to the page. And, just as one’s children start to grow up, make their own friends, and develop their own tastes, so it’s fascinating to watch a poem, once it’s been published, making new friends, who draw insights from it which you missed yourself the first time round.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Finally, finally, I want to say that if you&apos;re using &lt;em&gt;&quot;indie tools&quot;&lt;/em&gt; made by everyday folks, then you&apos;re awesome. And if you prefer tools made by corporate giants, then you&apos;re awesome as well.&lt;/p&gt;
&lt;div style=&quot;width: 1.8em;&quot;&gt;
&lt;svg version=&quot;1.1&quot; id=&quot;Layer_1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; viewBox=&quot;0 0 448 448&quot; xml:space=&quot;preserve&quot;&gt;
&lt;g transform=&quot;translate(0 -1020.36)&quot; shape-rendering=&quot;auto&quot; image-rendering=&quot;auto&quot; color-rendering=&quot;auto&quot; color-interpolation=&quot;sRGB&quot;&gt;
	&lt;g&gt;
		&lt;path style=&quot;fill:#464C63;&quot; d=&quot;M419.281,1141.042l-44.875,11.25c-43.178,10.809-82.688,32.67-112.281,66.531l-59.281,67.783    c-4.222,4.83-10.312,7.594-16.719,7.594h-3.156c-4.014,0-7.094-3.094-7.094-7.127v-50.748c0-4.418-3.582-8-8-8H8    c-4.418,0-8,3.582-8,8v64.063c0,62.623,48.714,119.969,112,119.969h40.563c42.013,0,81.627-26.533,104.969-60.125l61.969-89.156    c19.323-27.807,45.699-48.566,76.406-63.936l39.313-19.688c7.82-3.91,12.781-11.951,12.781-20.688v-3.281    c-0.003-14.842-14.319-26.039-28.719-22.438V1141.042z M423.188,1156.574c4.666-1.168,8.812,2.076,8.813,6.906v3.281    c0,2.719-1.523,5.168-3.938,6.377l-39.344,19.686c-32.59,16.314-61.284,38.773-82.375,69.125l-61.938,89.156    c-20.69,29.773-56.752,53.25-91.844,53.25H112c-53.51,0-96-49.664-96-103.969v-56.063h143.875v42.748    c0,12.672,10.422,23.127,23.094,23.127h3.156c11.017,0,21.53-4.766,28.781-13.063l59.25-67.813    c27.196-31.119,63.669-51.398,104.156-61.531L423.188,1156.574z&quot;&gt;&lt;/path&gt;
		&lt;path style=&quot;fill:#464C63;&quot; d=&quot;M5.125,1276.355v16h164.031v-16H5.125z&quot;&gt;&lt;/path&gt;
	&lt;/g&gt;
	&lt;path style=&quot;fill:#B5755F;&quot; d=&quot;M426.534,1156.462c3.147,0.672,5.531,3.434,5.531,7.063v3.283c0,2.715-1.616,5.199-4.03,6.406   l-39.312,19.594c-32.59,16.314-61.254,38.74-82.344,69.094l-62,89.156c-20.69,29.771-56.69,53.277-91.782,53.277h-40.624   c-53.51,0-96.032-49.633-96.032-103.938v-8.031h144.563c2.446,10.145,11.632,17.844,22.469,17.844h3.187   c11.016,0,21.435-4.826,28.688-13.125l59.28-67.781c27.197-31.117,63.701-51.398,104.189-61.531l44.874-11.219   c1.168-0.305,2.296-0.305,3.344-0.16V1156.462z&quot;&gt;&lt;/path&gt;
	&lt;path style=&quot;fill:#606C78;&quot; d=&quot;M15.94,1244.431h144v32h-144L15.94,1244.431z&quot;&gt;&lt;/path&gt;
	&lt;path style=&quot;fill:#9D6A58;&quot; d=&quot;M426.533,1156.431c-1.04-0.176-2.174-0.176-3.344,0.16l-44.874,11.219   c-40.488,10.133-76.992,30.414-104.189,61.531l-59.28,67.781c-5.914,6.766-13.957,11.053-22.688,12.469   c1.216,0.207,2.352,0.656,3.626,0.656h3.187c11.016,0,21.434-4.826,28.686-13.125l59.282-67.781   c27.197-31.117,63.699-51.398,104.187-61.531l38.531-9.625c-0.896-0.801-1.918-1.439-3.125-1.688V1156.431z M15.939,1292.369v8.031   c0,54.305,42.522,103.938,96.032,103.938h12.813c-53.51,0-96.032-49.633-96.032-103.938v-8.031H15.939z&quot;&gt;&lt;/path&gt;
	&lt;path style=&quot;fill:#59626C;&quot; d=&quot;M15.939,1244.431v32h12.813v-32H15.939z&quot;&gt;&lt;/path&gt;
	&lt;g&gt;
		&lt;path style=&quot;fill:#464C63;&quot; d=&quot;M55.344,1100.386c-4.407,0.32-7.72,4.154-7.399,8.561c0.098,1.348,0.536,2.65,1.274,3.783    c0,0,1.798,2.867,3.594,6.531c1.796,3.662,3.187,8.5,3.188,9.094c0.005,4.209-2.777,9.365-6.781,15.783    c-4.004,6.416-9.231,14.084-9.219,24.25c0.008,6.549,2.611,11.664,4.813,16.154s4.406,7.969,4.406,7.969    c2.32,3.762,7.251,4.932,11.013,2.611c3.762-2.32,4.932-7.25,2.612-11.012c-0.02-0.033-0.041-0.066-0.062-0.1    c0,0-1.798-2.867-3.594-6.531s-3.187-8.498-3.188-9.094c-0.005-4.209,2.777-9.365,6.781-15.781    c4.004-6.418,9.231-14.117,9.219-24.281c-0.008-6.551-2.611-11.635-4.813-16.125s-4.406-7.969-4.406-7.969    C61.224,1101.65,58.349,1100.166,55.344,1100.386z&quot;&gt;&lt;/path&gt;
		&lt;path style=&quot;fill:#464C63;&quot; d=&quot;M111.344,1068.386c-4.407,0.32-7.72,4.154-7.399,8.561c0.098,1.348,0.536,2.65,1.274,3.783    c0,0,1.798,2.867,3.594,6.531s3.187,8.498,3.188,9.094c0.005,4.209-2.777,9.365-6.781,15.783    c-4.004,6.416-9.231,14.084-9.219,24.25c0.008,6.549,2.611,11.664,4.813,16.154c2.202,4.492,4.406,7.969,4.406,7.969    c2.32,3.762,7.251,4.932,11.013,2.611s4.932-7.25,2.612-11.012c-0.02-0.033-0.041-0.066-0.062-0.1c0,0-1.798-2.865-3.594-6.531    c-1.796-3.664-3.187-8.498-3.188-9.094c-0.005-4.209,2.777-9.365,6.781-15.781c4.004-6.418,9.231-14.117,9.219-24.281    c-0.008-6.549-2.611-11.635-4.813-16.125s-4.406-8-4.406-8C117.216,1069.63,114.342,1068.158,111.344,1068.386z&quot;&gt;&lt;/path&gt;
	&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;</description><pubDate>Fri, 23 Aug 2024 01:20:00 GMT</pubDate></item><item><title>Looking forward to Advent of Code 2023</title><link>https://meadow.cafe/blog/looking-forward-to-advent-of-code-2023/</link><guid isPermaLink="true">https://meadow.cafe/blog/looking-forward-to-advent-of-code-2023/</guid><description>&lt;p&gt;November is almost over, which means it&apos;ll soon be time for &lt;a href=&quot;https://adventofcode.com/&quot;&gt;Advent of Code 2023&lt;/a&gt;! &lt;/p&gt;
&lt;p&gt;In case you haven&apos;t heard about it &lt;em&gt;Advent of Code&lt;/em&gt; is a yearly event where every day the website releases a new programming puzzle (so an advent calendar with programming problems instead of chocolates) with the difficulty increasing the closer we get to the 25th. Puzzles are tied together by a story that you uncover with each solution. You can solve the problems however you want, you get a set of &quot;input data&quot; and need to produce an output which is often just a single value. If you like programming problems you should consider checking it out!&lt;/p&gt;
&lt;p&gt;I&apos;ve been thinking about how to approach it, which language to use, and how much time to dedicate to it. As always I have many languages I want to play with (&lt;a href=&quot;https://gleam.run/&quot;&gt;Gleam&lt;/a&gt;, &lt;a href=&quot;https://www.roc-lang.org/&quot;&gt;Roc&lt;/a&gt;, &lt;a href=&quot;https://elixir-lang.org/&quot;&gt;Elixir&lt;/a&gt;), but I think I&apos;ll very probably be doing it with &lt;a href=&quot;https://fsharp.org/&quot;&gt;F#&lt;/a&gt;. I&apos;m still unsure whether I&apos;ll be doing a web-based app thing with &lt;a href=&quot;https://fable.io/&quot;&gt;Fable&lt;/a&gt; or a nice console app with &lt;a href=&quot;https://spectreconsole.net/&quot;&gt;Spectre Console&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;On one hand, getting to know &lt;em&gt;Fable&lt;/em&gt; would allow me to create web-apps with F# and the ability to interop with Javascript is pretty appealing considering the great amount of libraries it has, not to mention the code could also probably run in a NodeJS environment. Also, I&apos;m already pretty good with making web interfaces so there&apos;s no learning involved in how to handle the input and etc. &lt;/p&gt;
&lt;p&gt;On the other hand, &lt;em&gt;SpectreConsole&lt;/em&gt; is also very nice, and it has that modern-retro computer terminal appeal which is a great pull for me. Independently, these options are only for the &lt;em&gt;presentation layer&lt;/em&gt; of the results and problem input so it doesn&apos;t really matter much. &lt;/p&gt;
&lt;p&gt;If done properly these two will easily be interchangeable, so I guess I can always do it with whatever&apos;s easier and then work on having a nice presentation later on. However, having a nice &lt;em&gt;platform&lt;/em&gt; is appealing and I know it&apos;s something that will motivate me to keep going.&lt;/p&gt;
&lt;p&gt;Anyway, I don&apos;t have a clear way to determine which option is better though, I think I&apos;ll just let the decision mull in the back burner and see how I feel about it once the event starts.&lt;/p&gt;
&lt;p&gt;Considering the sharp decrease in the amount of free time I have these days (a known side effect of having a baby) I don&apos;t know how far I&apos;ll get, and I&apos;ll probably need to work on the problems at night since I expect to be pretty busy at work for the whole month of December. Still, programming puzzles are fun (for me), and thematic problems are event better!&lt;/p&gt;
&lt;p&gt;I think I&apos;ll mainly be participating with the goal of trying to break my record. I usually do around 10 days or so before desisting. Hopefully I can do at least 11 this year.&lt;/p&gt;
</description><pubDate>Wed, 29 Nov 2023 00:00:00 GMT</pubDate></item></channel></rss>