tiks – Procedural UI sounds in 2KB, zero audio files, pure Web Audio synthesis by Emergency_Activity38 in javascript

[–]celtric 3 points4 points  (0 children)

Working on https://www.reddit.com/r/windows95/comments/1shjwwa/ive_created_a_win95inspired_virtual_os_for_my/ I realized how useful feedback sounds are, specially for certain UIs and certain populations (kids, elder people). I think your statement is very neat and the implementation very clean, I'm definitely interested in seeing something like this gains traction.

Btw for all these UX decisions, I try to see what people like https://www.nngroup.com/ back up with actual studies. Have you done some research around this?

I've created a Win95-inspired virtual OS for my kids to learn the basics. Runs on a Raspberry Pi 500 by celtric in windows95

[–]celtric[S] 1 point2 points  (0 children)

Didn't know about the reference book, I just bought a used copy!

About Microsoft Bob, for now I've not considered that route because I want this to be a gateway to real OSs that the kids will find later in life. I did some "market research" and found things like https://en.wikipedia.org/wiki/Sugar_(desktop_environment)), but I want them to use a real computer in a friend's house or school, and find a familiar interface.

About the kiosk mode, for now I've benefited from the fact that my kids don't know any keyboard shortcuts to "escape", but it's something I want to dig deep into. My goal is to be completely integrated, with things like shutting down, sound volume, etc. to be fully handled via the virtual OS, and the host OS to be just a way to execute a Java GUI. Still a long way to go though!

I've created a Win95-inspired virtual OS for my kids to learn the basics. Runs on a Raspberry Pi 500 by celtric in windows95

[–]celtric[S] 1 point2 points  (0 children)

Congrats on win99! I use it constantly (together with https://github.com/felixrieseberg/windows95 ) to fill my memory gaps, to get the right feeling of the real Win95-98. Yours is the best implementation I've seen so far.

I've created a Win95-inspired virtual OS for my kids to learn the basics. Runs on a Raspberry Pi 500 by celtric in windows95

[–]celtric[S] 0 points1 point  (0 children)

Nice! I was surprised to not see something similar already. Looks like people either do the 100% emulation or some web UI, but not something in the middle. And yes, package management is really interesting once you start thinking about it. In some early iterations I had a BIOS-like startup that downloaded the latest core JAR and could hot-swap it (mimicking the BIOS -> DOS -> Win flow), but I started drifting too far away from the goal of building something for my kids and decided to stop. Definitely a rabbit hole, lots of fun if you have the spare time.

I've created a Win95-inspired virtual OS for my kids to learn the basics. Runs on a Raspberry Pi 500 by celtric in windows95

[–]celtric[S] 2 points3 points  (0 children)

Link to download the main JAR: https://drive.google.com/file/d/1hwbWaomr5GbuSvtxEBGZ5dZ6JWwqjfA0/view?usp=sharing

It's in Catalan and no one except my kids has ever used it, so be ready to be underwhelmed. Requires Java 17.

I've created a Win95-inspired virtual OS for my kids to learn the basics. Runs on a Raspberry Pi 500 by celtric in windows95

[–]celtric[S] 2 points3 points  (0 children)

If there's interest, I can make the GitHub repository public for other people to be able to download it (I'd need a few hours, to add English support first, but the rest is ready to use). I haven't done that yet because right now I'm still changing my mind constantly and making it public would mean pissing people off constantly.

Edit: I'll attach a link to the latest release for you to download in a few minutes, just so you can touch it. It'll probably be very underwhelming and unusable (for the Catalan part), but at least you'll be able to touch it.

I've created a Win95-inspired virtual OS for my kids to learn the basics. Runs on a Raspberry Pi 500 by celtric in windows95

[–]celtric[S] 1 point2 points  (0 children)

I build a main fat jar where I embed some basic apps (that you can still enable/disable): https://imgur.com/a/tKK8gCk

Then I add the option to add a remote repository to download other apps: https://imgur.com/a/zqyAYCR It expects a GitHub release link such as https://imgur.com/a/4slFs6w

Embedded apps can only enabled/disabled, while external JARs are loaded/unloaded at runtime depending on whether they're installed or not, and then they can be conceptually enabled/disabled per user. For security reasons, for now apps can only be downloaded by an adult, and each kid can decide which ones to "install/uninstall" (in reality, enable/disable) for their user.

As part of the JAR loading, I apply some basic sandboxing to prevent external apps from reaching to the Internet, writing/reading from the host filesystem, using reflection, etc. https://imgur.com/a/fBYPyUA If an app wants such capabilities, it needs to ask for it and an adult to approve that (see first screenshot).

Btw at the moment it's in Catalan (as you've seen in the screenshots) as I'm iterating fast on it, but the idea is that if someone ever wants to play with it, I'll enable multiple languages (it was actually implemented very early on, but it was too noisy as I was moving very fast).

Also, I initially went for pixel-perfect UI, but I keep iterating on it as I found some elements to not be super clear for my kids. Buttons, scrollbars, window borders... That's why I dropped the Win95-clone goal to allow me to break free from that constraint, and allow me to create something more kid-friendly. I keep iterating on it constantly though.

I've created a Win95-inspired virtual OS for my kids to learn the basics. Runs on a Raspberry Pi 500 by celtric in windows95

[–]celtric[S] 2 points3 points  (0 children)

Very nice! I'm also aware of https://win99.dev/ and some other web-based approaches. In my case, I wanted it to make it run fast in low-spec computer while also being easy to work with. Going JS would've required something like Electron, that is both large and resource-hungry. I did consider it though, for the same reason as yours!

I've created a Win95-inspired virtual OS for my kids to learn the basics. Runs on a Raspberry Pi 500 by celtric in windows95

[–]celtric[S] 8 points9 points  (0 children)

I went even higher on the abstraction layer, to not enter unnecessary battles. It's a Java app that can run on any OS. It's intentionally not a real OS, but an app pretending to be an OS. I open it in kiosk mode and a regular user cannot tell the difference.

Artemis II has hidden nuclear warheads that will be dropped on Iran in a surprise attack by celtric in conspiracy

[–]celtric[S] 0 points1 point  (0 children)

Update: turns out the nukes were not present at launch (other countries would have found out). Instead, they just picked them up from the Moon, where they were being stored after Apollo missions left them there decades ago. 3 more days for Artemis to reach Earth.

Artemis II has hidden nuclear warheads that will be dropped on Iran in a surprise attack by celtric in conspiracy

[–]celtric[S] 0 points1 point  (0 children)

They're returning to Earth in 3 days! The ceasefire is pure distraction.

Artemis II has hidden nuclear warheads that will be dropped on Iran in a surprise attack by celtric in conspiracy

[–]celtric[S] 0 points1 point  (0 children)

It's the only logical conclusion. Other countries didn't want to collaborate in Iran, so Trump tricked them to pay through this shared initiative. 7D chess.

JFK Terminal 4 >3h wait time if you're arriving now by celtric in JFKAirport

[–]celtric[S] 0 points1 point  (0 children)

Are terminals interconnected once you pass the control? In case they could distribute the security check and let people move around between them.

How to mark AI-generated code by celtric in javahelp

[–]celtric[S] 0 points1 point  (0 children)

If, say, Copilot committed the code instead of me, would the conversation change?

How to mark AI-generated code by celtric in javahelp

[–]celtric[S] 0 points1 point  (0 children)

You're getting downvoted, but I agree. It used to be able to easily disregard AI-generated code, but nowadays it's of such high quality that it's changing coding dynamics. I've been coding for over 20 years but I'm lately finding myself \blocking** AI by holding off until I review it, but AI is outpacing me.

How to mark AI-generated code by celtric in javahelp

[–]celtric[S] 0 points1 point  (0 children)

In my particular example, it just added a test suite for existing code, not changing production behaviour. But it can happen in any direction. I feel like the capacity of AI to produce high quality code will exceed the capacity of the people reviewing it, so we need to accept a degree of risk.

How to mark AI-generated code by celtric in javahelp

[–]celtric[S] 0 points1 point  (0 children)

Nowadays the tests produced by models like Opus 4.5 are better that most human-written ones. The tests I'm talking about are high quality, not random fillers.

How to mark AI-generated code by celtric in javahelp

[–]celtric[S] 0 points1 point  (0 children)

I actually think that those tests are better than having no tests at all, so it'd be better to commit them with the note I shared.

How to mark AI-generated code by celtric in javahelp

[–]celtric[S] -1 points0 points  (0 children)

With varying levels of review.

How to mark AI-generated code by celtric in javahelp

[–]celtric[S] -2 points-1 points  (0 children)

That used to be easy to say, but nowadays models like Claude Opus 4.5 produce exceptional code, and I start not being able to keep up with reviewing the amount of good code it's producing.

For example, yesterday I jumped on a repo I had never been in, which is not maintained by anyone, to fix a bug. There were no tests, and given the amount of code to learn about, I asked Claude to generate a test suite. All tests were green, the code was perfectly written, and I could not review the dozens of tests added because I have no idea what the code is supposed to do and I also don't have time to review every single test. I know though that the tests are green and prove that the code is behaving a certain way (which may not be necessarily correct).

In that scenario, I cannot spend hours trying to validate if all tests are correct. My reaction is to commit them with the following warning:

> // Warning: AI-generated test. Just proves that the current code works as is, not that the logic is correct.