👋 welcome to my blog :)
I do little code sprints and personal challenges for the joy of the making things ♥
2023 Goal: one open source project completed per week
github
I made this blog with a cool static site generator called bearclaw, try it out!
this year i challenged myself to code and release one open source project per week. let’s go through the year’s weekly projects so far and do a brief description of each one. these are in no particular order. some are better than others, and not all are mentioned, but these are some of the fun weekly projects worth mentioning.
cli tool for auditing active network connections. this is a program i wrote because i was always flipping back and forth between lsof and ps to tie network connections and the programs that created them. it was pretty straightforward to get the output i wanted, but most of the time was spent getting the columns to line up with the headers, and i still didn’t even get it right. it’s called linker because originally i wrote a program to list all of my symlinks on a specific drive, and when i pulled up my editor to write the network version of what became linker, i just erased the old project as I didn’t need it anymore and was too lazy to change the name.
example output:
Proto Local IP Local Port Remote IP Remote Port Binary Name
-----------------------------------------------------------------------------
chrome 192.168.1.100 50840 203.0.113.1 443 chrome
firefox 192.168.1.100 50852 198.51.100.5 443 firefox
safari 192.168.1.100 50978 203.0.113.1 443 safari
game_launcher 127.0.0.1 51275 127.0.0.1 3273 game_launcher
game_launcher 192.168.1.100 51298 172.217.23.14 443 game_launcher
game_launcher 192.168.1.100 51743 104.18.36.10 443 game_launcher
file_manager 192.168.1.100 51305 185.199.108.153 443 file_manager
file_manager 127.0.0.1 51308 127.0.0.1 51396 file_manager
file_manager 127.0.0.1 51396 127.0.0.1 51308 file_manager
file_manager 192.168.1.100 51329 104.237.62.211 443 file_manager
111
i listen to soma.fm sometimes when im working just to have something in the background. if you haven’t seen soma.fm, i highly recommend you check them out. this app originally played a playlist of my preferred channels from soma, but now i’ve added all channels so others might enjoy their favorites too. it’s made with fyne (sup andy!) which is a cool gui framework for go projects. it has a play, pause, forward and back button, then my personal list of channels below. a cool detail about this project is that i misunderstood how fyne positions things and when you click a channel to run it the progress bar fills the whole channel list container. it looked cool i reverted the fix and left it like that, so that’s why it looks that way when you play something.
this one’s hard to explain. there used to be a program called ‘brainwave generator’ that would make these tones that were supposed to make your brain reverberate or something and make you feel fun effects (allegedly). they had some weird form of drm and you’d buy these single-play programs off this little store and after it played it would no longer play that track again. of course that stuff probably isn’t real, but i just had to know, and try it out. i don’t know if it works or not, but it didn’t stop me from having fun with it. it’s named ‘albino’ because it is a binaural beats generator, -bino, -binaural, get it? i had a lot of fun with the ui. it’s shaped like an old cassette to reflect the age of the old bwgen.exe program, which was from the 98se era iirc. clutch your bonzibuddy and hit play, what’s the worst that could happen? (allegedly). the gui is fyne and photoshop.
you’ve probably never heard of 9menu, but it was a cool program that i wanted to run on the system i was using, and unfortunately there were no build instructions for it yet, or a build working on this system, so i gave it a shot on my own. it got the name 8menu
because it is less-than 9menu
. the way it works is you use name:action pairs of things you want a gui shortcut button bar for. i had a thing i needed this for at work, so it made sense for my purposes. i had a lot of fun making this one and the graphic on the github made me chuckle.
look at these graphics. look at them. they’re amazing. i bet you want to play it right? well switcheroo, it’s a console app, and is all text. the graphics are a lie, but i had the time of my life working on them using stable diffusion and photoshop. surely know you the best selling blockbuster classi game Progress Quest
, so i won’t go too much into that, but suffice to say it falls into a category called ‘idle games’. i always enjoyed progress quest, and came up with the idea for consolequest during a dnd session with my friends. it’s a game that is mostly idle, but unlike progress quest it can run in a terminal and periodically requires your input for non trivial things like visiting the medic or merchant. from the start i found it oddly addicting. my current record is day 729. there are little quests and monsters and a monster tiering system. not to toot my own horn but if you’re into this type of thing it was a fun game from development to playing.
this is a bbs where anybody with an ssh key can dial in, no signup required. there’s a janky little chat that doesn’t respect your line buffer as you’re typing a message and someone sends a message. your message comes through just fine, but it looks weird because it scrolls your input upward. as you’re typing and throws a lot of people off. there’s it got a lot of users, i think up to 100+ when it was originally posted to HN. now it gets a few messages a day. initially i wanted to add more features, and when i restarted the service about 10% of people rejoined.
if you want to try it out, ssh -p 2223 shhhbb.com
any ssh key will work. type /help
when you get there for a list of commands.
i like simple things. i can understand simple things. im a simple person. sometimes i need to reinvent the world to understand why the things that aren’t simple things are the way they are. in this case, i just wanted easily colored text in a format i could understand without a whole lot of extra learning. to me, ansi escape sequences make sense. you print a color code, then you print a thing, then you print another color code, then you print another thing, and so on. where i really showed out was adding in hex values. for whatever reason, when i think about colors, i think in hex, like in html. originally colors was just a 16 pack, but now it can do the entire range of hex colors. the album art for this one makes my eyes happy. about this time when i was spending more time on the art side of things i was starting to pick up a theme with the chunky letters and bright colors.
i do a lot of programming in go, and given that this year is dedicated to doing one project per week, a lot of my work has been in go, with git on top, with a readme, mit license, all that boilerplate stuff. this project lets me just give it a name and stamp out code for a new go project. the name is short for let's go
.
this one doesn’t deserve a screenshot, it’s a tool for my personal toolchain and has such a narrow scope it’s not likely useful for but a few people who also make go apps with git and stuff added.
often ill be making a webapp or something, and login is the one boilerplate item that gives me the most trouble. not because it’s hard but because you can do it in various degrees of done-ness and still call it -done-. you can throw just an email and a password in a database and call it a day, or you could do tokens and say that’s fine, or maybe biscuits, macaroons, whatever technology you like. i have a view of what i think is ‘good enough’ as a starting point that uses emails and bcrypt hashed passwords along with tokens and this login auth boilerplate package allows me to stamp out a golang web app starting with working auth. i recently did another project with this, which is a simple forum. i spose we can talk about that next.
this one has no graphics, no readme, no nothing, because it’s what im working on right now. i used the login auth boilerplate for it and introduced some odd behavior i guess, because it works locally but not remotely. i think it’s because i slowly kinda rewrote my own token system and didn’t use parts of the boilerplate. i should pass those changes up. anyway, this is a forum thing that is simple like phpbb, but written in go (go figure), and it uses a threaded structure like reddit or hackernews where each comment can be responded to. i’d like to add themes and tags/categories next along with fleshing out the role based access system. the idea i have in mind and how ive built it out so far is to have role based access like discord.
not just because this is taking forever, but because these are less significant or are something to be less excited about due to not being interesting. it’s a lot to type out all this markdown and link them, so check out my github profile to grab a copy of them if you want to see what makes them less significant in my opinion: https://github.com/donuts-are-good/
this removes a file for the history of your git repo. if you commit a build artifact or something, this will remove that.
you drop an image file onto it and it turns it into a copy-pastable string that you can inject into html to make images where they normally aren’t meant to be.
vscode theme to burn out your eyes. does what it says on the box. bright white everything.
hit counter as a service
streaming audio server that is a little simpler than icecast. also not as good as icecast.
these things are so dang cool. it takes any string and turns it into a litle gravatar looking thing. i love this tool. wish i had more reason to use it.
this is a journaling tool that is tag based. i still use it.
why do signups at all, just let the user in and stamp a serial number on them and let them choose when to complete a full signup. love this tool, actively looking for things to use it.
same as above
i think the https for this one just expired. i was the only user, me and a few bots, so i didn’t mind. probably won’t renew the domain. cool tool, but more novelty than anything. it lets you pipe a new password into the terminal like icanhazip.com can do for an ip
nobody knows or cares what randomart is, i say hyperbolically. this is my interpretation of a modern animated randomart for ed25519 keys loosely based on lava lamp.
dont use this. im sorry for creating it. i know better and i did it anyway.
this takes and ed25519 key and converts this to an x25519 key. dont use this, it’s probably not safe. i did it because an article by filippo valsorda got me all hyped up. i have no math skills, it was just an experiment.
i thought this would be more popular than it was. it scans any web page and spits out a list of all the accessibility breakages that would make it hard for an impaired user to use the site.
bc neofetch takes too long to run on my system
this isn’t a tool to do a denial of service on a static website, but it could be seen that way i suppose. i deliberately left this tool somewhat unoptimized, as hard as it was because it was just a menace on the network in the state it was in before uploading. i just wanted to load test bearclaw to see what i needed to focus on when it came to optimizing the code. i claim no responsibility for how this is used.
i can’t remember what i was doing but i had one of those what-if moments, it went something like this: “what if… we had a ‘database’ that was just a csv document for each table?” my logic behind that was that everything is there in plaintext, and then if things went wrong the user could just use a text editor to figure stuff out. this project was always an oddity to me. i haven’t had the guts to use it on anything, but i just had to stick my hand on the stove to figure out what would happen. it is what says, a csvdb, but not sure why anybody would want to use it.
very handy for terminal folk. here’s the pitch: you define some credentials, either in a file or in your environment variables, and neosay pipes the output of whatever terminal thing you have into the matrix chat of your choice, as a bot. so imagine you are in vim or whatever and you want to bounce the contents of the file real fast to your friends in matrix, you can just cat the file to neosay and specify the config for that room and you can have a bot that is unique in every room you put it in to send your output to the chat. i use this for server notifications in my personal firehose chat for various dev things, server events, other stuff. it’s great.
love this project. it’s so fun to tweak and run. it’s like a little pinebox derby car in that you just tweak random stuff and see what happens. i was on vacation so a lot of this project happened with very little connectivity, while floating around in choppy water. i was frustrated that the search engines i was using for something were all just so bad, none would just match the string and return the results. i ended up building araknnid and a little search frontend for it to query the results. it’s very basic, but it lets me specify a site and it starts indexing that site and forming a map of all the links and crawling to other sites from there. the original plan was to use that scraped content to feed a small self-trained model but i’m still learning the foundations of that.
and there are a lot more. i did a count of the folders in my projects that i poke at from time to time, all the things i thought were cool enough to explore but didn’t make into a fully functioning thing and i have about 100+ more than what you see here. a few i’ve been looking at recently are somewhat pointless, like rendering my own 3d environments and shaders in opengl from inside go, or little isometric experiments in godot and aseprite. that stuff isn’t worth your time and a lot of these experiments don’t make it to github for that reason.
so far i’m ahead of schedule by a few months, so im taking my time to work on longer term projects right now because when you have this pressure to push weekly you can (as you see here) push a lot of garbage that is technically complete and counts but it isn’t useful or impressive, and wouldn’t be worth the space in a portfolio.
i didn’t discuss bearclaw, i talk about it too much. it is by far the most useful and popular thing i’ve made during all of this and it wasn’t even intended to be anything but a tool to write about these projets.
that’s about all i’ve got for now, thanks for reading :)