642 karma · joined January 7, 2024
- - -
### Hi, I'm Andrew!
Please check out my latest project, LisaGUI! Or, check out one of the following links:
#### [Blog](https://blog.yaros.ae) • [LisaGUI](https://alpha.lisagui.com) • [Artwork](https://art.yaros.ae) • [Downloads](https://yaros.ae/downloads) • [Homepage](https://yaros.ae)
- - -
meet.hn/city/39.9527237,-75.1635262/Philadelphia
Socials: - ayaros.at.hn - bsky.app/profile/lisagui.com - github.com/aeyaros - linkedin.com/in/aey - mastodon:mastodon.social/@lisagui - yaros.ae
Interests: Art, Programming, Technology, UI/UX Design, Web Development
---
EDIT: I'm honestly not sure what this issue might be... If you're up for sending me a screenshot, there's an email link at the bottom of https://yaros.ae/.
But of course, it's at the point where it's grown into something unwieldy. I feel like it's overdue for a redesign/rewrite. Just gotta figure out a clever UI design that works on desktop and mobile. Not only that, but it also needs to work without any JS, because I don't want my site to be nonfunctional without JS...
(Guess I figured I'd emphasize that point before people start mistaking it for yet-another-CSS-skin™...)
The answer is neither; it isn't remotely imitating the Lisa's architecture, nor is it a skin over some other previously written JS code. To be clear: this is absolutely NOT a CSS skin.
The only CSS involved is used for the positioning of the canvas element on the page, and for the styling of the temporary UI elements which mimic the Lisa's hardware test screen (and those that display as a fallback if JS is disabled). When the system "boots" all those temporary elements are replaced with a single canvas element on which the UI is displayed.
I should perhaps have been less modest in my original comment in that all of the UI components are coded from scratch. This includes a hierarchical system for displaying objects on the canvas (not dissimilar to the the DOM), the windowing system, a typesetting system, multiple systems for displaying and storing image data, and much more. I've written what I hesitate to call a graphics engine, but I guess that's sort of what it is... it even supports 1-bit blending modes.
This was originally going to be more along the lines of a CSS skin, but I became so deeply frustrated with visual inconsistencies across browser engines and platforms that I ultimately decided to move all the logic I could into JS. The result is what you see now.
Each approach has a clear set of pros and cons, as others have explored in this thread. In the end, I think what ultimately matters is whether we're satisfied (and proud) of a project after a significant amount of progress has been made.
I also took the "I want to write everything myself" approach with my project since I wanted it to be a demonstration of my abilities. I wanted to prove to myself and others I could create a project of significant size and scope. It seems like this often means working without libraries and having to reinvent the wheel over and over again. It's tedious, but it certainly adds to the satisfaction you get as you look over your work and think "this is truly mine; I did this."
And yes, copy ideas, not code, is one of those things I do my best to adhere to. Sometimes, at least with JS, you run into problems, look into solutions, and it turns out there's really only one sensible way to do something; what you end up writing feels like a boilerplate solution to the problem. I often find myself going back and forth through search results from places like Stack Overflow and trying to siphon out the best techniques and ideas from multiple examples to mesh together into some usable code in a style I prefer.
Finally, since I failed to say this eariler, congrats on your project! I'm gonna have to try it out as soon as I get some extra time.
I don't know anything about your font system; I'm assuming it's fixed width bitmap fonts? I don't know how hard it would be to make these changes within your codebase so if it's too much work then don't worry about it.
I've been building a web OS site from scratch for a while now (not as technically impressive as what you're doing) and I just got through a total rewrite of the font classes, so it's at the top of my mind.
As others have said I do think the controls need work; maybe some form of constrained orbit controls would work well.
Is that something I could port to WebGL? Can objects contain or be parents of other objects in that way, and mask thier children to only appear directly in front of them? I have done a tiny bit of WebGL for a CS assignment but it was ages ago. Hopefully once I make this public I'll be able to get some feedback on all this. I don't want to say too much more as it would begin to spoil things!
I've been thinking of getting it into WASM somehow - it's really just one function that needs to be replaced by a WASM module - but one of the things which has given me pause are benchmarks like this, as well as other anecdotes, that demonstrate I'd only get a minor speedup from WASM. I guess part of this is due to modern JS engines being so optimized.
Just about all of the relevant code is adding and subtracting integers, but theres's some Boolean logic. There's also some multiplication in there that I could eliminate if I really had to, although at this point I'm not certain it would make a significant difference. Most of the data that contributes to the value of each pixel is spread across a tree of objects, and there's some polymorphism involved too. The point is it's not like I'm just dealing with a bunch of contiguous data in memory that is easily cached by the CPU, which might speed things up considerably. I guess I'm just venting now, lamenting a nightmare of my own creation...
In my opinion, the web needs to be less reliant on cookies and state data, and websites should be adaptable to situations where they cannot store or access it. Websites can easily provide UI feedback for this issue. For instance, a store website unable to save a cookie can place a banner at the top saying something like "please enable cookies for this website in order to use the shopping cart." And then it's up to browser vendors to provide a simple, consistent, intuitive user interface for enabling cookies - such a UI should minimize the amount of instructional info a site's banner will need to contain in the first place.
The web really needs to be built around opting into site functionality on a site by site basis. It's been the opposite of this for a long time now and we've ended up where we are today... There are many reasons site operators will hate this, from legitimate concerns about usability or accessiblity, to business concerns about users not wanting to take the minimum amount of time to change a setting to add items to a cart resulting in reduced sales, or even malicious concerns about not being able to track users under a magnifying glass. As pissed off as these site owners will be, it's a change browser vendors can make without needing their permission the same way Apple added app-tracking-transparency controls much to the chagrin of companies like Facebook.
And yes, users will find one reason or another to complain about this, despite the fact that it will be optional. "It's like Vista's UAC prompts all over again!" "I shouldn't have to do extra work to add stuff to my cart!" etc. That's great that they don't care about being tracked and if they want to be the cattle of data mining companies that's fine. But there are plenty of people who, given the choice, will prefer the alternative, and over time sites will adapt. If sites purposefully punish people for not enabling cookies, and websites are interested in pissing off thier users, well there's always the option to close that site and use another... in any case I'd rather deal with that kind of fight then the situation we have now.
Instead, we are trusting the very websites we are blaming on tracking us in the most decietful, malicious ways possible to self-regulate and implement these controls. So now every website gets a shitty banner - on top of all the other annoying in-page banners and popups which are a staple of 2020s web design - that asks us if we want cookies. All these banners look different, are positioned differently on the page, appear at different times after the page is loaded, and function differently. So there's no consistency. And 90% of the time you can't disable all the cookies anyway, because there's that little grayed out toggle control for "strictly necessary cookies." How do I know one of those cookies you consider "strictly-necessary" or "crucial for site functionality" doesn't connect back to some evil tracking algorithm, the blocking of which was the whole point of this banner debacle in the first place?
So we have essentially asked websites to self-regulate the way the US's vitamin/supplement industury does, except its worse because I don't have to click a fucking banner before I take a capsule of what may or may not be vitamin C.
So again, why isn't this the responsibility of browser vendors? Am I taking crazy pills? Am I going insane or is the world going insane?
/rant