<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Wip-Projects on Janusworx</title><link>https://janusworx.com/tags/wip-projects/</link><description>Recent content in Wip-Projects 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>Mon, 16 Nov 2020 18:08:36 +0530</lastBuildDate><atom:link href="https://janusworx.com/tags/wip-projects/index.xml" rel="self" type="application/rss+xml"/><item><title>A Day of Updates</title><link>https://janusworx.com/work/a-day-of-updates/</link><pubDate>Mon, 16 Nov 2020 18:08:36 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/a-day-of-updates/</guid><description>&lt;p&gt;Could not focus much on programming today.&lt;br&gt;
So decided on &lt;em&gt;doing&lt;/em&gt; things with Python programs.&lt;/p&gt;
&lt;!-- TEASER_END --&gt; 

&lt;h3 class="relative group"&gt;Nikola Upgrade
 &lt;div id="nikola-upgrade" 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="#nikola-upgrade" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I use &lt;a href="https://www.getnikola.com/" target="_blank" rel="noreferrer"&gt;Nikola&lt;/a&gt; to generate both my websites.&lt;br&gt;
It is an extremely easy to use, no fuss static site generator, which is easy on my server’s resources.&lt;br&gt;
&lt;a href="https://github.com/getnikola/nikola/releases/tag/v8.1.2" target="_blank" rel="noreferrer"&gt;Version 8.1.2&lt;/a&gt; was released a few hours ago and I hopped on and installed it.&lt;br&gt;
I follow a slightly unconventional upgrade path, because I was terrified of breaking my server in the early days, when I was still learning about how to go about installing things on servers.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I have &lt;a href="https://docs.conda.io/en/latest/miniconda.html" target="_blank" rel="noreferrer"&gt;Miniconda&lt;/a&gt; installed.&lt;/li&gt;
&lt;li&gt;I use that to generate a conda environment, which I then installed Nikola into.&lt;/li&gt;
&lt;li&gt;When a new release drops, I create a &lt;em&gt;new&lt;/em&gt; conda environment, install the new release in there and run them against my source folders (after backing them up).&lt;/li&gt;
&lt;li&gt;This lets me revert very quickly to the old data and the older version of Nikola, in case I do something boneheaded and screw things up.&lt;/li&gt;
&lt;li&gt;If all works fine for a month, I delete the older conda environment along with the old Nikola release.&lt;/li&gt;
&lt;li&gt;I have been doing this for quite a while now, and while it may be overkill, it gives me peace of mind.&lt;/li&gt;
&lt;li&gt;As usual, Nikola upgraded with no issues at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Pleroma Bot
 &lt;div id="pleroma-bot" 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="#pleroma-bot" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I always wanted to understand what bots do.&lt;br&gt;
Now I realise they are athromorphic programs that (with the right permissions and the right credentials) look like actual users of a service, doing sets of activities they are programmed to do.&lt;br&gt;
Like your banking app has set of solutions to common queries that it shows you, before it hands off to an actual human, if those solutions don’t fit your needs.&lt;br&gt;
They feel like supercharged scripts to me.&lt;br&gt;
So I decided to see if I could install one.&lt;br&gt;
Since I am learning Python, I love reading the low volume &lt;a href="https://twitter.com/python_tip" target="_blank" rel="noreferrer"&gt;Daily Python Tip&lt;/a&gt; Twitter account.&lt;br&gt;
It has surprising, handy, funny, interesting tips and tricks about the Python language and the massive ecosystem around it.&lt;br&gt;
&lt;em&gt;But,&lt;/em&gt; I have weaned myself off Twitter for my own sanity.&lt;br&gt;
I only use it sparingly once a day.&lt;br&gt;
And going back to that noise and tumult no longer interests me.&lt;br&gt;
I saw &lt;a href="https://mastodon.social/@newsbot" target="_blank" rel="noreferrer"&gt;a bot&lt;/a&gt; that mirrored tech news accounts to Mastodon and wondered if a bot could get Daily Python Tip to me on my Pleroma timeline.&lt;br&gt;
A quick search led me to &lt;a href="https://github.com/robertoszek/pleroma-twitter-info-grabber" target="_blank" rel="noreferrer"&gt;Pleroma Bot&lt;/a&gt;.&lt;br&gt;
A couple of struggling hours later, (creating a twitter developer account, creating a pleroma account for the bot, figuring out how to get bearer tokens for said accounts) and tada, I got the &lt;a href="https://cb.janusworx.com/@ptjwbot" target="_blank" rel="noreferrer"&gt;bot to come alive!&lt;/a&gt;&lt;br&gt;
It checks the Twitter account once a day, and mirrors the tweets to the bot account.&lt;br&gt;
You’re most welcome to follow it for a Python tip, daily.&lt;br&gt;
The next thing to do, is to see if I can get a bot to post a tagged pleroma status to my twitter account.&lt;br&gt;
But that is something for another day …&lt;br&gt;
&lt;em&gt;Update, 2020/11/17: figured out how to use the bot to mirror multiple accounts. It now mirrors, &lt;a href="https://twitter.com/python_tip" target="_blank" rel="noreferrer"&gt;Daily Python Tip&lt;/a&gt;, &lt;a href="https://twitter.com/regextip" target="_blank" rel="noreferrer"&gt;RegexTip&lt;/a&gt;, and &lt;a href="https://twitter.com/compscifact" target="_blank" rel="noreferrer"&gt;CompSciFact&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Git the Branch</title><link>https://janusworx.com/work/git-the-branch/</link><pubDate>Fri, 13 Nov 2020 18:55:00 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/git-the-branch/</guid><description>&lt;p&gt;I started playing with a way to control &lt;a href="https://janusworx.com/blog/starting-work-on-git-the-branch/" target="_blank" rel="noreferrer"&gt;Git via Python&lt;/a&gt;.&lt;br&gt;
Kushal had asked me to write a program, that would show me the local git branches.&lt;br&gt;
So here it is!&lt;br&gt;
I call it &lt;em&gt;&lt;strong&gt;Git the Branch&lt;/strong&gt;&lt;/em&gt;. (painfully, punny, I know :))&lt;/p&gt;
&lt;p&gt;And now I realise why he asked me to do this.&lt;br&gt;
The program itself is trivial.&lt;br&gt;
Here’s the code on my &lt;a href="https://cr.janusworx.com/jason/git-the-branch" target="_blank" rel="noreferrer"&gt;code repo&lt;/a&gt;, &lt;a href="https://gitlab.com/jasonbraganza/git-the-branch" target="_blank" rel="noreferrer"&gt;Gitlab&lt;/a&gt;, and &lt;a href="https://github.com/jasonbraganza/git-the-branch" target="_blank" rel="noreferrer"&gt;Github&lt;/a&gt;.&lt;br&gt;
It just consists of me using &lt;a href="https://gitpython.readthedocs.io/en/stable/" target="_blank" rel="noreferrer"&gt;GitPython&lt;/a&gt; to access the current folder via a GitPython &lt;code&gt;Repo&lt;/code&gt; object.&lt;br&gt;
And then querying it for its branches.&lt;/p&gt;
&lt;p&gt;The important work was done &lt;em&gt;yesterday&lt;/em&gt;, when I pored over the documentation and figured out how GitPython actually works.&lt;br&gt;
And I realised that is what Kushal wanted me to do.&lt;br&gt;
Read something and figure out how I could adapt it to my situation.&lt;/p&gt;
&lt;p&gt;The other thing I realised, was licensing.&lt;br&gt;
I want my programs to be used, played with and adapted.&lt;br&gt;
So it makes sense for me, to make it as easy to use as possible.&lt;br&gt;
This is why I have decided, that until circumstances dictate otherwise, I shall use the &lt;a href="https://choosealicense.com/licenses/mit/" target="_blank" rel="noreferrer"&gt;MIT License&lt;/a&gt;.&lt;br&gt;
This led me to check if I could then actually license my software as such, if the software that I depend on (in this case GitPython) have different licenses.&lt;br&gt;
My arbitrary and random research suggests that I can do so.&lt;br&gt;
If I learn otherwise, I shall think about what to do next.&lt;br&gt;
If you have anything to suggest, please let me know, by mailing me at jason at this domain.&lt;/p&gt;
&lt;p&gt;One other (painful) thing, that I realised is that I cannot focus at all when I am writing code.&lt;br&gt;
This post has come out in a blur of focussed writing.&lt;br&gt;
My academic studies are also something that I can focus for hours on.&lt;br&gt;
Apparently that focus does not translate to programming.&lt;br&gt;
I need to build up this skill for this domain seperately.&lt;br&gt;
Hopefully, this will come with showing up daily.&lt;/p&gt;
&lt;p&gt;This was fun to do.&lt;br&gt;
Here’s to writing my way to fluency.&lt;/p&gt;
&lt;p&gt;P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" &gt;mailing list&lt;/a&gt;!&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;p&gt;P.P.P.S. &lt;em&gt;Update, 7pm the same day,&lt;/em&gt; The answer to focus, lies in &lt;a href="https://seths.blog/2020/11/the-incoming/" target="_blank" rel="noreferrer"&gt;this serendipitous Seth post&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;A third might be, just for an hour, to turn it off.&lt;br&gt;
All of it.&lt;br&gt;
To sit alone and create the new thing, the thing worth seeking out, the thing that will cause a positive change.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;I love it when the universe speaks to me :)&lt;/p&gt;</description></item><item><title>Poem Feed</title><link>https://janusworx.com/personal/poem-feed/</link><pubDate>Fri, 13 Nov 2020 17:00:00 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/personal/poem-feed/</guid><description>&lt;p&gt;&lt;em&gt;Update, 2020/11/13: This has been working beautifully! I love the poems as they show up in my feed.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is a tiny little niche thing, I built all for my ownsome.&lt;br&gt;
It all &lt;a href="https://janusworx.com/blog/a-hundred-days-of-code-day-029/" target="_blank" rel="noreferrer"&gt;started&lt;/a&gt;, when I got hooked on reading the daily poem, on the Poetry Foundation page.&lt;/p&gt;
&lt;p&gt;Learning Python as I am, I wondered if there was a way to have it come to my RSS reader.&lt;br&gt;
And so &lt;a href="https://cr.janusworx.com/jason/poemfeed/src/branch/main/poemfeed.py" target="_blank" rel="noreferrer"&gt;Poemfeed&lt;/a&gt; is a tiny little utility that does just that for me.&lt;/p&gt;
&lt;p&gt;It looks up Poetry Foundation’s, &lt;a href="https://www.poetryfoundation.org/poems/poem-of-the-day" target="_blank" rel="noreferrer"&gt;Poem of the Day&lt;/a&gt; for a new poem.&lt;br&gt;
If there is one, it follows the link to the complete poem, and then gets the link to &lt;em&gt;that&lt;/em&gt; page and writes that into an simple RSS entry in an xml file.&lt;/p&gt;
&lt;p&gt;I then wrote a simple cron job that executes the python script twice a day, and if an xml file is generated, it moves it to a place that my RSS reader can access.&lt;br&gt;
Et voilà, a brand new poem everyday! (or as often as they publish :))&lt;/p&gt;
&lt;p&gt;The code’s here, on &lt;a href="https://cr.janusworx.com/jason/poemfeed/src/branch/main/poemfeed.py" target="_blank" rel="noreferrer"&gt;my repo&lt;/a&gt;, on &lt;a href="https://gitlab.com/jasonbraganza/poemfeed/-/blob/main/poemfeed.py" target="_blank" rel="noreferrer"&gt;Gitlab&lt;/a&gt; and on &lt;a href="https://github.com/jasonbraganza/poemfeed/blob/main/poemfeed.py" target="_blank" rel="noreferrer"&gt;Github&lt;/a&gt;, if you want to have a look see.&lt;/p&gt;</description></item><item><title>Starting Work on Git-the-Branch</title><link>https://janusworx.com/work/starting-work-on-git-the-branch/</link><pubDate>Thu, 12 Nov 2020 15:16:12 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/starting-work-on-git-the-branch/</guid><description>
&lt;h3 class="relative group"&gt;The Itch
 &lt;div id="the-itch" 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-itch" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Aiming to write a tool using this which will show all the git branches in the current directory and the last commit date on those branches (and only the local branches :))&lt;/p&gt;

&lt;h3 class="relative group"&gt;What I did today
 &lt;div id="what-i-did-today" 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="#what-i-did-today" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I had to carry my phone in to the service centre, so I did not quite have as much focussed time as yesterday, with all the coordinating and carrying, but I learned a few new things&lt;/p&gt;
&lt;p&gt;&lt;a href="https://kushaldas.in/" target="_blank" rel="noreferrer"&gt;Kushal&lt;/a&gt; hinted that I could use &lt;a href="https://gitpython.readthedocs.io/en/stable/index.html" target="_blank" rel="noreferrer"&gt;GitPython&lt;/a&gt; to do what I want.&lt;br&gt;
So I spent a little while reading there.&lt;br&gt;
And then decided to test it out.&lt;/p&gt;
&lt;p&gt;And then immediately went yak shaving, because I wanted to solve the problem of how to quickly type iterate in Visual Studio Code.&lt;br&gt;
I learnt &lt;a href="https://janusworx.com/tags/pythonoop/" &gt;lots of Python&lt;/a&gt; using &lt;a href="https://store.lerner.co.il/" target="_blank" rel="noreferrer"&gt;Reuven Lerner&lt;/a&gt;’s courses and I used a lot of &lt;a href="https://jupyter.org/" target="_blank" rel="noreferrer"&gt;Jupyter Notebooks&lt;/a&gt; then.&lt;br&gt;
And I love them.&lt;br&gt;
The trick now, is to figure out how to use them in Visual Studio Code.&lt;br&gt;
To my delight, the Python extension in VS Code has support for notebooks. And all works well for the most part.&lt;br&gt;
The only thing that tripped me up was that when I tried importing a module in the notebook after activating my virtual environment, the Jupyter server hiccoughed and threw up some error about not finding the module (which I knew was &lt;em&gt;definitely&lt;/em&gt; installed) and then something about it not being in the PYTHONPATH (which I had no clue of which places, it was looking in.)&lt;br&gt;
A little snooping and I realised that the extension loads the server with a default kernel in someplace. And I need to tell it about my environment. Once I told it to use the kernel from my venv, all was fine.&lt;br&gt;
VS Code went and installed a ton of things and found what was already there and everything was hunky dory.&lt;br&gt;
A &lt;code&gt;from git import Repo&lt;/code&gt; worked just fine.&lt;/p&gt;
&lt;p&gt;I felt good about this piece of dawdling, because I know this is something I am going to do every day and better I spend &lt;em&gt;some&lt;/em&gt; time figuring it out, right at the start.&lt;/p&gt;
&lt;p&gt;I learnt that I could use the ! mark as a prefix in Jupyter to run shell commands! A &lt;code&gt;!ls&lt;/code&gt; will show me the contents of my folder :)&lt;/p&gt;
&lt;p&gt;I skimmed the GitPython documentation.&lt;br&gt;
I kind of got what I want.&lt;br&gt;
This will require lots more work, which I shall have to put in.&lt;br&gt;
But even a cursory glance, showed me that GitPython was an &lt;em&gt;exhaustive&lt;/em&gt; wrapper, that would let you do practically anything you would want to do with Git.&lt;/p&gt;
&lt;p&gt;More tomorrow …&lt;/p&gt;</description></item><item><title>A Good First Day</title><link>https://janusworx.com/work/a-good-first-day/</link><pubDate>Wed, 11 Nov 2020 19:05:10 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/a-good-first-day/</guid><description>&lt;p&gt;Was a really good day to ease back into Python today.&lt;br&gt;
I got my VS Code up and running.&lt;br&gt;
I got a personal [Gitea instance][crjw] up, to host my code, from where I will syndicate it to Github and Gitlab.&lt;br&gt;
And finally I got a &lt;a href="https://janusworx.com/programming-projects/" target="_blank" rel="noreferrer"&gt;projects page&lt;/a&gt; up, to slowly fill up with projects.&lt;/p&gt;
&lt;p&gt;I also managed to improve an old program I wrote for myself, but I’ll write about that in the next post.&lt;br&gt;
All in all, a day well spent. A journey well begun.&lt;/p&gt;</description></item><item><title>Getting Back on the Horse</title><link>https://janusworx.com/personal/getting-back-on-the-horse/</link><pubDate>Wed, 11 Nov 2020 09:49:28 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/personal/getting-back-on-the-horse/</guid><description>&lt;p&gt;Ok, one more time.&lt;br&gt;
I know there have been &lt;a href="https://janusworx.com/blog/a-hundred-days-of-code-day-000-begin-again/" target="_blank" rel="noreferrer"&gt;lots of one more times&lt;/a&gt; before, but I am going to keep at this until I get proficient enough at this to land a job :)&lt;br&gt;
And while I may not be brainy enough, the one thing I &lt;em&gt;can&lt;/em&gt; do is be persistent enough to show up.&lt;/p&gt;
&lt;p&gt;This time, I will focus on building tiny projects.&lt;br&gt;
I realise my life is too chaotic for &lt;a href="https://janusworx.com/tags/100daysofcode/" &gt;#100DaysofCode&lt;/a&gt;.&lt;br&gt;
But I can do this, one tiny thing at a time.&lt;/p&gt;
&lt;p&gt;Wish me luck!&lt;/p&gt;</description></item></channel></rss>