|
10142
|
leefy's personal site by @leefymoon | Stardanc leefy's personal site by @leefymoon | Stardance...
|
leefymoon
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-27T13:51:11Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i continued the making of my personal site! a few challenging things were finding features to add, how to design pages, and what to write blogs on! but through three years of having this site i’ve enjoyed making it. :]", "repo": "https://git.leefymoons-room.net/leefy/leefymoons-room", "demo": "https://leefymoons-room.net"}]...
|
[{"post_id": 35797, "ts": "202 [{"post_id": 35797, "ts": "2026-07-27T13:46:28Z", "hours": 1.1017, "text": "made a readme! go check it out if you so please ^^"}, {"post_id": 3813, "ts": "2026-06-06T21:20:12Z", "hours": 0.4611, "text": "made a new blog post! (after two months lol) https://leefymoons-room.net/blog.html#7"}]...
|
Title: leefy's personal site by @leefymoon | S Title: leefy's personal site by @leefymoon | Stardance
Devlogs:
made a new blog post! (after two months lol) https://leefymoons-room.net/blog.html#7
made a readme! go check it out if you so please ^^
Ships:
i continued the making of my personal site! a few challenging things were finding features to add, how to design pages, and what to write blogs on! but through three years of having this site i’ve enjoyed making it. :]...
|
1793602495.3629391
|
1793688895.3629391
|
|
10177
|
leefyBot by @leefymoon | Stardance
|
leefymoon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: leefyBot by @leefymoon | Stardance
|
1793512498.1069598
|
1794117298.1069598
|
|
24514
|
leethanaOS by @leethana | Stardance
|
leethana
|
0
|
4.28
|
0
|
[]
|
[{"post_id": 19790, "ts": "202 [{"post_id": 19790, "ts": "2026-07-01T05:31:45Z", "hours": 0.5161, "text": "Added more school stuff"}, {"post_id": 14258, "ts": "2026-06-23T09:02:01Z", "hours": 0.8956, "text": "Added curl command and a proxy server!"}, {"post_id": 14240, "ts": "2026-06-23T07:56:03Z", "hours": 2.865, "text": "Made the file system store file contents as blobs instead of plain text to allow for the storage of multiple data types. Also added the ‘upload’ command which lets the user upload a file from the real file system to the virtual file system. TurtPDF can now open PDFs from the virtual file system too."}]...
|
Title: leethanaOS by @leethana | Stardance
Devlog Title: leethanaOS by @leethana | Stardance
Devlogs:
Made the file system store file contents as blobs instead of plain text to allow for the storage of multiple data types. Also added the ‘upload’ command which lets the user upload a file from the real file system to the virtual file system. TurtPDF can now open PDFs from the virtual file system too.
Added curl command and a proxy server!
Added more school stuff...
|
1793303335.5452929
|
1793908135.5452929
|
|
40892
|
legacysignal by @simonproyt | Stardance
|
simonproyt
|
1
|
50.0
|
933
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T20:18:52Z", "hours": 50.0, "multiplier": 18.54, "payout": 933, "blessing": "neutral", "text": "So i taught this project was going to be easy like creating the tidal client for legacy devices but like i was so naive and didnt yet understand how hard it is going to be but it was good in the end i think because i learned a lot about the signal protocol encryption and about backporting and how to make legacy android do things that it was never intended to do but the project is still not finished and i have a lot of work ahead if i want make the app feature complete to the normal signal mobile app but i think its a great demo and it was a great learning experience", "repo": "https://github.com/simonproyt/legacysignal", "demo": "https://cdn.hackclub.com/01a02af7-c370-7c8f-b806-6ca92696e8a8/demo.mp4"}]...
|
[{"post_id": 52604, "ts": "202 [{"post_id": 52604, "ts": "2026-08-22T20:11:21Z", "hours": 3.6061, "text": "Devlog 11: Fixing a few bugs and getting the app ready to ship So in this time i havent done a lot of like cool stuff rather i was fixing a few bugs that broke the messaging feature and image attachment loading because i wanted to showcase those in my demo video and i fixed the github action so ppl can download an apk for the latest version if they want to try it out on their own legacy device also sorry for not writing a dev log sooner i was kinda busy but now i finally got the time to get the project into a ready to ship state"}, {"post_id": 49850, "ts": "2026-08-18T20:00:49Z", "hours": 4.1261, "text": "Devlog 10: Finally added image sending/receiving support So the next thing i taught i would add to my app is image sending and receiving support because that is like kinda a basic feature that any messaging app needs so i added image reviving sending images from the phones storage and via taking a picture with the camera adding these was kinda annoying with figuring out all the correct endpoints and stuff but i think it was worth it in the end"}, {"post_id": 48433, "ts": "2026-08-16T19:38:19Z", "hours": 2.5408, "text": "Devlog 9: New features and a bit of an ui overhaul So I decided to make the ui a bit more pretty and a few new features So this is what i added: a new cleaner ui contact profile picture support message time stamping in the ui dark theme and theme switcher with persistence these are just like qol improvements that i decided to add into the app nothing special but like i missed a few features like the dark theme myself so nothing major but i hope these changes makes the app more usable to ppl"}, {"post_id": 46921, "ts": "2026-08-14T13:57:31Z", "hours": 4.015, "text": "Devlog 8 Working name syncing So after a lot of work i finally made it work so it can show the name that you entered on the signal set up or the devices not just the phone numbers or just unknown sender or just the user id on my app so i guess another feature added now but i still want to add a few stuff before shipping"}, {"post_id": 45824, "ts": "2026-08-12T15:33:59Z", "hours": 6.4758, "text": "Devlog 7: Partly finally working message send/receive So after a lot of work i finally managed to get message sending and receiving working with all of their related crypto stuff but its kinda broken because our message sending api does not support sealed sender yet only the old legacy unsealed sender api that does not encrypt the sender data like modern signal does so on all of the replies it says that they came from unknown contact rather then the actual contact so im working on implementing that so the current stage of the project is after 3x hours of development is Whats working: registering onto the signal network via the phone number and the captchas receiving messages Whats not working or only partially working: sending messages (not working fully because the sealed sender stuff that i talked about previously)"}, {"post_id": 44528, "ts": "2026-08-10T10:59:03Z", "hours": 3.4514, "text": "Devlog 6 Discoverability finally works So after a lot of pain and trial and error and using the signal android source code as an some sort of example that how does the protocol work now we have a finally working code and i can finally move onto the message encryption/decryption part and make it work"}, {"post_id": 43257, "ts": "2026-08-08T12:38:55Z", "hours": 3.6764, "text": "Debugging hell pt2 sorry guys i have been on vacation and taking a bit of a break from the project because of it but now its back in active development now but sadly after fixing registration there is another problem my phone with the latest signal client sadly cant find my client says that its not registered some why even tho it successfully registers so im working trying to fix that possibly and make this project work finally"}, {"post_id": 39975, "ts": "2026-08-03T10:03:07Z", "hours": 6.6417, "text": "Devlog 4: Finally working registration So after like 15 hours of continuous work and debugging i can finally now say that the registration and connection to the signal network is finally working now and i can finally move onto actually making the app itself rather then just having to do trial and error debugging with libsignal and the protocol also while i was testing the app i made a working ci pipeline so the app could be actually downloaded by other ppl now that took a few attempts because of the setting up of the rust toolchains stuff and the android ndk setup part having a few bugs but that is working too now"}, {"post_id": 38718, "ts": "2026-08-01T08:23:46Z", "hours": 9.9889, "text": "Devlog 3: Stuck in debuging hell I’m sorry yall that i didnt make any devlogs about this but i taught this was kinda boring and nothing to write about but after last devlog i found out that the my registration api wasnt fully finished and i needed to generate more keys after the user enters the code from the sms and the registration itself starts but for that we needed to use signals cryptography lib called libsignal so i tried that but the latest version of libsignal had a newer type of elf hash that android 4.x didnt support so i tried using an older version of libsignal but that still didnt work cause it used a few instructions that newer android versions introduced so i tried binary patching in the missing instructions but that still didnt work so i decided the only viable solution was to fork libsignal to try to manually backport everything and thats where im stuck now in debugging hell trying to manually backport and replace the api calls that it uses with the older android versions and its been like 9 hours of trying to do this and still nothing so im kinda tired trying to do this but im wishing that i will finally fix everything and could move onto making that actual app itself rather then then trying to make libsignal work Thank you for reading this super long devlog!"}, {"post_id": 36915, "ts": "2026-07-29T09:58:25Z", "hours": 1.3386, "text": "Devlog 2 Polishing the ui and adding more underlying stuff that we will need in the future so So in this we added to two big changes First is the completely reworked set up it to make it a little bit more pretty and polished looking And the other one is its a more of an underlying change but a well needed one because in the previous demos it stored the key pairs in plain text and stuff so that is obviously super dangerous in a secure messaging context so it will now let you encrypt it via a pin you set in the account creation like in the real signal"}, {"post_id": 36867, "ts": "2026-07-29T06:42:19Z", "hours": 4.4753, "text": "First devlog for this new project So i taught that i made tidal for legacy android and it was pretty easy this is going to be easy like that but how naive was i am like getting even the signal sms registration almost took 4 hours of debugging mainly so this is going to be hard but i will try because it will be worth it in the end"}]...
|
Title: legacysignal by @simonproyt | Stardance
De Title: legacysignal by @simonproyt | Stardance
Devlogs:
First devlog for this new project So i taught that i made tidal for legacy android and it was pretty easy this is going to be easy like that but how naive was i am like getting even the signal sms registration almost took 4 hours of debugging mainly so this is going to be hard but i will try because it will be worth it in the end
Devlog 2 Polishing the ui and adding more underlying stuff that we will need in the future so So in this we added to two big changes First is the completely reworked set up it to make it a little bit more pretty and polished looking And the other one is its a more of an underlying change but a well needed one because in the previous demos it stored the key pairs in plain text and stuff so that is obviously super dangerous in a secure messaging context so it will now let you encrypt it via a pin you set in the account creation like in the real signal
Devlog 3: Stuck in debuging hell I’m sorry yall that i didnt make any devlogs about this but i taught this was kinda boring and nothing to write about but after last devlog i found out that the my registration api wasnt fully finished and i needed to generate more keys after the user enters the code from the sms and the registration itself starts but for that we needed to use signals cryptography lib called libsignal so i tried that but the latest version of libsignal had a newer type of elf hash that android 4.x didnt support so i tried using an older version of libsignal but that still didnt work cause it used a few instructions that newer android versions introduced so i tried binary patching in the missing instructions but that still didnt work so i decided the only viable solution was to fork libsignal to try to manually backport everything and thats where im stuck now in debugging hell trying to manually backport and replace the api calls that it uses with the older android versions and its been like 9 hours of trying to do this and still nothing so im kinda tired trying to do this but im wishing that i will finally fix everything and could move onto making that actual app itself rather then then trying to make libsignal work Thank you for reading this super long devlog!
Devlog 4: Finally working registration So after like 15 hours of continuous work and debugging i can finally now say that the registration and connection to the signal network is finally working now and i can finally move onto actually making the app itself rather then just having to do trial and error debugging with libsignal and the protocol also while i was testing the app i made a working ci pipeline so the app could be actually downloaded by other ppl now that took a few attempts because of the setting up of the rust toolchains stuff and the android ndk setup part having a few bugs but that is working too now
Debugging hell pt2 sorry guys i have been on vacation and taking a bit of a break from the project because of it but now its back in active development now but sadly after fixing registration there is another problem my phone with the latest signal client sadly cant find my client says that its not registered some why even tho it successfully registers so im working trying to fix that possibly and make this project work finally
Devlog 6 Discoverability finally works So after a lot of pain and trial and error and using the signal android source code as an some sort of example that how does the protocol work now we have a finally working code and i can finally move onto the message encryption/decryption part and make it work
Devlog 7: Partly finally working message send/receive So after a lot of work i finally managed to get message sending and receiving working with all of their related crypto stuff but its kinda broken because our message sending api does not support sealed sender yet only the old legacy unsealed sender api that does not encrypt the sender data like modern signal does so on all of the replies it says that they came from unknown contact rather then the actual contact so im working on implementing that so the current stage of the project is after 3x hours of development is Whats working: registering onto the signal network via the phone number and the captchas receiving messages Whats not working or only partially working: sending messages (not working fully because the sealed sender stuff that i talked about previously)
Devlog 8 Working name syncing So after a lot of work i finally made it work so it can show the name that you entered on the signal set up or the devices not just the phone numbers or just unknown sender or just the user id on my app so i guess another feature added now but i still want to add a few stuff before shipping
Devlog 9: New features and a bit of an ui overhaul So I decided to make the ui a bit more pretty and a few new features So this is what i added: a new cleaner ui contact profile picture support message time stamping in the ui dark theme and theme switcher with persistence these are just like qol improvements that i decided to add into the app nothing special but like i missed a few features like the dark theme myself so nothing major but i hope these changes makes the app more usable to ppl
Devlog 10: Finally added image sending/receiving support So the next thing i taught i would add to my app is image sending and receiving support because that is like kinda a basic feature that any messaging app needs so i added image reviving sending images from the phones storage and via taking a picture with the camera adding these was kinda annoying with figuring out all the correct endpoints and stuff but i think it was worth it in the end
Devlog 11: Fixing a few bugs and getting the app ready to ship So in this time i havent done a lot of like cool stuff rather i was fixing a few bugs that broke the messaging feature and image attachment loading because i wanted to showcase those in my demo video and i fixed the github action so ppl can download an apk for the latest version if they want to try it out on their own legacy device also sorry for not writing a dev log sooner i was kinda busy but now i finally got the time to get the project into a ready to ship state
Ships:
So i taught this project was going to be easy like creating the tidal client for legacy devices but like i was so naive and didnt yet understand how hard it is going to be but it was good in the end i think because i learned a lot about the signal protocol encryption and about backporting and how to make legacy android do things that it was never intended to do but the project is still not finished and i have a lot of work ahead if i want make the app feature complete to the normal signal mobile app but i think its a great demo and it was a great learning experience...
|
1793620342.1502535
|
1793706742.1502535
|
|
10947
|
legacytide by @simonproyt | Stardance
|
simonproyt
|
1
|
3.2
|
7
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-07T19:54:49Z", "hours": 2.0, "multiplier": 3.47, "payout": 7, "blessing": "neutral", "text": "I made a tidal client for legacy android devices. It was hard because old android and by extension blackberry 10 do not support modern tls libraries and they need to be backported.", "repo": "https://github.com/simonproyt/legacytide", "demo": "https://user-cdn.hackclub-assets.com/019f2493-4118-7486-9d28-6df0569ba19e/PXL_20260607_154311711%20(1).mp4"}]...
|
[{"post_id": 4948, "ts": "2026 [{"post_id": 4948, "ts": "2026-06-08T16:06:20Z", "hours": 0.9003, "text": "We added a download queue system to the app for better dl management"}, {"post_id": 4522, "ts": "2026-06-07T21:14:29Z", "hours": 0.2953, "text": "I added the queue system now and moved on to adding offline playback support"}, {"post_id": 4465, "ts": "2026-06-07T19:51:49Z", "hours": 1.7022, "text": "We managed to make playback home screen and most of the other stuff hooked up"}, {"post_id": 4191, "ts": "2026-06-07T12:40:45Z", "hours": 0.3592, "text": "I got TLS 1.3 finally working on android 4.3"}]...
|
Title: legacytide by @simonproyt | Stardance
Devl Title: legacytide by @simonproyt | Stardance
Devlogs:
I got TLS 1.3 finally working on android 4.3
We managed to make playback home screen and most of the other stuff hooked up
I added the queue system now and moved on to adding offline playback support
We added a download queue system to the app for better dl management
Ships:
I made a tidal client for legacy android devices. It was hard because old android and by extension blackberry 10 do not support modern tls libraries and they need to be backported....
|
1793616916.2526207
|
1793703316.2526207
|
|
43891
|
legally distinct wario ware by @project516 | Stard legally distinct wario ware by @project516 | Stardance...
|
project516
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: legally distinct wario ware by @project516 Title: legally distinct wario ware by @project516 | Stardance...
|
1793242295.2973356
|
1793847095.2973356
|
|
65465
|
legion bot by @MomoMcDonkey | Stardance
|
MomoMcDonkey
|
0
|
0.87
|
0
|
[]
|
[{"post_id": 73581, "ts": "202 [{"post_id": 73581, "ts": "2026-09-25T13:03:17Z", "hours": 0.8667, "text": "working on making my bot hosted locally!"}]...
|
Title: legion bot by @MomoMcDonkey | Stardance
De Title: legion bot by @MomoMcDonkey | Stardance
Devlogs:
working on making my bot hosted locally!...
|
1793087526.4105492
|
1793692326.4105492
|
|
31516
|
lego control system by @kasper | Stardance
|
kasper
|
0
|
1.93
|
0
|
[]
|
[{"post_id": 24744, "ts": "202 [{"post_id": 24744, "ts": "2026-07-08T14:58:15Z", "hours": 1.6, "text": "I looked up some things and upgraded my PCBs that I already made before I found Hack Club. I made an online test now, but I’m waiting to test it because the servers are full, so that will take a while. Next time I’m going to work on the code for the main board, and after that I’m going to start improving the PCBs that I’ve already been working on for 12 hours before I found Hack Club. But they still need to be adjusted now because they don’t match anymore. Just a few small adjustments, and then I’m going to work on the Lego train swap module to build that code and improve it, and eventually turn out those two modules. After that, I want to make a light module for the houses to control them remotely and make them look nice. I also want to make a nice design for the screen so I can clearly see which module is on and at what position the servo is. So that is my plan for the coming weekend, and I’m going to work on this. by building"}, {"post_id": 23737, "ts": "2026-07-06T21:08:37Z", "hours": 0.3333, "text": "I did a bit of research into a few things for the Lego controller to get the screen right."}]...
|
Title: lego control system by @kasper | Stardance
Title: lego control system by @kasper | Stardance
Devlogs:
I did a bit of research into a few things for the Lego controller to get the screen right.
I looked up some things and upgraded my PCBs that I already made before I found Hack Club. I made an online test now, but I’m waiting to test it because the servers are full, so that will take a while. Next time I’m going to work on the code for the main board, and after that I’m going to start improving the PCBs that I’ve already been working on for 12 hours before I found Hack Club. But they still need to be adjusted now because they don’t match anymore. Just a few small adjustments, and then I’m going to work on the Lego train swap module to build that code and improve it, and eventually turn out those two modules. After that, I want to make a light module for the houses to control them remotely and make them look nice. I also want to make a nice design for the screen so I can clearly see which module is on and at what position the servo is. So that is my plan for the coming weekend, and I’m going to work on this. by building...
|
1793440154.4455822
|
1794044954.4455822
|
|
24195
|
lego soda can holder by @gimmebambuprinterplease | lego soda can holder by @gimmebambuprinterplease | Stardance...
|
gimmebambuprinterplease
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lego soda can holder by @gimmebambuprinterp Title: lego soda can holder by @gimmebambuprinterplease | Stardance...
|
1793357743.9346414
|
1793962543.9346414
|
|
36149
|
lego sorting machine hardware by @legolucas | Star lego sorting machine hardware by @legolucas | Stardance...
|
legolucas
|
0
|
7.88
|
0
|
[]
|
[{"post_id": 62350, "ts": "202 [{"post_id": 62350, "ts": "2026-09-05T17:52:36Z", "hours": 1.6503, "text": "hi this is devolg 3 hi today i build the small sized basket with a place to put the image of the brick with titel and i also made rails and a system for multiple basket abbove each other i hope you like it look at the images"}, {"post_id": 62031, "ts": "2026-09-05T07:49:12Z", "hours": 4.7503, "text": "hi guys this is devlog 2 today i finished my c channel that singulates the pieces i am done for now i will make the bulk bucket later but it works now hopefully and is lego competible i am now starting on the lift and distribution system"}, {"post_id": 58756, "ts": "2026-08-31T10:03:28Z", "hours": 1.4833, "text": "hi guys this is devlog one i changed my orginal file so it fits 2x8 bricks with a marge and i made sure all the mesure ments of the lego axel fit ments where right and i scaled everything up etc"}]...
|
Title: lego sorting machine hardware by @legolucas Title: lego sorting machine hardware by @legolucas | Stardance
Devlogs:
hi guys this is devlog one i changed my orginal file so it fits 2x8 bricks with a marge and i made sure all the mesure ments of the lego axel fit ments where right and i scaled everything up etc
hi guys this is devlog 2 today i finished my c channel that singulates the pieces i am done for now i will make the bulk bucket later but it works now hopefully and is lego competible i am now starting on the lift and distribution system
hi this is devolg 3 hi today i build the small sized basket with a place to put the image of the brick with titel and i also made rails and a system for multiple basket abbove each other i hope you like it look at the images...
|
1793350574.2370536
|
1793955374.2370536
|
|
69021
|
lesgu by @Rits | Stardance
|
Rits
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lesgu by @Rits | Stardance
|
1793127371.4664807
|
1793732171.4664807
|
|
8401
|
less go by @janishab1704 | Stardance
|
janishab1704
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: less go by @janishab1704 | Stardance
|
1793141581.7047927
|
1793746381.7047927
|
|
67485
|
lesssfun thing by @sumedhisweird | Stardance
|
sumedhisweird
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lesssfun thing by @sumedhisweird | Stardanc Title: lesssfun thing by @sumedhisweird | Stardance...
|
1793109310.485996
|
1793714110.485996
|
|
70351
|
let me think by @anumodhdevpg | Stardance
|
anumodhdevpg
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: let me think by @anumodhdevpg | Stardance
|
1793620167.3584487
|
1794224967.3584487
|
|
57074
|
let's go gambling by @pentaberry | Stardance
|
pentaberry
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: let's go gambling by @pentaberry | Star Title: let's go gambling by @pentaberry | Stardance...
|
1793415109.7699363
|
1794019909.7699363
|
|
67585
|
lets do smth by @aryamann_reet | Stardance
|
aryamann_reet
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lets do smth by @aryamann_reet | Stardance
|
1793112653.220696
|
1793717453.220696
|
|
62701
|
letter_for_you by @kobyte | Stardance
|
kobyte
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: letter_for_you by @kobyte | Stardance
|
1793047737.6831095
|
1793652537.6831095
|
|
51966
|
leveler-tool by @Hackerskills | Stardance
|
Hackerskills
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: leveler-tool by @Hackerskills | Stardance
|
1792889477.9783475
|
1793753477.9783475
|
|
49309
|
leviathan-osint-spider by @Dakshu | Stardance
|
Dakshu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: leviathan-osint-spider by @Dakshu | Stardan Title: leviathan-osint-spider by @Dakshu | Stardance...
|
1793278050.7232642
|
1793882850.7232642
|
|
59545
|
lexi OS by @IcedThrower_95 | Stardance
|
IcedThrower_95
|
1
|
12.51
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-29T13:29:36Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A desktop envirinment which runs in your browser. Features: Windowing System: Features multiple fully draggable, stackable windows which are designed to open only one Instance. Dock: a macOS-style bottom dock with an open app indicator and smooth animations while opening the app Top bar: displays the clock, the OS name and just icons of internet, battery and sound Apps: 1.About Me - A little breif about myself and my social links - email, slack and github 2. Music Player - comes with 9 preloaded track and support to upload own tracks and support for tracks in queue -a special feature where it auto mixes tracks in queue one after the other evrytime a preloaded track is clicked it is added in the queue which might not be visible when selecting the tracks 3.Notes - Text editor where you can link your notes to have more reference or relationship (needs a little more work on the design part) 4.Calculator - a fully functional calculator app 5. Currency Converter - An app where you can convert currency to and from - USD, GBP ,EUR INR, JPY ,CNY ,AUD 6. Translator - An which transaltes to and from languages - English, Hindi, Telugu ,Spanish, French, German 7. Browser - An app that links to Google (don’t have enough experience to build a browser in an environment yet. 8. WallPapers - An app which has preloaded system wallpapers and also the power to add custom desktop wallpapers", "repo": "https://github.com/IcedThrower95/Lexi-OS", "demo": "https://lexi-os-virid.vercel.app/"}]...
|
[{"post_id": 86268, "ts": "202 [{"post_id": 86268, "ts": "2026-11-01T05:19:27Z", "hours": 0.5133, "text": "worked on code optimisation"}, {"post_id": 84291, "ts": "2026-10-29T12:32:28Z", "hours": 8.8894, "text": "I have finally completed my lexi os added a few more apps and polished off the entire site to match the theme of the entire desktop. about me app custom boot sequence a new clock and calender widget inspired from Mewo OS 4.also made a simple app Wallpaper - with four preloaded wallpapers which i love 5.fixed all the bugs which were popping up while building the os I also wrote the ReadMe for my project in my web browser and lapsed it so that my project doesn’t get rejected based on AI usage in ReadMe"}, {"post_id": 81545, "ts": "2026-10-21T17:08:54Z", "hours": 3.1431, "text": "In the 3 hours I worked, I built four apps A very simple wallpaper storage app Next, I made a notes app - I first built simple notes in the notes app, then I realised, why don’t we add relationships between each node like in an artificial neural network, so I did, for which I took help from AI I built a translator app which converts select languages for now. The final one is a currency converter, which as of now has 5 currencies. Tomorrow I will be working on improving these apps, this is just the first iteration hehehe"}, {"post_id": 71816, "ts": "2026-09-21T16:30:34Z", "hours": 0.0, "text": "#devlog 3 , I just fiddled around with the music player adding more features to it making it a unique player out there in a webos"}, {"post_id": 71327, "ts": "2026-09-20T17:08:03Z", "hours": 0.0, "text": "last two days, i spent my time building the apps calculator and the music player and fiddling with the styling of the apps, still a little confused in my head. any suggestion on what amount of blur is ideal is much appreciated"}, {"post_id": 70179, "ts": "2026-09-18T17:04:03Z", "hours": 0.0, "text": "#devlog1 today i spent time working and learning to implement the dock and the mouse movements for the draggable windows, for now i am using the the mac os style, after developing my own UI in figma I hope to change it. The style i am is a blend of GlassMorphism and Neumorphism. And also i develop the icon is figma but i wasn’t quite able to fit them properly, will look into it tomorrow. For now thats it guys"}]...
|
Title: lexi OS by @IcedThrower_95 | Stardance
Dev Title: lexi OS by @IcedThrower_95 | Stardance
Devlogs:
#devlog1 today i spent time working and learning to implement the dock and the mouse movements for the draggable windows, for now i am using the the mac os style, after developing my own UI in figma I hope to change it. The style i am is a blend of GlassMorphism and Neumorphism. And also i develop the icon is figma but i wasn’t quite able to fit them properly, will look into it tomorrow. For now thats it guys
last two days, i spent my time building the apps calculator and the music player and fiddling with the styling of the apps, still a little confused in my head. any suggestion on what amount of blur is ideal is much appreciated
#devlog 3 , I just fiddled around with the music player adding more features to it making it a unique player out there in a webos
In the 3 hours I worked, I built four apps A very simple wallpaper storage app Next, I made a notes app - I first built simple notes in the notes app, then I realised, why don’t we add relationships between each node like in an artificial neural network, so I did, for which I took help from AI I built a translator app which converts select languages for now. The final one is a currency converter, which as of now has 5 currencies. Tomorrow I will be working on improving these apps, this is just the first iteration hehehe
I have finally completed my lexi os added a few more apps and polished off the entire site to match the theme of the entire desktop. about me app custom boot sequence a new clock and calender widget inspired from Mewo OS 4.also made a simple app Wallpaper - with four preloaded wallpapers which i love 5.fixed all the bugs which were popping up while building the os I also wrote the ReadMe for my project in my web browser and lapsed it so that my project doesn’t get rejected based on AI usage in ReadMe
worked on code optimisation
Ships:
A desktop envirinment which runs in your browser. Features: Windowing System: Features multiple fully draggable, stackable windows which are designed to open only one Instance. Dock: a macOS-style bottom dock with an open app indicator and smooth animations while opening the app Top bar: displays the clock, the OS name and just icons of internet, battery and sound Apps: 1.About Me - A little breif about myself and my social links - email, slack and github 2. Music Player - comes with 9 preloaded track and support to upload own tracks and support for tracks in queue -a special feature where it auto mixes tracks in queue one after the other evrytime a preloaded track is clicked it is added in the queue which might not be visible when selecting the tracks 3.Notes - Text editor where you can link your notes to have more reference or relationship (needs a little more work on the design part) 4.Calculator - a fully functional calculator app 5. Currency Converter - An app where you can convert currency to and from - USD, GBP ,EUR INR, JPY ,CNY ,AUD 6. Translator - An which transaltes to and from languages - English, Hindi, Telugu ,Spanish, French, German 7. Browser - An app that links to Google (don’t have enough experience to build a browser in an environment yet. 8. WallPapers - An app which has preloaded system wallpapers and also the power to add custom desktop wallpapers...
|
1793566088.8454835
|
1793652488.8454835
|
|
28079
|
lexie ai by @Adrian_mwangi | Stardance
|
Adrian_mwangi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lexie ai by @Adrian_mwangi | Stardance
|
1793332173.105901
|
1793936973.105901
|
|
5334
|
libimportx by @lilyy | Stardance
|
lilyy
|
0
|
1.98
|
0
|
[]
|
[{"post_id": 2720, "ts": "2026 [{"post_id": 2720, "ts": "2026-06-05T13:34:11Z", "hours": 0.7214, "text": "Made the JS version work on windows and documented the new API it did not take me 6 attempts but my entire windows VM broke after i exited and threw an error which did not do anything (the library was still fully functional). im gonna fix this error Changelog in libimportx-js : update version number add windows support hopefully first try this time? in libimportx : Add support in the spec for TCP sockets Make the examples actually work in libimportx-redirector : it now works on windows"}, {"post_id": 2202, "ts": "2026-06-04T15:52:43Z", "hours": 0.8836, "text": "Got the Python version to work on windows FINALLLYYY!!! windows is such a terrible OS it took me SIX ATTEMPTS to get it working Changelog in libimportx-python (i didnt do it for JS yet nor did i document the spec yet) WINDOWS FINALLY WORKED now update version number Attempt 6 at making windows work Attempt 5 at making windows work Attempt 4 at making windows work Attempt 3 to make windows support work fix tempdir thing Add gitignore to ignore pyc files Add gitignore to ignore pyc files Add windows support… hopefully?"}, {"post_id": 2025, "ts": "2026-06-04T09:39:54Z", "hours": 0.3794, "text": "Add user guide now there is a user guide with examples! Changelog in libimportx , the repo with the spec and user guide: Add installation Add user guide in libimportx-redirector , the repo i made because you can’t add more than one repo to stardance: thingy link to userguide fixes"}]...
|
Title: libimportx by @lilyy | Stardance
Devlogs:
Title: libimportx by @lilyy | Stardance
Devlogs:
Add user guide now there is a user guide with examples! Changelog in libimportx , the repo with the spec and user guide: Add installation Add user guide in libimportx-redirector , the repo i made because you can’t add more than one repo to stardance: thingy link to userguide fixes
Got the Python version to work on windows FINALLLYYY!!! windows is such a terrible OS it took me SIX ATTEMPTS to get it working Changelog in libimportx-python (i didnt do it for JS yet nor did i document the spec yet) WINDOWS FINALLY WORKED now update version number Attempt 6 at making windows work Attempt 5 at making windows work Attempt 4 at making windows work Attempt 3 to make windows support work fix tempdir thing Add gitignore to ignore pyc files Add gitignore to ignore pyc files Add windows support… hopefully?
Made the JS version work on windows and documented the new API it did not take me 6 attempts but my entire windows VM broke after i exited and threw an error which did not do anything (the library was still fully functional). im gonna fix this error Changelog in libimportx-js : update version number add windows support hopefully first try this time? in libimportx : Add support in the spec for TCP sockets Make the examples actually work in libimportx-redirector : it now works on windows...
|
1793404372.202038
|
1794009172.202038
|
|
22375
|
libspacetime by @jpeisach | Stardance
|
jpeisach
|
0
|
59.7
|
0
|
[]
|
[{"post_id": 34364, "ts": "202 [{"post_id": 34364, "ts": "2026-07-25T00:32:21Z", "hours": 8.3572, "text": "again idk if I will be doing sd instead of macondo but anyways, been doing documentation :) I also fixed ammarstime and did bindings to other langs."}, {"post_id": 27142, "ts": "2026-07-12T12:59:18Z", "hours": 9.5753, "text": "Again, in case I switch back from Macondo. More fighting with leap years - I’ll have to use AI for help. In the meantime I created a marsdate program, and did wcsfmarstime (analogous to wcsftime). I also created some initial Rust bindings :)"}, {"post_id": 25052, "ts": "2026-07-09T00:28:55Z", "hours": 18.6614, "text": "Devlog now in case I switch from Macondo to Stardance. In the event that I need to, I will edit this with more details. Basically, I managed to work on strfmarstime, strpmarstime, ammarstime, and I’ve been drilling testcases."}, {"post_id": 20036, "ts": "2026-07-01T15:17:21Z", "hours": 1.8528, "text": "strfmarstime testing - week numbers Nothing crazy to report for the current testsuite and implementation verification I’ve been doing. Basically same thing as I did before I took a break for strpmarstime. For some formats, it will literally print anything (if it’s invalid), which appears to be normal in Glibc, so it’s normal to me. Some locale work too on AM/PM formatting and time formatting - some do “AM”, some do “am”, Spain does “a.m.”. The big thing is: Week Numbers Okay, so there are three different definitions of week numbers: %U: The first day of week 1 is on Sunday. Range 00 (because sometimes in January we don’t get to Sunday for a few days), up until 53 (sometimes we actually get 53 weeks due to day placement.) %V: ISO 8601, which has week 1 as the first week with at least 4 days in the new year. Range 01 to 53. (Week 0 would be represented by 52, in my testing) %W: The first day of week 1 is on Monday. But, here is the key thing about the Darian calendar: Each month resets the week. This is actually one of the things about the Gregorian Calendar some people don’t like-how the # of the day is on inconsistent weekdays. The Darian Calendar has a neat 28 days for each month, so with 7 days a week, this isn’t a problem. And since each week is guaranteed to have four days, we can just take the number of days and divide by 7. For %W, shift by 1, because Monday (Lunae) is not the first day of the week. However.. every 6th month is the end of a season, and it has 27 days. So we need to, in our calculations, which must go based off the nth day of the year, make sure we reset, otherwise we will lose our day alignment (because again, the week resets). So we need to realign every 167 days, and also check how many seasons passed and use that to get the amount of prior weeks we are skipping when we have modulated. As for the leap day: It divides perfectly by 7 and 167, so it gets its own if statement case (otherwise it would read “97”). Experience I knew this would be weird to figure out, and challenging, but I actually had a lot of fun doing it. It kept my brain working, I stayed energetic, and I managed to have fun, which is the most important thing! So after my long Pomodoro break, I’ll verify %W (since %U and %V are thee same), and then %w, %x, %X, %y and %Y and that will be it, since for an initial ship I don’t plan to do timezones."}, {"post_id": 19959, "ts": "2026-07-01T12:47:21Z", "hours": 1.3667, "text": "strpmarstime - basic implementation complete Using musl as a reference, I’ve completed an.. implementation, of strpmarstime. Yesterday I must’ve placed my energy wrong because I just wasn’t super motivated and didn’t do as much coding. Anyway: strpmarstime is the inverse of strfmarstime, taking a date-time formatted string and given its format, entering those values into a mars_tm struct. Everything made sense, mostly. There are still some areas of code I need to comment and reread to make sure I understand what is going on. But after strfmarstime, it isn’t too crazy. As usual, it does the things for string parsing, like str++ to move to the rest of the string’s characters, then it parses by item. In order to find values, I think that the calculations sort of estimate the character location of the number range, and then we import it. Challenges nl_langinfo Once again, I found myself in a situation where musl can lookup strings to match values like day and month names via numerical item addresses with nl_langinfo, but I cannot (as this is not a “standard” item index). Musl is able to use this item address to iterate through the list of potential matches, which is easy to do in common goto routines. For me, I had to basically make a pointer to an array of char* (so I had char**, once I figured it out), that was the “iteration_array”. Depending on the format, it would check the array for the match. The main confusing thing was really just the pointers. Spent about 10 minutes fighting with compiler errors until I figured it out with the help of stackoverflow and Google’s AI. By the way, using nl_langinfo_l, which I did in strfmarstime, does not exist in locale.h by default on macOS, it’s in xlocale.h, so I made a small configure define this morning to take care of that. The vague formats There are several ways of determining what # week of year we are in. One format says it’s the week with at least four days, and starts indexing at like, 1 I think? And then there are a few others? I can’t remember off the top of my head. Because there are no clear answers, I (and musl) have left these formats as “parse only”. This really impacts week number formats, which, I guess makes sense, because if you only have that, who knows what year you are in, and how many days are in the first full “week”, however you define that. Timezones Skipped for now, as I have yet to take care of this, and I think some proposed timekeeping systems actually don’t do the standard one-hour intervals.. I need to look into it. Future Welp, it’s off to testing and verification. Yay!"}, {"post_id": 19165, "ts": "2026-06-30T12:40:21Z", "hours": 1.7647, "text": "strpmarstime I took a break from validating strfmarstime because.. well I needed it. So I started doing the function that does the opposite, takes a string, parses into into a mars_tm structure. I am taking the same approach as musl, and enjoying myself, as in, because musl is able to lookup string matches by locale (because there is a fixed offset for dates), but I can’t, I have to manually search. But instead of copy pasting code I’m trying to setup a pointer to an array to check in a common code routine. And now I’m getting memory issues. Yay!"}, {"post_id": 18437, "ts": "2026-06-29T16:21:21Z", "hours": 1.5994, "text": "strfmarstime testing and verification - date time format locales The %c format specifier checks the system locale for how to format the date and time. Of course, it’s a good idea to test this. It took me a while.. unfortunately I don’t have a way of checking in test configuration if one of the formats is installed on the host system (see https://en.wikipedia.org/wiki/List_of_date_formats_by_country ). I also don’t really have a nice way (as far as I know) to set test environment variables. So what I ended on was in the test setup, just passing the LC_ALL environment variable. But this was broken for some reason? Ah, it turns out that my logic in strfmarstime to get the locale was incorrect. For some reason, setlocale ( LC_ALL , NULL ); does not work, and you have to use “”. My guess is that NULL goes to system default, and “” will read from environment variables. Yay! While Day-Month-Year format is straight forward, the few countries that use Year-Month-Day are driving me insane, like Hungary, because their formats have like, dots in them, and I’m not seeing much consistency across the other country’s formats that also have Year-Month-Day formatting. I’ll come back to it later. It’s actually broken anyway, because my week number representations are still wrong."}, {"post_id": 18310, "ts": "2026-06-29T12:44:15Z", "hours": 1.5208, "text": "strfmarstime - ~80% complete After about 6 hrs total, the strfmarstime function is complete, using musl as a reference, except: %E (era based format) %k (hour as a decimal, but including padding 0s, probably this will be a quick fix %O (modifier symbols?) %P (lowercase version of “am” and “pm” - need to find a good way to run tolower on a const char*) All week numbering formats, because there are different standards on when the week “starts” and “how many weeks we are into the year” (e.g. first 4 days of year, vs. whether week starts on Sunday vs. Monday) %z, %Z (Timezones, not implemented yet) This was quite the grind, having strftime docs open on one screen, musl’s implementation on another, and trying to go through each format while documenting and understanding how the formatting is being processed, one by one. I also did some slight restructuring: the __mars_tm_to_secs function exists. It is basically what mkmarstime did. I would have it not subtract by epoch, but it was causing tests to fail. Technically the strftime docs say that %s, which uses it, calls the function anyways, so it may be pointless but whatever. Oh, speaking of %s: That is seconds since the Unix epoch. Who knows how useful that will be when this calendar implementation starts at MSD 0 (like, 1873). Also, it’s martian seconds instead of Earth seconds. Fun shoutout to “%%”, “%t”, and “%n”, which required nothing, just setting the length of the item to “1” and returning the actual formatting character. Lol. Welp, now it’s time to test and drill this function into oblivion."}, {"post_id": 17044, "ts": "2026-06-27T17:47:07Z", "hours": 3.7639, "text": "strfmarstime progress I think it is warranted, otherwise I will forget later. This is part 1 of many on the journey to the strfmarstime function - which returns a formatted string of a broken down mars time structure. This was my first time ever recreating a string formatting function - especially in C, so I learned some things along the way. Basing off of musl After some attempts, it became pretty clear that, although string formatting functions may seem easy, when you need to support width and padding specifiers, things get complicated. Since I had to learn this, I decided to save time by basically recreating musl’s strftime implementation side by side. I would comment and give details on what is happening so I learned how it worked while also getting the result I need to, without just blatantly copying and pasting without giving credit. This took about an hour since some of the variable names in musl’s implementation are like, ‘l’, ‘f’, and I had to keep it straight. I actually am writing this devlog after I spent 30+ minutes debugging some stack smashing that was happening, as a result of me putting in the wrong variable for string length into memcpy. How it works Basically, strftime/strfmarstime will first collect information needed for each format specifier, like if there is a character requesting padding. Then it will do each item at a time, with the given padding and width. Here’s a fun thing I learned: There is a lot of “format++”. But format is a char*. How does that make sense? Well, format++ actually is basically the same as doing .substring(1, format.length()) in other languages. I guess it makes sense if you think about a list of characters, and you are progressing to the next character. (Like a “cdr” of a “cons” box in functional programming). So that helped. Locales, locales I wanted to come back to this later, especially because I will eventually need translations. But the %c specifier actually refers to the system locale’s date and time format. This required some hacking that came around the time I was stuck with that stack smashing. So seriously, I was stuck . musl has it easy, it can tell by its own thread what the locale is. Here, we need to initialize locales (setlocale), and then make a locale_t object we can use with newlocale. Then we free it at the end. Where I am now Since the locale’s DT formatting is really just a shorthand for other specifiers, it returns “-” in its place. But as I continue forward, it will work."}, {"post_id": 16257, "ts": "2026-06-26T13:02:44Z", "hours": 0.9283, "text": "libspacetime - preparing for localization Nothing really crazy, but I ran gettextize, looked at as much docs as I could (the website is unreachable at the moment), and other project examples to create a basic localization setup. This will allow for localization of day and month names."}, {"post_id": 15962, "ts": "2026-06-25T22:28:30Z", "hours": 2.7319, "text": "Darian Calendar C Library: ammarstime Probably the hurdle that will be the second hardest part of the entire libspacetime library is ammarstime. It is the same as the C stdlib’s “gmtime”, which, from a timestamp, returns a broken down time structure (struct tm) of the date/time info of that timestamp (the human readable info like day, month, year, etc.) This is actually difficult. Seconds just count up, and you have to go backwards. You can try to divide by the amount of seconds in a year, but what about leap years? Honestly, the math is too weird, even for me. Some parts make sense, but the rest, eh… I referred to musl’s “secs_to_tm” function for how it did the calculations. This is what mostly guided my work, with a few pieces of calculation and numbers help from Google AI search results. I didn’t write a test suite for this function, because I think it will be easier to do once I knock down what will be the hardest kinds of functions: *string manipulation *(e.g. strftime) But now that I have a way to convert seconds to a mars_tm struct, it should make everything else somewhat easier. Hopefully."}, {"post_id": 13897, "ts": "2026-06-22T19:40:18Z", "hours": 4.1111, "text": "AI vs Debugging I added some tests for Y2038, before, and after, because, of course, that could be an issue. It turned out that Darian timestamps on non-leap years (even-numbered years) were incorrect. But they were correct in leap years. So… what gives? Manual Looking I thought it could be the result of the calendar epoch being incorrect (it did end up being slightly incorrect) - but I tried using other dates on non-leap years, and couldn’t find a consistent offset that all the dates were off by. This was.. really weird. I also tried setting the year to calculate the year before - no dice. Taking out the AI Eventually, I decided, “screw it”, so I took GPT-5 mini and asked it to try to figure out what was happening. Spoiler alert: It did eventually figure everything out.. but it was.. quite the process to watch it do so. It detected that the sols-passed-at-the-start-of-month table was actually missing the value for the 8th month. Of course, adjusting this caused tests to fail, so I was hesitant to trust it. It also suggested subtracting 1 from the day count when multiplying by 86400 seconds per day. This was bogus. Asking it to make a diff I asked it to make a .patch or a .diff I could apply - and it didn’t work. Missing headers or invalid patch data, whatever it was, it can’t generate a .patch file. Which is kind of hilarious. It also didn’t look back at my codebase when I applied some of it’s suggestions, so it would be making patches that refer to deleted lines that didn’t exist anymore. Could just be a skill issue. Figure it out, man I told it to figure out what was wrong. It spent the next ~16 mins, making a “debug mkmarstime” script, and a bunch of other small scripts like “probe_unix”, “probe_y2038” - in some cases, it was just going around in a circle - making changes that only resulted in the same prior status. I thought it was hallucinating at first, especially with the compiler errors it got. Eventually I’ll look back at the thread and it’s thinking, because like, in some ways, it was stupid, but in some ways it was smart. I don’t know if the method to debug everything was the most efficient - but it eventually worked. Probably trying to fix the epoch, and also fix the leap years, and also fix the month - all at the same time - overwhelmed it, and my guess is there was no confidence in itself. I’m talking too much about the AI here for code I didn’t do in a dev log. But anyway, it brute forced tested leap year handling, (it also mentioned “leap seconds” which I’m not dealing with.. so I’m not sure what the heck it’s doing), but eventually all the testcases did past. Some helpful tidbits It also did suggest using llround to fix some precision issues, like sometimes conversions being off by 1 second. This is actually not a terrible idea, and I may make a build-time config option for this. Since it was successful, I also asked it to import all its scripts in a test suite - which it wasn’t going anywhere for, so I decided to stop wasting energy and stop it there. Eventually I may come back to it. Overall thoughts So it spent at 187K tokens - and even though it did seem to go nowhere, it eventually kind of.. worked? And mkmarstime behaves properly now. I was worried the AI would just try to focus on “solution that solves testcases” instead of “solution that does actual behavior”, but the resulting diff is justified (I even had it check that the output produced was the same in its loop vs closed form intercalation). Vibe coding, no. But vibe debugging? Well, maybe there is something to be said about it.."}, {"post_id": 13192, "ts": "2026-06-21T16:27:46Z", "hours": 1.755, "text": "libspacetime - mkmarstime function Wow, what a sprint! Part of the C date and time functions is mktime. It takes a struct tm object (which is a “broken down” time structure), and converts it into the time_t format (seconds since 1970). For libspacetime and the Darian Calendar, we need mkmarstime to track time on Mars. In some ways, this ended up not being harder than I thought it was, and in some ways it did. Leap Years In the Gregorian Calendar, we have leap years every 4 years - except when the year is divisible by 100, unless divisible by 400. Yeah, it’s confusing. The Darian Calendar, in it’s wording from the website and also Wikipedia confused me. I thought Intercalation was the length of a year, but no, it’s actually just getting the # of leap years that have passed at a given year number. Darian Calendar rules are actually, every odd numbered year is a yeap lear, except for decades (10, 20, 30). Exception to that is if the year is divisible by 100, and again for divisible by 1000. In the commented code, you can see how I put down my train of thought, but ended up coming to what the actual source was anyway. Basically, you find the number of leap years, multiply by 669 days, then non-leap years, multiply by 668. Fun fact: Glibc in its tm structures, according to POSIX specs, starts the year at 0. I believe it is because it could make those numbers fit in a smaller data structure. For us, the Darian year is 221. I guess I could maybe try to shave it down? But these are things I’ll have to decide before any release. Months Every month has 28 days, except for the last month in each “quarter”, which has 27. You could calculate this, but Glibc, for the Gregorian Calendar actually has a static table that lists the amount of days since each month starts. This way it doesn’t have to do the multiplication every time. I was doing it manually, and I was going to write out the expressions - 28 1, 28 2, etc. but it got complicated when also having to add like, 28 7 + (27 1) and I didn’t know which I was on track for. By using the example website, I got the numbers by manual conversion. Leap Days The table makes sense in Glibc for another reason: The leap day in the Gregorian Calendar is so early in the year, it shifts every day forward by one. In the Darian Calendar, the leap day is actually at the end of the last month of the year. So we don’t need to store duplicate entries, or actually really worry about it for this function. (Not sure whether it is my job to handle invalid values). But basically if the current year is a leap year, we can still work as normal, and then just add on the day as requested. Nice! The rest Days, hours, minutes, seconds are all as normal. The epoch The Darian Calendar epoch actually begins in 1609. But.. the Mars Sol Date, which is unofficial but even used in NASA’s Mars24 program, has its “0” date at Dec 29 1873. So we need to subtract to make up for the difference. If you use dates before MSD 0, you get negative mars_time_t values. I couldn’t figure out what the epoch meant, until I realized it was just MSD 0. I also found that marsclock.com’s “midday” is actually off by about 177 seconds. But I calculated MSD 0 to be what you see in the code (I need to save characters so I can submit this), and off I went. Testcases Yeah, this needs tests. Even more than what I put in for this devlog (MSD 0 and Unix Epoch 0). Unfortunately in Mars -> Earth time, I am losing about an Earth second in conversion. I’ll try to debug this now. But it causes some tests, like the epoch to be incorrect - it returns a mars_time_t of what would be unix epoch -1. Overall thoughts The genius of how Glibc handles the months was probably the coolest part. Most challenging, the leap year intercalation for sure. Now, onto more test suites, and more functions."}, {"post_id": 12526, "ts": "2026-06-20T13:29:31Z", "hours": 0.3856, "text": "Earth Timekeeping to Mars Timekeeping Conversions Because I’m going out to see family today - might as well get something done. I was going to add “mktime” but I realized that I’ve done Mars to Earth but not vice versa. Besides, I need an “epoch” to start time from. Technically, I already had done this with mars_time(), I just needed to do it with any timestamp. I did “0” (January 1, 1970, midnight) locally to verify, then chose the Mariner 9 enter orbit as a testcase. I will note, Wikipedia shows MSD (Mars Sol Date) but also Mars Julian Sol. I wonder if I’ll have to do that later. I also will probably need to organize my tests/Makefile.am for further testcases. It will grow once I start adding time tests and not just MSD."}, {"post_id": 12506, "ts": "2026-06-20T13:02:00Z", "hours": 1.3219, "text": "libspacetime - creating a testsuite But first, pre-stardance talk I’ve known the Darian Calendar existed, and my goal is to spend my time over the summer to try to make it as close to system level support as possible. This includes trying to get it at kernel-level - which is another project. Anyways, libspacetime is basically time.h but for other planets. I want it to be portable and work on as many systems as possible. For this reason I setup a GNU Autotools project (autoconf, automake, that fun stuff). Now, the Darian calendar is not standard, but C date and time functions are. Also, timekeeping is actually complicated. So I’m kind of.. mimicking the standards, and I may not get there in terms of implementation for a while, but I try my best. Using some sites: Wikipedia “timekeeping on mars” article https://ops-alaska.com/time/gangale_converter/calendar_clock.htm https://marsclock.com/ And after fighting with type versions, I eventually got a current unix time, represented in Martian seconds, in a way that you can get to the current Mars Sol Date (MSD). Uh.. I’m not a mathematician. How does the timekeeping and conversions work, I honestly don’t know off hand. This will prove to continue being a challenge… especially because like, “ok, so what is our “epoch” for mars? Still Jan 1 1970 on Earth? But the existing proposed calendar conversions use this date instead?” - lots of fun in the future. Okay, basically pre stardance was just mars_time and the initial project. Creating the testsuite For test runners, there are options - TAP, DejaGNU, etc. But this isn’t Meson where you can setup test targets. Autotest is kind of weird (that seems to be the general consensus). If you are testing executable programs, it’s great, because you can get a fixed output. But at the base level, it’s really just a bunch of shell scripts. So in test “setup”, I want to compile my “tests”. But a user building the library may not have libspacetime headers or library installed, so we need to not only build a C target (which in itself is weird, the GNU Autotools docs for test suites doesn’t suggest this as far as I know), but we need to link against the library built in the src folder of the project and also include its headers. Kinda janky. The lack of useful documentation examples is what I spent a lot of time on. There is also the thing with atlocal, which I think is like.. empty? But docs suggest it should be generated? package.m4 files exist now, which I did a great job filling out now that I look back at it -_- when it comes to actual test checks (testsuite.at), apparently it compares output, not status code.. so I have to like, verbatim tell “I expect this output”. So there goes printing out the status of the current times I am testing. Also it is so specific, like I can’t use a newline character in the printf in the test executable. The print is useful because a round conversion from Earth -> Martian -> Earth results in a one earth second loss. I don’t know if it’s because of floating point precision or because of the time it takes to execute the conversion from the processor. Ideally, the application can ask the kernel for the time and it uses its own clocks - which can use a counter chip, and using the amount of increases per a set of time, can figure out how long a “cycle” is and keep time that way. That was sort of the goal of my kernel “spacetime” support, but I wanted it to show up in lsclocks, and after all clocksource is like, a hardware abstraction, not an actual clock. Idealy a clocksource could just have a lower multiplier, but the kernel still uses the best clocksource which certainly won’t be the martian one. Anyways, use janky tools (Autotest framework), get janky results. Cheers to more date and time functions and tests."}]...
|
Title: libspacetime by @jpeisach | Stardance
Devl Title: libspacetime by @jpeisach | Stardance
Devlogs:
libspacetime - creating a testsuite But first, pre-stardance talk I’ve known the Darian Calendar existed, and my goal is to spend my time over the summer to try to make it as close to system level support as possible. This includes trying to get it at kernel-level - which is another project. Anyways, libspacetime is basically time.h but for other planets. I want it to be portable and work on as many systems as possible. For this reason I setup a GNU Autotools project (autoconf, automake, that fun stuff). Now, the Darian calendar is not standard, but C date and time functions are. Also, timekeeping is actually complicated. So I’m kind of.. mimicking the standards, and I may not get there in terms of implementation for a while, but I try my best. Using some sites: Wikipedia “timekeeping on mars” article https://ops-alaska.com/time/gangale_converter/calendar_clock.htm https://marsclock.com/ And after fighting with type versions, I eventually got a current unix time, represented in Martian seconds, in a way that you can get to the current Mars Sol Date (MSD). Uh.. I’m not a mathematician. How does the timekeeping and conversions work, I honestly don’t know off hand. This will prove to continue being a challenge… especially because like, “ok, so what is our “epoch” for mars? Still Jan 1 1970 on Earth? But the existing proposed calendar conversions use this date instead?” - lots of fun in the future. Okay, basically pre stardance was just mars_time and the initial project. Creating the testsuite For test runners, there are options - TAP, DejaGNU, etc. But this isn’t Meson where you can setup test targets. Autotest is kind of weird (that seems to be the general consensus). If you are testing executable programs, it’s great, because you can get a fixed output. But at the base level, it’s really just a bunch of shell scripts. So in test “setup”, I want to compile my “tests”. But a user building the library may not have libspacetime headers or library installed, so we need to not only build a C target (which in itself is weird, the GNU Autotools docs for test suites doesn’t suggest this as far as I know), but we need to link against the library built in the src folder of the project and also include its headers. Kinda janky. The lack of useful documentation examples is what I spent a lot of time on. There is also the thing with atlocal, which I think is like.. empty? But docs suggest it should be generated? package.m4 files exist now, which I did a great job filling out now that I look back at it -_- when it comes to actual test checks (testsuite.at), apparently it compares output, not status code.. so I have to like, verbatim tell “I expect this output”. So there goes printing out the status of the current times I am testing. Also it is so specific, like I can’t use a newline character in the printf in the test executable. The print is useful because a round conversion from Earth -> Martian -> Earth results in a one earth second loss. I don’t know if it’s because of floating point precision or because of the time it takes to execute the conversion from the processor. Ideally, the application can ask the kernel for the time and it uses its own clocks - which can use a counter chip, and using the amount of increases per a set of time, can figure out how long a “cycle” is and keep time that way. That was sort of the goal of my kernel “spacetime” support, but I wanted it to show up in lsclocks, and after all clocksource is like, a hardware abstraction, not an actual clock. Idealy a clocksource could just have a lower multiplier, but the kernel still uses the best clocksource which certainly won’t be the martian one. Anyways, use janky tools (Autotest framework), get janky results. Cheers to more date and time functions and tests.
Earth Timekeeping to Mars Timekeeping Conversions Because I’m going out to see family today - might as well get something done. I was going to add “mktime” but I realized that I’ve done Mars to Earth but not vice versa. Besides, I need an “epoch” to start time from. Technically, I already had done this with mars_time(), I just needed to do it with any timestamp. I did “0” (January 1, 1970, midnight) locally to verify, then chose the Mariner 9 enter orbit as a testcase. I will note, Wikipedia shows MSD (Mars Sol Date) but also Mars Julian Sol. I wonder if I’ll have to do that later. I also will probably need to organize my tests/Makefile.am for further testcases. It will grow once I start adding time tests and not just MSD.
libspacetime - mkmarstime function Wow, what a sprint! Part of the C date and time functions is mktime. It takes a struct tm object (which is a “broken down” time structure), and converts it into the time_t format (seconds since 1970). For libspacetime and the Darian Calendar, we need mkmarstime to track time on Mars. In some ways, this ended up not being harder than I thought it was, and in some ways it did. Leap Years In the Gregorian Calendar, we have leap years every 4 years - except when the year is divisible by 100, unless divisible by 400. Yeah, it’s confusing. The Darian Calendar, in it’s wording from the website and also Wikipedia confused me. I thought Intercalation was the length of a year, but no, it’s actually just getting the # of leap years that have passed at a given year number. Darian Calendar rules are actually, every odd numbered year is a yeap lear, except for decades (10, 20, 30). Exception to that is if the year is divisible by 100, and again for divisible by 1000. In the commented code, you can see how I put down my train of thought, but ended up coming to what the actual source was anyway. Basically, you find the number of leap years, multiply by 669 days, then non-leap years, multiply by 668. Fun fact: Glibc in its tm structures, according to POSIX specs, starts the year at 0. I believe it is because it could make those numbers fit in a smaller data structure. For us, the Darian year is 221. I guess I could maybe try to shave it down? But these are things I’ll have to decide before any release. Months Every month has 28 days, except for the last month in each “quarter”, which has 27. You could calculate this, but Glibc, for the Gregorian Calendar actually has a static table that lists the amount of days since each month starts. This way it doesn’t have to do the multiplication every time. I was doing it manually, and I was going to write out the expressions - 28 1, 28 2, etc. but it got complicated when also having to add like, 28 7 + (27 1) and I didn’t know which I was on track for. By using the example website, I got the numbers by manual conversion. Leap Days The table makes sense in Glibc for another reason: The leap day in the Gregorian Calendar is so early in the year, it shifts every day forward by one. In the Darian Calendar, the leap day is actually at the end of the last month of the year. So we don’t need to store duplicate entries, or actually really worry about it for this function. (Not sure whether it is my job to handle invalid values). But basically if the current year is a leap year, we can still work as normal, and then just add on the day as requested. Nice! The rest Days, hours, minutes, seconds are all as normal. The epoch The Darian Calendar epoch actually begins in 1609. But.. the Mars Sol Date, which is unofficial but even used in NASA’s Mars24 program, has its “0” date at Dec 29 1873. So we need to subtract to make up for the difference. If you use dates before MSD 0, you get negative mars_time_t values. I couldn’t figure out what the epoch meant, until I realized it was just MSD 0. I also found that marsclock.com’s “midday” is actually off by about 177 seconds. But I calculated MSD 0 to be what you see in the code (I need to save characters so I can submit this), and off I went. Testcases Yeah, this needs tests. Even more than what I put in for this devlog (MSD 0 and Unix Epoch 0). Unfortunately in Mars -> Earth time, I am losing about an Earth second in conversion. I’ll try to debug this now. But it causes some tests, like the epoch to be incorrect - it returns a mars_time_t of what would be unix epoch -1. Overall thoughts The genius of how Glibc handles the months was probably the coolest part. Most challenging, the leap year intercalation for sure. Now, onto more test suites, and more functions.
AI vs Debugging I added some tests for Y2038, before, and after, because, of course, that could be an issue. It turned out that Darian timestamps on non-leap years (even-numbered years) were incorrect. But they were correct in leap years. So… what gives? Manual Looking I thought it could be the result of the calendar epoch being incorrect (it did end up being slightly incorrect) - but I tried using other dates on non-leap years, and couldn’t find a consistent offset that all the dates were off by. This was.. really weird. I also tried setting the year to calculate the year before - no dice. Taking out the AI Eventually, I decided, “screw it”, so I took GPT-5 mini and asked it to try to figure out what was happening. Spoiler alert: It did eventually figure everything out.. but it was.. quite the process to watch it do so. It detected that the sols-passed-at-the-start-of-month table was actually missing the value for the 8th month. Of course, adjusting this caused tests to fail, so I was hesitant to trust it. It also suggested subtracting 1 from the day count when multiplying by 86400 seconds per day. This was bogus. Asking it to make a diff I asked it to make a .patch or a .diff I could apply - and it didn’t work. Missing headers or invalid patch data, whatever it was, it can’t generate a .patch file. Which is kind of hilarious. It also didn’t look back at my codebase when I applied some of it’s suggestions, so it would be making patches that refer to deleted lines that didn’t exist anymore. Could just be a skill issue. Figure it out, man I told it to figure out what was wrong. It spent the next ~16 mins, making a “debug mkmarstime” script, and a bunch of other small scripts like “probe_unix”, “probe_y2038” - in some cases, it was just going around in a circle - making changes that only resulted in the same prior status. I thought it was hallucinating at first, especially with the compiler errors it got. Eventually I’ll look back at the thread and it’s thinking, because like, in some ways, it was stupid, but in some ways it was smart. I don’t know if the method to debug everything was the most efficient - but it eventually worked. Probably trying to fix the epoch, and also fix the leap years, and also fix the month - all at the same time - overwhelmed it, and my guess is there was no confidence in itself. I’m talking too much about the AI here for code I didn’t do in a dev log. But anyway, it brute forced tested leap year handling, (it also mentioned “leap seconds” which I’m not dealing with.. so I’m not sure what the heck it’s doing), but eventually all the testcases did past. Some helpful tidbits It also did suggest using llround to fix some precision issues, like sometimes conversions being off by 1 second. This is actually not a terrible idea, and I may make a build-time config option for this. Since it was successful, I also asked it to import all its scripts in a test suite - which it wasn’t going anywhere for, so I decided to stop wasting energy and stop it there. Eventually I may come back to it. Overall thoughts So it spent at 187K tokens - and even though it did seem to go nowhere, it eventually kind of.. worked? And mkmarstime behaves properly now. I was worried the AI would just try to focus on “solution that solves testcases” instead of “solution that does actual behavior”, but the resulting diff is justified (I even had it check that the output produced was the same in its loop vs closed form intercalation). Vibe coding, no. But vibe debugging? Well, maybe there is something to be said about it..
Darian Calendar C Library: ammarstime Probably the hurdle that will be the second hardest part of the entire libspacetime library is ammarstime. It is the same as the C stdlib’s “gmtime”, which, from a timestamp, returns a broken down time structure (struct tm) of the date/time info of that timestamp (the human readable info like day, month, year, etc.) This is actually difficult. Seconds just count up, and you have to go backwards. You can try to divide by the amount of seconds in a year, but what about leap years? Honestly, the math is too weird, even for me. Some parts make sense, but the rest, eh… I referred to musl’s “secs_to_tm” function for how it did the calculations. This is what mostly guided my work, with a few pieces of calculation and numbers help from Google AI search results. I didn’t write a test suite for this function, because I think it will be easier to do once I knock down what will be the hardest kinds of functions: *string manipulation *(e.g. strftime) But now that I have a way to convert seconds to a mars_tm struct, it should make everything else somewhat easier. Hopefully.
libspacetime - preparing for localization Nothing really crazy, but I ran gettextize, looked at as much docs as I could (the website is unreachable at the moment), and other project examples to create a basic localization setup. This will allow for localization of day and month names.
strfmarstime progress I think it is warranted, otherwise I will forget later. This is part 1 of many on the journey to the strfmarstime function - which returns a formatted string of a broken down mars time structure. This was my first time ever recreating a string formatting function - especially in C, so I learned some things along the way. Basing off of musl After some attempts, it became pretty clear that, although string formatting functions may seem easy, when you need to support width and padding specifiers, things get complicated. Since I had to learn this, I decided to save time by basically recreating musl’s strftime implementation side by side. I would comment and give details on what is happening so I learned how it worked while also getting the result I need to, without just blatantly copying and pasting without giving credit. This took about an hour since some of the variable names in musl’s implementation are like, ‘l’, ‘f’, and I had to keep it straight. I actually am writing this devlog after I spent 30+ minutes debugging some stack smashing that was happening, as a result of me putting in the wrong variable for string length into memcpy. How it works Basically, strftime/strfmarstime will first collect information needed for each format specifier, like if there is a character requesting padding. Then it will do each item at a time, with the given padding and width. Here’s a fun thing I learned: There is a lot of “format++”. But format is a char*. How does that make sense? Well, format++ actually is basically the same as doing .substring(1, format.length()) in other languages. I guess it makes sense if you think about a list of characters, and you are progressing to the next character. (Like a “cdr” of a “cons” box in functional programming). So that helped. Locales, locales I wanted to come back to this later, especially because I will eventually need translations. But the %c specifier actually refers to the system locale’s date and time format. This required some hacking that came around the time I was stuck with that stack smashing. So seriously, I was stuck . musl has it easy, it can tell by its own thread what the locale is. Here, we need to initialize locales (setlocale), and then make a locale_t object we can use with newlocale. Then we free it at the end. Where I am now Since the locale’s DT formatting is really just a shorthand for other specifiers, it returns “-” in its place. But as I continue forward, it will work.
strfmarstime - ~80% complete After about 6 hrs total, the strfmarstime function is complete, using musl as a reference, except: %E (era based format) %k (hour as a decimal, but including padding 0s, probably this will be a quick fix %O (modifier symbols?) %P (lowercase version of “am” and “pm” - need to find a good way to run tolower on a const char*) All week numbering formats, because there are different standards on when the week “starts” and “how many weeks we are into the year” (e.g. first 4 days of year, vs. whether week starts on Sunday vs. Monday) %z, %Z (Timezones, not implemented yet) This was quite the grind, having strftime docs open on one screen, musl’s implementation on another, and trying to go through each format while documenting and understanding how the formatting is being processed, one by one. I also did some slight restructuring: the __mars_tm_to_secs function exists. It is basically what mkmarstime did. I would have it not subtract by epoch, but it was causing tests to fail. Technically the strftime docs say that %s, which uses it, calls the function anyways, so it may be pointless but whatever. Oh, speaking of %s: That is seconds since the Unix epoch. Who knows how useful that will be when this calendar implementation starts at MSD 0 (like, 1873). Also, it’s martian seconds instead of Earth seconds. Fun shoutout to “%%”, “%t”, and “%n”, which required nothing, just setting the length of the item to “1” and returning the actual formatting character. Lol. Welp, now it’s time to test and drill this function into oblivion.
strfmarstime testing and verification - date time format locales The %c format specifier checks the system locale for how to format the date and time. Of course, it’s a good idea to test this. It took me a while.. unfortunately I don’t have a way of checking in test configuration if one of the formats is installed on the host system (see https://en.wikipedia.org/wiki/List_of_date_formats_by_country ). I also don’t really have a nice way (as far as I know) to set test environment variables. So what I ended on was in the test setup, just passing the LC_ALL environment variable. But this was broken for some reason? Ah, it turns out that my logic in strfmarstime to get the locale was incorrect. For some reason, setlocale ( LC_ALL , NULL ); does not work, and you have to use “”. My guess is that NULL goes to system default, and “” will read from environment variables. Yay! While Day-Month-Year format is straight forward, the few countries that use Year-Month-Day are driving me insane, like Hungary, because their formats have like, dots in them, and I’m not seeing much consistency across the other country’s formats that also have Year-Month-Day formatting. I’ll come back to it later. It’s actually broken anyway, because my week number representations are still wrong.
strpmarstime I took a break from validating strfmarstime because.. well I needed it. So I started doing the function that does the opposite, takes a string, parses into into a mars_tm structure. I am taking the same approach as musl, and enjoying myself, as in, because musl is able to lookup string matches by locale (because there is a fixed offset for dates), but I can’t, I have to manually search. But instead of copy pasting code I’m trying to setup a pointer to an array to check in a common code routine. And now I’m getting memory issues. Yay!
strpmarstime - basic implementation complete Using musl as a reference, I’ve completed an.. implementation, of strpmarstime. Yesterday I must’ve placed my energy wrong because I just wasn’t super motivated and didn’t do as much coding. Anyway: strpmarstime is the inverse of strfmarstime, taking a date-time formatted string and given its format, entering those values into a mars_tm struct. Everything made sense, mostly. There are still some areas of code I need to comment and reread to make sure I understand what is going on. But after strfmarstime, it isn’t too crazy. As usual, it does the things for string parsing, like str++ to move to the rest of the string’s characters, then it parses by item. In order to find values, I think that the calculations sort of estimate the character location of the number range, and then we import it. Challenges nl_langinfo Once again, I found myself in a situation where musl can lookup strings to match values like day and month names via numerical item addresses with nl_langinfo, but I cannot (as this is not a “standard” item index). Musl is able to use this item address to iterate through the list of potential matches, which is easy to do in common goto routines. For me, I had to basically make a pointer to an array of char* (so I had char**, once I figured it out), that was the “iteration_array”. Depending on the format, it would check the array for the match. The main confusing thing was really just the pointers. Spent about 10 minutes fighting with compiler errors until I figured it out with the help of stackoverflow and Google’s AI. By the way, using nl_langinfo_l, which I did in strfmarstime, does not exist in locale.h by default on macOS, it’s in xlocale.h, so I made a small configure define this morning to take care of that. The vague formats There are several ways of determining what # week of year we are in. One format says it’s the week with at least four days, and starts indexing at like, 1 I think? And then there are a few others? I can’t remember off the top of my head. Because there are no clear answers, I (and musl) have left these formats as “parse only”. This really impacts week number formats, which, I guess makes sense, because if you only have that, who knows what year you are in, and how many days are in the first full “week”, however you define that. Timezones Skipped for now, as I have yet to take care of this, and I think some proposed timekeeping systems actually don’t do the standard one-hour intervals.. I need to look into it. Future Welp, it’s off to testing and verification. Yay!
strfmarstime testing - week numbers Nothing crazy to report for the current testsuite and implementation verification I’ve been doing. Basically same thing as I did before I took a break for strpmarstime. For some formats, it will literally print anything (if it’s invalid), which appears to be normal in Glibc, so it’s normal to me. Some locale work too on AM/PM formatting and time formatting - some do “AM”, some do “am”, Spain does “a.m.”. The big thing is: Week Numbers Okay, so there are three different definitions of week numbers: %U: The first day of week 1 is on Sunday. Range 00 (because sometimes in January we don’t get to Sunday for a few days), up until 53 (sometimes we actually get 53 weeks due to day placement.) %V: ISO 8601, which has week 1 as the first week with at least 4 days in the new year. Range 01 to 53. (Week 0 would be represented by 52, in my testing) %W: The first day of week 1 is on Monday. But, here is the key thing about the Darian calendar: Each month resets the week. This is actually one of the things about the Gregorian Calendar some people don’t like-how the # of the day is on inconsistent weekdays. The Darian Calendar has a neat 28 days for each month, so with 7 days a week, this isn’t a problem. And since each week is guaranteed to have four days, we can just take the number of days and divide by 7. For %W, shift by 1, because Monday (Lunae) is not the first day of the week. However.. every 6th month is the end of a season, and it has 27 days. So we need to, in our calculations, which must go based off the nth day of the year, make sure we reset, otherwise we will lose our day alignment (because again, the week resets). So we need to realign every 167 days, and also check how many seasons passed and use that to get the amount of prior weeks we are skipping when we have modulated. As for the leap day: It divides perfectly by 7 and 167, so it gets its own if statement case (otherwise it would read “97”). Experience I knew this would be weird to figure out, and challenging, but I actually had a lot of fun doing it. It kept my brain working, I stayed energetic, and I managed to have fun, which is the most important thing! So after my long Pomodoro break, I’ll verify %W (since %U and %V are thee same), and then %w, %x, %X, %y and %Y and that will be it, since for an initial ship I don’t plan to do timezones.
Devlog now in case I switch from Macondo to Stardance. In the event that I need to, I will edit this with more details. Basically, I managed to work on strfmarstime, strpmarstime, ammarstime, and I’ve been drilling testcases.
Again, in case I switch back from Macondo. More fighting with leap years - I’ll have to use AI for help. In the meantime I created a marsdate program, and did wcsfmarstime (analogous to wcsftime). I also created some initial Rust bindings :)
again idk if I will be doing sd instead of macondo but anyways, been doing documentation :) I also fixed ammarstime and did bindings to other langs....
|
1793321304.5075936
|
1793926104.5075936
|
|
6028
|
licorice by @q | Stardance
|
q
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: licorice by @q | Stardance
|
1793426175.7524548
|
1794030975.7524548
|
|
59683
|
lidar scan project by @mach_speed | Stardance
|
mach_speed
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lidar scan project by @mach_speed | Stardan Title: lidar scan project by @mach_speed | Stardance...
|
1793638038.0030246
|
1794242838.0030246
|
|
68496
|
life by @Allura | Stardance
|
Allura
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: life by @Allura | Stardance
|
1793123310.7877095
|
1793728110.7877095
|
|
30472
|
life on mars by @aiza_asad | Stardance
|
aiza_asad
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: life on mars by @aiza_asad | Stardance
|
1792907414.6272578
|
1793771414.6272578
|
|
11267
|
lift by @fabianbuthere | Stardance
|
fabianbuthere
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-13T13:07:44Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A simple CLI-tool to share data quickly, without needing to trust external servers with your data. I spend lots of time transferring video and audio files from my main PC to my or to my audio workstation PC. This meant uploading my file to some drive, just so I can download it again. And doing that on 20Mbit/s is less than great. After recently having learnt Rust’s async and networking functionalities, I thought, why not make a tool for that? So I wrote lift, which allows me to send files between my devices at atleast twice the speed of using a drive, because the files are never uploaded to anywhere. It’s also more secure, because you don’t have to trust Google, Microsoft, Dropbox, Limewire or anyone else with your files. It also makes your files accessible even from outside your network using your generated link with bore. But, if having an external server potentially knowing the route to your file already seems too sketchy for you, you can just configure another bore server. If you just need to share files within your own network you can use local mode, which will make the file accessible only on your LAN, stripping the need for a bore server. If you want to be 1000% sure, you can also encrypt the file using your own or a randomly generated passphrase, which the receiving device can decrypt with the age CLI utility.", "repo": "https://github.com/Fabian2611/lift", "demo": "https://crates.io/crates/lifter"}]...
|
[{"post_id": 27652, "ts": "202 [{"post_id": 27652, "ts": "2026-07-13T12:45:49Z", "hours": 1.3117, "text": "Implemented local and encrypted modes, ready for v1.4.0 which will be shipped! Lift can now: encrypt files using a custom or random passphrase using age open files only for access on the local network, if no outside communication is needed (also stripping the need for an external bore server)"}, {"post_id": 5056, "ts": "2026-06-08T18:37:36Z", "hours": 2.5522, "text": "v1.3.0 just shipped! I switched from warp to axum to use async streams, which ensure that the TCP stream is held until the download is finished - which enables sharing of bigger files, even on slow internet connections. I’m really proud of the small methods for optimisation I could find - and that I managed to build without a single clippy-all warning! The next step is encryption, to ward against man-in-the-middle attacks - although it’s already really difficult to get a hold of any data transmitted over lift. Install it now via cargo install lifter :3"}]...
|
Title: lift by @fabianbuthere | Stardance
Devlogs Title: lift by @fabianbuthere | Stardance
Devlogs:
v1.3.0 just shipped! I switched from warp to axum to use async streams, which ensure that the TCP stream is held until the download is finished - which enables sharing of bigger files, even on slow internet connections. I’m really proud of the small methods for optimisation I could find - and that I managed to build without a single clippy-all warning! The next step is encryption, to ward against man-in-the-middle attacks - although it’s already really difficult to get a hold of any data transmitted over lift. Install it now via cargo install lifter :3
Implemented local and encrypted modes, ready for v1.4.0 which will be shipped! Lift can now: encrypt files using a custom or random passphrase using age open files only for access on the local network, if no outside communication is needed (also stripping the need for an external bore server)
Ships:
A simple CLI-tool to share data quickly, without needing to trust external servers with your data. I spend lots of time transferring video and audio files from my main PC to my or to my audio workstation PC. This meant uploading my file to some drive, just so I can download it again. And doing that on 20Mbit/s is less than great. After recently having learnt Rust’s async and networking functionalities, I thought, why not make a tool for that? So I wrote lift, which allows me to send files between my devices at atleast twice the speed of using a drive, because the files are never uploaded to anywhere. It’s also more secure, because you don’t have to trust Google, Microsoft, Dropbox, Limewire or anyone else with your files. It also makes your files accessible even from outside your network using your generated link with bore. But, if having an external server potentially knowing the route to your file already seems too sketchy for you, you can just configure another bore server. If you just need to share files within your own network you can use local mode, which will make the file accessible only on your LAN, stripping the need for a bore server. If you want to be 1000% sure, you can also encrypt the file using your own or a randomly generated passphrase, which the receiving device can decrypt with the age CLI utility....
|
1793616766.0347693
|
1793703166.0347693
|
|
59790
|
liftED by @elizabethwanjiku83924 | Stardance
|
elizabethwanjiku83924
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: liftED by @elizabethwanjiku83924 | Stardanc Title: liftED by @elizabethwanjiku83924 | Stardance...
|
1793638346.636273
|
1794243146.636273
|
|
21991
|
light source simulator by @Voidlace | Stardance
|
Voidlace
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: light source simulator by @Voidlace | Stard Title: light source simulator by @Voidlace | Stardance...
|
1793386255.9085586
|
1793991055.9085586
|
|
20411
|
light timer by @nluca2k12 | Stardance
|
nluca2k12
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: light timer by @nluca2k12 | Stardance
|
1793256791.4954827
|
1793861591.4954827
|
|
60350
|
lighthing chaos by @Joely | Stardance
|
Joely
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lighthing chaos by @Joely | Stardance
|
1793641889.6131237
|
1794246689.6131237
|
|
25127
|
lighthouse-v1 by @yanhee | Stardance
|
yanhee
|
0
|
1.06
|
0
|
[]
|
[{"post_id": 15659, "ts": "202 [{"post_id": 15659, "ts": "2026-06-25T13:51:42Z", "hours": 1.0592, "text": "hii its my first devlog posted on stardust, and the project im working on is actually a web game, based on javascript. so the game requires u to keep spinning, like a radar, to identify zombies around, and click to shoot. i plan to have three modes in the future, but unfortunately its still under development, so we only hv one mode, which is infinite (endless) mode for now. but i’ll keep developing until im satisfied with it!"}]...
|
Title: lighthouse-v1 by @yanhee | Stardance
Devlo Title: lighthouse-v1 by @yanhee | Stardance
Devlogs:
hii its my first devlog posted on stardust, and the project im working on is actually a web game, based on javascript. so the game requires u to keep spinning, like a radar, to identify zombies around, and click to shoot. i plan to have three modes in the future, but unfortunately its still under development, so we only hv one mode, which is infinite (endless) mode for now. but i’ll keep developing until im satisfied with it!...
|
1793537839.868198
|
1794142639.868198
|
|
50957
|
lightning detector by @SohamKaran | Stardance
|
SohamKaran
|
0
|
8.3
|
0
|
[]
|
[{"post_id": 59710, "ts": "202 [{"post_id": 59710, "ts": "2026-09-01T17:11:06Z", "hours": 8.2989, "text": "yesterday I faced some such lightning strikes so from this I decided to build a detector that can detect lightning strikes so after finding proper parts for this project I started drawing the SCH and after that I designed the PCB and also write the code which take me some time but I done that and at the end I made the repo and create the BOM and add al the parts include buy links and after all this I am ready to upload this project to get funding"}]...
|
Title: lightning detector by @SohamKaran | Stardan Title: lightning detector by @SohamKaran | Stardance
Devlogs:
yesterday I faced some such lightning strikes so from this I decided to build a detector that can detect lightning strikes so after finding proper parts for this project I started drawing the SCH and after that I designed the PCB and also write the code which take me some time but I done that and at the end I made the repo and create the BOM and add al the parts include buy links and after all this I am ready to upload this project to get funding...
|
1793368547.0300975
|
1793973347.0300975
|
|
52617
|
lightshell by @kerlo | Stardance
|
kerlo
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T22:45:37Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "lightshell My own UNIX shell written in C++. It’s fast and lightweight and I’m trying to implement every useful shell function that I need!", "repo": "https://github.com/Kerlooo/lightshell", "demo": "https://github.com/Kerlooo/lightshell/blob/main/main.cpp"}]...
|
[{"post_id": 53396, "ts": "202 [{"post_id": 53396, "ts": "2026-08-23T22:40:06Z", "hours": 0.5514, "text": "Project update Now I created my makefile to build the project with some optimizations compiler flags! I also updated README.md and created a function to delete the history commands."}, {"post_id": 52022, "ts": "2026-08-22T01:52:57Z", "hours": 1.6469, "text": "Hello everyone! After a long time, I finally started programming again! Today I wanted to try to create a shell because… why not? So I present to you lightshell, my own unix shell written in C++. The size of the compiled source is WAY LESS than 1MB and I’m working hard to understand all the C++ libraries that I need. Let me know if you’d like some new features!"}]...
|
Title: lightshell by @kerlo | Stardance
Devlogs:
Title: lightshell by @kerlo | Stardance
Devlogs:
Hello everyone! After a long time, I finally started programming again! Today I wanted to try to create a shell because… why not? So I present to you lightshell, my own unix shell written in C++. The size of the compiled source is WAY LESS than 1MB and I’m working hard to understand all the C++ libraries that I need. Let me know if you’d like some new features!
Project update Now I created my makefile to build the project with some optimizations compiler flags! I also updated README.md and created a function to delete the history commands.
Ships:
lightshell My own UNIX shell written in C++. It’s fast and lightweight and I’m trying to implement every useful shell function that I need!...
|
1793609486.8300939
|
1793695886.8300939
|
|
30985
|
lightweight NAS by @Nasser | Stardance
|
Nasser
|
1
|
34.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T01:43:39Z", "hours": 34.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "About this project a NAS ( Network Attached Storage ) Which is basically a storage system that gets attached to your network, so you can manage your memory card (a real NAS usually uses hard drives) files, upload, download, delete, and so on, without any need for a physical connection. All of it is done over the network, so you won’t need to open and reopen your SIM slot to get or insert the memory card, and use the USB card adapter every time you need to transfer some files from your phone to your laptop when Bluetooth fails, or the file is too large. Now, there’s no need for all this chaos, because this device is now accessible from almost any device you have, as long as it’s on the same network. For more about getting started with this, please check my GitHub repository. Well, you might say, “He ended up spending 34 hours solving a 10-minute problem.” Well, maybe yes, but the difference becomes much more evident when you’re in a rush and Bluetooth just refuses to pair, or the connection fails for some unknown reason. Then you’ve got to sit there and spend a few nice hours trying to figure out where the problem is. Time is gold, buddy. Well, again, this project was challenging, from creating each of the backend modules, managing storage and the FileService , to the HTTP server, which was one of the hardest parts to debug after the JavaScript issues. But the hardest part revolved around making all the modules work together, the frontend and the backend, to display the right values. I’m proud of myself because I fixed a lot of issues and learned a lot of new things about project and code management. That’s it for this version. If you want to know how to use it, please check my README. Thank you, and always remember: “The devotion of the greatest is to encounter danger, and play dice for death.”", "repo": "https://github.com/karimsm16/a-lightweight-NAS", "demo": "https://youtu.be/0M4kWjUGIP0"}]...
|
[{"post_id": 40467, "ts": "202 [{"post_id": 40467, "ts": "2026-08-04T00:44:51Z", "hours": 1.1742, "text": "I created the ReadME , and completed the project info implementation"}, {"post_id": 40180, "ts": "2026-08-03T16:12:08Z", "hours": 5.2442, "text": "Devlog Since the last devlog, I completed the remaining work needed to finish the first milestone of the ESP32 NAS project (Mayby the first and the last ) . On the backend, I added the missing HTTP API endpoints for storage information, file listing, downloading, uploading, deleting, renaming, and creating folders, along with their corresponding request handlers. The FileService was also extended to support multiple missions (it will be long so I will not cover them here). On the frontend, I finished the JavaScript logic by implementing storage usage monitoring with a live progress bar, storage statistics in both the dashboard and footer, file upload, download, delete, rename, and folder creation, client-side search (still working o it), automatic refresh of file and storage information, and proper initialization when the page loads. With these additions and fixes, this milestone is now complete. I tried it , and it’s fully functional , The ESP32 NAS now provides a smooth web interface with complete file management capabilities and live storage monitoring. well, it was a fasciniting project , and I really learned a lot, I ’m proud of it .(yeah,after I get a headache during debugging ) ."}, {"post_id": 39527, "ts": "2026-08-02T15:18:20Z", "hours": 4.2222, "text": "since the last time , I tried to turn the interface to a multi-page interface that contains the 3 main sections files , Network , Settings and I tried to integrate java script navigation , between pages and itms , and during this I got some javascript issues ,because the javascript file refused loadeding , but I fixed it later , after completing the navigation process I created an /api/network endpoint that returns live Wi-Fi information from the ESP32, and connected the Network page,I also implemented the /api/files API in the HTTP server, which converts the FileService output into JSON, then I started laying the foundation for folder navigation , which will allow the browser to navigate directories just like a desktop file explorer.**important note :**the data in the screenshot is fake because I run UI files in the live server , not yet to the esp32"}, {"post_id": 38881, "ts": "2026-08-01T13:26:44Z", "hours": 11.205, "text": "DEVLOG (3)This week I focused on improving both the backend architecture and the web interface of the ESP32 NAS.I finished refactoring the FileService and HttpServer classes . I also implemented the first HTTP API endpoints that will allow the frontend to communicate with the ESP32, I really struggled to make the HTTP server work .On the frontend, I redesigned the HTML layout, cleaned up the structure, fixed some dumb problems , and introduced dedicated pages for Files , Network , and Settings . for the actual moment the backend is ready , and the same thing for the frontend (I will improve it later) , now I have to connect them all through JavaScript and the REST API.well I come along a hard way to this , but it deserves it"}, {"post_id": 36096, "ts": "2026-07-27T23:37:26Z", "hours": 4.6772, "text": "DEVLOG (3) BEHOLD!!!!! Today’s session was all about strengthening the software architecture of the ESP32 NAS. Completed Finished the SDManager module. Successfully initialized and tested the SD card. Built the WiFiManager module and established a successful Wi-Fi connection. Started developing the FileService module. Implemented the following file operations: exists() createFolder() deleteFile() deleteFolder() rename() fileSize() copyFile() moveFile() Resolved multiple compilation and IntelliSense issues while improving the project structure. ’The next ’milestone is integrating these modules with the web server and building the NAS interface. Stay tuned."}, {"post_id": 35350, "ts": "2026-07-26T17:56:07Z", "hours": 4.3428, "text": "DEVLOG (1) BEHOLD!!!!! Today I finished one of the core modules of the ESP32 NAS project: SDManager . The pupose of this module is simple: make the SD card completely independent from the rest of the project. From now on, no other class will communicate directly with SD.h ; everything goes through SDManager . Implemented features SD card initialization Card mounting status Total storage capacity Used storage Free storage Card type detection (SDSC / SDHC / SDXC) File existence check Open files Create folders Rename files and folders Delete files Debug information through the Serial Monitor I also spent a good amount of time debugging the module. Most of the issues were caused by mismatched function declarations, missing braces, incorrect return types, and a few IntelliSense false positives. After fixing them one by one, the project finally compiled successfully. Finally, I connected the SD card to the ESP32 and verified that everything works correctly. The board successfully detects the SD card and prints its information, including storage capacity and available space. With the storage layer now complete, the foundation of the project is becoming much stronger. Next step: build the WiFiManager module and add mDNS support so the NAS can be accessed using a hostname"}, {"post_id": 33993, "ts": "2026-07-24T11:56:35Z", "hours": 3.5872, "text": "The Story Behind This Project One day, I wanted to transfer some files from the SD card in my phone to my desktop. I thought it would be easy—just send them over Bluetooth. Well… that’s not what happened. I tried transferring the files using Bluetooth, but every single time the connection failed. Then I had to pair the two devices again, only for the transfer to fail once more. I kept thinking, “Come on, it shouldn’t be this hard.” After wasting almost an hour of my precious time (and remember, 1 hour of my precious time = $100 ), I looked at my second option. Remove the SIM tray. Take out the SD card. Put it into a USB card reader. Plug it into the computer. Transfer the files. Remove the card again. Open the SIM tray again. Put the SD card back. Nope. I really dislike opening and reopening the SIM tray every time I need to transfer a few files. So there I was, stuck between two terrible options: Bluetooth ( damn BLE ). USB card reader ( damn that too ). Then I remembered something… or maybe I just invented it. “When you have two bad options, don’t choose either of them. Make a third one.” I don’t even know if SpongeBob ever said that. Probably not. But it sounded meaningful enough to me. So I rolled up my sleeves and decided to build something that would solve the problem once and for all. Something fast. Something reliable. Something that uses Wi-Fi instead of Bluetooth . After a lot of thinking… and thinking… and more thinking (okay, and not that much research >-<), I finally decided to build a lightweight NAS powered by an ESP32. So I started sketching the web interface and began coding it. Right now, it’s a little rough around the edges (okay… maybe more than a little >_<), but that’s completely fine. My goal isn’t to make it perfect on day one—it’s to build a solid foundation first and improve the design as the project evolves. Moral of the story: Always listen to SpongeBob. Thanks, Bob."}]...
|
Title: lightweight NAS by @Nasser | Stardance
Dev Title: lightweight NAS by @Nasser | Stardance
Devlogs:
The Story Behind This Project One day, I wanted to transfer some files from the SD card in my phone to my desktop. I thought it would be easy—just send them over Bluetooth. Well… that’s not what happened. I tried transferring the files using Bluetooth, but every single time the connection failed. Then I had to pair the two devices again, only for the transfer to fail once more. I kept thinking, “Come on, it shouldn’t be this hard.” After wasting almost an hour of my precious time (and remember, 1 hour of my precious time = $100 ), I looked at my second option. Remove the SIM tray. Take out the SD card. Put it into a USB card reader. Plug it into the computer. Transfer the files. Remove the card again. Open the SIM tray again. Put the SD card back. Nope. I really dislike opening and reopening the SIM tray every time I need to transfer a few files. So there I was, stuck between two terrible options: Bluetooth ( damn BLE ). USB card reader ( damn that too ). Then I remembered something… or maybe I just invented it. “When you have two bad options, don’t choose either of them. Make a third one.” I don’t even know if SpongeBob ever said that. Probably not. But it sounded meaningful enough to me. So I rolled up my sleeves and decided to build something that would solve the problem once and for all. Something fast. Something reliable. Something that uses Wi-Fi instead of Bluetooth . After a lot of thinking… and thinking… and more thinking (okay, and not that much research >-<), I finally decided to build a lightweight NAS powered by an ESP32. So I started sketching the web interface and began coding it. Right now, it’s a little rough around the edges (okay… maybe more than a little >_<), but that’s completely fine. My goal isn’t to make it perfect on day one—it’s to build a solid foundation first and improve the design as the project evolves. Moral of the story: Always listen to SpongeBob. Thanks, Bob.
DEVLOG (1) BEHOLD!!!!! Today I finished one of the core modules of the ESP32 NAS project: SDManager . The pupose of this module is simple: make the SD card completely independent from the rest of the project. From now on, no other class will communicate directly with SD.h ; everything goes through SDManager . Implemented features SD card initialization Card mounting status Total storage capacity Used storage Free storage Card type detection (SDSC / SDHC / SDXC) File existence check Open files Create folders Rename files and folders Delete files Debug information through the Serial Monitor I also spent a good amount of time debugging the module. Most of the issues were caused by mismatched function declarations, missing braces, incorrect return types, and a few IntelliSense false positives. After fixing them one by one, the project finally compiled successfully. Finally, I connected the SD card to the ESP32 and verified that everything works correctly. The board successfully detects the SD card and prints its information, including storage capacity and available space. With the storage layer now complete, the foundation of the project is becoming much stronger. Next step: build the WiFiManager module and add mDNS support so the NAS can be accessed using a hostname
DEVLOG (3) BEHOLD!!!!! Today’s session was all about strengthening the software architecture of the ESP32 NAS. Completed Finished the SDManager module. Successfully initialized and tested the SD card. Built the WiFiManager module and established a successful Wi-Fi connection. Started developing the FileService module. Implemented the following file operations: exists() createFolder() deleteFile() deleteFolder() rename() fileSize() copyFile() moveFile() Resolved multiple compilation and IntelliSense issues while improving the project structure. ’The next ’milestone is integrating these modules with the web server and building the NAS interface. Stay tuned.
DEVLOG (3)This week I focused on improving both the backend architecture and the web interface of the ESP32 NAS.I finished refactoring the FileService and HttpServer classes . I also implemented the first HTTP API endpoints that will allow the frontend to communicate with the ESP32, I really struggled to make the HTTP server work .On the frontend, I redesigned the HTML layout, cleaned up the structure, fixed some dumb problems , and introduced dedicated pages for Files , Network , and Settings . for the actual moment the backend is ready , and the same thing for the frontend (I will improve it later) , now I have to connect them all through JavaScript and the REST API.well I come along a hard way to this , but it deserves it
since the last time , I tried to turn the interface to a multi-page interface that contains the 3 main sections files , Network , Settings and I tried to integrate java script navigation , between pages and itms , and during this I got some javascript issues ,because the javascript file refused loadeding , but I fixed it later , after completing the navigation process I created an /api/network endpoint that returns live Wi-Fi information from the ESP32, and connected the Network page,I also implemented the /api/files API in the HTTP server, which converts the FileService output into JSON, then I started laying the foundation for folder navigation , which will allow the browser to navigate directories just like a desktop file explorer.**important note :**the data in the screenshot is fake because I run UI files in the live server , not yet to the esp32
Devlog Since the last devlog, I completed the remaining work needed to finish the first milestone of the ESP32 NAS project (Mayby the first and the last ) . On the backend, I added the missing HTTP API endpoints for storage information, file listing, downloading, uploading, deleting, renaming, and creating folders, along with their corresponding request handlers. The FileService was also extended to support multiple missions (it will be long so I will not cover them here). On the frontend, I finished the JavaScript logic by implementing storage usage monitoring with a live progress bar, storage statistics in both the dashboard and footer, file upload, download, delete, rename, and folder creation, client-side search (still working o it), automatic refresh of file and storage information, and proper initialization when the page loads. With these additions and fixes, this milestone is now complete. I tried it , and it’s fully functional , The ESP32 NAS now provides a smooth web interface with complete file management capabilities and live storage monitoring. well, it was a fasciniting project , and I really learned a lot, I ’m proud of it .(yeah,after I get a headache during debugging ) .
I created the ReadME , and completed the project info implementation
Ships:
About this project a NAS ( Network Attached Storage ) Which is basically a storage system that gets attached to your network, so you can manage your memory card (a real NAS usually uses hard drives) files, upload, download, delete, and so on, without any need for a physical connection. All of it is done over the network, so you won’t need to open and reopen your SIM slot to get or insert the memory card, and use the USB card adapter every time you need to transfer some files from your phone to your laptop when Bluetooth fails, or the file is too large. Now, there’s no need for all this chaos, because this device is now accessible from almost any device you have, as long as it’s on the same network. For more about getting started with this, please check my GitHub repository. Well, you might say, “He ended up spending 34 hours solving a 10-minute problem.” Well, maybe yes, but the difference becomes much more evident when you’re in a rush and Bluetooth just refuses to pair, or the connection fails for some unknown reason. Then you’ve got to sit there and spend a few nice hours trying to figure out where the problem is. Time is gold, buddy. Well, again, this project was challenging, from creating each of the backend modules, managing storage and the FileService , to the HTTP server, which was one of the hardest parts to debug after the JavaScript issues. But the hardest part revolved around making all the modules work together, the frontend and the backend, to display the right values. I’m proud of myself because I fixed a lot of issues and learned a lot of new things about project and code management. That’s it for this version. If you want to know how to use it, please check my README. Thank you, and always remember: “The devotion of the greatest is to encounter danger, and play dice for death.”...
|
1793623925.513008
|
1793710325.513008
|
|
71307
|
lightwieght debian 13 xfce rice by @thomasmatthews lightwieght debian 13 xfce rice by @thomasmatthews | Stardance...
|
thomasmatthews
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lightwieght debian 13 xfce rice by @thomasm Title: lightwieght debian 13 xfce rice by @thomasmatthews | Stardance...
|
1793598582.0979998
|
1794203382.0979998
|
|
30851
|
lil guy by @Vidhusha | Stardance
|
Vidhusha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lil guy by @Vidhusha | Stardance
|
1793163205.857161
|
1793768005.857161
|
|
47204
|
lil kitty by @amandayu025 | Stardance
|
amandayu025
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lil kitty by @amandayu025 | Stardance
|
1793173737.5294983
|
1793778537.5294983
|
|
48538
|
lil project by @hrishir746 | Stardance
|
hrishir746
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T22:52:02Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made COSMOS, a cinematic NASA Astronomy Picture of the Day explorer. The hardest part was getting the NASA API working correctly on deployment and making it look good on different screen sizes. I’m proud of the Explore Time date picker, which lets you jump to older APODs instead of only seeing today’s image and explore all of the beatiful images. To test it, open the live site, pick a different date, and make sure the image/video, title, date, and Mission Brief update.", "repo": "https://github.com/hrishir746/idk-", "demo": "https://hrishir746.github.io/idk-/"}]...
|
[{"post_id": 47771, "ts": "202 [{"post_id": 47771, "ts": "2026-08-15T22:48:13Z", "hours": 0.3222, "text": "Finished the project and added my own features which is an Explore Time date picker that lets you jump to past NASA Astronomy Pictures of the Day. I also finished the fullscreen cinematic UI, README, and GitHub Pages deployment. I also double checked the api."}, {"post_id": 47751, "ts": "2026-08-15T21:47:36Z", "hours": 0.5769, "text": "I Built out the first working version of the NASA APOD website, I connected the site to NASA’s API so it loads the current image, title, date, and the explanation, then started redesigning the page for the image to be nearly full-screen for the imax/cinematic experience i was chasing, then I moved the title over the image, and changed the Mission Brief (data explanation) into a full width section under the image."}, {"post_id": 47731, "ts": "2026-08-15T20:55:24Z", "hours": 0.3381, "text": "set up the project foundation today. created the Vite app, configured the NASA API key, created and linked the GitHub repo, and set up GitHub Pages deployment. I also am thinking to go the christopher nolan intersdtellar cinematic space vibe"}]...
|
Title: lil project by @hrishir746 | Stardance
Dev Title: lil project by @hrishir746 | Stardance
Devlogs:
set up the project foundation today. created the Vite app, configured the NASA API key, created and linked the GitHub repo, and set up GitHub Pages deployment. I also am thinking to go the christopher nolan intersdtellar cinematic space vibe
I Built out the first working version of the NASA APOD website, I connected the site to NASA’s API so it loads the current image, title, date, and the explanation, then started redesigning the page for the image to be nearly full-screen for the imax/cinematic experience i was chasing, then I moved the title over the image, and changed the Mission Brief (data explanation) into a full width section under the image.
Finished the project and added my own features which is an Explore Time date picker that lets you jump to past NASA Astronomy Pictures of the Day. I also finished the fullscreen cinematic UI, README, and GitHub Pages deployment. I also double checked the api.
Ships:
I made COSMOS, a cinematic NASA Astronomy Picture of the Day explorer. The hardest part was getting the NASA API working correctly on deployment and making it look good on different screen sizes. I’m proud of the Explore Time date picker, which lets you jump to older APODs instead of only seeing today’s image and explore all of the beatiful images. To test it, open the live site, pick a different date, and make sure the image/video, title, date, and Mission Brief update....
|
1793598960.5532022
|
1793685360.5532022
|
|
4795
|
lil z site by @justjason | Stardance
|
justjason
|
0
|
6.52
|
0
|
[]
|
[{"post_id": 3389, "ts": "2026 [{"post_id": 3389, "ts": "2026-06-06T09:04:38Z", "hours": 2.0228, "text": "Added colors, sizes and you the information actually gets uploaded to a server now. It’s much more mobile friendly too"}, {"post_id": 2729, "ts": "2026-06-05T14:13:41Z", "hours": 2.48, "text": "added black designs and the only me! tshirt desingn. added the indivdual item pre-order page with a image slider and color selector. Now working on the size selector and the actual pre-order form"}, {"post_id": 2021, "ts": "2026-06-04T09:33:22Z", "hours": 0.8942, "text": "I made some design changes and new designs. Took way too long for the black I hate lil z shirts"}, {"post_id": 1399, "ts": "2026-06-03T12:34:27Z", "hours": 1.1217, "text": "starting out the site, makin the designs for the shirt took way too long tho. looks buns rn but i’m just tryinig to make it work"}]...
|
Title: lil z site by @justjason | Stardance
Devlo Title: lil z site by @justjason | Stardance
Devlogs:
starting out the site, makin the designs for the shirt took way too long tho. looks buns rn but i’m just tryinig to make it work
I made some design changes and new designs. Took way too long for the black I hate lil z shirts
added black designs and the only me! tshirt desingn. added the indivdual item pre-order page with a image slider and color selector. Now working on the size selector and the actual pre-order form
Added colors, sizes and you the information actually gets uploaded to a server now. It’s much more mobile friendly too...
|
1793462221.792235
|
1794067021.792235
|
|
15595
|
lilshark !!! by @kingkev | Stardance
|
kingkev
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-30T23:32:01Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "oh so I made a bot that gives some random marine-related facts. it was both my first hackclub project and my first interaction with github. i tried my best, it was fun especially the idea of connecting it to ocean life. the facts are handwritten so they are not too many, but still :D", "repo": "https://github.com/Lunaa133/stardance_hackclub_slackbot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BTZBJ31CM"}]...
|
[{"post_id": 9198, "ts": "2026 [{"post_id": 9198, "ts": "2026-06-15T13:16:32Z", "hours": 0.4114, "text": "my first stardance projectt / slackbot"}]...
|
Title: lilshark !!! by @kingkev | Stardance
Devlo Title: lilshark !!! by @kingkev | Stardance
Devlogs:
my first stardance projectt / slackbot
Ships:
oh so I made a bot that gives some random marine-related facts. it was both my first hackclub project and my first interaction with github. i tried my best, it was fun especially the idea of connecting it to ocean life. the facts are handwritten so they are not too many, but still :D...
|
1793573782.031786
|
1793660182.031786
|
|
62485
|
line following racer robot by @neko_ginger_ale | S line following racer robot by @neko_ginger_ale | Stardance...
|
neko_ginger_ale
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: line following racer robot by @neko_ginger_ Title: line following racer robot by @neko_ginger_ale | Stardance...
|
1793044450.214789
|
1793649250.214789
|
|
47944
|
line following robot by @jnm277 | Stardance
|
jnm277
|
0
|
1.33
|
0
|
[]
|
[{"post_id": 47269, "ts": "202 [{"post_id": 47269, "ts": "2026-08-15T02:48:51Z", "hours": 1.3336, "text": "started making the schematic, finished setting up the sensors, motor driver and the MCU"}]...
|
Title: line following robot by @jnm277 | Stardance Title: line following robot by @jnm277 | Stardance
Devlogs:
started making the schematic, finished setting up the sensors, motor driver and the MCU...
|
1793202572.047882
|
1793807372.047882
|
|
22979
|
line following robot by @pravinpandeypra | Stardan line following robot by @pravinpandeypra | Stardance...
|
pravinpandeypra
|
0
|
1.98
|
0
|
[]
|
[{"post_id": 33443, "ts": "202 [{"post_id": 33443, "ts": "2026-07-23T12:24:49Z", "hours": 0.9003, "text": "Sensor calibration"}, {"post_id": 30788, "ts": "2026-07-18T17:52:38Z", "hours": 0.4833, "text": "Working on making it compact but at the end had to use an UNO due to unavailable parts"}, {"post_id": 29554, "ts": "2026-07-16T16:02:14Z", "hours": 0.6003, "text": "Working on the 3d models. Defining dimensions, components and overall build"}]...
|
Title: line following robot by @pravinpandeypra | Title: line following robot by @pravinpandeypra | Stardance
Devlogs:
Working on the 3d models. Defining dimensions, components and overall build
Working on making it compact but at the end had to use an UNO due to unavailable parts
Sensor calibration...
|
1793494512.864461
|
1794099312.864461
|
|
22514
|
line-follower by @MayS10 | Stardance
|
MayS10
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: line-follower by @MayS10 | Stardance
|
1793371701.2967014
|
1793976501.2967014
|
|
32195
|
linie folowa by @labapula | Stardance
|
labapula
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: linie folowa by @labapula | Stardance
|
1793551767.104422
|
1794156567.104422
|
|
57992
|
link - probe by @ayman | Stardance
|
ayman
|
1
|
30.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T21:53:53Z", "hours": 30.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What I made linkprobe measures what a network does to messages between two machines: round-trip time, packet loss, and how many packets get lost in a row (bursts). It can degrade the link on purpose with 5 profiles: clean, latency-ladder, jitter, bernoulli-loss, and gilbert-elliott. I built it because robots that depend on a reply every control cycle get hurt way more by losses in a row than by random single losses, but a lot of tests assume losses are independent. Main result At the same 10% loss rate, Gilbert-Elliott bursts were about 4.4x longer than Bernoulli bursts (around 4.9 vs 1.1 packets), and the longest burst was 29 packets vs 5, across 3 seeds. With jitter, the deadline had to be 176 ms to get missed packets under 1%. What was challenging I found a bug where my client saved replies under the wrong packet. A late reply got recorded as the next packet’s reply, and every packet after that was shifted by one. Nothing crashed, the data was just wrong. I fixed it by giving every packet a deadline and only accepting the reply with the matching sequence number. Without that, every jitter run would have been garbage. Fixing Hackatime also took a lot of time. What I’m proud of Learning how researchers actually model packet loss, building the Gilbert-Elliott channel myself, and checking my results: a replay check across 60,000 packets found only one mismatch, and pytest tests cover the channel functions. I also learned a lot of new coding libraries and tricks for the future How to test it git clone https://github.com/AymanM-Projects/linkprobe pip install -r requirements.txt python run_all.py (runs all the profiles; the full set takes a while) python analyze.py, then run the plot_*.py files to make the graphs Everything runs on one computer over loopback, so the only delay and loss are the ones linkprobe adds. Full results are in RESULTS.md.", "repo": "https://github.com/AymanM-Projects/linkprobe", "demo": "https://github.com/AymanM-Projects/linkprobe/releases/tag/v1.0.1"}]...
|
[{"post_id": 82803, "ts": "202 [{"post_id": 82803, "ts": "2026-10-25T21:09:39Z", "hours": 0.4233, "text": "I finished cleaning up RESULTS.md, added some more limitations, and fixed some discrepancies."}, {"post_id": 82773, "ts": "2026-10-25T20:01:31Z", "hours": 0.6539, "text": "I fixed my citations and also added a different section for people interested in running my program."}, {"post_id": 82733, "ts": "2026-10-25T18:10:04Z", "hours": 0.6367, "text": "Commented through analyze.py."}, {"post_id": 82487, "ts": "2026-10-24T23:25:02Z", "hours": 0.5997, "text": "I finished commenting through echo_client.py."}, {"post_id": 82474, "ts": "2026-10-24T22:19:23Z", "hours": 1.7253, "text": "I commented through channel.py so it is easier to read the documentation and understand it."}, {"post_id": 80816, "ts": "2026-10-18T21:28:52Z", "hours": 0.7186, "text": "Using pytest, I added a test_channel.py file that checks 3 of the functions in my code: make_channel, adding Bernoulli loss, and changing GE burst lengths."}, {"post_id": 80782, "ts": "2026-10-18T19:37:04Z", "hours": 0.3919, "text": "FIxed readme and added to results.md"}, {"post_id": 80769, "ts": "2026-10-18T18:50:47Z", "hours": 0.4819, "text": "OK, next I made a new plot to analyze the missed packet deadline percentage for my latency ladder and jitter runs. We can see that all the latency ladders show a similar shape with a horizontal shift, while the jitter run has an S-shaped curve with an inflection point around 100 ms."}, {"post_id": 80752, "ts": "2026-10-18T18:19:02Z", "hours": 0.7853, "text": "I made a new Python file that creates a new figure using matplotlib, and it measures the median and p99 RTT for my latency ladder. I will now add this into my RESULTS.md."}, {"post_id": 79694, "ts": "2026-10-15T02:45:04Z", "hours": 0.5592, "text": "So I worked on fixing and updating my plot.py with some features. I added a title version, fixed the y-axis labeling, and then added a theoretical value using the definitions of GE loss and Bernoulli loss. Something we see is that in the real data there is a staircase step, due to burst values being only integers, while the theoretical value is a straight line. Here is a before and after."}, {"post_id": 79684, "ts": "2026-10-15T01:52:08Z", "hours": 0.6667, "text": "Added sections 5–7 to RESULTS.md, which talk about the limitations, and I also talked about the .py file I made yesterday."}, {"post_id": 79193, "ts": "2026-10-12T23:38:32Z", "hours": 1.2231, "text": "i added a new file that is supposed to check across all runs if the value in the csv matches with my decide function to check my seeds. Out of 60000 packets i only got one mismatch"}, {"post_id": 79175, "ts": "2026-10-12T21:57:42Z", "hours": 1.8461, "text": "I first added requirements.txt to my repo for people who want to rerun or add onto the experiment, and I also made sure to include instructions to repeat it in my README. Then I fixed some rounding errors in my summary.csv and also added a RESULTS.md that I have not finished yet."}, {"post_id": 75382, "ts": "2026-09-29T21:50:15Z", "hours": 2.2731, "text": "I used matplotlib to make a graph of my burst results. The x-axis is the burst length (how many packets are lost in a row), and the y-axis is the percentage of bursts that were greater than or equal to the k value. You obviously see a declining trend for both, because it’s much harder for a random point to lose a lot of packets in a row. We see a big difference between Gilbert-Elliott and Bernoulli here, and the difference between the two packet loss calculation methods."}, {"post_id": 74615, "ts": "2026-09-27T19:42:56Z", "hours": 0.3431, "text": "So now I worked on making another CSV as part of analyze.py, which counts how many bursts were in each run and the length and frequency of the bursts. A burst is basically how many packets were lost in a row. Now I am going to download matplotlib to plot it, see how my data and experiment actually work, and try to understand my results."}, {"post_id": 74562, "ts": "2026-09-27T17:11:11Z", "hours": 1.1439, "text": "OK, I had to fix a few things with my analyze.py and summary.csv because it didn’t track lost packets or the parameters of the runs, so I used enumerate, slicing, and joining to get the right parameters for each run."}, {"post_id": 72496, "ts": "2026-09-23T02:34:10Z", "hours": 2.1517, "text": "So over the past few days, I have been working on an analyze.py Python file that takes my CSV results from the 14 trials and basically combines all of it into one summary. Obviously it’s missing late and params, so I have to fix that and make a new one, but I had to learn a lot, and there was a lot of logic I did wrong in the beginning, so I’m glad I worked it out."}, {"post_id": 70933, "ts": "2026-09-20T02:15:42Z", "hours": 3.7128, "text": "Today was a long day. I basically wrote a new Python file that connects to config.py and runs the server and client multiple times, and I ran a smoke test. I learned a lot of new things, like matrices, which keep all my tests, as well as parsing through argparse."}, {"post_id": 70380, "ts": "2026-09-19T02:23:06Z", "hours": 1.0139, "text": "Today I created a config.py where I can set all the parameters for the experiments I can do, and I used it to connect channel.py to config.py. I also ran some tests of Bernoulli versus Gilbert-Elliott."}, {"post_id": 69422, "ts": "2026-09-17T00:59:26Z", "hours": 1.7903, "text": "Researched Gilbert-Elliott and Bernoulli packet loss distributions and made a model to simulate them in channel.py."}, {"post_id": 68351, "ts": "2026-09-15T00:15:21Z", "hours": 1.4958, "text": "Today I found a bug where my client could save a reply under the wrong packet. The client grabbed whichever reply showed up first and assumed it belonged to the packet it had just sent. When a reply came back after the timeout, it got recorded as the next packet’s reply, and every packet after that was shifted by one. Nothing crashed. The data was just wrong. To prove it, I made my server hold a reply for 1.5 seconds while my timeout was 1 second. By accident, my first test delayed every packet after the 20th. The RTTs climbed from 1.5 s to 12 s, every other packet was marked lost, and the ones marked received carried an older packet’s time. The fix: every packet gets a deadline (send time + timeout), and the client keeps listening until the reply with the matching sequence number arrives or time runs out. Replies for older packets get counted as “late” and thrown away. Now the same test shows 1 lost, 1 late, and every packet after it keeps the right number. This matters because my jitter profile will produce late replies constantly, and without this fix every jitter run would have been garbage. I also added total runtime and average packet rate."}, {"post_id": 67704, "ts": "2026-09-13T22:02:52Z", "hours": 0.965, "text": "I worked on making the data from my tests actually export as CSV files. I had to learn how to use the csv module in Python, how to make sure my files don’t get overwritten each time, and how to show that a packet is lost. Then I ran some trials and saw the CSV, but I still need to fix some things."}, {"post_id": 67676, "ts": "2026-09-13T20:47:05Z", "hours": 0.6097, "text": "Added a file of constants as well as worked through some bugs. Basically, I tried out a few experiments with how many packets I sent and the time in between each packet. It really changed the average RTT, and I also got to see how the counter worked."}, {"post_id": 67631, "ts": "2026-09-13T19:38:36Z", "hours": 2.5683, "text": "I added the first layer of my experimentation: a server and a client. The client sends packets of info with a sequence number to the server, which sends them back to the client. The client then prints out the sequence number and the time of the whole trip."}, {"post_id": 61247, "ts": "2026-09-04T02:46:17Z", "hours": 0.9519, "text": "Created the GitHub repo and README.md to start my project. I also wrote in more detail why I am doing this, as well as what I am trying to accomplish and what I am measuring. I had to spend a lot of time fixing Hackatime. I learned a lot about why packets actually get lost, how modern researchers categorize their loss, and why it happens."}]...
|
Title: link - probe by @ayman | Stardance
Devlogs Title: link - probe by @ayman | Stardance
Devlogs:
Created the GitHub repo and README.md to start my project. I also wrote in more detail why I am doing this, as well as what I am trying to accomplish and what I am measuring. I had to spend a lot of time fixing Hackatime. I learned a lot about why packets actually get lost, how modern researchers categorize their loss, and why it happens.
I added the first layer of my experimentation: a server and a client. The client sends packets of info with a sequence number to the server, which sends them back to the client. The client then prints out the sequence number and the time of the whole trip.
Added a file of constants as well as worked through some bugs. Basically, I tried out a few experiments with how many packets I sent and the time in between each packet. It really changed the average RTT, and I also got to see how the counter worked.
I worked on making the data from my tests actually export as CSV files. I had to learn how to use the csv module in Python, how to make sure my files don’t get overwritten each time, and how to show that a packet is lost. Then I ran some trials and saw the CSV, but I still need to fix some things.
Today I found a bug where my client could save a reply under the wrong packet. The client grabbed whichever reply showed up first and assumed it belonged to the packet it had just sent. When a reply came back after the timeout, it got recorded as the next packet’s reply, and every packet after that was shifted by one. Nothing crashed. The data was just wrong. To prove it, I made my server hold a reply for 1.5 seconds while my timeout was 1 second. By accident, my first test delayed every packet after the 20th. The RTTs climbed from 1.5 s to 12 s, every other packet was marked lost, and the ones marked received carried an older packet’s time. The fix: every packet gets a deadline (send time + timeout), and the client keeps listening until the reply with the matching sequence number arrives or time runs out. Replies for older packets get counted as “late” and thrown away. Now the same test shows 1 lost, 1 late, and every packet after it keeps the right number. This matters because my jitter profile will produce late replies constantly, and without this fix every jitter run would have been garbage. I also added total runtime and average packet rate.
Researched Gilbert-Elliott and Bernoulli packet loss distributions and made a model to simulate them in channel.py.
Today I created a config.py where I can set all the parameters for the experiments I can do, and I used it to connect channel.py to config.py. I also ran some tests of Bernoulli versus Gilbert-Elliott.
Today was a long day. I basically wrote a new Python file that connects to config.py and runs the server and client multiple times, and I ran a smoke test. I learned a lot of new things, like matrices, which keep all my tests, as well as parsing through argparse.
So over the past few days, I have been working on an analyze.py Python file that takes my CSV results from the 14 trials and basically combines all of it into one summary. Obviously it’s missing late and params, so I have to fix that and make a new one, but I had to learn a lot, and there was a lot of logic I did wrong in the beginning, so I’m glad I worked it out.
OK, I had to fix a few things with my analyze.py and summary.csv because it didn’t track lost packets or the parameters of the runs, so I used enumerate, slicing, and joining to get the right parameters for each run.
So now I worked on making another CSV as part of analyze.py, which counts how many bursts were in each run and the length and frequency of the bursts. A burst is basically how many packets were lost in a row. Now I am going to download matplotlib to plot it, see how my data and experiment actually work, and try to understand my results.
I used matplotlib to make a graph of my burst results. The x-axis is the burst length (how many packets are lost in a row), and the y-axis is the percentage of bursts that were greater than or equal to the k value. You obviously see a declining trend for both, because it’s much harder for a random point to lose a lot of packets in a row. We see a big difference between Gilbert-Elliott and Bernoulli here, and the difference between the two packet loss calculation methods.
I first added requirements.txt to my repo for people who want to rerun or add onto the experiment, and I also made sure to include instructions to repeat it in my README. Then I fixed some rounding errors in my summary.csv and also added a RESULTS.md that I have not finished yet.
i added a new file that is supposed to check across all runs if the value in the csv matches with my decide function to check my seeds. Out of 60000 packets i only got one mismatch
Added sections 5–7 to RESULTS.md, which talk about the limitations, and I also talked about the .py file I made yesterday.
So I worked on fixing and updating my plot.py with some features. I added a title version, fixed the y-axis labeling, and then added a theoretical value using the definitions of GE loss and Bernoulli loss. Something we see is that in the real data there is a staircase step, due to burst values being only integers, while the theoretical value is a straight line. Here is a before and after.
I made a new Python file that creates a new figure using matplotlib, and it measures the median and p99 RTT for my latency ladder. I will now add this into my RESULTS.md.
OK, next I made a new plot to analyze the missed packet deadline percentage for my latency ladder and jitter runs. We can see that all the latency ladders show a similar shape with a horizontal shift, while the jitter run has an S-shaped curve with an inflection point around 100 ms.
FIxed readme and added to results.md
Using pytest, I added a test_channel.py file that checks 3 of the functions in my code: make_channel, adding Bernoulli loss, and changing GE burst lengths.
I commented through channel.py so it is easier to read the documentation and understand it.
I finished commenting through echo_client.py.
Commented through analyze.py.
I fixed my citations and also added a different section for people interested in running my program.
I finished cleaning up RESULTS.md, added some more limitations, and fixed some discrepancies.
Ships:
What I made linkprobe measures what a network does to messages between two machines: round-trip time, packet loss, and how many packets get lost in a row (bursts). It can degrade the link on purpose with 5 profiles: clean, latency-ladder, jitter, bernoulli-loss, and gilbert-elliott. I built it because robots that depend on a reply every control cycle get hurt way more by losses in a row than by random single losses, but a lot of tests assume losses are independent. Main result At the same 10% loss rate, Gilbert-Elliott bursts were about 4.4x longer than Bernoulli bursts (around 4.9 vs 1.1 packets), and the longest burst was 29 packets vs 5, across 3 seeds. With jitter, the deadline had to be 176 ms to get missed packets under 1%. What was challenging I found a bug where my client saved replies under the wrong packet. A late reply got recorded as the next packet’s reply, and every packet after that was shifted by one. Nothing crashed, the data was just wrong. I fixed it by giving every packet a deadline and only accepting the reply with the matching sequence number. Without that, every jitter run would have been garbage. Fixing Hackatime also took a lot of time. What I’m proud of Learning how researchers actually model packet loss, building the Gilbert-Elliott channel myself, and checking my results: a replay check across 60,000 packets found only one mismatch, and pytest tests cover the channel functions. I also learned a lot of new coding libraries and tricks for the future How to test it git clone https://github.com/AymanM-Projects/linkprobe pip install -r requirements.txt python run_all.py (runs all the profiles; the full set takes a while) python analyze.py, then run the plot_*.py files to make the graphs Everything runs on one computer over loopback, so the only delay and loss are the ones linkprobe adds. Full results are in RESULTS.md....
|
1793602230.853913
|
1793688630.853913
|
|
45303
|
link's musicBoard by @Link-Hunter | Stardance
|
Link-Hunter
|
0
|
0.33
|
0
|
[]
|
[{"post_id": 43068, "ts": "202 [{"post_id": 43068, "ts": "2026-08-08T04:10:03Z", "hours": 0.3333, "text": "learning pcb design, been a hot minute, so had to learn all over again."}]...
|
Title: link's musicBoard by @Link-Hunter | Sta Title: link's musicBoard by @Link-Hunter | Stardance
Devlogs:
learning pcb design, been a hot minute, so had to learn all over again....
|
1792907630.8866425
|
1793771630.8866425
|
|
47962
|
linux mass installer by @blenderuploads | Stardanc linux mass installer by @blenderuploads | Stardance...
|
blenderuploads
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: linux mass installer by @blenderuploads | S Title: linux mass installer by @blenderuploads | Stardance...
|
1793202991.243421
|
1793807791.243421
|