You are browsing as a guest. Sign up (or log in) to start making projects!

busy_cheesy

@busy_cheesy

Joined August 10th, 2026

  • 14Devlogs
  • 2Projects
  • 3Ships
  • 56Votes
Ship

This is a refined version of my first ship, WebbFinder, an app made in pygame that lets you view the latest James Webb Space Telescope imagery. After reading the constructive critism left on my ship, I have gone back and made adjustments to the code, notably to improve it’s archetecture and UI, as those were the issues highlighted by the people. I have used the same image as my first ship to show the difference between the two. Now some people also said that this could be a website, but the goal of this project, which was for me to learn how to use APIs, would have been much harder to achieve with a website because I have no experience with html, js, or css. Thus, the project would have taken exponentially longer than python, which I have a lot more experience in.

Testing my project truly opened my eyes to how beautiful space really is… there is so much beauty out there and so much more that we have yet to find.

The hardest project as a whole still remains the initial API setup, which after several hours I got working, but the feeling of success at the end is always worth it, and I have to say I am very proud of this new version.

To run the project, you can either download the exe, or just follow the installation instructions in the read me. If you want to see the simple telescope animation, this only happens if you clone the repository and delete the json file, as the exe comes with the json preloaded. I also didn’t update the json file on purpose to showcase how it updates. If you run the project, you should see the image counter increase after around 30 seconds when the request comes back.

All the other features are still here:
Jump to date: find the image with the closest date to the one inputted
Download: 3 options, medium, large or original. The originals are sometimes very big and might take some time to download
Link takes you to the ESA/WEBB website for more information about the image

That’s about all there is to it. For more info look at the first ship. Thanks for having read this btw, I appreciate you :D

  • 2 devlogs
  • 4h
  • 14.95x multiplier
  • 56 Stardust
Try project → See source code →
Open comments for this post

2h 43m 32s logged

Overhauled the UI, it now looks much cleaner than the previous bare-boned look. I also made several adjustments to the code to improve it’s archetecture. Examples include splitting the code into multiple files (it was one 600+ line file before lol), and moving the download file selection to the pygame gui instead of having the manager create a hidden window with tkinter. Also added headers at the top to make it look better, as well as changing the color pallette and fixing a hover bug for the link.

0
0
26
Ship

This project is a real time rock, paper scissors ai predictor built entirely from scratch in python, displayed with a retro look made using pygame. Yes, this probably could’ve been a website to make it more accessible for more people, but I have absolutely no experience with js css or html, my experience is almost exclusively in python, so for the sake of goal of this project, which was to learn about how machine learning actually works, I made this project in python.

To truly understand how these algorithms work, I decided to build one myself from scratch instead of relying on prebuilt machine learning libraries. This includes the full neural network with backpropagation and dynamic hidden layer scaling. I started with just one input given to the algorithm: the last 8 player choices. There were also just two parameters the bot had: number of games it receives (8) and the learning rate (how much it should learn from each move). I first experimented with different prediction strategies, starting from the simple highest likelyhood that the ai predicted, then opting for weighted choices (ex: if the ai predicted 40% for rock, 10% for paper and 50% for scissors, there would be a 40% chance it chose rock, 10% it chose paper, and 50% it chose scissors. this was decided randomly, with those weights). I finally settled on the epsilon-greedy strategy, which is like the highest likelyhood strategy except there is a 10% chance it takes a random choice to keep the bot a little unpredictable. I then added momentum, which accumulates the updates made to the model, which lets it notice patterns much quicker. Finally I added feature engineering, that adds more inputs that the bot could have made from the game histroy, but instead I give it to the bot. This gives more information to the bot such as shoft transitions, outcome history, and move frequencies, which it doesnt have to deduce on its own, which helps the bot find patterns quicker and predict better.

The biggest challenge for me was tuning the bot by changing the parameters to find the best combination. I kept tweaking the values until it seemed like the bot was absolutely crushing me, but the next run it would be like I was playing against a toddler, an abysmal performace put on by the same values. To solve this problem, I ran a “championship” of bots, where i made 1400 combinations that then played 10 rounds of 100 games against the best bot I made so far. If they won more than 50%, they moved on. Around 140 bots made it to the second stage, a round-robin style tournament where each bot played the others in 20 rounds, each with 100 games. In total, there were about 13 000 000 games played. The winner was absolutely not who I was expecting: 2 game memory, 0.2 learning rate (pretty high) and 0.1 momentum. While the models with more game memomry and lower learning rate performed better in the q3 and q4, this proved that quick adaptation was much better suited for this project, and after testing that was certainly the case.

I am most proud of how the interface turned out. In my humble opinion, the retro arcade aesthetic was perfectly executed (no glaze) with the scannlines, the font, and the pixel art. The prediction bars showing how the model predicted your next move are also a nice touch, giving a peek into the algorithm’s mind. When you play, expect some trash talk from the bot. From experience, it gets better and better the more you play. It varies from person to person, as some people are more predictable than others. That’s about the whole project! Thanks for having read the whole thing (if you did)!

  • 8 devlogs
  • 17h
  • 13.90x multiplier
  • 236 Stardust
Try project → See source code →
Open comments for this post

2h 14m 18s logged

This will probably be my last devlog before the ship. I have overhauled the manager to include feature engineering, which should help the model make connections much faster. It now receives choice shifts, match outcomes and overall move frequencies instead of just the history of past rounds. Changed the algorithm to predict the user’s next move instead of the counter. This makes it easier to understand how it was thinking that you would act. It still returns the counter to the player move tho. Also changed back from the probability weighted selection method to the epsilon greedy strategy (highest probability move is chosen 90% of the time and 10% is random). The only thing left is to tweak all the values until I am satisfied with the result and then off it goes into the sea.

0
0
47
Open comments for this post

2h 21m logged

Completely overhauled the UI and I think it looks much better now. The bot has taunts now, but performance is marginal at best right now. Taking all the different strategies I’ve tried to make the bot better and consolidating them to find the best possible parameters for it will be the next and probably final problem the project will face before shipping. Might try the round robbin style face offs with different parametered bots facing each other. Overall it’s been a very interesting journey learning about all these concepts in machine learning.

0
0
18
Open comments for this post

1h 7m logged

So I did a lot of digging to find out how to improve the model and found some interesting stuff, but the main problem was that i was telling the model that the target move was a draw (immitating the player’s move) instead of beating them -_-. Also the idea of the round robbin to find the best bot parametersalso fell out because the models just trained to draw each other, but it took forever to execute so I don’t know if I should maybe retry it. There is still the very valid concern that the best bot would be the one that’s the best against other bots and not players so. On a more positive note, I introduced momentum. It keeps a running memory of the past updates, like a rolling bolder that builds speed. This enables it to recongnize patterns much quicker by stacking the past changes together. Caught onto patterns of length 1, 2, 3 and 4 in 1, 4, 12, and 17 moves, respectively. Below is a comparison (100 games of normal human rock paper scissors, not repeating a pattern, or atleast not conciously) vs random ouput (left) and the new bot (right). Glad to see it’s doing better. Will do more research on improving but polishing the game now is a better priority.

0
0
4
Open comments for this post

3h 1m logged

So clearly what I said earlier about the algorithm was wrong. I tested it some more and it seems like sometimes it is just reading my mind and other attemps it’s like it’s not even trying. I have fiddled around with the number of games the algorithm sees and it’s learning rate, and every time I think I got it I ask my brother (unbiased third party) to test it where it promptly fails. So, I have devised a plan to find the ultimate round robbin with about 200 different algorithms playing a total of 30 000 000 games of rock paper scissors to find the true champion. Hopefully this will let me find the best learning rate and sample size for the ai, therefore improving it’s game. might take a little while to execute, so we’ll see when that happens. also if there’s anyone who knows more about machine learning, please don’t hesitate to tell me what i could try. Thanks!

0
0
47
Open comments for this post

2h 52m logged

Got the basic UI working with a simple animation, just need to transfer the text from the terminal to the app instead. Still have to work on making the algorithm better, as spamming the same move 20 times in a row, the AI was still picking the wrong options sometimes (maybe trying to predict when i would switch it up?). Cool to see everything coming together

0
0
12
Open comments for this post

1h 19m logged

Very scary progress, I am barely winning now. All it took was some minor adjustements to the layer sizes, learning rate, and number of games stored, as well as making the output a weighted random choice based on the probabilities given by the algorithm, and changing the input for the bot from just the human inputs to also include the bot inputs. I bet there’s even more to make it better which is even more scary. Very nice to see the progress showing though!

0
0
4
Open comments for this post

2h 1m logged

Second deblog working on the machine learning algorithm. I got the backpropagation working after some time, but clearly I have to tweak some things, like the learning rate, game history size, number of neurons per layer, etc. The issue probably also lies beyond that, so more research will have to be done. The algorithm easily gets outsmarted. So for now, humans still reign as rock paper scissors champions!

0
0
9
Open comments for this post

2h 4m 1s logged

New project: a machine learning algorithm that plays rock paper scissors against you and learns in real time to predict your next move to beat you. Figured it was a pretty good way to get into machine learning as AI is on the rise, and coding my own will force me to truly understand how it works. I got the forward propagation working, and set everything up for back propagation for the next session. Can’t wait

0
0
5
Open comments for this post

1h 1m logged

Made an exe version of the python script that holds a preloaded data.json. Had a little trouble with getting pygame_gui to install into the exe but it worked in the end. If you run the exe you should see a data.json created inside the same directory as the exe, and that is so it can be updated with the latest images

0
0
11
Ship

This is WebbFinder, an app made in pygame that lets you browse the latest James Webb Space Telescope images through the official ESA/Webb image API.

This is my first time using APIs, so getting that to work was a bit of a hassle, but I thoroughly enjoyed making this project. Space is always fascinating and making something about the James Webb telescope really filled me with awe about how beautiful the universe truly is.

The app works like this:
If you do not have the data.json file, you will have to wait ~30 seconds for the first page to load. You will then be able to browse the latest 100 images. It is recommended to wait for the rest of the pages to load, so that it is saved and your next startup is much quicker.
If you do have the data.json file, the code simply requests the latest page and compares if you already have the images, and adds any new ones.

You can browse the images in chronological order, which displays the actual image, its title, the description, date, link to the ESA website, and a download option.

The download option gives you 3 options: medium, large or original, each one bigger than the last.

A ‘jump to date’ feature is also present, letting you choose to look at images whose date is closest to the date you have selected.

To keep the feel of the app smooth, the check for new images is done in the background. This is much different from the first versions where the whole screen would freeze, so multithreading was another thing I had to familiarize myself with. Furthermore, the neighbouring five images are also preloaded to ensure that there are no stutters while viewing.

Overall, I am very proud of this system that ensured a smooth browsing experience, and of the project as a whole. Thanks for having read my pitch :D

  • 4 devlogs
  • 14h
  • 16.78x multiplier
  • 231 Stardust
Try project → See source code →
Open comments for this post

3h 19m logged

Final update

The biggest issue in the earlier versions was the interface freezing whenever the app fetched new APi data or downloaded high-res images. To address this problem, i moved the network requests, cache updates, and image preloading onto the background threads using the threading module in python. Everything is much more smooth now.

I also added an input parser that lets the user to select a specific date, which the app will find and jump to the image with the closest date.

Furthermore, I added a download selector allowing users to save images in medium, large, or original quality via the native file save option.

I also added a buffer system that preloads the previous and next five neighbouring images into memory (also in the background!) making the image switching instant with no lag.

0
0
10
Open comments for this post

3h 8m logged

Can now view all of the James Webb space telescope images. Also optimized the manager to fetch just the first page to update the existing data file. If this file didnt exist at all, then a loading screen will display a little animation of stars while the first page loads, and upon it loading it lets the user view the images while the second page is loaded via background threading. Once all the pages have been downloaded, or it has been detected that the data already had that image, the process is stopped and the data is then saved. Also, once the user loads an image by clicking previous or next, that image is stored to avoid unnecesarily calling the same request again. Pretty exciting stuff

0
0
51
Open comments for this post

4h 28m 1s logged

Got the app into a working state, can move forwards and backwards between images, super exciting. Extracted more info from the JSON to get the description, title, and date. UI is looking better, still a little bare. However, it is currently only possible to view the first page of images, so next devlogs will be focused on adding access to all the images, as well as improving their loading speeds. The core viewing mechanic is functional tho!

0
0
19
Open comments for this post

2h 50m 1s logged

First time here, progress is being made. Didn’t know anything about APIs or jsons but here is the first succesful render. Biggest obstacle was figuring out how to request the image data and properly display it in pygame (of which I also knew very little about, which is why it is so barebones right now!) Foundation established, things are looking good.

0
0
14

Followers

Loading…