<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Huginn on Janusworx</title><link>https://janusworx.com/tags/huginn/</link><description>Recent content in Huginn on Janusworx</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>feedback@janusworx.com (Mario Jason Braganza)</managingEditor><webMaster>feedback@janusworx.com (Mario Jason Braganza)</webMaster><copyright>© 2026, Mario Jason Braganza</copyright><lastBuildDate>Wed, 15 Mar 2023 09:32:05 +0530</lastBuildDate><atom:link href="https://janusworx.com/tags/huginn/index.xml" rel="self" type="application/rss+xml"/><item><title>Huginn: Vive La Pratique Délibérée Avec Les Flux RSS</title><link>https://janusworx.com/work/huginn-vive-la-pratique-d%C3%A9lib%C3%A9r%C3%A9e-avec-les-flux-rss/</link><pubDate>Wed, 15 Mar 2023 09:32:05 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/huginn-vive-la-pratique-d%C3%A9lib%C3%A9r%C3%A9e-avec-les-flux-rss/</guid><description>&lt;p&gt;I’ve been learning French, on my own at a snail’s pace over the past year or so.&lt;br&gt;
All because I want to read Émilie du Châtelet, Dumas, Verne, and Montaigne in their native tongue.&lt;/p&gt;
&lt;p&gt;Since I cannot do immersion nor give regular practice the time it wants, it’s … slow going
But I do, do it. Regularly and &lt;a href="https://jamesclear.com/deliberate-practice-theory" target="_blank" rel="noreferrer"&gt;deliberately&lt;/a&gt;. I’ve built up a vocabulary of about 500-700 words by now and I know if I keep this up, I’ll be able to do read well in time.&lt;/p&gt;
&lt;p&gt;One way I practice is to take something in French and read it slowly, looking up words and phrases and slowly building up the missing pieces.&lt;br&gt;
And to do that, I need something in French. I stumbled across the &lt;a href="https://www.france-pittoresque.com/" target="_blank" rel="noreferrer"&gt;France Pittoresque&lt;/a&gt; site and fell in love with it. French &lt;em&gt;and&lt;/em&gt; History! Just my kind of site.&lt;/p&gt;
&lt;p&gt;Being the lazy bum, that I am, I went looking for an RSS feed, so that I could read their daily article in &lt;a href="https://reeder.app/" target="_blank" rel="noreferrer"&gt;Reeder&lt;/a&gt;.&lt;br&gt;
And hit my first stumbling block.&lt;br&gt;
The good folk at France Pittoresque, don’t provide a feed. Or if they do, I couldn’t find it. Even after looking and looking. And then looking some more.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;You know where I’m going with this. This is a job for &lt;a href="https://janusworx.com/blog/huginn" &gt;Huginn&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;This is how the site looks today&lt;/p&gt;
&lt;p&gt;&lt;a href="https://janusworx.com/images/2023/huginn-france-pittoresque-0.png" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-france-pittoresque-0.png" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;click to embiggen.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;p&gt;And this little item is what I want to get, on a daily basis.&lt;br&gt;
&lt;br&gt;

&lt;a href="https://janusworx.com/images/2023/huginn-france-pittoresque-1.jpeg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-france-pittoresque-1.jpeg" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;click to embiggen. Actually click any of them to embiggen!&lt;/p&gt;
&lt;/figcaption&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;p&gt;So I whipped up this scenario.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://janusworx.com/images/2023/huginn-france-pittoresque-2.png" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-france-pittoresque-2.png" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;ol&gt;
&lt;li&gt;It scrapes that little section I mentioned above and gets me the title, the url and the description of the article&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://janusworx.com/images/2023/huginn-france-pittoresque-3.png" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-france-pittoresque-3.png" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;ol start="2"&gt;
&lt;li&gt;And generates an RSS feed that I can then use in my feed reader!&lt;br&gt;
The feed is normally at:&lt;br&gt;
&lt;code&gt;http://your-huginn-instance/users/[your-user-id-int]/web_requests/[agent-id-int]/some-'secret'-string.xml&lt;/code&gt;&lt;br&gt;
&lt;br&gt;

It looks more complicated than it is. It’ll get generated the moment you create your agent. One advantage of &lt;a href="https://janusworx.com/blog/why-i-use-an-online-vm/" &gt;using a vm&lt;/a&gt; is that my feed is accessible from any device.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://janusworx.com/images/2023/huginn-france-pittoresque-4.png" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-france-pittoresque-4.png" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;p&gt;You can &lt;a href="https://github.com/jasonbraganza/huginn-scenarios/tree/main/france-pittoresque-scrape-create-rss" target="_blank" rel="noreferrer"&gt;find the scenario code here&lt;/a&gt;, if you want to play with it.&lt;/p&gt;
&lt;p&gt;Huginn has proven invaluable when it comes to doing all the little things, that I’d rather not do :)&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Merci beaucoup, Huginn!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback@janusworx.com&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;You’re talking to a lazy bum here. So quite possible I overlooked something.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Huginn: On Becoming a Cal Newport Podcast Packrat</title><link>https://janusworx.com/work/huginn-on-becoming-a-cal-newport-podcast-packrat/</link><pubDate>Tue, 14 Mar 2023 17:55:01 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/huginn-on-becoming-a-cal-newport-podcast-packrat/</guid><description>&lt;p&gt;First things first, you should be &lt;a href="https://www.thedeeplife.com/listen/" target="_blank" rel="noreferrer"&gt;listening to Cal Newport&lt;/a&gt; and &lt;a href="https://calnewport.com/writing/#books" target="_blank" rel="noreferrer"&gt;reading his books too&lt;/a&gt;!&lt;br&gt;
His recent episode on &lt;a href="https://www.thedeeplife.com/podcasts/episodes/ep-238-the-joys-of-the-reading-life/" target="_blank" rel="noreferrer"&gt;books and reading&lt;/a&gt; was lovely!&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;If I remember right, he started doing the podcast, a couple of months after the &lt;a href="https://en.wikipedia.org/wiki/COVID-19_pandemic" target="_blank" rel="noreferrer"&gt;pandemic&lt;/a&gt; broke out and the world shut down. And it felt very much at the time, like one of those friendly voices across the waves in some post apocalyptic movie.&lt;br&gt;
It felt warm, personal and gave me something to do in those dark days.&lt;br&gt;
Ergo, I have a strong connection to it and I began saving every episode, at around episode 10 or so.&lt;/p&gt;
&lt;p&gt;Oh, and speaking of slow productivity, it’s amazing to see what Cal has fashioned the podcast into. A slow steady drumbeat of episodic growth has led to what he call the Cal Newport Empire, with &lt;a href="https://www.thedeeplife.com/" target="_blank" rel="noreferrer"&gt;media galore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, like I was saying, I’ve been downloading them ever since the beginning, because I’ve some sort of unnatural attachment to them. They’re the thing I want to listen to if I’m marooned on a desert island.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;And now that I have &lt;a href="https://janusworx.com/blog/huginn" &gt;Huginn&lt;/a&gt;, the computer downloads it for me, in the folder I want, with the naming convention, I want.&lt;/p&gt;
&lt;p&gt;&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

Here’s the scenario that does it.&lt;br&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-cnp-0.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It scrapes the website, once every twelve hours to check for a new episode, and grabs the url and title.&lt;br&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-cnp-1.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;
&lt;/li&gt;
&lt;li&gt;It uses the url to download the episode to a folder.&lt;br&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-cnp-2.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;
&lt;/li&gt;
&lt;li&gt;And at the same time, sends me a notification. The title tells me what’s new :)

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-cnp-4.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I probably could use Huginn to rename and copy the file to where I want, but it runs from a Docker container and does not have access to the parent filesystem.&lt;br&gt;
So this little Python script&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt; does it for me.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;shutil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;downloads_folder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/path/to/downloaded/episode/directory/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;destination_folder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/path/to/destination/directory/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;audio_file&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;downloads_folder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iterdir&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;audio_file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;suffix&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;.mp3&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;original_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;audio_file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stem&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;original_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;original_name&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;episode_number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;raw_file_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;CNPE&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;original_name&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;original_name&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:]))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;new_file_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;episode_number&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39; - &amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;raw_file_name&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;audio_file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;suffix&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;shutil&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;move&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;downloads_folder&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;audio_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;destination_folder&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;new_file_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;p&gt;It looks for any mp3 files in the specified folder, renames them the way I want them named and then moves them to my packrat archive. &lt;em&gt;&lt;strong&gt;Et voilà!&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-cnp-5.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;
&lt;/p&gt;
&lt;p&gt;The scenario and scripts &lt;a href="https://github.com/jasonbraganza/huginn-scenarios/tree/main/cal-newport-podcast-episode-download" target="_blank" rel="noreferrer"&gt;are here, if you want them&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback@janusworx.com&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;What else, do you expect a bookworm to tell ya? 😂&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;with a stock of mp3 players and rechargable batteries&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;scheduled via crontab&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Huginn: the Rube Goldbergness of Updating Hugo</title><link>https://janusworx.com/work/huginn-the-rube-goldbergness-of-updating-hugo/</link><pubDate>Mon, 13 Mar 2023 19:35:06 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/huginn-the-rube-goldbergness-of-updating-hugo/</guid><description>&lt;p&gt;&lt;br&gt;

&lt;a href="https://janusworx.com/images/2023/rube_goldberg_war_machine_large.jpg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/rube_goldberg_war_machine_small.jpg" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;Click the pic to embiggen.&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Rube_Goldberg" target="_blank" rel="noreferrer"&gt;Rube Goldberg&lt;/a&gt; illustration via &lt;a href="https://www.flickr.com/photos/x-ray_delta_one/18482076814" target="_blank" rel="noreferrer"&gt;James Vaughan&lt;/a&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;p&gt;Ended up too sick to even tinker, since I last wrote.&lt;br&gt;
Well enough now, to scratch out some prose to get my brains in gear.&lt;br&gt;
Let’s start with Huginn adventure #1.&lt;br&gt;
Buckle up!&lt;/p&gt;

&lt;h3 class="relative group"&gt;Background
 &lt;div id="background" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#background" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I found &lt;a href="https://janusworx.com/blog/huginn" &gt;Huginn&lt;/a&gt;, and am using it as my man friday.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;The “Problem”
 &lt;div id="the-problem" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-problem" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I run Hugo on &lt;del&gt;two&lt;/del&gt; three machines.&lt;br&gt;
I’m tired of updating to the latest release manually.&lt;br&gt;
The computer can do it for me!&lt;/p&gt;

&lt;h3 class="relative group"&gt;Why this way? Why? Why?!
 &lt;div id="why-this-way-why-why" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-this-way-why-why" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;It’s fun!&lt;/li&gt;
&lt;li&gt;Yes, there are other (most likely simpler) ways to do it, but Huginn is my new shiny hammer … and well you know!&lt;/li&gt;
&lt;li&gt;Did I tell you it’s fun? :)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 class="relative group"&gt;How now brown cow?
 &lt;div id="how-now-brown-cow" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-now-brown-cow" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Some more background:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I could just &lt;code&gt;apt install&lt;/code&gt;, but I’m too posh for that 😂 I want the &lt;em&gt;latest&lt;/em&gt; version of Hugo. And the &lt;em&gt;extended&lt;/em&gt; version at that.&lt;/li&gt;
&lt;li&gt;I depend on two more helpers.&lt;br&gt;
a. &lt;a href="syncthing.net/" &gt;Syncthing&lt;/a&gt; syncs the folder that the Hugo deb package downloads to, across all my machines&lt;br&gt;
b. Pushover sends me push notifications. Huginn &lt;a href="https://pushover.net/apps" target="_blank" rel="noreferrer"&gt;integrates&lt;/a&gt; with it.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Having said that, here’s a pic of my four step scenario, followed by the output of each step.&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-hugo-0.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;ol&gt;
&lt;li&gt;Scrape the Hugo github releases page to get the title.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-hugo-1.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;ol start="2"&gt;
&lt;li&gt;Get the latest release title&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt; and fashion a url out of it.&lt;/li&gt;
&lt;/ol&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-hugo-2.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;ol start="3"&gt;
&lt;li&gt;Download Hugo to a folder.&lt;br&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-hugo-3.png" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;ol start="4"&gt;
&lt;li&gt;Send myself a push notification.&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-hugo-4.png" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;ol start="5"&gt;
&lt;li&gt;And tada!

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-hugo-5.png" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;p&gt;So we done? No, you silly goose!&lt;br&gt;
&lt;br&gt;

We’re done downloading the installer. Said installer now needs installing.&lt;br&gt;
So my very imaginatively titled &lt;code&gt;install-hugo.sh&lt;/code&gt; script&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;, which runs once a day via a &lt;code&gt;crontab&lt;/code&gt; entry …&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;takes the file,&lt;/li&gt;
&lt;li&gt;checks to see if it’s downloaded in the last day&lt;/li&gt;
&lt;li&gt;and if so, installs it.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mind you, it needs root privileges. And then it also …&lt;br&gt;
4. deletes any stray debs more than a few days old.&lt;sup id="fnref:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#! /usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/hugo/deb/file
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install deb from the last 24 hours&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find *.deb -maxdepth &lt;span class="m"&gt;1&lt;/span&gt; -mmin -1440 &lt;span class="p"&gt;|&lt;/span&gt; xargs -d &lt;span class="s1"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt; dpkg -i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Remove debs more than 2 days old&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find *.deb -maxdepth &lt;span class="m"&gt;1&lt;/span&gt; -mtime +2 &lt;span class="p"&gt;|&lt;/span&gt; xargs -d &lt;span class="s1"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt; rm -rf &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;p&gt;And &lt;em&gt;&lt;strong&gt;now&lt;/strong&gt;&lt;/em&gt; we’re done :)&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn-hugo-6.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;Holy shiny hammer, Batgirl! It worked!&lt;/p&gt;
&lt;/figcaption&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

&lt;p&gt;The scenario, should you install Huginn and want to import and play with, as well as the shell script are here, &lt;a href="https://github.com/jasonbraganza/huginn-scenarios/tree/main/hugo-update" target="_blank" rel="noreferrer"&gt;on Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note: I had originally used the RSS agent in step one, instead of the Website agent I use now, and that was much easier. But it would detect the new feed entry and then just sit there hatching eggs, not doing anything. I wish I had a snapshot (of the missed events, not hatched eggs) but I digress. The website agent, for all its hacky xpath quackery &lt;em&gt;works.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback@janusworx.com&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;it could have been girl friday too, but I call mine Bertuccio, after &lt;a href="https://en.wikipedia.org/wiki/The_Count_of_Monte_Cristo" target="_blank" rel="noreferrer"&gt;Edmond Dantes&lt;/a&gt;’ man friday&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;I cannot believe, I go scrape a website and learn all that xpath voodoo, just to get a measly text string.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;And here’s where Huginn helps. It remembers the last title. And only proceeds if something has changed.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;the push notification is just like that. something whimsical for me. It’s independent of the download. I should probably have called it Step 3a. or 2b. Never mind now.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;which is also synced and available across all three machines&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:6"&gt;
&lt;p&gt;I let them be for a couple of days, in case a machine is not online that day.&amp;#160;&lt;a href="#fnref:6" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Huginn</title><link>https://janusworx.com/work/huginn/</link><pubDate>Thu, 02 Mar 2023 05:00:00 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/huginn/</guid><description>&lt;p&gt;&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/huginn.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

Let’s get the, “What the heck is &lt;a href="https://github.com/huginn/huginn" target="_blank" rel="noreferrer"&gt;Huginn&lt;/a&gt;?” out of the way.&lt;br&gt;
If you’ve heard of Zapier or IFTTT, that’s what this is. Only better. You host it. You control it. You program it. And everything’s in your control.&lt;br&gt;
If you’ve used &lt;a href="https://en.wikipedia.org/wiki/Yahoo!_Pipes" target="_blank" rel="noreferrer"&gt;Yahoo Pipes&lt;/a&gt;, then I tip my hat to you my dear friend and tell the rest of you folk, that I believe all of these new fangled pieces of zaps and agents are the spiritual successor to that pioneering web app. IBM has a similar open source alternative, with all the new fangled hotness called &lt;a href="https://en.wikipedia.org/wiki/Node-RED" target="_blank" rel="noreferrer"&gt;Node-RED&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just like piping and transforming text with Unix utilities locally, &lt;a href="https://github.com/huginn/huginn" target="_blank" rel="noreferrer"&gt;Huginn&lt;/a&gt; lets us do that with web data. RSS feeds, webhooks, JSON data and the like. Take ’em, ingest ’em, chew on ’em, transform ’em and do what the heck you want with ’em!&lt;/p&gt;

&lt;h3 class="relative group"&gt;Why Huginn?
 &lt;div id="why-huginn" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-huginn" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;So why did I settle on Huginn? And what do I use it for?&lt;br&gt;
Well, I liked the name. And I wanted something Yahoo-pipesque for myself :)&lt;br&gt;
I used it originally on my desktop, to push my blog posts to twitter and my &lt;a href="https://toots.dgplug.org/@jason" target="_blank" rel="noreferrer"&gt;mastodon account&lt;/a&gt;. And then I lost it in a system crash&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; and I didn’t get to putting it up again.&lt;/p&gt;
&lt;p&gt;Until a recent bout of sickness, and the urge to tinker led me to put it up on my vm.&lt;br&gt;
I realised that I don’t want to use my programming hammer to tackle every computing hammer that I face. There’s too much to learn and too little life.&lt;br&gt;
So if Huginn lets me do interesting things with json and liquid and duct tape, why ever not?&lt;/p&gt;
&lt;p&gt;I still have to do the autopost to my social accounts&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;, but I’ve already set it up to scratch several itches I had.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It scrapes a couple of art websites, that don’t have feeds and then creates RSS feeds so that I can read them peacefully in my RSS &lt;a href="https://www.reederapp.com/" target="_blank" rel="noreferrer"&gt;Reeder&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I check my &lt;a href="https://calibre-ebook.com/" target="_blank" rel="noreferrer"&gt;Calibre&lt;/a&gt; &lt;a href="https://calibre-ebook.com/changelog.rss" target="_blank" rel="noreferrer"&gt;release feed&lt;/a&gt;, update my local install of Calibre to the latest hotness, and then get notified via a push notification, using a &lt;a href="https://youtu.be/3isQI0nXQRE" target="_blank" rel="noreferrer"&gt;Rube Goldberg&lt;/a&gt; pastiche of &lt;a href="https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29" target="_blank" rel="noreferrer"&gt;Bash&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/CURL" target="_blank" rel="noreferrer"&gt;cURL&lt;/a&gt; and &lt;a href="https://pushover.net/" target="_blank" rel="noreferrer"&gt;Pushover&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I love archiving episodes of my favourite podcast (the &lt;a href="https://www.thedeeplife.com/listen/" target="_blank" rel="noreferrer"&gt;Cal Newport podcast&lt;/a&gt;&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;), so Huginn and Python and &lt;a href="https://syncthing.net/" target="_blank" rel="noreferrer"&gt;Syncthing&lt;/a&gt; and cron all pull together to get it in the right place, with the naming convention I want.&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I hope to write a bit more about each of these in the coming days, but needless to say, I’m having more fun playing with Huginn, than I imagined I ever would!&lt;/p&gt;
&lt;p&gt;&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback@janusworx.com&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;it did work like the little engine that could, without a hitch until then&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;I’ve forgotten how I did it!&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;I think it’s called &lt;em&gt;&lt;strong&gt;Deep Questions&lt;/strong&gt;&lt;/em&gt;, but to me it’ll always be the Cal Newport Podcast&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;If you lose all your audio files in a fire Cal, you know who to call!&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>What I Learned Today (8th of February, 2023)</title><link>https://janusworx.com/personal/what-i-learned-today-2023-02-08/</link><pubDate>Wed, 08 Feb 2023 20:20:06 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/personal/what-i-learned-today-2023-02-08/</guid><description>&lt;p&gt;Don’t know if it’s the gym or the regular work beat, but I seem to be waking up later and later everyday. I don’t know what to do about this. I feel a little anxious about not having enough hours in the day.&lt;/p&gt;
&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;


&lt;h3 class="relative group"&gt;Python
 &lt;div id="python" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#python" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Why use comprehensions? Because it reads better.&lt;br&gt;
Like I advice the young ones in DPGLUG on writing.&lt;br&gt;
Write short, choppy sentences.&lt;br&gt;
They read better.&lt;/li&gt;
&lt;li&gt;With my problem sets …
&lt;ul&gt;
&lt;li&gt;I should stop trying to generalise in advance and solve the specific problem first.&lt;/li&gt;
&lt;li&gt;Read stuff carefully. Don’t do more than is necessary&lt;/li&gt;
&lt;li&gt;Solutions take time to understand too. Budget the time&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Linux Mint
 &lt;div id="linux-mint" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#linux-mint" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Nemo, the file browser in Linux Mint always opens the home directory, when I click on it and there’s no apparent way to change it to a preferred directory. I want it to always open &lt;code&gt;Downloads&lt;/code&gt;
&lt;strike&gt;&lt;/li&gt;
&lt;li&gt;A little bit of web spelunking led to an acceptable work-around.
&lt;ol&gt;
&lt;li&gt;Right click the main &lt;code&gt;menu&lt;/code&gt; button&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Menu =&amp;gt; Open the menu editor =&amp;gt; Accessories&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Then click &lt;code&gt;Files&lt;/code&gt; in the items from the right and click &lt;code&gt;Properties&lt;/code&gt; further right&lt;/li&gt;
&lt;li&gt;Change the command form &lt;code&gt;nemo %U&lt;/code&gt; to &lt;code&gt;nemo Downloads&lt;/code&gt;&lt;br&gt;
And that does it!
&lt;/strike&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;Update
 &lt;div id="update" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#update" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;2023-02-09: Does not work. Will look for some other approach. Right now, with the workaround it opens a &lt;code&gt;Downloads&lt;/code&gt; window alongside any other folder I click on 😂&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Hugo
 &lt;div id="hugo" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#hugo" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added a plain, hamburger menu to this blog, using Aditya’s helpful instructions &lt;a href="https://discord.com/channels/971046860317921340/1047919068075802714" target="_blank" rel="noreferrer"&gt;over on the PaperMod Discord&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;With all the extra nav items, I’ve added to the header the menu would overflow on my iPhone (and probably on other folks’ phones too). So if this page scooches narrow enough, it will change the links on top to a plain menu.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2023/blog-menu.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;h3 class="relative group"&gt;Huginn / RSS
 &lt;div id="huginn--rss" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#huginn--rss" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;I often have sites that have no RSS feeds, but they’re still interesting enough to me that I want to keep tabs on them for anything new.&lt;/li&gt;
&lt;li&gt;While I wrote a tiny program to scrape and generate a &lt;a href="https://janusworx.com/blog/updated-poemfeed/" target="_blank" rel="noreferrer"&gt;custom RSS feed&lt;/a&gt; to get my &lt;a href="https://www.poetryfoundation.org/poems/poem-of-the-day" target="_blank" rel="noreferrer"&gt;Poetry&lt;/a&gt; fix, I needed something more robust, if I wanted to do this with lots of sites.&lt;/li&gt;
&lt;li&gt;I realised that my Huggin instance &lt;a href="https://blog.andrewcantino.com/blog/2014/04/13/adding-rss-feeds-to-any-site-with-huginn/" target="_blank" rel="noreferrer"&gt;could do that for me&lt;/a&gt;. Huginn is documented pretty well, that even a slowpoke like me, could figure out a fix for himself, inside an hour&lt;/li&gt;
&lt;li&gt;I also learnt something fun. How do I choose a specific, nested, div on the page when all of them are similarly named? By using the power of &lt;a href="https://www.w3schools.com/xml/xpath_intro.asp" target="_blank" rel="noreferrer"&gt;XPath&lt;/a&gt;! I found it to be a more robust way of picking something from a web page, compared to its alternatives.&lt;/li&gt;
&lt;li&gt;It’s also pretty easy to at least get a basic XPath selection. Just inspect your element in your browser’s web inspector and a right/context click should normally give you the option to copy a link as an XPath.
Getting to an &lt;code&gt;href&lt;/code&gt; link in the &lt;code&gt;div&lt;/code&gt; I wanted, led to something like &lt;code&gt;/html/body/div[1]/div[1]/div/div/div/main/div/div[1]/div/header/h2/a/@href&lt;/code&gt; and &lt;em&gt;&lt;strong&gt;BAM!&lt;/strong&gt;&lt;/em&gt; I got the link!&lt;/li&gt;
&lt;li&gt;This solves a really big problem for me. So once again, I’m pretty chuffed today as well :)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Urdu
 &lt;div id="urdu" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#urdu" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Got done with the “siin” group of letters today.&lt;/li&gt;
&lt;li&gt;It is getting more and more confusing to read, but I’m sure I’ll slowly get over it with practice.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Physical Fitness
 &lt;div id="physical-fitness" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#physical-fitness" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;More Cardio today&lt;/li&gt;
&lt;li&gt;I’ve gotten comfortable doing an hour of active cardio at around 160, without worrying that my heart would burst. Now to focus on doing the same hour at a slower heart rate, over time.&lt;/li&gt;
&lt;li&gt;The pain’s almost gone. Let’s see what the coming days hold.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238); height: 1px;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback@janusworx.com&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>