|
43183
|
tome by @static_noise | Stardance
|
static_noise
|
0
|
2.0
|
0
|
[]
|
[{"post_id": 42873, "ts": "202 [{"post_id": 42873, "ts": "2026-08-07T20:38:04Z", "hours": 1.4722, "text": "shaping the project, burned out"}, {"post_id": 39661, "ts": "2026-08-02T19:47:28Z", "hours": 0.5311, "text": "Started work on TOME, so, tome is designed to be easily embeddable (because I literally saw how shitty toml++ is to embed) and being easy to write and read"}]...
|
Title: tome by @static_noise | Stardance
Devlogs: Title: tome by @static_noise | Stardance
Devlogs:
Started work on TOME, so, tome is designed to be easily embeddable (because I literally saw how shitty toml++ is to embed) and being easy to write and read
shaping the project, burned out...
|
1792536813.1521797
|
1793141613.1521797
|
|
54153
|
toms os by @thomasclayton7 | Stardance
|
thomasclayton7
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: toms os by @thomasclayton7 | Stardance
|
1792777965.9663455
|
1793382765.9663455
|
|
43434
|
toobOS by @toobcodepro | Stardance
|
toobcodepro
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: toobOS by @toobcodepro | Stardance
|
1792547441.236575
|
1793152241.236575
|
|
42123
|
tool tracker v2 by @Bepfrm | Stardance
|
Bepfrm
|
0
|
4.95
|
0
|
[]
|
[{"post_id": 38637, "ts": "202 [{"post_id": 38637, "ts": "2026-08-01T04:13:01Z", "hours": 2.2003, "text": "working on the schematics for the electronics the electronics just consist of an esp32, 2 expansion boards (can be increased in the future), an antenna (not shown in the schematic), a pn532 rfid/nfc reader, and a bunch of switches. the ada fruit pn532 can be switched with a cheaper and/or smaller generic red pn532."}, {"post_id": 38529, "ts": "2026-07-31T23:44:17Z", "hours": 2.7503, "text": "3d model of an inital design being compatable with gridfinity the title basically sums it up. This specific model is supposed to hold an m12 impact + a battery too."}]...
|
Title: tool tracker v2 by @Bepfrm | Stardance
Dev Title: tool tracker v2 by @Bepfrm | Stardance
Devlogs:
3d model of an inital design being compatable with gridfinity the title basically sums it up. This specific model is supposed to hold an m12 impact + a battery too.
working on the schematics for the electronics the electronics just consist of an esp32, 2 expansion boards (can be increased in the future), an antenna (not shown in the schematic), a pn532 rfid/nfc reader, and a bunch of switches. the ada fruit pn532 can be switched with a cheaper and/or smaller generic red pn532....
|
1792497014.7308116
|
1793101814.7308116
|
|
48781
|
toomanyparts by @chinh4 | Stardance
|
chinh4
|
0
|
24.7
|
0
|
[]
|
[{"post_id": 77762, "ts": "202 [{"post_id": 77762, "ts": "2026-10-08T06:12:51Z", "hours": 11.2933, "text": "Its lookin a little different… So I have completed the entire gantry for the printer. I have also made a custom toolhead that is compatible with the xol toolhead carriage for the monolith gantry design. Additionally I have opted to use the Trident inverted electronics mod, on which I have mounted the electronics."}, {"post_id": 72115, "ts": "2026-09-22T06:11:42Z", "hours": 4.6956, "text": "gantry gantry gantry Most of the time was me wondering if I should go with the stock gantry design or use an awd design. I have ended up opting to use the monolith gantry for it’s compatibility with awd. I chose the monolith gantry since I don’t think I could iterate on the awd gantry design anymore than what I would be willing to compromise on. However, I have created mounts for use with the Ender 3 motors so that they are compatible with the long shafted version."}, {"post_id": 67099, "ts": "2026-09-13T04:53:26Z", "hours": 2.6761, "text": "Z-Axis almost complete I have completed the Z-Carriages that connect the bed to the motors, now I just need to mount the bed and then do the gantry…"}, {"post_id": 63295, "ts": "2026-09-07T01:32:24Z", "hours": 4.5425, "text": "Start work on Z-Axis I got the frame fixed up since I was missing a bit. I had also mounted the gantry positions but I don’t want to figure out how to do an AWD corexy gantry yet, so I started work on the Z-Axis of the printer. I got the base corners onto the frame assembly, and I will be working on the other mounts next. Then I will work on mounting the bed to the stepper motors."}, {"post_id": 47904, "ts": "2026-08-16T05:31:29Z", "hours": 1.4894, "text": "Project setup and Voron 2.4 Frame reconstructed"}]...
|
Title: toomanyparts by @chinh4 | Stardance
Devlog Title: toomanyparts by @chinh4 | Stardance
Devlogs:
Project setup and Voron 2.4 Frame reconstructed
Start work on Z-Axis I got the frame fixed up since I was missing a bit. I had also mounted the gantry positions but I don’t want to figure out how to do an AWD corexy gantry yet, so I started work on the Z-Axis of the printer. I got the base corners onto the frame assembly, and I will be working on the other mounts next. Then I will work on mounting the bed to the stepper motors.
Z-Axis almost complete I have completed the Z-Carriages that connect the bed to the motors, now I just need to mount the bed and then do the gantry…
gantry gantry gantry Most of the time was me wondering if I should go with the stock gantry design or use an awd design. I have ended up opting to use the monolith gantry for it’s compatibility with awd. I chose the monolith gantry since I don’t think I could iterate on the awd gantry design anymore than what I would be willing to compromise on. However, I have created mounts for use with the Ender 3 motors so that they are compatible with the long shafted version.
Its lookin a little different… So I have completed the entire gantry for the printer. I have also made a custom toolhead that is compatible with the xol toolhead carriage for the monolith gantry design. Additionally I have opted to use the Trident inverted electronics mod, on which I have mounted the electronics....
|
1792565599.0208275
|
1793170399.0208275
|
|
57502
|
toot by @skyisgreen | Stardance
|
skyisgreen
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: toot by @skyisgreen | Stardance
|
1792709511.256311
|
1793314311.256311
|
|
42881
|
topology optimized record (vinyl) display stand by topology optimized record (vinyl) display stand by @KeineKatzeKatze | Stardance...
|
KeineKatzeKatze
|
0
|
3.55
|
0
|
[]
|
[{"post_id": 40050, "ts": "202 [{"post_id": 40050, "ts": "2026-08-03T12:27:14Z", "hours": 1.0833, "text": "Today was quite time consuming, but brought good progress overall. The main focus was on setting up the simulation: I analyzed where loads and forces would actually hit the component and experimented with various parameters accordingly. After running two simulations, I’m almost satisfied with the first prototype. Before I can move on to 3D printing the part, I need to fix the printer first. Once that’s done, the first physical test print is up next."}, {"post_id": 39622, "ts": "2026-08-02T18:53:37Z", "hours": 2.4667, "text": "I’ve always liked listening to vinyl, so I decided to design my own “Now Playing” record stand to display the album cover while a record is spinning. I started by designing the feet of the stand. The hardest part was finding the right dimensions for the recessed felt pads so they fit properly and protect the surface underneath. For the main structure, I’m using topology optimization to create a lightweight but strong design with a more organic look. Setting up the preserve areas and keep-out zones took a bit of trial and error. Another challenge was estimating the forces the stand has to handle, especially with heavier double LPs and the tilted center of gravity. Right now, I’m still tweaking the optimization settings in CAD to get the best balance between strength and material usage before preparing the final model for 3D printing."}]...
|
Title: topology optimized record (vinyl) display s Title: topology optimized record (vinyl) display stand by @KeineKatzeKatze | Stardance
Devlogs:
I’ve always liked listening to vinyl, so I decided to design my own “Now Playing” record stand to display the album cover while a record is spinning. I started by designing the feet of the stand. The hardest part was finding the right dimensions for the recessed felt pads so they fit properly and protect the surface underneath. For the main structure, I’m using topology optimization to create a lightweight but strong design with a more organic look. Setting up the preserve areas and keep-out zones took a bit of trial and error. Another challenge was estimating the forces the stand has to handle, especially with heavier double LPs and the tilted center of gravity. Right now, I’m still tweaking the optimization settings in CAD to get the best balance between strength and material usage before preparing the final model for 3D printing.
Today was quite time consuming, but brought good progress overall. The main focus was on setting up the simulation: I analyzed where loads and forces would actually hit the component and experimented with various parameters accordingly. After running two simulations, I’m almost satisfied with the first prototype. Before I can move on to 3D printing the part, I need to fix the printer first. Once that’s done, the first physical test print is up next....
|
1792525975.1430385
|
1793130775.1430385
|
|
40838
|
torchbearer by @NosyMonty | Stardance
|
NosyMonty
|
1
|
29.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T11:34:30Z", "hours": 29.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "its a short platformer that has three levels and much more see past devlogs for more details", "repo": "https://github.com/NosyMonty/torchbearer", "demo": "https://nosymonty.itch.io/the-torchbearer"}]...
|
[{"post_id": 62826, "ts": "202 [{"post_id": 62826, "ts": "2026-09-06T11:02:03Z", "hours": 7.2519, "text": "devlog #15 so i think the game is finally finished its not as long as i wanted nor was i able to get the twist to work (i can’t 3d design very well) and I have lost the passion to work on the game it is a finished version playable takes about 10 minutes for those who want to but id rather have a finished playable version for everyone who would wanna play it then just leave it but basically it has 3 levels tutorial and then 2 main levels they are short but they all have boss battles and some form of enemy there is music, SFX and all, and backgrounds, there is a title screen and a portal to transport you from level to level once you finish there is a you win screen with a button to return to main menu there is themes and everything"}, {"post_id": 58601, "ts": "2026-08-31T02:22:29Z", "hours": 5.5758, "text": "devlog #14 worked on the tutorial level with text on how to play movement etc, also added 4 new enemies 3 bosses and one normal enemy but will keep them a secret untill i utalise them"}, {"post_id": 50746, "ts": "2026-08-20T03:04:50Z", "hours": 3.23, "text": "Devlog #13 added multiple things like new enemy to a point haven’t actually made the script yet. fixed and added the themes for the home and game over screen with there being two cave and village, with music on the way. I also added new attacks for the player where it has air attacks where it freezes and then accelerates down to deal more damage that is basically it it was mostly the player script that was a pain"}, {"post_id": 46234, "ts": "2026-08-13T10:24:05Z", "hours": 1.8192, "text": "devlog #12 im going to be honest this devlog is like 4 days’ worth of 30-minute stuff i think i showed everything i added but i can’t remember (stupid me) what i do know is that i have started and failed at a moving background with like 6 layers and attempted to make themes which I’ll explain/ show why at a later date but i think that is it (let’s not make this mistake again)"}, {"post_id": 43939, "ts": "2026-08-09T12:06:54Z", "hours": 1.6208, "text": "Devlog #11 over the past three days I have worked little on torchbearer, and it is going well I have updated the level design a bit not fully completed, added a coin with an animation, and am working on a vase that can be broken and it will drop 1-3 coins, I also added a tile screen, game manager where it can track coins bosses and levels and stuff and a game over screen, now I just need to finish implementing then into the actual game so they come onto the screen at the correct time and the buttons work, I am also planning to add more sprites to the game and start working on the first boss"}, {"post_id": 41859, "ts": "2026-08-06T10:31:58Z", "hours": 1.1336, "text": "I’m going to try this devlog thing it seem like a cool way for me to keep track devlog #10 in today’s 1 hr coding session I actually got a lot done, I added some new animations for the player like slide which when activated it actually gives the player a speed boost, I enabled the player to attack and kill the bat and added its dying animation. I also added a new death screen where it fades to black still need to make a way to actually start again when you die, I fixed the spikes so the player just dies not fall through the ground it fades to black. Next session my goal is to add more enemies, start working on the tutorial level and expand on the cave level as well as start other levels and if im feeling nice i might give you a sneek peak at the twist at the end so follow along but take your time this might take a while with the little progress i have made in about 10 hours."}, {"post_id": 41269, "ts": "2026-08-05T11:45:34Z", "hours": 1.0392, "text": "worked on a spike where it will reset the character a.k.a the character will die and the scene will reset. I also went the complex route of making it with a collision polygon shape instead of a normal collision shape now I just need to work out how to get the killzone script working with the spikes on every scene so i can just add the spikes scene"}, {"post_id": 40018, "ts": "2026-08-03T11:21:10Z", "hours": 0.7431, "text": "added enemy attacks where the player can now die when health reaches zero and it also follows the player you can’t kill it yet still need to set up the zones and stuff but at least it took me 40 minutes to write some code"}, {"post_id": 39785, "ts": "2026-08-02T23:56:12Z", "hours": 0.4542, "text": "built an enemy follow feature which allows the bat to follow the player and attack but after one attack it freezes and does not follow or attack again next time, I need to fix that and also add player damage to allow the user to kill enemy’s"}, {"post_id": 39400, "ts": "2026-08-02T10:45:35Z", "hours": 0.78, "text": "added the foundation for the bat script and player damage but will need to continue on it with hitboxes and deal damage"}, {"post_id": 38879, "ts": "2026-08-01T13:22:10Z", "hours": 1.4586, "text": "started on an enemy attack system where the enemy will follow you and try to attack also started on the player attack and health system, aiming to finish by tomorrow"}, {"post_id": 37953, "ts": "2026-07-31T00:20:37Z", "hours": 1.0378, "text": "Added a new/first enemy with animations. My next goal is to make a tile set for one of my levels and get enemies attacking and dealing damage"}, {"post_id": 37487, "ts": "2026-07-30T08:22:14Z", "hours": 1.3272, "text": "added more attacks so they link up it will have a count and depending on the count it will play a different player animation"}, {"post_id": 36759, "ts": "2026-07-29T00:53:52Z", "hours": 1.2675, "text": "attack animation added"}, {"post_id": 36185, "ts": "2026-07-28T03:23:16Z", "hours": 0.4917, "text": "The player movement script is done and allows for movement in the 2d game with sprite animations and the vector flip, so it flips based on the direction the character is moving"}]...
|
Title: torchbearer by @NosyMonty | Stardance
Devl Title: torchbearer by @NosyMonty | Stardance
Devlogs:
The player movement script is done and allows for movement in the 2d game with sprite animations and the vector flip, so it flips based on the direction the character is moving
attack animation added
added more attacks so they link up it will have a count and depending on the count it will play a different player animation
Added a new/first enemy with animations. My next goal is to make a tile set for one of my levels and get enemies attacking and dealing damage
started on an enemy attack system where the enemy will follow you and try to attack also started on the player attack and health system, aiming to finish by tomorrow
added the foundation for the bat script and player damage but will need to continue on it with hitboxes and deal damage
built an enemy follow feature which allows the bat to follow the player and attack but after one attack it freezes and does not follow or attack again next time, I need to fix that and also add player damage to allow the user to kill enemy’s
added enemy attacks where the player can now die when health reaches zero and it also follows the player you can’t kill it yet still need to set up the zones and stuff but at least it took me 40 minutes to write some code
worked on a spike where it will reset the character a.k.a the character will die and the scene will reset. I also went the complex route of making it with a collision polygon shape instead of a normal collision shape now I just need to work out how to get the killzone script working with the spikes on every scene so i can just add the spikes scene
I’m going to try this devlog thing it seem like a cool way for me to keep track devlog #10 in today’s 1 hr coding session I actually got a lot done, I added some new animations for the player like slide which when activated it actually gives the player a speed boost, I enabled the player to attack and kill the bat and added its dying animation. I also added a new death screen where it fades to black still need to make a way to actually start again when you die, I fixed the spikes so the player just dies not fall through the ground it fades to black. Next session my goal is to add more enemies, start working on the tutorial level and expand on the cave level as well as start other levels and if im feeling nice i might give you a sneek peak at the twist at the end so follow along but take your time this might take a while with the little progress i have made in about 10 hours.
Devlog #11 over the past three days I have worked little on torchbearer, and it is going well I have updated the level design a bit not fully completed, added a coin with an animation, and am working on a vase that can be broken and it will drop 1-3 coins, I also added a tile screen, game manager where it can track coins bosses and levels and stuff and a game over screen, now I just need to finish implementing then into the actual game so they come onto the screen at the correct time and the buttons work, I am also planning to add more sprites to the game and start working on the first boss
devlog #12 im going to be honest this devlog is like 4 days’ worth of 30-minute stuff i think i showed everything i added but i can’t remember (stupid me) what i do know is that i have started and failed at a moving background with like 6 layers and attempted to make themes which I’ll explain/ show why at a later date but i think that is it (let’s not make this mistake again)
Devlog #13 added multiple things like new enemy to a point haven’t actually made the script yet. fixed and added the themes for the home and game over screen with there being two cave and village, with music on the way. I also added new attacks for the player where it has air attacks where it freezes and then accelerates down to deal more damage that is basically it it was mostly the player script that was a pain
devlog #14 worked on the tutorial level with text on how to play movement etc, also added 4 new enemies 3 bosses and one normal enemy but will keep them a secret untill i utalise them
devlog #15 so i think the game is finally finished its not as long as i wanted nor was i able to get the twist to work (i can’t 3d design very well) and I have lost the passion to work on the game it is a finished version playable takes about 10 minutes for those who want to but id rather have a finished playable version for everyone who would wanna play it then just leave it but basically it has 3 levels tutorial and then 2 main levels they are short but they all have boss battles and some form of enemy there is music, SFX and all, and backgrounds, there is a title screen and a portal to transport you from level to level once you finish there is a you win screen with a button to return to main menu there is themes and everything
Ships:
its a short platformer that has three levels and much more see past devlogs for more details...
|
1792986474.2834215
|
1793072874.2834215
|
|
13619
|
tourcraft by @tillus | Stardance
|
tillus
|
0
|
1.18
|
0
|
[]
|
[{"post_id": 6990, "ts": "2026 [{"post_id": 6990, "ts": "2026-06-11T18:48:52Z", "hours": 0.6506, "text": "I did some UI improvements and added Apple Private Cloud Compute Capabilities to enable the use of advanced Apple Intelligence features."}, {"post_id": 5795, "ts": "2026-06-09T18:32:14Z", "hours": 0.5317, "text": "Today I created the basic structure of the home view."}]...
|
Title: tourcraft by @tillus | Stardance
Devlogs:
Title: tourcraft by @tillus | Stardance
Devlogs:
Today I created the basic structure of the home view.
I did some UI improvements and added Apple Private Cloud Compute Capabilities to enable the use of advanced Apple Intelligence features....
|
1792579923.8297424
|
1793184723.8297424
|
|
42841
|
tower defense by @solarlunarr | Stardance
|
solarlunarr
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: tower defense by @solarlunarr | Stardance
|
1792525750.1228163
|
1793130550.1228163
|
|
42842
|
tower defense by @solarlunarr | Stardance
|
solarlunarr
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: tower defense by @solarlunarr | Stardance
|
1792525750.9571576
|
1793130550.9571576
|
|
50513
|
tower plattformer by @eshaan | Stardance
|
eshaan
|
0
|
0.46
|
0
|
[]
|
[{"post_id": 50409, "ts": "202 [{"post_id": 50409, "ts": "2026-08-19T15:56:18Z", "hours": 0.4569, "text": "I’ve added the player in and I’ve gotten started on building the tower for the platformer"}]...
|
Title: tower plattformer by @eshaan | Stardance
D Title: tower plattformer by @eshaan | Stardance
Devlogs:
I’ve added the player in and I’ve gotten started on building the tower for the platformer...
|
1792633657.0117047
|
1793238457.0117047
|
|
19349
|
town hall bot by @valentine | Stardance
|
valentine
|
0
|
9.17
|
0
|
[]
|
[{"post_id": 9456, "ts": "2026 [{"post_id": 9456, "ts": "2026-06-15T20:21:58Z", "hours": 9.1719, "text": "I’ve implemented many things so far, like a honeypot channel to catch spam bots, a ticket system for users to get support from staff, information messages for rules and guidelines, user verification via a button press, and new member announcements with custom images. (pictured below)"}]...
|
Title: town hall bot by @valentine | Stardance
De Title: town hall bot by @valentine | Stardance
Devlogs:
I’ve implemented many things so far, like a honeypot channel to catch spam bots, a ticket system for users to get support from staff, information messages for rules and guidelines, user verification via a button press, and new member announcements with custom images. (pictured below)...
|
1792580024.7618306
|
1793184824.7618306
|
|
32386
|
tpad by @ttj | Stardance
|
ttj
|
0
|
4.52
|
0
|
[]
|
[{"post_id": 32729, "ts": "202 [{"post_id": 32729, "ts": "2026-07-22T02:02:13Z", "hours": 1.925, "text": "made the case and the firmware for my tpad :D (a whole 4 hours wasnt recorded because of an error with the recording on an ipad ;-;)"}, {"post_id": 25060, "ts": "2026-07-09T00:46:47Z", "hours": 2.5944, "text": "making the pcb of my cooler hackpad"}]...
|
Title: tpad by @ttj | Stardance
Devlogs:
making t Title: tpad by @ttj | Stardance
Devlogs:
making the pcb of my cooler hackpad
made the case and the firmware for my tpad :D (a whole 4 hours wasnt recorded because of an error with the recording on an ipad ;-;)...
|
1792658926.9401705
|
1793263726.9401705
|
|
24748
|
tplinked by @toxi | Stardance
|
toxi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: tplinked by @toxi | Stardance
|
1792723743.6172042
|
1793328543.6172042
|
|
52963
|
trAIning by @Leon | Stardance
|
Leon
|
0
|
2.39
|
0
|
[]
|
[{"post_id": 52983, "ts": "202 [{"post_id": 52983, "ts": "2026-08-23T11:07:18Z", "hours": 2.3897, "text": "new project…new stuff…i like The idea soo strava…garmin…whoop….apple…coros…all those things have paid plans in order to analyze training/health data…but i am neither willing to pay…or have the money to pay for such subscriptions…but i have ai.hackclub.com a lot of time…and willpower…meaning my goal is to recreate such service…for free :) ill see how that will work out with tokens later lol the first beautiful progress so like most of my other web projects it will look like a tui or better said bc i always to the same structure and stuff i can make a basic pre version pretty fast! hackclub ai first steps so the api is really easy to use, i wrote a starting prompt…using my dearest friend chat (never ever used for coding) and sent it as role system to the ai…and everything else can just be directly taken from user input!! todos but now the biggest part…user/login/db handeling and integrations of the different apps (strava, garmin etc.) and save that data in a db and leave the ai with a context (db) and use also non ai features like somple graphes from the data saved in the db… so i guess the next step is login…and database lol"}]...
|
Title: trAIning by @Leon | Stardance
Devlogs:
new Title: trAIning by @Leon | Stardance
Devlogs:
new project…new stuff…i like The idea soo strava…garmin…whoop….apple…coros…all those things have paid plans in order to analyze training/health data…but i am neither willing to pay…or have the money to pay for such subscriptions…but i have ai.hackclub.com a lot of time…and willpower…meaning my goal is to recreate such service…for free :) ill see how that will work out with tokens later lol the first beautiful progress so like most of my other web projects it will look like a tui or better said bc i always to the same structure and stuff i can make a basic pre version pretty fast! hackclub ai first steps so the api is really easy to use, i wrote a starting prompt…using my dearest friend chat (never ever used for coding) and sent it as role system to the ai…and everything else can just be directly taken from user input!! todos but now the biggest part…user/login/db handeling and integrations of the different apps (strava, garmin etc.) and save that data in a db and leave the ai with a context (db) and use also non ai features like somple graphes from the data saved in the db… so i guess the next step is login…and database lol...
|
1792731162.6263964
|
1793335962.6263964
|
|
57107
|
tracepad by @clumsy261 | Stardance
|
clumsy261
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: tracepad by @clumsy261 | Stardance
|
1792691650.6658368
|
1793296450.6658368
|
|
22490
|
trackpaddy by @tokaa | Stardance
|
tokaa
|
0
|
13.86
|
0
|
[]
|
[{"post_id": 12850, "ts": "202 [{"post_id": 12850, "ts": "2026-06-21T01:29:21Z", "hours": 13.8594, "text": "After seeing Mac-trackpad-mapper , I was surprised at how well it worked. However, the code was some 2 years old and much more of a test than an actual app like I hoped. So I decided to fork the driver and turn it into what I hope to be a fully usable Macbook trackpad driver (kind of like how OpenTabletDriver works so flawlessly). Currently it supports absolute (makes osu! actually playable on trackpad) and relative positioning with zero acceleration with customizable area and sensitivity respectively. As it turns out, disabling trackpad acceleration in the Apple settings does not actually disable it fully. It’s barebones currently but I hope to add much more and get a first release. repo"}]...
|
Title: trackpaddy by @tokaa | Stardance
Devlogs:
Title: trackpaddy by @tokaa | Stardance
Devlogs:
After seeing Mac-trackpad-mapper , I was surprised at how well it worked. However, the code was some 2 years old and much more of a test than an actual app like I hoped. So I decided to fork the driver and turn it into what I hope to be a fully usable Macbook trackpad driver (kind of like how OpenTabletDriver works so flawlessly). Currently it supports absolute (makes osu! actually playable on trackpad) and relative positioning with zero acceleration with customizable area and sensitivity respectively. As it turns out, disabling trackpad acceleration in the Apple settings does not actually disable it fully. It’s barebones currently but I hope to add much more and get a first release. repo...
|
1792536455.4288087
|
1793141255.4288087
|
|
14335
|
tracktogreen by @Aarush-Naik | Stardance
|
Aarush-Naik
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: tracktogreen by @Aarush-Naik | Stardance
|
1792569079.8993015
|
1793173879.8993015
|
|
57870
|
traewelling-tagtistic by @pauljako | Stardance
|
pauljako
|
1
|
9.0
|
38
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-09T15:08:41Z", "hours": 9.0, "multiplier": 4.31, "payout": 38, "blessing": "neutral", "text": "I made traewelling-tagtistic. It is a simple tool to view statistics based on your Träwelling tags. It was not that hard overall but it was still something, I really missed before. It was fun to play around with the CSS which I do really like the outcome of :)", "repo": "https://codeberg.org/pauljako/traewelling-tagtistic", "demo": "https://tagtistic.pfuschen.jetzt"}]...
|
[{"post_id": 64836, "ts": "202 [{"post_id": 64836, "ts": "2026-09-09T15:03:16Z", "hours": 1.7108, "text": "I added a README, and deployed traewelling-tagtistic onto our Kubernetes Cluster. It is now live at tagtistic.pfuschen.jetzt and ready to ship!"}, {"post_id": 63746, "ts": "2026-09-07T18:21:30Z", "hours": 1.9197, "text": "I now added a UI for the new API. It still needs more refinement but I like the Initial Design. Clicking on a Bar shows you, which Check-Ins have said tag set. The rightmost bar also shows Check-Ins with no Tag Value assigned."}, {"post_id": 62451, "ts": "2026-09-05T20:01:00Z", "hours": 1.0053, "text": "I updated the API to show more Information. More specifically, it now shows Journeys, that did not have a specific tag set at all and it shows which Journeys had a Tag Value. Now I just have to implement this in the UI…"}, {"post_id": 61706, "ts": "2026-09-04T19:03:03Z", "hours": 0.9392, "text": "Oh well… As I am writing this, Träwelling is having scheduled maintenance. I can’t really test, what I’ve done but I tried to improve the CSS a bit…"}, {"post_id": 61136, "ts": "2026-09-03T21:55:44Z", "hours": 0.7369, "text": "I am trying to orient the UI a bit after https://fabian-c.github.io/Traewelling-Maps . And while that appears to be Vibe Coded, I don’t think mine counts as vibe coded if I just steal some CSS Variables from it, right? right?"}, {"post_id": 61114, "ts": "2026-09-03T20:56:21Z", "hours": 0.6661, "text": "I started working on the Frontend. My final plan is to make this look at least a bit decent but I am not good at design… (Please dont look at the Icon of Mover, pleasseeee) Anyways, I find it interesting to visualize my Check-Ins for the first Time. I am very amazed that I spent 35 Hours over the last 356 Days in Stadler Flirts alone…"}, {"post_id": 61067, "ts": "2026-09-03T19:40:33Z", "hours": 1.0606, "text": "Uhhmmm yeah here is a random Graph I guess… This is just the default template of Chart.js, the Library I am going to use for the Frontend. But actually displaying this took longer than I wanted. It took me quite a long time for the HTML File to be included in my Python Wheel. Because of that, Flask was not able to find the File to render it… Apparently, MANIFEST.in is more or less obsolete and I had to specify these files in the pyproject.toml . Also, the Frontend now lives in a subdirectory of the Python Code, not at the root of the project…"}, {"post_id": 60966, "ts": "2026-09-03T17:25:03Z", "hours": 0.4389, "text": "It is starting to work! The API can now return the number of Check-Ins for a specific Tag Value! However, there are no filters or any other advanced features…"}, {"post_id": 60928, "ts": "2026-09-03T16:28:29Z", "hours": 0.3819, "text": "I am trying to build traewelling-tagtistic. Träwelling is a Social-Platform, where you “Check-In” to public transit services. You can also set Tags to, for example, show what Train Model you are currently riding. traewelling-tagtistic is going to be a Website, where you can see various Statistics about these Tags. For now however, I get a 400 Bad Request from the Träwelling API if I use Python requests . However, it works from Firefox… 🤔"}]...
|
Title: traewelling-tagtistic by @pauljako | Starda Title: traewelling-tagtistic by @pauljako | Stardance
Devlogs:
I am trying to build traewelling-tagtistic. Träwelling is a Social-Platform, where you “Check-In” to public transit services. You can also set Tags to, for example, show what Train Model you are currently riding. traewelling-tagtistic is going to be a Website, where you can see various Statistics about these Tags. For now however, I get a 400 Bad Request from the Träwelling API if I use Python requests . However, it works from Firefox… 🤔
It is starting to work! The API can now return the number of Check-Ins for a specific Tag Value! However, there are no filters or any other advanced features…
Uhhmmm yeah here is a random Graph I guess… This is just the default template of Chart.js, the Library I am going to use for the Frontend. But actually displaying this took longer than I wanted. It took me quite a long time for the HTML File to be included in my Python Wheel. Because of that, Flask was not able to find the File to render it… Apparently, MANIFEST.in is more or less obsolete and I had to specify these files in the pyproject.toml . Also, the Frontend now lives in a subdirectory of the Python Code, not at the root of the project…
I started working on the Frontend. My final plan is to make this look at least a bit decent but I am not good at design… (Please dont look at the Icon of Mover, pleasseeee) Anyways, I find it interesting to visualize my Check-Ins for the first Time. I am very amazed that I spent 35 Hours over the last 356 Days in Stadler Flirts alone…
I am trying to orient the UI a bit after https://fabian-c.github.io/Traewelling-Maps . And while that appears to be Vibe Coded, I don’t think mine counts as vibe coded if I just steal some CSS Variables from it, right? right?
Oh well… As I am writing this, Träwelling is having scheduled maintenance. I can’t really test, what I’ve done but I tried to improve the CSS a bit…
I updated the API to show more Information. More specifically, it now shows Journeys, that did not have a specific tag set at all and it shows which Journeys had a Tag Value. Now I just have to implement this in the UI…
I now added a UI for the new API. It still needs more refinement but I like the Initial Design. Clicking on a Bar shows you, which Check-Ins have said tag set. The rightmost bar also shows Check-Ins with no Tag Value assigned.
I added a README, and deployed traewelling-tagtistic onto our Kubernetes Cluster. It is now live at tagtistic.pfuschen.jetzt and ready to ship!
Ships:
I made traewelling-tagtistic. It is a simple tool to view statistics based on your Träwelling tags. It was not that hard overall but it was still something, I really missed before. It was fun to play around with the CSS which I do really like the outcome of :)...
|
1792993793.6149483
|
1793080193.6149483
|
|
17294
|
traewelltui by @Tuxilio | Stardance
|
Tuxilio
|
2
|
15.45
|
157
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T09:44:26Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made traewelltui, which is a TUI (terminal ui) client for Traewelling, a free public transport checkin service to record your travels and share it with your friends. It was a bit difficult to get into, because I never used Ratatui before. I have rewritten the dashboard multiple times and I am now somthing happy with it :) If you test the project, you should know that it uses vim keybinds: Use :q to quit. New Fetures are that you can paste the token now directly from your clipboard, you can like checkins interactively using a popup select and using an index, and a bugfix that the dashboard isn’t loading! (some licensing things: The background image in my terminal which is only partially visible is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree My screenshot is licensed CC-BY-SA 4.0)", "repo": "https://codeberg.org/Tuxilio/traewelltui/", "demo": "https://crates.io/crates/traewelltui"}, {"ship_num": 2, "ts": "2026-06-17T19:45:08Z", "hours": 10.0, "multiplier": 15.88, "payout": 157, "blessing": "neutral", "text": "I made traewelltui, which is a TUI (terminal ui) client for Traewelling, a free public transport checkin service to record your travels and share it with your friends. It was a bit difficult to get into, because I never used Ratatui before. I have rewritten the dashboard multiple times and I am now somthing happy with it :) If you test the project, you should know that it uses vim keybinds: Use :q to quit. Pasting the token could take some seconds, this is not because something bad implemented but instead the token is really long and each character gets inserted sepeartely by ratatui.", "repo": "https://codeberg.org/Tuxilio/traewelltui/", "demo": "https://crates.io/crates/traewelltui"}]...
|
[{"post_id": 77504, "ts": "202 [{"post_id": 77504, "ts": "2026-10-07T08:24:45Z", "hours": 0.4453, "text": "I fixed one bug where the travel mode is not added in the enum so I added a default field “Other” to show this instead of crashing the app. I also added a bit more docs where to get the token :)"}, {"post_id": 65276, "ts": "2026-09-10T08:50:49Z", "hours": 1.4053, "text": "I fixed the error reported by @pauljako that the login is not working anymore which is likely caused because of recent api changed by traewelling. The travel mode (bus, train …) and the source/license of the checkin are now not always included so I set them to optional. It was really difficult to debug because I couldn’t get serde to show the full problem … but it worked after some tries 🎉 (some licensing things: The background image in my terminal is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree My screenshot is licensed CC-BY-SA 4.0)"}, {"post_id": 25237, "ts": "2026-07-09T11:21:45Z", "hours": 0.8522, "text": "You can now type :like without arguments and find a popup to select which checkin you want to like!"}, {"post_id": 24735, "ts": "2026-07-08T14:43:20Z", "hours": 0.3311, "text": "The message is now shown in a popup instead the bottom line, which looks much nicer :)"}, {"post_id": 24716, "ts": "2026-07-08T14:15:47Z", "hours": 1.3469, "text": "I added a :like command! You can now like checkins using :like <index> , where you can find the index beside the username in the checkin header!"}, {"post_id": 24665, "ts": "2026-07-08T12:15:55Z", "hours": 1.3956, "text": "I added an option to get the token from your clipboard instead of only relying only on pasting, because that pasted every single character and took some time :)"}, {"post_id": 10836, "ts": "2026-06-17T19:37:51Z", "hours": 1.1611, "text": "I added a lot documentation and an asciinema video: https://asciinema.org/a/BytB6HM8kpoXtlLC"}, {"post_id": 10736, "ts": "2026-06-17T16:56:50Z", "hours": 0.7561, "text": "There is now an option to save the api token and auto-login with it! The login prompt also shows now automatically when you’re not logged in, making it easier to get a start :) The token save prompt only shows after a successful use of the token, so you can’t really save a wrong token."}, {"post_id": 10712, "ts": "2026-06-17T16:01:24Z", "hours": 1.1061, "text": "I completely redesigned the dashboard! It now looks more like “normal” Traewelling clients and in my opinion much nicer :)"}, {"post_id": 10597, "ts": "2026-06-17T12:50:29Z", "hours": 0.6261, "text": "I added symbols for the travelling mode (e.g. suburban, regional rail, tram bus) and you can now also see the status message another one has posted together with the checkin!"}, {"post_id": 10581, "ts": "2026-06-17T11:59:07Z", "hours": 4.3208, "text": "I just finished a big feature in my project! The login now works perfectly, and after successfully logging in, you’ll see your dashboard displaying check-ins from people you follow (plus your own, of course). The dashboard isn’t complete yet - I plan to add status messages and a progress bar showing if someone is currently traveling."}, {"post_id": 9336, "ts": "2026-06-15T17:42:53Z", "hours": 1.9603, "text": "I’m building a terminal user interface for Traewelling ( https://traewelling.de/ ) using Ratatui in Rust, with Vim-style keybindings (: for command mode, q to quit, :login for token-based authentication). The basic UI is working well with a header, dashboard body, and mode-specific footer, but still needs polish before the next iteration."}]...
|
Title: traewelltui by @Tuxilio | Stardance
Devlog Title: traewelltui by @Tuxilio | Stardance
Devlogs:
I’m building a terminal user interface for Traewelling ( https://traewelling.de/ ) using Ratatui in Rust, with Vim-style keybindings (: for command mode, q to quit, :login for token-based authentication). The basic UI is working well with a header, dashboard body, and mode-specific footer, but still needs polish before the next iteration.
I just finished a big feature in my project! The login now works perfectly, and after successfully logging in, you’ll see your dashboard displaying check-ins from people you follow (plus your own, of course). The dashboard isn’t complete yet - I plan to add status messages and a progress bar showing if someone is currently traveling.
I added symbols for the travelling mode (e.g. suburban, regional rail, tram bus) and you can now also see the status message another one has posted together with the checkin!
I completely redesigned the dashboard! It now looks more like “normal” Traewelling clients and in my opinion much nicer :)
There is now an option to save the api token and auto-login with it! The login prompt also shows now automatically when you’re not logged in, making it easier to get a start :) The token save prompt only shows after a successful use of the token, so you can’t really save a wrong token.
I added a lot documentation and an asciinema video: https://asciinema.org/a/BytB6HM8kpoXtlLC
I added an option to get the token from your clipboard instead of only relying only on pasting, because that pasted every single character and took some time :)
I added a :like command! You can now like checkins using :like <index> , where you can find the index beside the username in the checkin header!
The message is now shown in a popup instead the bottom line, which looks much nicer :)
You can now type :like without arguments and find a popup to select which checkin you want to like!
I fixed the error reported by @pauljako that the login is not working anymore which is likely caused because of recent api changed by traewelling. The travel mode (bus, train …) and the source/license of the checkin are now not always included so I set them to optional. It was really difficult to debug because I couldn’t get serde to show the full problem … but it worked after some tries 🎉 (some licensing things: The background image in my terminal is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree My screenshot is licensed CC-BY-SA 4.0)
I fixed one bug where the travel mode is not added in the enum so I added a default field “Other” to show this instead of crashing the app. I also added a bit more docs where to get the token :)
Ships:
I made traewelltui, which is a TUI (terminal ui) client for Traewelling, a free public transport checkin service to record your travels and share it with your friends. It was a bit difficult to get into, because I never used Ratatui before. I have rewritten the dashboard multiple times and I am now somthing happy with it :) If you test the project, you should know that it uses vim keybinds: Use :q to quit. Pasting the token could take some seconds, this is not because something bad implemented but instead the token is really long and each character gets inserted sepeartely by ratatui.
I made traewelltui, which is a TUI (terminal ui) client for Traewelling, a free public transport checkin service to record your travels and share it with your friends. It was a bit difficult to get into, because I never used Ratatui before. I have rewritten the dashboard multiple times and I am now somthing happy with it :) If you test the project, you should know that it uses vim keybinds: Use :q to quit. New Fetures are that you can paste the token now directly from your clipboard, you can like checkins interactively using a popup select and using an index, and a bugfix that the dashboard isn’t loading! (some licensing things: The background image in my terminal which is only partially visible is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree My screenshot is licensed CC-BY-SA 4.0)...
|
1792986584.6297028
|
1793072984.6297028
|
|
43830
|
traffic_light_controller_with_7segment by @Rudra-S traffic_light_controller_with_7segment by @Rudra-Singh | Stardance...
|
Rudra-Singh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: traffic_light_controller_with_7segment by @ Title: traffic_light_controller_with_7segment by @Rudra-Singh | Stardance...
|
1792561947.5936725
|
1793166747.5936725
|
|
47729
|
trail by @JASVINDER | Stardance
|
JASVINDER
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: trail by @JASVINDER | Stardance
|
1792526009.7543209
|
1793130809.7543209
|
|
40426
|
trailhead by @staticiize | Stardance
|
staticiize
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: trailhead by @staticiize | Stardance
|
1792583593.2981822
|
1793188393.2981822
|
|
50474
|
trailmap by @kate | Stardance
|
kate
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: trailmap by @kate | Stardance
|
1792630206.723401
|
1793235006.723401
|
|
24497
|
trainTracks by @Potatoish | Stardance
|
Potatoish
|
0
|
13.78
|
0
|
[]
|
[{"post_id": 40899, "ts": "202 [{"post_id": 40899, "ts": "2026-08-04T18:33:54Z", "hours": 7.7394, "text": "Devlog #3 Additions Fixed a bug that caused the train to sometimes fly away from the map when the game was started Fixed inconsistencies in the exits that caused the train to pass over the void and through exits that didn’t exist Added a three-way train station with four variants each facing up, down, left, or right that behave just like the other tracks and automatically generate. Added an arrow in front of the train that spawns for each intersection infront and tells the user where the train is going and which way it was going to turn Added user inputs that allow the user to decide which direction they want the train to go from available paths and exits Made it so the train also rotates and faces its direction of movement rather than always facing forward Other small bugs that I fixed Planned Updates Make it so when the train arrives at a station, it says game won instead of thinking it fell into the void Make it so the train can’t go back to original station, like say something game lost, etc. Added more train station layouts that are more realistic with curves and such A lot of other things I can’t list Other Thoughts A significant portion of this update was just working on fixing any bugs that made it so the game was inconsistent when I played it and made it hard to debug, especially with the addition of three-way tracks that made the exits and movement between stations more confusing. I also added the like, probably main part of this game with the player movement, which is the basis of what the goal of this game is, which is to control the train and reach the station. I think next, along with the stuff I said in the planned updates, I also need to work on making sure the generation is better and more consistent but also more fun by adding more clauses so the generation is fun to play on each time and not just a straight line to the station. The video I attached shows the train moving along the path and spawning arrows towards the default path but being switched and changing directions based on player input before falling off the edge."}, {"post_id": 27410, "ts": "2026-07-12T23:27:25Z", "hours": 3.0436, "text": "Devlog #2 Additions Added a train node and scene that moves along the preplaced track nodes The train moves toward a target exit or middle node until it can no longer go straight or it falls off the edge The train uses the chunk nodes as waypoints, going from exit node to middle node then whichever exit node is chosen The train defaults to going straight until it cannot. Once it cannot go straight it filters all exits removing exits you came from or lead nowhere If there are no available directions, it moves to the end of the last node before stopping and falling off the edge Planned Updates Adding player input so you can control which direction the train goes Adding indicators that show the default path for the train without any inputs. If input is given the train and indicator should move properly Adding more things that happen when trains arrive at stations And a lot more stuff What was the goal My main goal was to add a train and design the default path so it automatically starts and begins progressing throughout the default track. I had a lot of the foundation set that made it so I could use the nodes and they could move through the nodes. I had to make sure that there were conditions that made sure they could check to see if the exits lead to another chunk or just the void. The hard part was if a four-way was connected to a horizontal without a direct path but the train still moves over the void to the chunk. I had to check the chunk nodes and exits for the following neighbor chunks also to make sure it was a valid chunk, which took a while to troubleshoot. I want to next try and create more junctions and the default path indicator using arrows. Right now the path is generated as the train moves but if I wanted to set the indicators, I would have to premake the default path, which would also require some more time and work."}, {"post_id": 23901, "ts": "2026-07-07T03:18:08Z", "hours": 2.9922, "text": "Devlog #1 Additions Added three basic train layouts (four-way intersection, vertical intersection, and horizontal intersection) Added a train end and start station Created a randomly generated network of tracks comprising of the three basic layouts The end and start stations’ positions are predetermined and other intersections are generated randomly with each other’s connecting ends until there are no available grid spaces to generate new tracks If the end station isn’t connected with a corresponding track, the entire map is regenerated Planned Updates More track layouts, including more complex ones like t-intersections and more Creating the train so it can traverse along these tracks Adding styling to the tracks and other elements More rules to allow better and more unique map generation A lot more other stuff What was the goal The goal for this devlog was simply to start out the game and make a beginning layout of what the game and tracks would look like. I created these three basic layouts and used a grid to track which tracks had been placed where to keep generating the map. I also had to work on simply getting GoDot engine setup alongside hacktime and learning both how to use the engine and GDScript since this is the first time I’m using GoDot and the first time i’m making a game at all so it’s a learning experience trying to figure out how to use it. Next I want to focus on figuring out how I am going to get trains to work and make them follow the track layouts that will later in the future become more accessible to trains (not have sharp 90 degree turns)."}]...
|
Title: trainTracks by @Potatoish | Stardance
Devl Title: trainTracks by @Potatoish | Stardance
Devlogs:
Devlog #1 Additions Added three basic train layouts (four-way intersection, vertical intersection, and horizontal intersection) Added a train end and start station Created a randomly generated network of tracks comprising of the three basic layouts The end and start stations’ positions are predetermined and other intersections are generated randomly with each other’s connecting ends until there are no available grid spaces to generate new tracks If the end station isn’t connected with a corresponding track, the entire map is regenerated Planned Updates More track layouts, including more complex ones like t-intersections and more Creating the train so it can traverse along these tracks Adding styling to the tracks and other elements More rules to allow better and more unique map generation A lot more other stuff What was the goal The goal for this devlog was simply to start out the game and make a beginning layout of what the game and tracks would look like. I created these three basic layouts and used a grid to track which tracks had been placed where to keep generating the map. I also had to work on simply getting GoDot engine setup alongside hacktime and learning both how to use the engine and GDScript since this is the first time I’m using GoDot and the first time i’m making a game at all so it’s a learning experience trying to figure out how to use it. Next I want to focus on figuring out how I am going to get trains to work and make them follow the track layouts that will later in the future become more accessible to trains (not have sharp 90 degree turns).
Devlog #2 Additions Added a train node and scene that moves along the preplaced track nodes The train moves toward a target exit or middle node until it can no longer go straight or it falls off the edge The train uses the chunk nodes as waypoints, going from exit node to middle node then whichever exit node is chosen The train defaults to going straight until it cannot. Once it cannot go straight it filters all exits removing exits you came from or lead nowhere If there are no available directions, it moves to the end of the last node before stopping and falling off the edge Planned Updates Adding player input so you can control which direction the train goes Adding indicators that show the default path for the train without any inputs. If input is given the train and indicator should move properly Adding more things that happen when trains arrive at stations And a lot more stuff What was the goal My main goal was to add a train and design the default path so it automatically starts and begins progressing throughout the default track. I had a lot of the foundation set that made it so I could use the nodes and they could move through the nodes. I had to make sure that there were conditions that made sure they could check to see if the exits lead to another chunk or just the void. The hard part was if a four-way was connected to a horizontal without a direct path but the train still moves over the void to the chunk. I had to check the chunk nodes and exits for the following neighbor chunks also to make sure it was a valid chunk, which took a while to troubleshoot. I want to next try and create more junctions and the default path indicator using arrows. Right now the path is generated as the train moves but if I wanted to set the indicators, I would have to premake the default path, which would also require some more time and work.
Devlog #3 Additions Fixed a bug that caused the train to sometimes fly away from the map when the game was started Fixed inconsistencies in the exits that caused the train to pass over the void and through exits that didn’t exist Added a three-way train station with four variants each facing up, down, left, or right that behave just like the other tracks and automatically generate. Added an arrow in front of the train that spawns for each intersection infront and tells the user where the train is going and which way it was going to turn Added user inputs that allow the user to decide which direction they want the train to go from available paths and exits Made it so the train also rotates and faces its direction of movement rather than always facing forward Other small bugs that I fixed Planned Updates Make it so when the train arrives at a station, it says game won instead of thinking it fell into the void Make it so the train can’t go back to original station, like say something game lost, etc. Added more train station layouts that are more realistic with curves and such A lot of other things I can’t list Other Thoughts A significant portion of this update was just working on fixing any bugs that made it so the game was inconsistent when I played it and made it hard to debug, especially with the addition of three-way tracks that made the exits and movement between stations more confusing. I also added the like, probably main part of this game with the player movement, which is the basis of what the goal of this game is, which is to control the train and reach the station. I think next, along with the stuff I said in the planned updates, I also need to work on making sure the generation is better and more consistent but also more fun by adding more clauses so the generation is fun to play on each time and not just a straight line to the station. The video I attached shows the train moving along the path and spawning arrows towards the default path but being switched and changing directions based on player input before falling off the edge....
|
1792565536.9146917
|
1793170336.9146917
|
|
8933
|
trainbox by @batow133 | Stardance
|
batow133
|
0
|
0.28
|
0
|
[]
|
[{"post_id": 3465, "ts": "2026 [{"post_id": 3465, "ts": "2026-06-06T12:40:53Z", "hours": 0.2808, "text": "Devlog #1: Trainbox Hey! I am Nikolas, and I am really obsessed with local AI and LLM training. But I discovered a problem… If someone wants to fine-tune a model, they will have to buy pricey hardware or a very expensive cloud subscription. So, that leads to LLM fine-tuning (and training) being very hard for beginners to start. Solution: My project (it’s called Trainbox) is a local large language model fine-tuning center that helps people train LLMs with local hardware easily. This project will consist of different parts, like a fine-tuning center, a dataset creator (for context, datasets are the organized data LLMs are trained on), a fully local LLM inference engine (so you can chat with your LLM without changing apps), and many more! Thanks for reading my first Devlog! I hope I really stick with the project and don’t abandon it… I am eager to hear your suggestions or questions about my project!"}]...
|
Title: trainbox by @batow133 | Stardance
Devlogs: Title: trainbox by @batow133 | Stardance
Devlogs:
Devlog #1: Trainbox Hey! I am Nikolas, and I am really obsessed with local AI and LLM training. But I discovered a problem… If someone wants to fine-tune a model, they will have to buy pricey hardware or a very expensive cloud subscription. So, that leads to LLM fine-tuning (and training) being very hard for beginners to start. Solution: My project (it’s called Trainbox) is a local large language model fine-tuning center that helps people train LLMs with local hardware easily. This project will consist of different parts, like a fine-tuning center, a dataset creator (for context, datasets are the organized data LLMs are trained on), a fully local LLM inference engine (so you can chat with your LLM without changing apps), and many more! Thanks for reading my first Devlog! I hope I really stick with the project and don’t abandon it… I am eager to hear your suggestions or questions about my project!...
|
1792698586.9576905
|
1793303386.9576905
|
|
71267
|
trainu by @Abhishek-mee | Stardance
|
Abhishek-mee
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: trainu by @Abhishek-mee | Stardance
|
1792910833.3076444
|
1793515633.3076444
|
|
44172
|
transit-delays by @kim-harre | Stardance
|
kim-harre
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: transit-delays by @kim-harre | Stardance
|
1792576260.5482073
|
1793181060.5482073
|
|
23036
|
translated sing langui glass by @batres | Stardanc translated sing langui glass by @batres | Stardance...
|
batres
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: translated sing langui glass by @batres | S Title: translated sing langui glass by @batres | Stardance...
|
1792742118.0876777
|
1793346918.0876777
|
|
42080
|
trashyOS by @oreo | Stardance
|
oreo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: trashyOS by @oreo | Stardance
|
1792496983.377794
|
1793101783.377794
|
|
70295
|
traval website by @_iamhannann404_ | Stardance
|
_iamhannann404_
|
0
|
1.13
|
0
|
[]
|
[{"post_id": 80601, "ts": "202 [{"post_id": 80601, "ts": "2026-10-18T08:39:33Z", "hours": 1.1325, "text": "I make website on travel agency"}]...
|
Title: traval website by @_iamhannann404_ | Starda Title: traval website by @_iamhannann404_ | Stardance
Devlogs:
I make website on travel agency...
|
1792986761.3225465
|
1793591561.3225465
|
|
65898
|
travel by @firancly | Stardance
|
firancly
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: travel by @firancly | Stardance
|
1792457457.788752
|
1793062257.788752
|
|
67579
|
travel guide by @pcb | Stardance
|
pcb
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: travel guide by @pcb | Stardance
|
1792468122.0980432
|
1793072922.0980432
|
|
65886
|
travel infotech by @rajnishyadav200727 | Stardance
|
rajnishyadav200727
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: travel infotech by @rajnishyadav200727 | St Title: travel infotech by @rajnishyadav200727 | Stardance...
|
1792457449.6204877
|
1793062249.6204877
|
|
48077
|
travel planner by @harshithreddyy_15 | Stardance
|
harshithreddyy_15
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: travel planner by @harshithreddyy_15 | Star Title: travel planner by @harshithreddyy_15 | Stardance...
|
1792540185.9930356
|
1793144985.9930356
|
|
23545
|
travling app by @amit_elgabsy | Stardance
|
amit_elgabsy
|
0
|
9.33
|
0
|
[]
|
[{"post_id": 13135, "ts": "202 [{"post_id": 13135, "ts": "2026-06-21T14:14:22Z", "hours": 9.3303, "text": "i bulid the ui and the bsic staff work"}]...
|
Title: travling app by @amit_elgabsy | Stardance
Title: travling app by @amit_elgabsy | Stardance
Devlogs:
i bulid the ui and the bsic staff work...
|
1792604859.0653462
|
1793209659.0653462
|
|
30050
|
trebuchet by @packager | Stardance
|
packager
|
0
|
6.15
|
0
|
[]
|
[{"post_id": 25799, "ts": "202 [{"post_id": 25799, "ts": "2026-07-10T08:22:10Z", "hours": 3.1006, "text": "I finished building everything. It doesn’t work as well as I hoped it would, but at least it will hopefully get me super hardware builder status. I still need to find a heavier weight that fits in the width constraint (the current one is actually pretty light), optimize the geometry a bit more (make the string shorter and the end stick longer), and make a better pouch."}, {"post_id": 21684, "ts": "2026-07-03T19:29:10Z", "hours": 3.0508, "text": "finished the CAD. I’ll set stuff to 3d print and assemble it soon. Currently, I’m using a 3d printed shaft because I don’t have enough time to buy shafts, so that will be cooked."}]...
|
Title: trebuchet by @packager | Stardance
Devlogs Title: trebuchet by @packager | Stardance
Devlogs:
finished the CAD. I’ll set stuff to 3d print and assemble it soon. Currently, I’m using a 3d printed shaft because I don’t have enough time to buy shafts, so that will be cooked.
I finished building everything. It doesn’t work as well as I hoped it would, but at least it will hopefully get me super hardware builder status. I still need to find a heavier weight that fits in the width constraint (the current one is actually pretty light), optimize the geometry a bit more (make the string shorter and the end stick longer), and make a better pouch....
|
1792785021.0903368
|
1793389821.0903368
|
|
6957
|
trell0 by @pizzalover125 | Stardance
|
pizzalover125
|
0
|
14.0
|
0
|
[]
|
[{"post_id": 20340, "ts": "202 [{"post_id": 20340, "ts": "2026-07-01T22:18:40Z", "hours": 1.0, "text": "implemented checkboxes! idk why i didn’t add this earlier; this feature is super essential to the app. i focused a lot on the animation part, as that’s my priority for this project."}, {"post_id": 18029, "ts": "2026-06-29T00:15:49Z", "hours": 0.0, "text": "i was trying to implement a feature when pretty much everything broke. i reverted to the old commit and decided to refactor the code to be more readable!"}, {"post_id": 17978, "ts": "2026-06-28T22:50:42Z", "hours": 1.0, "text": "implemented link sharing! basically, it saves your board state, packages it up into a string of characters, and makes it sharable with anyone in the world.this was an interesting feature to add, as I’ve never done something like this before."}, {"post_id": 16370, "ts": "2026-06-26T17:12:48Z", "hours": 2.0, "text": "fixed a lot of visual bugs with delays, including one major one with the cards disappearing on mobile. i fixed that, but in order to test it, I needed to deploy it on vercel. I did so, and it worked! try it out at trell0.vercel.app!"}, {"post_id": 13804, "ts": "2026-06-22T16:58:59Z", "hours": 1.0, "text": "implemented board management! now, you can manage all your projects. i have the same animation style as the rest of the application. there were several bugs with the animations, but I got them all fixed up!"}, {"post_id": 13234, "ts": "2026-06-21T17:47:35Z", "hours": 2.0, "text": "completely redesigned the project! no more icons; everything accessible through command palette (CMD + SHIFT + P) centered grainy gradient background that looks epic changing backgrounds has epic animations no more columns; made the UI too cluttered. going to add board management to manage several projects i tried to add liquid glass like apple, but there were just too many bugs."}, {"post_id": 11760, "ts": "2026-06-19T04:27:13Z", "hours": 0.0, "text": "added undo/redo! it was pretty easy to add ngl; it works as you would expect"}, {"post_id": 11446, "ts": "2026-06-18T18:31:02Z", "hours": 0.0, "text": "implemented a favicon that automatically changes based on the current theme. the favicon is generated using a canvas element, creating a gradient based on the theme’s colors."}, {"post_id": 11025, "ts": "2026-06-18T01:44:22Z", "hours": 0.0, "text": "implemented mobile support! now, the website works on all devices, including smart phones. it was pretty easy but I still faced a couple of small bugs."}, {"post_id": 10984, "ts": "2026-06-18T00:29:01Z", "hours": 2.0, "text": "implemented column support! now you can create as many columns as you want, edit their titles, and more! there were A LOT of visual errors but I eventually got through them all!"}, {"post_id": 9586, "ts": "2026-06-15T23:34:09Z", "hours": 1.0, "text": "implemented card tags! now you can add tags to your cards. example cards include school, work, personal, extracurriculars, etc."}, {"post_id": 5010, "ts": "2026-06-08T17:34:39Z", "hours": 0.0, "text": "tried to add column management but it worked out to be super clunky and just terrible to use. i decided to revert my changes and start afresh. i added more themes!"}, {"post_id": 4713, "ts": "2026-06-08T04:17:37Z", "hours": 0.0, "text": "created a landing page! i was originally going to make it a lot bulkier like https://www.notion.com , but eventually decided to keep it minimalist to fit the vibe."}, {"post_id": 4349, "ts": "2026-06-07T17:09:41Z", "hours": 2.0, "text": "created a command pallete! omg this is actually super cool. simply press CMD+SHIFT+P and access everything you could possibly need to interact with the website! i’ve added a timer, stopwatch, and Pomdoro timer!"}, {"post_id": 3890, "ts": "2026-06-06T23:56:25Z", "hours": 0.0, "text": "implemented upload/download in JSON format! it works like a charm :)"}, {"post_id": 3870, "ts": "2026-06-06T23:12:23Z", "hours": 1.0, "text": "(these were originally 2 devlogs but there was some problems with my wifi so ill combine this into 1) added slick animations that give the app so much more polish! there were so many visual bugs but i got them all figured out! added dark mode!"}, {"post_id": 2274, "ts": "2026-06-04T17:49:40Z", "hours": 1.0, "text": "built the MVP for this minimalist trello board features include: custom colors clean UI local storage what i plan to add next? animations! i want to make this the cleanest thing ever"}]...
|
Title: trell0 by @pizzalover125 | Stardance
Devlo Title: trell0 by @pizzalover125 | Stardance
Devlogs:
built the MVP for this minimalist trello board features include: custom colors clean UI local storage what i plan to add next? animations! i want to make this the cleanest thing ever
(these were originally 2 devlogs but there was some problems with my wifi so ill combine this into 1) added slick animations that give the app so much more polish! there were so many visual bugs but i got them all figured out! added dark mode!
implemented upload/download in JSON format! it works like a charm :)
created a command pallete! omg this is actually super cool. simply press CMD+SHIFT+P and access everything you could possibly need to interact with the website! i’ve added a timer, stopwatch, and Pomdoro timer!
created a landing page! i was originally going to make it a lot bulkier like https://www.notion.com , but eventually decided to keep it minimalist to fit the vibe.
tried to add column management but it worked out to be super clunky and just terrible to use. i decided to revert my changes and start afresh. i added more themes!
implemented card tags! now you can add tags to your cards. example cards include school, work, personal, extracurriculars, etc.
implemented column support! now you can create as many columns as you want, edit their titles, and more! there were A LOT of visual errors but I eventually got through them all!
implemented mobile support! now, the website works on all devices, including smart phones. it was pretty easy but I still faced a couple of small bugs.
implemented a favicon that automatically changes based on the current theme. the favicon is generated using a canvas element, creating a gradient based on the theme’s colors.
added undo/redo! it was pretty easy to add ngl; it works as you would expect
completely redesigned the project! no more icons; everything accessible through command palette (CMD + SHIFT + P) centered grainy gradient background that looks epic changing backgrounds has epic animations no more columns; made the UI too cluttered. going to add board management to manage several projects i tried to add liquid glass like apple, but there were just too many bugs.
implemented board management! now, you can manage all your projects. i have the same animation style as the rest of the application. there were several bugs with the animations, but I got them all fixed up!
fixed a lot of visual bugs with delays, including one major one with the cards disappearing on mobile. i fixed that, but in order to test it, I needed to deploy it on vercel. I did so, and it worked! try it out at trell0.vercel.app!
implemented link sharing! basically, it saves your board state, packages it up into a string of characters, and makes it sharable with anyone in the world.this was an interesting feature to add, as I’ve never done something like this before.
i was trying to implement a feature when pretty much everything broke. i reverted to the old commit and decided to refactor the code to be more readable!
implemented checkboxes! idk why i didn’t add this earlier; this feature is super essential to the app. i focused a lot on the animation part, as that’s my priority for this project....
|
1792925329.3548198
|
1793789329.3548198
|
|
19849
|
trentOS by @thenasaplusit | Stardance
|
thenasaplusit
|
2
|
4.0
|
9
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T14:13:07Z", "hours": 2.0, "multiplier": 4.9, "payout": 9, "blessing": "neutral", "text": "I added a music player, the ability to resize windows, and a stupid little terminal (because what good is an OS without a terminal?). It was much easier to implement than WebOS 1 since I got the hang of the basic syntax.", "repo": "https://github.com/Hacker-Anirudh/trentOS", "demo": "https://trent.sudothelinuxwizard.com/"}, {"ship_num": 2, "ts": "2026-06-16T15:13:28Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It’s finally done (I hate HTML/CSS/JavaScript so much this 2h project felt like a 10 hour Flutter project)! I like how the windows turned out, it gives off pre-Liquid Glass macOS vibes.", "repo": "https://github.com/Hacker-Anirudh/trentOS", "demo": "https://trent.sudothelinuxwizard.com/"}]...
|
[{"post_id": 17613, "ts": "202 [{"post_id": 17613, "ts": "2026-06-28T14:11:39Z", "hours": 0.2764, "text": "I added a meme “terminal” (not the easiest, but it was fine especially with some AI assistance). The coolest change, however, is that I added my new custom domain! It’s not HTTPS yet (thanks GitHub Pages!), but it shouldn’t matter given you don’t have to input any personal data, and I’ll add it as soon as I can."}, {"post_id": 17104, "ts": "2026-06-27T19:30:43Z", "hours": 1.5692, "text": "I added window resizing and a music toggle. The former was just a two-line CSS patch surprisingly."}, {"post_id": 9985, "ts": "2026-06-16T14:56:39Z", "hours": 0.6189, "text": "This is more like it, just need to add content to the other apps (and another function, I thought of this “Shut down” button that does window.close in JS."}, {"post_id": 9945, "ts": "2026-06-16T13:59:05Z", "hours": 0.3786, "text": "Looks a lot more presentable now, but still need to add some more logic."}, {"post_id": 9897, "ts": "2026-06-16T11:55:03Z", "hours": 0.82, "text": "Is it bad it took me 48 minutes to come up with this?"}]...
|
Title: trentOS by @thenasaplusit | Stardance
Devl Title: trentOS by @thenasaplusit | Stardance
Devlogs:
Is it bad it took me 48 minutes to come up with this?
Looks a lot more presentable now, but still need to add some more logic.
This is more like it, just need to add content to the other apps (and another function, I thought of this “Shut down” button that does window.close in JS.
I added window resizing and a music toggle. The former was just a two-line CSS patch surprisingly.
I added a meme “terminal” (not the easiest, but it was fine especially with some AI assistance). The coolest change, however, is that I added my new custom domain! It’s not HTTPS yet (thanks GitHub Pages!), but it shouldn’t matter given you don’t have to input any personal data, and I’ll add it as soon as I can.
Ships:
It’s finally done (I hate HTML/CSS/JavaScript so much this 2h project felt like a 10 hour Flutter project)! I like how the windows turned out, it gives off pre-Liquid Glass macOS vibes.
I added a music player, the ability to resize windows, and a stupid little terminal (because what good is an OS without a terminal?). It was much easier to implement than WebOS 1 since I got the hang of the basic syntax....
|
1792969005.0126548
|
1793055405.0126548
|
|
21890
|
trhw - this ruler has wifi by @nimit | Stardance
|
nimit
|
0
|
6.93
|
0
|
[]
|
[{"post_id": 11491, "ts": "202 [{"post_id": 11491, "ts": "2026-06-18T19:32:59Z", "hours": 0.9319, "text": "Finished working on this thing and ordered the PCB!"}, {"post_id": 55874, "ts": "2024-07-02T00:00:00Z", "hours": 2.5, "text": "By this point, making this PCB was quite straightforward as well. I placed all the components and added the components. I shifted the USB C and main mcu to the left side, and the wireless stuff to the right solely because I wanted to keep both on an edge and it would look awkward and unbalanced all together. Routing is pretty easy too. The only things that needed some focus was the USB Differential pair and the QSPI length matching. I got the radio module lengths down to a 10mm difference, which isn’t that good but it should be alright :p. I might fix that later though."}, {"post_id": 55868, "ts": "2024-07-01T00:00:00Z", "hours": 3.5, "text": "I started making the schematic by referring to the RP2040 Hardware design docs, as well as the docs for the Radio Module 2 and some of the other stuff I used. Most of this time was spent back and forth reading docs, picking ICs and figuring it out. I guess at one point, that’s just how all PCBs work huh. The RP2040 is pretty standard stuff, give it 3.3V, a decent QSPI flash chip and decoupling and it works like a charm. The Radio Module 2 was a bit interesting, but I just ended up following what the docs did word for word, wireless is something I really don’t wanna fuck around and find out :/ The Buck/Boost is fun! I put in a TI TPS63001, which gives a nice 3v3 voltage with minimal stuff! I added 2 diodes to prevent backfeeding into USB or the battery, and installed a TP4056 in conjunction with everything else."}]...
|
Title: trhw - this ruler has wifi by @nimit | Star Title: trhw - this ruler has wifi by @nimit | Stardance
Devlogs:
I started making the schematic by referring to the RP2040 Hardware design docs, as well as the docs for the Radio Module 2 and some of the other stuff I used. Most of this time was spent back and forth reading docs, picking ICs and figuring it out. I guess at one point, that’s just how all PCBs work huh. The RP2040 is pretty standard stuff, give it 3.3V, a decent QSPI flash chip and decoupling and it works like a charm. The Radio Module 2 was a bit interesting, but I just ended up following what the docs did word for word, wireless is something I really don’t wanna fuck around and find out :/ The Buck/Boost is fun! I put in a TI TPS63001, which gives a nice 3v3 voltage with minimal stuff! I added 2 diodes to prevent backfeeding into USB or the battery, and installed a TP4056 in conjunction with everything else.
By this point, making this PCB was quite straightforward as well. I placed all the components and added the components. I shifted the USB C and main mcu to the left side, and the wireless stuff to the right solely because I wanted to keep both on an edge and it would look awkward and unbalanced all together. Routing is pretty easy too. The only things that needed some focus was the USB Differential pair and the QSPI length matching. I got the radio module lengths down to a 10mm difference, which isn’t that good but it should be alright :p. I might fix that later though.
Finished working on this thing and ordered the PCB!...
|
1792766973.4760656
|
1793371773.4760656
|
|
47359
|
trimr by @GustavsKi | Stardance
|
GustavsKi
|
0
|
8.65
|
0
|
[]
|
[{"post_id": 46226, "ts": "202 [{"post_id": 46226, "ts": "2026-08-13T09:53:56Z", "hours": 8.6503, "text": "Finished the first usable version of my video trimming tool Motivation I have several large video files with multiple audio tracks I need just small parts of each. Using a video editor just to trim those videos is quite overkill, and it would take a long time because of the encoding. The built-in video viewer on Windows can trim videos, but it keeps just one of the audio tracks and doesn’t even let the user choose which one to keep. It does just run an ffmpeg command to trim the video"}]...
|
Title: trimr by @GustavsKi | Stardance
Devlogs:
F Title: trimr by @GustavsKi | Stardance
Devlogs:
Finished the first usable version of my video trimming tool Motivation I have several large video files with multiple audio tracks I need just small parts of each. Using a video editor just to trim those videos is quite overkill, and it would take a long time because of the encoding. The built-in video viewer on Windows can trim videos, but it keeps just one of the audio tracks and doesn’t even let the user choose which one to keep. It does just run an ffmpeg command to trim the video...
|
1792511596.4866488
|
1793116396.4866488
|
|
43315
|
tring-bro-on-stardance by @himanshu-singh7 | Stard tring-bro-on-stardance by @himanshu-singh7 | Stardance...
|
himanshu-singh7
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T09:24:56Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i make an bot which give cat fact , jokes and weather using open-meteo", "repo": "https://github.com/rahul-gound/tring-bro-on-stardance", "demo": "https://hackclub.enterprise.slack.com/archives/C0BMK4NAVGA"}]...
|
[{"post_id": 39954, "ts": "202 [{"post_id": 39954, "ts": "2026-08-03T09:10:06Z", "hours": 8.0283, "text": "i added command like :/tring-bro-on-stardance-ping - Check bot latency, /tring-bro-on-stardance-catfact - Get a cat fact, /tring-bro-on-stardance-joke, /tring-bro-on-stardance-help, /tring-bro-on-stardance-weather and catfact tell an cat face and joke gives a jok and weathwer tell weather but /tring-bro-on-stardance-weather city"}]...
|
Title: tring-bro-on-stardance by @himanshu-singh7 Title: tring-bro-on-stardance by @himanshu-singh7 | Stardance
Devlogs:
i added command like :/tring-bro-on-stardance-ping - Check bot latency, /tring-bro-on-stardance-catfact - Get a cat fact, /tring-bro-on-stardance-joke, /tring-bro-on-stardance-help, /tring-bro-on-stardance-weather and catfact tell an cat face and joke gives a jok and weathwer tell weather but /tring-bro-on-stardance-weather city
Ships:
i make an bot which give cat fact , jokes and weather using open-meteo...
|
1792979621.2894194
|
1793066021.2894194
|
|
41588
|
trink by @epain | Stardance
|
epain
|
0
|
8.92
|
0
|
[]
|
[{"post_id": 42981, "ts": "202 [{"post_id": 42981, "ts": "2026-08-08T00:07:44Z", "hours": 5.5306, "text": "finished onshape assembly of the trinket tray! seems to be fine, just onto creating a repo, uploading files"}, {"post_id": 37284, "ts": "2026-07-29T21:45:07Z", "hours": 3.3892, "text": "i’m working on a small spinning trinket tray! i’m basically a complete noob to cad (using onshape for this ..), so this is my very basic project for designing something in 3d! so far i’ve finished the spinning base, just gotta make the actual trays next :))"}]...
|
Title: trink by @epain | Stardance
Devlogs:
i’m w Title: trink by @epain | Stardance
Devlogs:
i’m working on a small spinning trinket tray! i’m basically a complete noob to cad (using onshape for this ..), so this is my very basic project for designing something in 3d! so far i’ve finished the spinning base, just gotta make the actual trays next :))
finished onshape assembly of the trinket tray! seems to be fine, just onto creating a repo, uploading files...
|
1792810245.10048
|
1793415045.10048
|
|
66006
|
tripi by @amisquared | Stardance
|
amisquared
|
0
|
0.9
|
0
|
[]
|
[{"post_id": 73969, "ts": "202 [{"post_id": 73969, "ts": "2026-09-26T12:51:36Z", "hours": 0.9, "text": "tripi is a tri-function rp2040 gadget that does usb-ttl, swd, and spi flashing … and i finally got around the schematic!"}]...
|
Title: tripi by @amisquared | Stardance
Devlogs:
Title: tripi by @amisquared | Stardance
Devlogs:
tripi is a tri-function rp2040 gadget that does usb-ttl, swd, and spi flashing … and i finally got around the schematic!...
|
1792457532.7464042
|
1793062332.7464042
|
|
71299
|
triple cam sys by @Arham_pro | Stardance
|
Arham_pro
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: triple cam sys by @Arham_pro | Stardance
|
1792928846.5228553
|
1793533646.5228553
|
|
71070
|
triviagame by @oyebolaademilade | Stardance
|
oyebolaademilade
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: triviagame by @oyebolaademilade | Stardance
|
1792777652.0157413
|
1793382452.0157413
|
|
38932
|
trout by @nosrep | Stardance
|
nosrep
|
1
|
85.0
|
1696
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T06:51:47Z", "hours": 85.0, "multiplier": 16.67, "payout": 1696, "blessing": "neutral", "text": "welcome to trout v2! the goal of this period was to upgrade trout v1 to finally become the strongest chess engine written in haskell (it’s a cool title, ok). i believe it is done, and trout now beats the previous #1, barbarossa. writing a chess engine in haskell is hard and annoying and probably a not good use of my time, but i am stubborn and not very bright so here we are. writing a chess engine is also very annoying in general, involving thousands of hours of cpu time to test changes. everyone say thank you to my poor i7 10700k together with the +300elo (!!!) strength improvement over v1, i also corrected the engine’s time management (no more timing out in chess GUIs) and cleaned up the web interface. to play the engine, you have three options: the demo link: this has the web interface for trout. it’s the original engine compiled down to WASM with a nice ui on top. lichess bot: you can find the lichess bot link at the bottom of the demo website, @TroutBot . it’s running on an oracle free tier server and can only play two games simultaneously; if challenging it hangs, it’s probably playing 2 already. locally: if you want troutbot at peak performance, you can download a chess GUI like En Croissant or Arena, and configure the trout binary (on github releases) in the GUI. trout speaks the standard UCI protocol.", "repo": "https://github.com/Osrepnay/trout", "demo": "https://osrepnay.github.io/trout-web"}]...
|
[{"post_id": 67147, "ts": "202 [{"post_id": 67147, "ts": "2026-09-13T06:34:52Z", "hours": 1.16, "text": "I did some more frontend work! i made the chessground rank/file responsive: for some reason, the default ones are positioned by pixel offsets and break pretty quickly on smaller screens. some light css max fixes this recolored everything: stock chessground theme is kinda lame made the time slider exponential: I wanted to give a larger time range (previous is 100ms-1000ms), but everything past 1s on the high end makes it really unwieldy to set the time on the low end, where people usually play. i made it exponential, i can expand the top end (3000ms now) without the slider feeling weird. it’s easier to show than explain"}, {"post_id": 65064, "ts": "2026-09-09T22:19:08Z", "hours": 4.8239, "text": "managed to update the website to the new version. It was much easier than I expected, considering the amount of changes I’ve made. new version is better (besides just being stronger) in that I factored the iterative deepening code out, which means the website can have sensible time settings now instead of the stupid “max time per depth” thing it had before. I also implemented IIR (internal iterative reductions). I’ve tried it like 10 times before, but this specific version worked for some reason. +28 elo! engine is now safely better than barbarossa."}, {"post_id": 64248, "ts": "2026-09-08T14:43:59Z", "hours": 0.6486, "text": "2.0 release has been tagged! i set up a dockerfile to make static linux binaries and created a windows github action to make the windows binaries. I also finished the test against the last version of the engine:"}, {"post_id": 63549, "ts": "2026-09-07T13:53:00Z", "hours": 4.9844, "text": "it is done….. i think trout is the strongest haskell engine now (i made the passed pawn bonus tunable per-rank, which added around 20 elo. re-tested some other search stuff but they all kinda sucked) i think i’m going to work on polishing the frontend now, tag a 2.0 release soon."}, {"post_id": 62696, "ts": "2026-09-06T05:49:18Z", "hours": 8.5936, "text": "i’ve been doing some tuner work, it’s not great the old tuner was pretty bad. very janky, repeated code, very hard to read, and sloooowwww…. i optimized it by precomputing the factors for each position so it’s just a bunch of multiplications to get the score. upside: order of magnitude speed improvement. downside: 20+ gb memory…. other problem is that the new tuner’s results are not great. they aren’t horribly bad like some other tests, but the gains aren’t as big as i was expecting. this might be a data quality issue? i might write proper datagen code at some point instead of just relying on the output of SPRT tests. I did get a nice 7 elo from removing floating point ops in eval, so that’s nice i guess. i can smell the goal already. Soon (i would attach a picture of the 20gb but i’m kinda running a sprt right now… maybe next time)"}, {"post_id": 60920, "ts": "2026-09-03T16:06:58Z", "hours": 9.0614, "text": "big gap! some stuff came up and i don’t fully remember what i’ve done since the last devlog. git log tells me i did some minor logic fixes and added SEE pruning in pvs (32 elo), which prunes nodes based on their static exchange evaluation. i do remember that the current version of the engine can beat barbarossa at LTC now. STC it still loses (i.e. my engine scales better… glass half full), but I am now working on eval tuning to hopefully bump the elo up some more. i am now working on this through ssh. negative: lag. positive: there is almost nothing running on my computer aside from the language server. should make testing easier and more predictable"}, {"post_id": 43577, "ts": "2026-08-08T22:09:51Z", "hours": 8.8139, "text": "i’m now within 100 elo of my target, but it’s still not looking great. it seems i have hit another wall. there’s this copypasta around chess programming circles with a rough order of search features to implement, and i’ve tried 3 in a row, none doing much. since last time, i’ve just added two things that have gained elo: history decay tweak (10 elo): after searching a position, decay history by 50% instead of 80%, helps retain memory from previous searches check extensions (23 elo): extend a search by 1 more move if in check. it’s very simple. i’ve since tried IIR (internal iterative reductions), SEE pruning in PVS (more moveloop pruning), and continuation history (like the history heuristic, but More™️). only continuation history has kinda done something, but only when comparing against a version that’s just as slow; when comparing against the original, it’s much closer because for some reason continuation history slows down the search by almost 10% (??????). The main slow-down-er seems to be indexing the continuation history array, which is absolutely baffling to me. i’ve even tried to start reading the GHC Core again, until i remembered why it was so painful last time."}, {"post_id": 41607, "ts": "2026-08-05T22:20:00Z", "hours": 8.6608, "text": "a lot of changes in this batch, but not all of them were for strength. here’s a quick runthrough of the elo-affecting changes: add improving heuristic to rfp (prune more nodes while improving) add staticEval >= beta guard to nmp (restrict the usage of null move pruning to moves that already seem good from static eval) futility pruning (very similar to reverse futility pruning - removes quiet moves when static eval is pretty far below alpha) tempo bonus (side to move gets a bonus to eval for having tempo) add quiescence search results to transposition table (i had this in the old version but i guess i forgot to port it over until now) soft time bounds in search (instead of searching for as long as possible and nuking the search thread mid-search, stop iterative deepening if it looks like the next node will take too long) to fix this, i moved the timing-out logic inside the search function, which is what most engines do. I didn’t do this earlier because 1. it’s marginally harder and 2. it would require making the search functions IO instead of ST. ST is escapable, so it’s more pure, so this was kinda a bummer to do, but i didn’t see any way to get around this. here’s a graph i made while i was looking at aspiration windows more. it shows the average centipawn change between successive depths of search. the current aspiration window implementation assumes that depth and avg cp change is inversely related, but it doesn’t look like this is true. (what is the hump doing??) I tried a couple of aspiration window implementations that don’t make this assumption but didn’t get anything huge. I’ll probably replace it at some point."}, {"post_id": 39895, "ts": "2026-08-03T05:39:33Z", "hours": 5.7494, "text": "the engine is finally in the strongest state it’s ever been! (i think) for those who have not been obsessively following this project, the search part of the engine has gone through two rewrites now. i kept hitting walls where i really shouldn’t have; improvements that should have been huge gains did a lot less than expected. i did the rewrites in an attempt to find a potential bug that would kill future attempts at improvements, but i never really found anything significant. i never really got the engine to it’s pre-rewrites strength until now. read it and weep (~17 elo gain) -------------------------------------------------- Results of trout-exe-max vs trout-exe-asp-tweak (8+0.08, NULL, 16.000000MB, UHO_Lichess_4852_v1.epd): Elo: -16.96 +/- 14.18, nElo: -22.54 +/- 18.80 LOS: 0.94 %, DrawRatio: 33.99 %, PairsRatio: 0.82 Games: 1312, Wins: 380, Losses: 444, Draws: 488, Points: 624.0 (47.56 %) Ptnml(0-2): [63, 175, 223, 153, 42], WL/DD Ratio: 1.79 LLR: -2.98 (-101.3%) (-2.94, 2.94) [0.00, 10.00] -------------------------------------------------- it’s still not super great because elo improvements are coming slooowww and we’re still only 17 elo up with many more features than before. it’s still nice, though. implemented since last devlog: “improving” heuristic (13 elo): a position is said to be “improving” if the static evaluation now is higher than the one from a move ago. we can use this to tweak some parameters in the search, like when to cut off for LMP, which is what i did. need more testing for the other features. lmr limit (16 elo): my LMR implementation was slightly bugged and would reduce too many moves; normally the first couple are spared, but i had every move except the first reduced. negative captures below quiet moves (13 elo): for some reason, i had captures that were deemed negative by SEE (bad captures, basically - trading a queen for a pawn would be one) sorted above all quiet moves. i moved them to the bottom of move sorting. redo aspiration windows (36 elo): i redid the implementation for aspiration windows slightly. it should be smarter about bounds now. that makes around 100 elo for aspiration windows cumulatively now, which is kinda crazy here’s a picture of htop when i was running the engines against each othe for elo testing. i thought it was kinda funny"}, {"post_id": 38604, "ts": "2026-08-01T02:40:06Z", "hours": 8.2208, "text": "oh no, 8 hours i need to devlog more holy moly from last devlog, i kinda found a solution to the fail-soft problem? Most engine’s LMR implementations will re-search twice if the previous search went over alpha (lower bound). The first search has reduced depth AND a null-window around alpha (search window of 1 centipawn; searches faster, but can only tell the direction of the true search result); if this is over alpha, it’ll re-search with full depth; if this is again over alpha, it’ll re-search with full depth and full bounds. My engine was skipping the middle step and jumping from reduced depth + null window -> full depth + full bounds. Apparently this is an accepted method and it was working fine compared to the other version, EXCEPT once I switched to fail-soft on beta. in other news, I added: aspiration windows (75 elo): the initial search is normally unbounded, but aspiration windows try to clamp the search around a “guess” based on the previous depth of iterative deepening, and widen if it fails high or low. it did almost nothing before, and randomly became really good. don’t ask me why. razoring (22 elo): prunes a node if quiescence search says it’s too far below alpha. I already had it in a previous version and brought it over to the search rewrite. pretty simple, smallish elo boost. late move pruning (39 elo): prunes the latter part of move list; moves are sorted by how good they’re predicted to be, so latter moves are usually pretty garbage fixes (23 elo): small logic changes to LMR and LMP. don’t know how they didn’t lose more elo, the LMR bug was kinda bad. separate PV tracking: the PV (principal variation, the best moves for each player as calculated by the engine) was previously tracked by the transposition table, but that meant i didn’t have a lot of flexibility with the replacement strategy for the table, lest it wipe an important PV entry. tracking it separately lets me fiddle with the replacement strategy more, although I haven’t actually found one better than what I have now here’s a graph generated from a google sheet with 100k rows (!?). it’s a histogram of every time a move was marked as “currently the best”, indexed by entry. ideally, it’d be all 0, meaning the best move was searched first every time, meaning there was basically no wasted effort."}, {"post_id": 37391, "ts": "2026-07-30T02:23:34Z", "hours": 6.5078, "text": "6.5 hours? oh man i was right, nmp only gained like 30 elo, gained much much more before. i tried to hunt down anything weird but i had to leave it at that. i also implemented pruning in quiescence search, so the engine only searches moves that have a positive static exchange evaluation (essentially, the result of all trades on a particular square). i also accidentally found out my engine was doing fail-hard on beta cutoffs instead of fail-soft! in a fail-soft framework, the search is allowed to return outside of the bounds set by the alpha and beta parameters (it’s hard to explain succinctly here and i don’t want to keep doing it, search up alpha-beta search if you’re interested). thus, alpha and beta are soft bounds. this means each search returns more information about the move score. i successfully did fail-soft on the alpha (lower bound) side, but not on the beta side due to what i can only assume is a coding mistake. the problem is, when switching to fail-soft on beta, the engine lost like 30 elo! i bisected the change to the LMR (late move reductions) patch, but still have no idea why LMR doesn’t play nice with fail-soft beta. i’m kinda at the end of my rope here, i might just have to eat the elo loss…"}, {"post_id": 36088, "ts": "2026-07-27T23:22:04Z", "hours": 5.5464, "text": "I finally got RFP to gain! but it might not be as good as it seems… ive been struggling to get rfp, a pretty basic improvement, to actually do anything, and redid everything search step-by-step to make sure i didn’t do anything wrong. so far, i’ve added back SEE move ordering, butterfly heuristic, PVS, transposition table move ordering, and RFP. however, i don’t think this actually fixes my problem; the code is largely the same aside from some parameter changes, so my theory is that rfp is only working now because i added everything back in a different order, and now i might struggle with adding back different features that aren’t gaining anymore. i’m currently testing null move pruning (based on the null move observation: doing something is basically always better than doing nothing), and it’s not doing as much as it used to… disturbing"}, {"post_id": 35484, "ts": "2026-07-26T23:08:41Z", "hours": 1.4153, "text": "ive nuked it…. i kept fighting rfp and talking with other people about this. apparently, rfp is one of the easiest gainers (something that gains elo/strength), and usually gains a lot, but again, nothing. i ran an overnight test of like 5000 games and the rfp version manages to LOSE 8 elo, where other people have gained 80. i’m gonna try to restart search again, but basically fully. i don’t know if this will actually do anything, but i don’t see many other choices…"}, {"post_id": 34984, "ts": "2026-07-26T03:58:38Z", "hours": 6.8525, "text": "i’ve reentered the nightmare when i last left off this project in ~september, I basically hit a wall with optimizations. I had a crapload of pruning and whatnot, but the elo of the engine didn’t really reflect it. I then did a search rewrite but got stuck on RFP (reverse futility pruning), which is supposed to gain a lot of strength but did basically nothing for me. brief (??) aside: reverse futility pruning, in simple terms, checks if the static evaluation (evaluation without searching moves) is above beta (if a move scores above beta, it’s “too good,” and the opponent won’t allow that position to happen in the first place) by some margin. if it is, it’ll return without searching any moves, because it’s not likely that the player can lose that much material/positional advantage in whatever depth is left to search. anyway, i’m still stuck on this. I’ve re-reimplemented half the search to recheck its correctness, because correctness issues can sometimes stuff new optimizations, but it seems to be all good. RFP still doesn’t do jack. i don’t really know where to go from here. I could just ignore it, but the fact that RFP doesn’t do anything (for reference, another engine dev i talked to got like 80 elo out of RFP, which is insane) is a troubling sign and might mean something else is wrong."}, {"post_id": 34363, "ts": "2026-07-25T00:30:18Z", "hours": 3.7367, "text": "hello! trout again. i’m gonna try to get this to #1 haskell engine, but it’s been such a pain… after summer of making I did some more work on this, but hit a wall where all my changes either did nothing or gained like 10elo (which is not enough for the hundreds i need). I tried rewriting part of search but hit a wall again with the same problem, on features that should have made improvements! i’ve been fighting with the search some more trying to get reverse futility pruning to do something meaningful. in someone else’s engine, it gained i think 80+ elo in total (!!!), which is bonkers compared to the 20 or something i get on a good day. it’s not a good day, so RFP actually manages to lose elo here. i might have to rewrite search again. i don’t know how much of this is just wrong. (here’s the commented out old search)"}]...
|
Title: trout by @nosrep | Stardance
Devlogs:
hell Title: trout by @nosrep | Stardance
Devlogs:
hello! trout again. i’m gonna try to get this to #1 haskell engine, but it’s been such a pain… after summer of making I did some more work on this, but hit a wall where all my changes either did nothing or gained like 10elo (which is not enough for the hundreds i need). I tried rewriting part of search but hit a wall again with the same problem, on features that should have made improvements! i’ve been fighting with the search some more trying to get reverse futility pruning to do something meaningful. in someone else’s engine, it gained i think 80+ elo in total (!!!), which is bonkers compared to the 20 or something i get on a good day. it’s not a good day, so RFP actually manages to lose elo here. i might have to rewrite search again. i don’t know how much of this is just wrong. (here’s the commented out old search)
i’ve reentered the nightmare when i last left off this project in ~september, I basically hit a wall with optimizations. I had a crapload of pruning and whatnot, but the elo of the engine didn’t really reflect it. I then did a search rewrite but got stuck on RFP (reverse futility pruning), which is supposed to gain a lot of strength but did basically nothing for me. brief (??) aside: reverse futility pruning, in simple terms, checks if the static evaluation (evaluation without searching moves) is above beta (if a move scores above beta, it’s “too good,” and the opponent won’t allow that position to happen in the first place) by some margin. if it is, it’ll return without searching any moves, because it’s not likely that the player can lose that much material/positional advantage in whatever depth is left to search. anyway, i’m still stuck on this. I’ve re-reimplemented half the search to recheck its correctness, because correctness issues can sometimes stuff new optimizations, but it seems to be all good. RFP still doesn’t do jack. i don’t really know where to go from here. I could just ignore it, but the fact that RFP doesn’t do anything (for reference, another engine dev i talked to got like 80 elo out of RFP, which is insane) is a troubling sign and might mean something else is wrong.
ive nuked it…. i kept fighting rfp and talking with other people about this. apparently, rfp is one of the easiest gainers (something that gains elo/strength), and usually gains a lot, but again, nothing. i ran an overnight test of like 5000 games and the rfp version manages to LOSE 8 elo, where other people have gained 80. i’m gonna try to restart search again, but basically fully. i don’t know if this will actually do anything, but i don’t see many other choices…
I finally got RFP to gain! but it might not be as good as it seems… ive been struggling to get rfp, a pretty basic improvement, to actually do anything, and redid everything search step-by-step to make sure i didn’t do anything wrong. so far, i’ve added back SEE move ordering, butterfly heuristic, PVS, transposition table move ordering, and RFP. however, i don’t think this actually fixes my problem; the code is largely the same aside from some parameter changes, so my theory is that rfp is only working now because i added everything back in a different order, and now i might struggle with adding back different features that aren’t gaining anymore. i’m currently testing null move pruning (based on the null move observation: doing something is basically always better than doing nothing), and it’s not doing as much as it used to… disturbing
6.5 hours? oh man i was right, nmp only gained like 30 elo, gained much much more before. i tried to hunt down anything weird but i had to leave it at that. i also implemented pruning in quiescence search, so the engine only searches moves that have a positive static exchange evaluation (essentially, the result of all trades on a particular square). i also accidentally found out my engine was doing fail-hard on beta cutoffs instead of fail-soft! in a fail-soft framework, the search is allowed to return outside of the bounds set by the alpha and beta parameters (it’s hard to explain succinctly here and i don’t want to keep doing it, search up alpha-beta search if you’re interested). thus, alpha and beta are soft bounds. this means each search returns more information about the move score. i successfully did fail-soft on the alpha (lower bound) side, but not on the beta side due to what i can only assume is a coding mistake. the problem is, when switching to fail-soft on beta, the engine lost like 30 elo! i bisected the change to the LMR (late move reductions) patch, but still have no idea why LMR doesn’t play nice with fail-soft beta. i’m kinda at the end of my rope here, i might just have to eat the elo loss…
oh no, 8 hours i need to devlog more holy moly from last devlog, i kinda found a solution to the fail-soft problem? Most engine’s LMR implementations will re-search twice if the previous search went over alpha (lower bound). The first search has reduced depth AND a null-window around alpha (search window of 1 centipawn; searches faster, but can only tell the direction of the true search result); if this is over alpha, it’ll re-search with full depth; if this is again over alpha, it’ll re-search with full depth and full bounds. My engine was skipping the middle step and jumping from reduced depth + null window -> full depth + full bounds. Apparently this is an accepted method and it was working fine compared to the other version, EXCEPT once I switched to fail-soft on beta. in other news, I added: aspiration windows (75 elo): the initial search is normally unbounded, but aspiration windows try to clamp the search around a “guess” based on the previous depth of iterative deepening, and widen if it fails high or low. it did almost nothing before, and randomly became really good. don’t ask me why. razoring (22 elo): prunes a node if quiescence search says it’s too far below alpha. I already had it in a previous version and brought it over to the search rewrite. pretty simple, smallish elo boost. late move pruning (39 elo): prunes the latter part of move list; moves are sorted by how good they’re predicted to be, so latter moves are usually pretty garbage fixes (23 elo): small logic changes to LMR and LMP. don’t know how they didn’t lose more elo, the LMR bug was kinda bad. separate PV tracking: the PV (principal variation, the best moves for each player as calculated by the engine) was previously tracked by the transposition table, but that meant i didn’t have a lot of flexibility with the replacement strategy for the table, lest it wipe an important PV entry. tracking it separately lets me fiddle with the replacement strategy more, although I haven’t actually found one better than what I have now here’s a graph generated from a google sheet with 100k rows (!?). it’s a histogram of every time a move was marked as “currently the best”, indexed by entry. ideally, it’d be all 0, meaning the best move was searched first every time, meaning there was basically no wasted effort.
the engine is finally in the strongest state it’s ever been! (i think) for those who have not been obsessively following this project, the search part of the engine has gone through two rewrites now. i kept hitting walls where i really shouldn’t have; improvements that should have been huge gains did a lot less than expected. i did the rewrites in an attempt to find a potential bug that would kill future attempts at improvements, but i never really found anything significant. i never really got the engine to it’s pre-rewrites strength until now. read it and weep (~17 elo gain) -------------------------------------------------- Results of trout-exe-max vs trout-exe-asp-tweak (8+0.08, NULL, 16.000000MB, UHO_Lichess_4852_v1.epd): Elo: -16.96 +/- 14.18, nElo: -22.54 +/- 18.80 LOS: 0.94 %, DrawRatio: 33.99 %, PairsRatio: 0.82 Games: 1312, Wins: 380, Losses: 444, Draws: 488, Points: 624.0 (47.56 %) Ptnml(0-2): [63, 175, 223, 153, 42], WL/DD Ratio: 1.79 LLR: -2.98 (-101.3%) (-2.94, 2.94) [0.00, 10.00] -------------------------------------------------- it’s still not super great because elo improvements are coming slooowww and we’re still only 17 elo up with many more features than before. it’s still nice, though. implemented since last devlog: “improving” heuristic (13 elo): a position is said to be “improving” if the static evaluation now is higher than the one from a move ago. we can use this to tweak some parameters in the search, like when to cut off for LMP, which is what i did. need more testing for the other features. lmr limit (16 elo): my LMR implementation was slightly bugged and would reduce too many moves; normally the first couple are spared, but i had every move except the first reduced. negative captures below quiet moves (13 elo): for some reason, i had captures that were deemed negative by SEE (bad captures, basically - trading a queen for a pawn would be one) sorted above all quiet moves. i moved them to the bottom of move sorting. redo aspiration windows (36 elo): i redid the implementation for aspiration windows slightly. it should be smarter about bounds now. that makes around 100 elo for aspiration windows cumulatively now, which is kinda crazy here’s a picture of htop when i was running the engines against each othe for elo testing. i thought it was kinda funny
a lot of changes in this batch, but not all of them were for strength. here’s a quick runthrough of the elo-affecting changes: add improving heuristic to rfp (prune more nodes while improving) add staticEval >= beta guard to nmp (restrict the usage of null move pruning to moves that already seem good from static eval) futility pruning (very similar to reverse futility pruning - removes quiet moves when static eval is pretty far below alpha) tempo bonus (side to move gets a bonus to eval for having tempo) add quiescence search results to transposition table (i had this in the old version but i guess i forgot to port it over until now) soft time bounds in search (instead of searching for as long as possible and nuking the search thread mid-search, stop iterative deepening if it looks like the next node will take too long) to fix this, i moved the timing-out logic inside the search function, which is what most engines do. I didn’t do this earlier because 1. it’s marginally harder and 2. it would require making the search functions IO instead of ST. ST is escapable, so it’s more pure, so this was kinda a bummer to do, but i didn’t see any way to get around this. here’s a graph i made while i was looking at aspiration windows more. it shows the average centipawn change between successive depths of search. the current aspiration window implementation assumes that depth and avg cp change is inversely related, but it doesn’t look like this is true. (what is the hump doing??) I tried a couple of aspiration window implementations that don’t make this assumption but didn’t get anything huge. I’ll probably replace it at some point.
i’m now within 100 elo of my target, but it’s still not looking great. it seems i have hit another wall. there’s this copypasta around chess programming circles with a rough order of search features to implement, and i’ve tried 3 in a row, none doing much. since last time, i’ve just added two things that have gained elo: history decay tweak (10 elo): after searching a position, decay history by 50% instead of 80%, helps retain memory from previous searches check extensions (23 elo): extend a search by 1 more move if in check. it’s very simple. i’ve since tried IIR (internal iterative reductions), SEE pruning in PVS (more moveloop pruning), and continuation history (like the history heuristic, but More™️). only continuation history has kinda done something, but only when comparing against a version that’s just as slow; when comparing against the original, it’s much closer because for some reason continuation history slows down the search by almost 10% (??????). The main slow-down-er seems to be indexing the continuation history array, which is absolutely baffling to me. i’ve even tried to start reading the GHC Core again, until i remembered why it was so painful last time.
big gap! some stuff came up and i don’t fully remember what i’ve done since the last devlog. git log tells me i did some minor logic fixes and added SEE pruning in pvs (32 elo), which prunes nodes based on their static exchange evaluation. i do remember that the current version of the engine can beat barbarossa at LTC now. STC it still loses (i.e. my engine scales better… glass half full), but I am now working on eval tuning to hopefully bump the elo up some more. i am now working on this through ssh. negative: lag. positive: there is almost nothing running on my computer aside from the language server. should make testing easier and more predictable
i’ve been doing some tuner work, it’s not great the old tuner was pretty bad. very janky, repeated code, very hard to read, and sloooowwww…. i optimized it by precomputing the factors for each position so it’s just a bunch of multiplications to get the score. upside: order of magnitude speed improvement. downside: 20+ gb memory…. other problem is that the new tuner’s results are not great. they aren’t horribly bad like some other tests, but the gains aren’t as big as i was expecting. this might be a data quality issue? i might write proper datagen code at some point instead of just relying on the output of SPRT tests. I did get a nice 7 elo from removing floating point ops in eval, so that’s nice i guess. i can smell the goal already. Soon (i would attach a picture of the 20gb but i’m kinda running a sprt right now… maybe next time)
it is done….. i think trout is the strongest haskell engine now (i made the passed pawn bonus tunable per-rank, which added around 20 elo. re-tested some other search stuff but they all kinda sucked) i think i’m going to work on polishing the frontend now, tag a 2.0 release soon.
2.0 release has been tagged! i set up a dockerfile to make static linux binaries and created a windows github action to make the windows binaries. I also finished the test against the last version of the engine:
managed to update the website to the new version. It was much easier than I expected, considering the amount of changes I’ve made. new version is better (besides just being stronger) in that I factored the iterative deepening code out, which means the website can have sensible time settings now instead of the stupid “max time per depth” thing it had before. I also implemented IIR (internal iterative reductions). I’ve tried it like 10 times before, but this specific version worked for some reason. +28 elo! engine is now safely better than barbarossa.
I did some more frontend work! i made the chessground rank/file responsive: for some reason, the default ones are positioned by pixel offsets and break pretty quickly on smaller screens. some light css max fixes this recolored everything: stock chessground theme is kinda lame made the time slider exponential: I wanted to give a larger time range (previous is 100ms-1000ms), but everything past 1s on the high end makes it really unwieldy to set the time on the low end, where people usually play. i made it exponential, i can expand the top end (3000ms now) without the slider feeling weird. it’s easier to show than explain
Ships:
welcome to trout v2! the goal of this period was to upgrade trout v1 to finally become the strongest chess engine written in haskell (it’s a cool title, ok). i believe it is done, and trout now beats the previous #1, barbarossa. writing a chess engine in haskell is hard and annoying and probably a not good use of my time, but i am stubborn and not very bright so here we are. writing a chess engine is also very annoying in general, involving thousands of hours of cpu time to test changes. everyone say thank you to my poor i7 10700k together with the +300elo (!!!) strength improvement over v1, i also corrected the engine’s time management (no more timing out in chess GUIs) and cleaned up the web interface. to play the engine, you have three options: the demo link: this has the web interface for trout. it’s the original engine compiled down to WASM with a nice ui on top. lichess bot: you can find the lichess bot link at the bottom of the demo website, @TroutBot . it’s running on an oracle free tier server and can only play two games simultaneously; if challenging it hangs, it’s probably playing 2 already. locally: if you want troutbot at peak performance, you can download a chess GUI like En Croissant or Arena, and configure the trout binary (on github releases) in the GUI. trout speaks the standard UCI protocol....
|
1793005026.9363291
|
1793091426.9363291
|
|
68227
|
true-odessey by @chitranshrastogi94 | Stardance
|
chitranshrastogi94
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: true-odessey by @chitranshrastogi94 | Stard Title: true-odessey by @chitranshrastogi94 | Stardance...
|
1792471733.249364
|
1793076533.249364
|
|
59032
|
trum by @HANO | Stardance
|
HANO
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: trum by @HANO | Stardance
|
1792778105.3388138
|
1793382905.3388138
|