I bought the limited edition hardcopy, this is a super-fun game.
If you like this game, you will likely enjoy the other zachtronics games.
If you enjoyed writing assembly in DOS, TIS-100 is your best bet.
If you like graphical/visual programming, try Opus Magnum.
For the games listed above, you can see the cost of your Steam friends’ solutions. Once you’ve solved a puzzle, it’s surprisingly much fun to try to beat the scores of people you know.
Shenzhen I/O is pretty rad too; bought the feelies for that one, and get asked about the binder routinely :D
If verilog/VHDL is your kink, MHRD is a lot of fun.
That’s been on my steam wish list for a very long time. I’ll have to check it out when I “finish” EXAPUNKS.My brief interaction with Verilog was mind-opening. I’d really enjoy a game with a similar medium but the right constraints.
Funny, I’m just teaching myself verilog right now! I’m still in the random walk stage but hopefully soon I’ll have a clue.
this is really clever, and definitely something that I could see Yubikey selling directly: one black, one red - black for daily use, red for recovery, with a “order another pair” stamped right on the red one.
Agreed, this is absolutely brilliant. Well done diamonomid!
Anyone know of a place in the US where I can buy a pair of u2f-zeroes? The website links to amazon but they’re sold out.
Not in the US, but if you have a European delivery address, I still have stock in my (official) European distribution https://u2fzero.ch
Conor is hard at work restocking Amazon :)
It’s worth noting that static sites and CMSs are not mutually incompatible - I work on one, Netlify CMS, which connects to a hosted Git repo and edits the content within it, which triggers a rebuild of the site if you have a CI pipeline set up. There’s other ways to do it as well, such as using a CMS which serves content through an API API (GraphQL is typical for this kind of CMS) which your static site generator pulls from to build the site, and having the CMS ping a service which rebuilds the site when changes are made. The term for these kind of CMSs is “headless CMS” - it’s only involved in editing your content, and the actual building, deployment, and hosting of the site is totally orthogonal. There’s a list of headless CMSs at https://headlesscms.org/ (disclaimer: this site is run by Netlify, though it’s an open-source project with a repo at https://github.com/netlify/headlesscms.org/).
Awesome! I didn’t know this existed. I’m a huge fan of Netlify and use it for a lot of projects. Didn’t realize y’all have a CMS that works like that – I will investigate this fully.
Your service is fantastic. Super clean + useful.
There are a couple CMS options around. I’ve also been working on one: https://github.com/usetint
I’ve believe Gatsby also supports this via its WordPress plugin. I don’t know how well it works, but lot of people (especially non-developers) are comfortable with the WordPress UI, so it could be a nice combo.
I really like the PKC one, but the AVL tree onwards weren’t really all that elucidating, IMO. Makes me wonder about irreducible complexities…
This makes me wonder what blessed syntax would be for a positive assertion equivalent of an if-statement would be. ensure timer != null has a taste to it…
Might place more requirements on both lang and lib than you were asking for, but I’ve been messing with a reterr (return error) keyword in my language Tiko that works alot like Rust’s try! macro/? operator.
Tiko uses an Option instead of null, so
func doThing(x Option<T>) {
reterr x
fmt.Println("only reached if not null!")
}
desugars into
func doThing(x Option<T>) {
match x {
None => return
}
fmt.Println("only reached if not null")
}
reterr returns on any falsey expression, any Result<T, E> that is an Error, and any empty Option<T>. Anything else continues through. It will also pass the error up from Result iff the func’s type signature returns an Error.
I like it alot. It makes for some VERY clean code that reads declaratively but doesn’t seem out of place in the imperative style. Preconditions and Go-like if err != nil { return err } handling are readable but don’t take up the majority of visual space on screen.
I worry because it does quite alot of things. It blesses Result and Option, plus it just happens to work with falsey expressions which aren’t necessarily errors. It’s got utility, but not exactly the greatest in terms of aesthetics from a language design standpoint. reterr and return are also super similar visually and might be confused/missed. Since this is mainly a toy language it’s mostly just me having fun and I haven’t had much issue with it so maybe I’m just too hesitant to commit ;)
It’s definitely not a new idea (mostly ripped off from rejected ideas in the Rust ? operator RFC) but given your comment I thought it might be interesting enough to merit a reply.
That’s rad! cheers! I imagine it might end up looking a little Eifel like eventually with a neat stack of precondition reterrs at the beginning.
Some languages (like lisps/schemes) have when and unless. (when foo bar ...) is similar to if (foo) { bar ... }, (unless foo bar ...) is like if (foo) {} else { bar ... }.
Yeah, I’m solidly on the “unless is a useful keyword camp” in Ruby land. I kinda want something that combines that with a return or raise or something though… /u/badtuple has some neat thoughts below.
I personally like unless keyword, though unfortunately it’s not present in Java. Also one I really liked (maybe most) is a pattern-matching-like approach I saw in Erlang:
execute_timer(entity) when entity /= null ->
sound_alarm(entity);
execute_timer(_) ->
do_nothing.
Ah yeah, I’m most familiar with pattern matching in Scala and agree it’s pretty rad, but the Erlang way seems better in some ways since it groups cases together from a definition standpoint (?). I think Haskell does that too, and it makes for really clean stuff there.
Swift has the guard statement.
Here is a rough translation of the function in the linked article.
func run(timer : Timer) throws
{
guard timer.enabled else {
return
}
guard timer.valid else {
throw InvalidTimerException()
}
timer.run()
}
I’m having a little trouble understanding what’s the point of this when xi-editor already exists, including having an optional Electron front-end. I also feel strongly that the best experience is a native front end rather than Electron, particularly for startup time and RAM utilization. Performance of xi-mac is (as of recently) extremely impressive, not dropping frames on the 165 Hz gaming monitor I’m using for testing.
That said, I’m happy to share work we’ve done; in particular, I think the syntax highlighting is very nice, already quite a bit faster than Atom’s, and with the potential to adopt parser-based highlighting instead of being permanently stuck with regexes.
What’s the Xi plan for things like VCS integration? Reading the README and Roadmap, it looks like there’s no plan for UI-level extensions? I see https://github.com/google/xi-editor/issues/160 which makes it seem like xi-editor is going to punt extensions to the front-end for things that aren’t language features, do you think that’s a fair description?
I think that’s something that atom (and presumably whatever this turns into) has going for it; it’s extension story is really strong, and being tied to Electron (rather than being front-end agnostic) is a big piece of that. I wish Emacs had a UI library built in, rather than a bunch of TUI stuff.
EDIT:
also, not sure if this was you, but: Comparison to Xi #4 :D
We probably don’t have this written down very well, but the plan is to add to both the plugin and front-end protocols enough functionality to support language servers, VCS, and basically all useful functionality. Admittedly, this will be quite a bit of work; it’s a lot easier for plugins to just be able to manipulate HTML/DOM/CSS. I think that work will pay off in the form of better performance.
That said, I’m not especially dogmatic about architecture. It certainly would be possible to build a hybrid where the editing core is built on xi, and there’s an extension mechanism which is based around Electron. This personally feels a bit like a frankenbeast to me, but if it’s something people really want, and really want to build, I’ll help facilitate that.
I don’t think “punting extensions to the front end” is accurate. A good way to understand the architecture is that the front-end is a highly glorified terminal, with the document and its interactions owned by the core.
#4 wasn’t me :)
I don’t think “punting extensions to the front end” is accurate. A good way to understand the architecture is that the front-end is a highly glorified terminal, with the document and its interactions owned by the core.
Ok, that makes sense, thanks for the clarification, I think I get what you’re coming at.
Admittedly, this will be quite a bit of work; it’s a lot easier for plugins to just be able to manipulate HTML/DOM/CSS. I think that work will pay off in the form of better performance.
I feel like “easier” is a mischaracterization, in that it assumes you can build anything one wanted through whataver protocol you bake into the editor core. By way of example, I grabbed the currently featured 6 packages from atom’s package index
teletype - collaborative editing - totally doable with a “core” pluginscroll-through-time - scrolling mapped to undo/redo history - will scroll events be something that gets proxied through the front-end protocol?I think my point with this is that a front-end prototocol that doesn’t allow those sorts of extensions (whether you think they’re a good idea or not) is strictly less powerful than one that does, and I’m not certain you can build that protocol without it basically becoming a UI framework itself, and at that point, why bother being front-end agnostic, or not taking advantage of the UI framework that is HTML/DOM/CSS?
It feels to me like Xi is going for replacing (n)Vim (which is noble and awesome!) but the Electron editors have a different selling point, which is that it’s trivial to build graphical UI extensions. I think that’s a valid argument to have (it’s an editor, not a web browser, get your nyan cats out of here…) but it’s a different argument than “we already have this, why bother?”
feels a bit like a frankenbeast
I think, given the above, the frankenbeast of “Xi backend, Electron frontend” makes a lot of sense; by keeping front end stuff out of the editor core, the front end is able to use it’s entire feature set, and not have to settle for extensions or UI paradigms that are supported by the least common denominator frontend (a simple grid of monospace unicode characters).
Also:
I’m having a little trouble understanding what’s the point of this when
xi-editornvimviskakoune already exists
:)
EDIT: Actually, with the Fuscia mentions in the Xi editor tickets, would it be more correct to assume that Xi’s goal is to replace Vim or to say it’s meant to replace GTK’s SourceView for some future UIKit?
Cheers, thanks for the discussion.
Thanks, that clarifies a lot.
Any new editor should have a story explaining why. I’d like to think that for xi I’ve made the case: an editor that feels like a modern GUI app and has uncompromising performance. At first, I thought the goals of xray were the same, but now I see more clearly that the focus is more on preserving the deep customizability that Electron affords.
The list of top plug-ins is helpful. I think xi will support some of these (and add UI elements to be controlled over RPC as needed), but not others. In particular, I’m not planning to allow the same level of UI customization. That said, part of the appeal is the front end is modular, so it’s possible people will go wild with, say, xi-electron.
For Fuchsia, the idea is the xi-editor is a text editing service provided system-wide, and that for Flutter apps on Fuchsia, the standard text editing widget is based on it.
I thought the goals of xray were the same, but now I see more clearly that the focus is more on preserving the deep customizability that Electron affords.
Full disclosure, I have nothing to do with this project outside of being interested, so I can’t speak to the motivations of the Atom team with regards to x-ray outside of educated guesses, but it feels right.
And I think your explanation is spot on, and works well for other editors: it seems really similar to the extensibility stories in nvim and sublime, which is a totally valid direction.
For Fuchsia, the idea is the xi-editor is a text editing service provided system-wide, and that for Flutter apps on Fuchsia, the standard text editing widget is based on it.
Badass! That’s pretty awesome, I wish you luck.
Cheers, friend
To me this points to one of the benefits of Electron being that javascript is a useful UI glue layer - Atom’s moving to push it’s text editng core to C++, xray is a ground up redo in Rust, etc. Emacs is similar, in that it’s an tower of ELisp managing user interaction on top of a c core.
And as a UI layer, I think javascript + dom + css has a lot going for it, not the least of which is a huge pool of people with the required background knowledge to tweak and play and experiment and discover. As an emacs user, I’m really thankful for the elisp package community (ht Magit), but think it could only be better if there was a much larger pool of people able and desiring to work up interesting extensions.
Why not a GUI using nvim server as the base?
And as a UI layer, I think javascript + dom + css has a lot going for it
Is performance one of those things?
Why not a GUI using nvim server as the base?
Sure, that would be sweet! This isn’t my project, can’t speak for why that’s not a direction they might be headed, other than that’s not what they’re doing.
Is performance one of those things?
As a UI layer? Sure, why not? A lot of web apps I use everyday have acceptable+ performance in their UI layer. Did you have a specific example you’re trying to get at? I’m afraid I can’t convince you when you start at “attack a strawman”.
Sure, that would be sweet! This isn’t my project, can’t speak for why that’s not a direction they might be headed, other than that’s not what they’re doing.
Fair enough. :)
As a UI layer? Sure, why not? A lot of web apps I use everyday have acceptable+ performance in their UI layer. Did you have a specific example you’re trying to get at? I’m afraid I can’t convince you when you start at “attack a strawman”.
One of the big performance hits for Electron apps seems to be the DOM, rendering, etc. Here’s one link referencing that: https://blog.atom.io/2017/06/22/a-new-approach-to-text-rendering.html
Ok I understand that, but from the README on the project:
We want to avoid the DOM for rendering the text editor, for example, instead using a canvas, WebGL, or any other approach that can give us extremely good performance. This may make syntax themes slightly more difficult to build, and we accept that trade-off.
It’s really easy to put a line between text-rendering in an editor (which I 100% agree shouldn’t be DOM based, it’s too much overhead for single millisecond latencies), and UI rendering for the chrome around that text-editor, which needs to be fast, but doesn’t have the same requirements or restrictions.
My point throughout these conversations is that throwing out what the JS+DOM+CSS stack gives you (effortless cross-platform development, ease of development, a large community of people who can code to it, a large corpus of examples and good ideas) because it won’t work for 100% of the rendering needs of an application seems short sighted.
There’s a lot of benefit in the platform, and like any tool, you have to decide what’s best for what part.
If anyone has more info on the server half, that would be rad; I’ve been planning on implementing Yubikey OTP in my side project, but would much rather use the U2F stuff, but the dearth of documentation is prohibitive…
Super excited for this stuff to start being easier.
I feel like I’m kind of missing the point of this?
We want to avoid the DOM for rendering the text editor, for example, instead using a canvas, WebGL, or any other approach that can give us extremely good performance. This may make syntax themes slightly more difficult to build, and we accept that trade-off.
Isn’t the whole point of Electron like 50% Javascript, and 50% DOM+CSS? If you’re not using either then… what is left? Why keep using Electron?
Edit: I’m excited to see where this goes though, nice to see more people getting paid to use rust!
there’s a lot more to a text editor than the editing area though, right? Just because the text editing component is rendered outside the DOM doesn’t mean the settings dialongs, or VCS integration, or sidebars, or embedded help browser, or popups, etc. aren’t. And in terms of extensibility, those are the things that should have an easy interface that many, many, many developers are used to, since that’s where the grand majority of useful extensions seem like they could end up.
I think it’d be rad to see people get past “if it’s Electron is has to be 100% DOM + Javascript”, which will help with the anti-electron stance I’ve seen a lot. It’s a tool with strengths and weaknesses, and using it only for it’s strengths seems like a pretty good idea…
Whoops, I removed this while you were writing this! Undeleting.
I missed the part where they were still using DOM+CSS for the rest of the UI until I had a second look at it.
Some of us miss native desktop applications that worked well. It’s tragic that desktop platforms are utterly non-interoperable and require near-complete duplication of every app. But at the same time not everyone is satisfied with the solution of “build them all as electron apps starting with a cross-platform browser base plus web technology for the UI”. I can sympathize with app developers who in no way want to sign up to build for 2 or 3 platforms, but I feel like berating dissatisfied users is unjust here. Try comparing a high quality native macOS app like Fantastical with literally any other approach to calendar software: electron, web, java, whatever. Native works great, everything else is unbearable.
I think people are just tired of seeing posts like Electron is cancer every other day. Electron is here, people use it, and it solves a real problem. It would be much more productive to talk about how it can be improved in terms of performance and resource usage at this point.
One wonders if it really can be improved all that much. It seems like the basic model has a lot of overhead that’s pretty much baked in.
There’s a huge opening in the space for something Electron-like, which doesn’t have the “actual browser” overhead. I’m certain this is a research / marketing / exposure problem more than a technical one (in that there has to be something that would work better we just don’t know about because it’s sitting unloved in a repo with 3 watchers somewhere.)
Cheers!
There’s a huge opening in the space for something Electron-like, which doesn’t have the “actual browser” overhead.
Is there? Electron’s popularity seems like it’s heavily dependent on the proposition “re-use your HTML/CSS and JS from your web app’s front-end” rather than on “here’s a cross-platform app runtime”. We’ve had the latter forever, and they’ve never been that popular.
I don’t know if there’s any space for anything to deliver the former while claiming it doesn’t have “actual browser” overhead.
“re-use your HTML/CSS and JS from your web app’s front-end”
But that’s not what’s happening here at all - we’re talking about an application that’s written from the ground up for this platform, and will never ever be used in a web-app front end. So, toss out the “web-app” part, and you’re left with HTML/DOM as a tree-based metaphor for UI layout, and a javascript runtime that can push that tree around.
I don’t know if there’s any space for anything to deliver the former while claiming it doesn’t have “actual browser” overhead.
There’s a lot more to “actual browser” than a JS runtime, DOM and canvas: does an application platform need to support all the media codecs and image formats, including all the DRM stuff? Does it need always on, compiled in built-in OpenGL contexts and networking and legacy CSS support, etc.?
I’d argue that “re-use your HTML/CSS/JS skills and understanding” is the thing that makes Electron popular, more so than “re-use your existing front end code”, and we might get a lot further pushing on that while jettisoning webkit than arguing that everything needs to be siloed to the App Store (or Windows Marketplace, or whatever).
But that’s not what’s happening here at all - we’re talking about an application that’s written from the ground up for this platform, and will never ever be used in a web-app front end. So, toss out the “web-app” part, and you’re left with HTML/DOM as a tree-based metaphor for UI layout, and a javascript runtime that can push that tree around.
Huh? We’re talking about people complaining that Electron apps are slow, clunky, non-native feeling piles of crap.
Sure, there are a couple of outliers like Atom and VSCode that went that way for from-scratch development, but most of the worst offenders that people complain about are apps like Slack, Todoist, Twitch – massive power, CPU, and RAM sucks for tiny amounts of functionality that are barely more than app-ized versions of a browser tab.
“Electron is fine if you ignore all of the bad apps using it” is a terribly uncompelling argument.
Huh? We’re talking about people complaining that Electron apps are slow, clunky, non-native feeling piles of crap.
Sure, there are a couple of outliers like Atom and VSCode that went that way for from-scratch development, but most of the worst offenders that people complain about are apps like Slack, Todoist, Twitch – massive power, CPU, and RAM sucks for tiny amounts of functionality that are barely more than app-ized versions of a browser tab.
“Electron is fine if you ignore all of the bad apps using it” is a terribly uncompelling argument.
A couple things:
I think it’s disingenous to say “there can be no value to this platform because people write bad apps with it.”
There are plenty of pretty good or better apps, as you say: Discord, VSCode, Atom with caveats.
And there are plenty of bad apps that are native: I mean, how many shitty apps are in the Windows Marketplace? Those are all written “native”. How full is the App Store of desktop apps that are poorly designed and implemented, despite being written in Swift?
Is the web bad because lots of people write web apps that don’t work very well?
I’m trying to make the case that there’s value to Electron, despite (or possibly due to!) it’s “not-nativeness”, not defending applications which, I agree, don’t really justify their own existence.
Tools don’t kill people.
we’re talking about an application that’s written from the ground up for this platform, and will never ever be used in a web-app front end.
I’m really not an expert in the matter, just genuinely curious from my ignorance: why not? If it is HTML/CSS/JS code and it’s already working, why not just uploading it as a webapp as well? I always wondered why there is no such thing as an Atom webapp. Is it because it would take too long to load? The logic and frontend are already there.
I’m referring to Atom, Hyper, Visual Studio Code, etc. here specifically.
I don’t think there’s any problem with bringing your front end to desktop via something like Electron. I do it at work with CEFSharp in Windows to support a USB peripheral in our frontend.
If it is HTML/CSS/JS code and it’s already working, why not just uploading it as a webapp as well?
I think the goal with the web platform is that you could - see APIs for device access, workers, etc. At the moment, platforms like Electron exist to allow native access to things you couldn’t have otherwise, that feels like a implementation detail to me, and may not be the case forever.
no such thing as an Atom webapp
https://aws.amazon.com/cloud9/
These things exist, the browser is just a not great place for them currently, because of the restrictions we have to put on things for security, performance, etc. But getting to that point is one view of forward progress, and one that I ascribe to.
I can think of a number of things that could be done off top of my head. For example, the runtime could be modularized. This would allow only loading parts that are relevant to a specific application. Another thing that can be done is to share the runtime between applications. I’m sure there are plenty of other things that can be done. At the same time, a lot can be done in applications themselves. The recent post on Atom development blog documents a slew of optimizations and improvements.
It’s tragic that desktop platforms are utterly non-interoperable and require near-complete duplication of every app.
It’s a necessarily sacrifice if you want apps that are and feel truly native that belong on the platform; a cross-platform Qt or (worse) Swing app is better than Electron, but still inferior to the app with a UI designed specifically for the platform and its ideals, HIG, etc.
If we were talking about, say, a watch vs a VR system, then I understand “the necessary sacrifice” - the two platforms hardly have anything in common in terms of user interface. But desktops? Most people probably can’t even tell the difference between them! The desktop platforms are extremely close to each other in terms of UI, so I agree that it’s tragic to keep writing the same thing over and over.
I think it’s an example of insane inefficiency inherent in a system based on competition (in this case, between OS vendors), but that’s a whole different rabbit hole.
I am not a UX person and spend most of my time in a Terminal, Emacs and Firefox, but I don’t think modern GUIs on Linux (Gnome), OS X and Windows are too common. All of them have windows and a bunch of similar widgets, but the conventions what goes where can be quite different. That most people can’t tell, does not mean much because most people can’t tell the difference between a native app and an electron one either. They just feel the difference if you put them on another platform. Just look how disoriented many pro users are if you give them a machine with one of the other major systems.
I run Window Maker. I love focus-follows-mouse, where a window can be focused without being on top, which is anathema to MacOS (or macOS or whatever the not-iOS is called this week) and not possible in Windows, either. My point is, there are enough little things (except focus-follows-mouse is hardly little if that’s what you’re used to) which you can’t paper over and say “good enough” if you want it to be good enough.
It’s tragic that desktop platforms are utterly non-interoperable and require near-complete duplication of every app.
There is a huge middle ground between shipping a web browser and duplicating code. Unfortunately that requires people to acknowledge something they’ve spent alot of time working to ignore.
Basically c is very cross platform. This is heresy but true. I’m actually curious: can anyone name a platform where python or javascript run where c doesn’t run?
UI libraries don’t need to be 100% of your app. If you hire a couple software engineers they can show you how to create business logic interfaces that are separate from the core services provided by the app. Most of your app does not have to be UI toolkit specific logic for displaying buttons and windows.
Source: was on a team that shipped cross platform caching/network filesystem. It was a few years back, but the portion of our code that had to vary between linux/osx/windows was not that big. Also writing in c opened the door for shared business logic (api client code) on osx/linux/windows/ios/android.
Electron works because the web technologies have a low bar to entry. That’s not always a bad thing. I’m not trying to be a troll and say web developers aren’t real developers, but in my experience, as someone who started out as a web developer, there’s alot of really bad ones because you start your path with a bit of html and some copy-pasted javascript from the web.
There’s nothing heretical about saying C is cross-platform. It’s also too much work for too little gain when it comes to GUI applications most of the time. C is a systems programming language, for software which must run at machine speed and/or interface with low-level machine components. Writing the UI in C is a bad move unless it’s absolutely forced on you by speed constraints.
It’s tragic that desktop platforms are utterly non-interoperable and require near-complete duplication of every app.
++ Yes!
Try comparing a high quality native macOS app like Fantastical with literally any other approach to calendar software: electron, web, java, whatever. Native works great, everything else is unbearable.
Wait, what? I think there’s two different things here. Is Fantastical a great app because it’s written in native Cocoa and ObjC (or Swift), or is it great because it’s been well designed, well implemented, meets your specific user needs, etc? Are those things orthoganal?
I think it’s easy to shit on poorly made Electron apps, but I think the promise of crossplatform UI - especially for tools like Atom or Hyper, where “native feeling” UI is less of a goal - is much too great to allow us to be thrown back to “only Windows users get this”, even if it is “only OS X users get this” now.
It’s a tricky balancing act, but as a desktop Linux user with no plans to go back, I hope that we don’t give up on it just because it takes more work.
Cheers!
PS: Thanks for the invite, cross posted my email response if that’s ok :)
Wait, what? I think there’s two different things here. Is Fantastical a great app because it’s written in native Cocoa and ObjC (or Swift), or is it great because it’s been well designed, well implemented, meets your specific user needs, etc? Are those things orthoganal?
My personal view is that nothing is truly well designed if it doesn’t play well and fit in with other applications on the system. Fantastical is very well designed, and an integral part of that great design is that it effortlessly fits in with everything else on the platform.
“Great design” and “native” aren’t orthogonal; the latter is a necessary-but-not-sufficient part of the former.
“Great design” and “native” aren’t orthogonal; the latter is a necessary-but-not-sufficient part of the former.
Have to agree to disagree here, I guess. I definitely can believe that there can be well-designed, not-native application experinces, but I think that depends on the success and ‘well-designed-ness’ of the platform you’re talking about.
As part of necessary background context, I run Linux on my laptop, with a WM (i3) rather than a full desktop manager, because I really didn’t like the design and cohesiveness of Gnome and KDE the last time I tried a full suite. Many, many apps that could have been well designed if they weren’t pushed into a framework that didn’t fit them.
I look at Tomboy vs. Evernote as a good example. Tomboy is certainly well integrated, and feels very native in a Gnome desktop, and yet if put next to each other, Evernote is going to get the “well-designed” cred, despite not feeling native on really any platform it’s on.
Sublime Text isn’t “native” to any of the platforms it runs on either.
Anyway, I feel like I’m losing the thread of discussion, and I don’t want to turn this into “App A is better than App B”, so I’ll say that I think I understand a lot of the concerns people have with Electron-like platforms better than I did before, and thank you for the conversation.
Cheers!
Sometimes I like to think that I know how computers work, and then I read something written by someone who actually does and I’m humbled most completely.
A lot of this complexity seems down to the way Windows works, though. As a Linux user, the amount of somewhat confusing/crufty stuff going on in a typical Windows install boggles the mind; it’s almost as bad as Emacs.
I guess to me it doesn’t feel like there’s much Windows specific complexity here, just a generally complex issue; a bug in v8’s sandboxed runtime and how it interacts with low-level OS-provided virtual memory protection and specific lock contention behavior, which only expressed itself by happenstance for the OP.
Some of this stuff just feels like irreducible complexity, though my lack of familiarity with Windowsisms (function naming style, non-fair locks, etc.) probably doesn’t help there.
How does CFG work with chrome on linux?
Do you mean CFI?
CFG is MS’s Control Flow Guard, it’s a combination of compile-time instrumentation from MSVC and runtime integration with the OS. CFI on Linux (via clang/LLVM), in contrast, is entirely compile time AFAIK, with basically no runtime support.
See:
for more details on the differences.
Yes and no. :) The linux CFI implementation doesn’t include the jit protection feature in CFG that’s implicated in the bug, so I’m not sure it’s fair to characterize this as “cruft”.
The CFI implementation in llvm isn’t a “linux CFI implementation.” :)
As OpenBSD moves towards llvm on all architectures, it can take advantage of CFI, just as HardenedBSD already does. :)
llvm’s implementation of CFI does have the beginnings of a runtime support library (
libclang_rt.cfi). HardenedBSD is working on integrating Cross-DSO CFI from llvm, which is what uses the support library.Linux just hasit’s own weirdnesses in other places.
That said, memory management seems to be a source of strange behaviour regardless of OS.