lwouis
Joined 7 years ago
Joined 7 years ago
Recently i've redone my app website (https://alt-tab.app), and I implemented a minimal spa.js that has a similar approach. I find the end result blazing fast, simple to maintain / reason about, few moving pieces. I used Early Hints, compressed every single thing, inlined CSS, etc. I don't know how i could even make it faster.
I recommend this approach for websites that are not very complex. Of course if i made a browser-based music player with a super dynamic UI, that would have been a different story~
Apple has bundled everything together in a big mess.
- Only certain macOS versions can run certain XCode versions
- Only certain XCode versions contain certain SDK versions
- XCode embeds "Command line tools" which contains things like gcc, ruby, python, installed as a package, and conflicting with other versions on the machine
- Interface Builder is built into XCode and has its own compatibility story
It's a big messy blob and you can't pick-and-choose parts. You have to update your whole machine to move to the latest OS so they will let you run the latest XCode, so your app can compile on the latest platform for your users. It's not the best experience for sure. Many ecosystems have SDKs that you can download as you wish. I don't need to update my OS to download a version of the JDK for example.
That being all said, if you require users to download XCode, regardless of which part of it is necessary, i don't think you should mention "XCode free experience" or "XCode replacement".
I'm already developing a macOS app without launching the XCode GUI. I use the xcodebuild CLI that ships with XCode. My IDE is AppCode. I also use xcodebuild on CI to build the app headless. I would never call that a XCode free experience though, as i suffer from all the issues i mentionned above with version upgrades and XCode issues
I dug more and of course they don't: "Though we don’t rely on the Xcode build system, you still need to install Xcode for the iOS SDK and toolchain"
I think they should clarify their messaging. This is not a replacement or an alternative. It's a layer on top designed for what they think is a better experience.
We have domesticated cows and wheat. Now their population has reached tremendous size. So has our population. We both need the other species to survive. We need them, and they need us.
You could definitely take the perspective that we have been domesticated. For example, plants have domesticated us by feeding us.
The app is very mature, yet it could still be improved in interesting ways.
I'm the author of AltTab (https://alt-tab-macos.netlify.app/), a popular window switcher for macOS, imitating Windows famous alt+tab shortcut. I know for a fact how hard it is to implement what you did. It looks very nice, well done!
I see you ran into the issue of not being able to detect windows from other Spaces. Apple introduced it in macOS 12.2. If you're curious, you can see the vast efforts we've deployed trying to find a workaround: https://github.com/lwouis/alt-tab-macos/issues/1324. I wish some retro-engineering genius would solve this. We haven't been lucky so far. Of course Apple could fix this all in an instant with a new API, but that's very unlikely to happen.
Thank you
For example, your crops are getting attacked by insects. It's exogenous yet if you wake up in the night to come out and kill them, you'll save more crops.
Thank you for sharing this.
I'm genuinely wondering how our nose is not a good enough sensor. Are there common cases that affect large areas like the one you live in, where the pollution is not smellable?
Thank you
Yes, there are exceptions. What you call "accident of birth". Statistically, they are uncommon.
When you go from HTML page to HTML page without JS, the browser starts from scratch on every page. The user gets a big flash, then the browser has to redraw the page from scratch. It's actually a lot of work often.
If the browser expected pages to be similar, and added optimizations to reuse existing content, essentially doing internal SPA work, that would be a different story. To my knowledge, the browser does no such optimization, and brute-forces renders every URL from scratch.
You can actually try for yourself on the website I linked. Chrome devtools > disable Javascript. It's a pretty good experience still since I optimized everything. However, you see all sorts of things flicker and move around. It's not the smoothest experience. And If you have worse Internet, it gets worse and worse as you see more of the tear-down > built-up on every click. With the SPA experience, if you have bad internet, you can still scroll around and use the page, as you wait for the update to arrive.
Of course, you're totally right that static HTML works pretty good when the website is already simple and fast. My point was that with 4KB-uncompressed / 140LoC, I can get the smoothest experience. And I unlock options later on like having loading spinners for example.
My general point was that you can do simple client-side rendering in 140 LoC. You keep a simple backend-served website, and add a little polish this way to have a smooth experience.
I find it very cool to have polished app-like experience, while having a simple backend to serve. I like the low-tech, few moving pieces, yet I get options for great UX if I want.
I got charmed by this path with LiveView and Hotwire back in the day. I'm thankful that people continue to push this approach. It's wonderful