June 16, 2025
In this session, I basically added the blocking feature as well as the github commit thing. Essentially, it checks the url and if it is instagram.com/reels/<something> and if that <something> changes more than 2 times every 10 seconds, it will block instagram until you send a link of a commit you made. It works well, all I want to do now is add more features such as actually checking if the commit was made recent and set the users github username so we can verify it.
So far, I added 7 commands using python rich and textual. The project is meant to be a nice overlay of the official codeforces api and it works really well so far! I added the help, user, problemset, ratings, log, streak, and contests commands so far. I even published the project through pip! I first tried pypi test but had to tweak the install command since it was using some packages that are only available on pypi. I took a really risky decision and decided to just push straight to pypi. Luckily, it works!! I'm writing some proper documentation for both pypi and the docs site so its gonna take a bit for that to be finished.
In this session, I literally rewrote THE ENTIRE CODEBASE from python into javascript. Now you see, I'm a dumbass. So I decided to torture myself just so I can get a tad bit more performance in my bot, especially when i host it to nest. So everything except for the osu api has been rewritten in javascript. The reason I left out the osu api, is because it relies on a third party wrapper for python, and so its specific to python. My next step is to either find a javascript wrapper, or use the normal shitty api!! Also go join #kashyap-does-coding-ig if you wanna see me build this sick bot
I made some more documentation and decided to test out the osu! API. For some reason, the actual osu! API is confusing and really weird to deal with. Like wdym I can't get global ranking through the API??? So I did some research and found two really good 3rd party osu api's that are actually good and surprisingly easy to setup and work with!!
Okey, in this session I started off with the bot. Firstly, I made a join message that gives a join message when someone joins the channel! (This went horribly wrong in summer of making). After that, I made a mention command. When someone pings the bot, it swears at you. But if you put text beside the ping, then it will use the hack club ai to give a reponse to the user. I also used last.fm api to grab my spotify listening and send a message based on that!
Yapper is a slackbot that I decided to make for my personal channel. Similar to Neon's Zeon bot
Okay so in this whole project, I use react in order to make my static site for my ysws. I learnt how to make it actually look good while having a decent amount of information. I ran into a bit of an issue when I tried deploying on netlify due to it having a weird way to deal with react router so I had to search it up for that.
The website for my YSWS, neohack
In these past few days, I tried multiple times to get the binaries working by using pyinstaller. It finally works! With a few workarounds for mac and windows, you can now install the .exe and apple versions with a few extra commands to make it an executable and a global command! They are now available on github under the releases https://github.com/CompProgTools/CPCli/releases/tag/v1.0.0
In this MASSIVE session(s), I made the whole app as it is currently. I first had to research more about the nvim and vim api in order to understand how to do split tab functionality. Then I started on the plugin itself. I first tried to use JSON and other packages in Lua through luarocks but deemed it to be too complicated for the user, so I decided to make my own JSON parser. The reason I needed to use JSON in the first place was so that I can branch off easily from CPCli. Since most of my data and testing was already done in CPCli (my other project) I could just use the same files and same data from CPVim. I added a dashboard feature that takes info from the config and streak.json files. I also added a similar feature to the --use
flag in CPCli. This feature allows you to use a template in a certain file. If you use the command while not already in a file, it just takes the name of template, appends Main
to it and puts the according extension.
In this session, I finished up the other 2 version of my code and then submitted my project for pathfinder.
I made a very simple version of the binkey code, it doesnt use any rotary encoders. All it does is that it counts up to 15 using the switches, and once its past 15, all the leds blink together at a set interval.
Okay in this session I added the stats system that allows you to get a general overview of your statistics. That includes, total problems solved, average rating, highest rating, most common tags, highest streak, etc. I've also made a graph subcommand that graphs the rating of all the problems you've solved over time. I also updated the documentation accordingly.
Okayyy so I made my schematic and PCB. The process was pretty simple since it was just using a xiao rp2040 and wiring some cherry mx's. The most time consuming part was realizing that I had finished my pcb but had to redo it since I didn't have enough space to put silkscreen art. So in the process, I was also able to add a SHIT TON of silkscreen. Like every part of the pcb that is visible is silscreen. I put a halo characters ass on fire, a drum kit my cousin made, an awp dragon lore, some stupid quotes, and more!!! I also exported to JLCPCB just to see the costs and whether or not it looks good in other colours (it doesnt).
In this devlog, I worked on the streak system, added the cf log system that lets you log a day along with the problem you did. The streak system is pretty simple, you log a problem, and your streak is continued, it also shows what problem(s) you solved. I also added a code of conduct and contribute section to the documenation site!
In this kinda confusing yet fun session, I worked on the contribution section of my documentation. It really just let me flush out my ideas on what a CP-Cli contributor should be like, and what the main goal of this project is. What are we trying to do for competitive programmers, and why? That was the main question that I aimed to answer in this section. I also added a flag for the codeforces subcommand that allows you to set a problem as solved, this is so I can add streaks and graph/stats in the very near future in order for the programmer to better understand their consistency and where they focus their practice on. The attachment is what the --solved flag looks like and the usage. Really it was just a normal O(1) look up time on the dictionary since I have the required parameters!
WOW that was a long session. I spent good 90 minutes just writing documentation. I got the about me section as well as the installation, setup, and template section done. The docs are looking good all thanks to Mkdocs!! I also tested the sync command and it works!! The contest results from last week came out, and while I did lose 15 elo, the sync command tracks it!!!
This time, I wanted to add documentation and overall polishing the project as it is. I wanted to add a contribution, code of conduct, and documentation to the project so its more accessible for anyone new to contribute. I kinda just based the CONTRIBUTION.md
file based on what I think CP-Cli should look like in the future, being a fast and vast cli tool for all things competitive programming. I also based the code of conduct on the github guide and modified accordingly. For the documentation, I wanted a quick way to get started while not having to write the html, css, and js all the way from scratch. Thats when I remembered about jekyll through #tonic
, so I did a quick search for jekyll themes for documentation and came across Mkdocs
. It has a theme that is identical to that of read the docs, so I went with it. Tinkered around for a while a managed to get the docs and the rest of the project code onto one branch. You can access it at, docs
In this long ahh session I managed to get the template system working. Essentially, you can create templates for certain kinds of problems (ex: permutations, binary search, etc) using the command cp-cli template --make name.ext --alias alias
the template subcommand has other arguments for useful things such as the --make
command which allows you to make a template with the alias argument. So a binary search template command would look like:
cp-cli template --make binarySearch.cpp --alias binarySearch
and to use this template, simply use the command cp-cli template --use alias --filename name.ext
. The --use flag followed by alias
just refers to the alias created in the command before and the --filename
tag allows you to use that template in a predefine path in the config command
This was widely regarded as a great move by everyone.