Obvious and possible software innovations
scottlocklin.wordpress.com
scottlocklin.wordpress.com
Parsing C function prototypes doesn't give you enough information to write safe language bindings. For example if you see "char* make_stuff(const char* param);", you don't know whether the memory pointed to by 'param' can be reused after the function call, or whether the function actually took ownership of it. You don't even know how many bytes of memory 'param' has to point to, because you don't know whether 'param' points to a null-terminated string or something else. Likewise you don't know how many bytes of memory the returned pointer points to, you don't know whether the caller is responsible for freeing it, and if they are you don't know how to free it. You don't know whether it's safe to call this function concurrently from multiple threads. You don't know whether 'param' or the return value are allowed to be NULL or not. And this is nearly the simplest possible example!
Not to say that would be easy... building a type system on top of a language that lacks it is anything but easy, but it's possible. TypeScript is an excellent example.
The main idea being that an unwillingness to solve these problems once, generally and completely is dooming "us" to solve it partly, inefficiently and repeatedly.
I would take the detail he gives for the specific cases as incomplete. Specifically this one.
I would NOT say that the article as a whole is "clearly "we could just parse C header files and do it all automatically""
All of these should be doable. Each of these obviously has significant schleppy or technical difficulties/constraints.
For none of these does he address the actual reasons they haven't been done or suggest plans for overcoming them.
I kinda agree with him at a high-level in this case FFI _should_ be solvable.
I think for this case he's just saying "there should be _some_ way to automatically generate FFI glue code (and we should be reusing it)"
> not only could you technically parse .h files and turn them into JNI
Well, no, technically you can't do that at all.
The OP didn't have much leg to really stand on for this point and glosses over any of the actual difficult work that would need to be done to make this utopia from the 70/80/90s materialize.
It's not a great post, and its ideas are not that clearly worked out. He could seriously work on his tone.
It could be parsed minimally as a just a grumpy rant with a bit of "get off the lawn" and a few wrong ideas.
Mostly a waste of time.
I'm steelmanning it because personally I'd prefer to get as much as possible from what I've read. Even if it wasn't necessarily put it in the first place (maximizing my utility from it, for my purposes). I'm not debating the OP.
If you're acting from a position of keeping him honest. Kudos.
So I don't really need to engage you on the point then.
I'm agreeing that you'd probably be able to take down the OP in an argument. Or at least would force him to up his game considerable to be able to actually make his points clearly.
BTW, I really like your use of "steelmanning" here.
Actually looking at his other points after this exchange:
(2) I think modern VMs have amazing engineering - is he asking for hacks? Or what?
(3) Cloud offerings could be more coherent. But there are real market and organisational constraints.
(4) Drag and drop UI designers would be nice, and I miss them, but even the good ones used to produce terrible code when used innocently.
(5) I think modern compilers are pretty awesome. Not sure what he wants done.
(6) Yeah. We could build better more compact systems.
His unhappiness at the state of the world.
Hmm. Moaning about it like that doesn't really do much to solve it...
As I'm sure you are aware https://github.com/rust-lang/rust-bindgen does basically what you want.
I'm actually quite curious where exactly rust-bindgen falls short in the eyes of the author. I'm not as familiar with the other FFI libraries the OP linked.
That’s SWIG. It’s something like 15 years old, possibly more.
> building a type system on top of a language that lacks it is anything but easy, but it's possible. TypeScript is an excellent example.
That has nothing to do with the issue at hand. You can compile haskell to c, that does not help FFI-ing to unannotated C functions.
>Initial release February 1996; 25 years ago
http://www.swig.org/history.html
>July, 1995. Dave develops SWIG while working in the Theoretical Physics Division at Los Alamos National Laboratory. Originally, it was conceived as an extension building tool for a customized scripting language that had been created for the Connection Machine 5.
David Beazley, the author of SWIG, is a brilliant programmer, mad scientist, and excellent presenter.
https://en.wikipedia.org/wiki/David_M._Beazley
Check out his many talks about programming, especially his epic PyCon 2014 talk on his work as an expert on a patent infringement case.
https://www.youtube.com/user/dabeazllc/videos
https://www.youtube.com/watch?v=RZ4Sn-Y7AP8
>David Beazley: Discovering Python - PyCon 2014
>So, what happens when you lock a Python programmer in a secret vault containing 1.5 TBytes of C++ source code and no internet connection? Find out as I describe how I used Python as a secret weapon of "discovery" in an epic legal battle.
>Slides can be found at: https://speakerdeck.com/pycon2014 and https://github.com/PyCon/2014-slides
The tone of the article also goes mad bigot when he starts whining about (AI) ( Aliens and immigrants ) taking our jobs for less money.
A company I once worked for that will remain nameless paid an entire team of people in the Philippines to read global weather reports and respond to them instead of integrating with the relevant APIs, solely because it would have been a higher upfront cost to get expensive US-based engineers to do the work, and I found it infuriating: partly because the time of the two groups was valued so differently, but also because it was just so inelegant and pointless.
(OK, who broke the * for italics markup?)
I've used it. It took the entire thing you want to call and generated one giant file of munged C. That's sort of where that idea takes you.
But the author is on to something. There's a C to Rust translator. It sucks, because it works by emulating C pointer arithmetic in unsafe Rust, using its own set of primitives along the lines of "offset this pointer by this much". Now you have ugly, unsafe Rust.
What's needed is something that infers the meaning of an ambiguous function call from the code. Something that reasons like this:
Function call:
int read(char* buf, size_t n)
Analysis:Is "buf" an array, or a reference to one item?
Examine C code for "read". Is it ever used in an array context, like subscripting or pointer arithmetic? Possible results are "no, definitely not an array", "yes, definitely an array", and "can't decide, code is too confusing". One would like the third case to be rare.
If it's an array, how big is it? Possible results are inferred from the highest subscript seen, as an expression. Is it an expression on some variable at the interface? If it can be determined that the length of buf is n, the function call can be changed to a Rust slice for which .len() will work.
Pointer arithmetic needs to be analyzed by symbolic execution, treating each pointer as an (array, pointer into array) pair. If the array associated with a pointer never changes during the lifetime of the pointer, tracked all the way down the call tree, then the pointer can be represented as a subscript. Subarrays passed by pointer become slices.
This won't work all the time. Sometimes you'll need hints from the user. It would be tempting to guess using something like GPT-3, doing the conversion to safe code, and seeing if it worked. Most of these things are idioms, which is how humans convert them. Translation can be wrong in two ways - subscripts going out of range and being caught, and things using too much memory because a worst case overestimated something.
All the heavy work is in figuring out the equivalent, but not identical, data representation. Once that's figured out, converting the executable code is reasonably straightforward. There's already a dumb C to Rust translator for most of that.
You did by including a space after the asterisk ;)
The trailing one can have a space but the * leading* can't have one
In you could reuse much of it for multiple target languages.
In fact, you can also make FFI wrappers automatically, and handle the memory safety with wrappers on the JS side.
Because C conflates pointers with arrays. It conflates giving an array to a function with giving a space for it to write because there's no difference (besides the 'in'/'out' keyword which I'm not even sure is official)
C is defective out of the box.
It's because you haven't read it till the end. He explains these things haven't been solved exactly because they are difficult and (he believes) unmonetizeable.
I think his perspective is valuable. He's seen a lot, and he's right that we could do to learn a few things from the past.
Saying "this is a problem that should be solved" might betray a lack of knowledge of an existing solution, but hand-waving such an assertion away and saying "he can't back up his opinion" isn't helpful.
If he's wrong, anyone can show why by demonstrating a correct solution to the problem - and then we'll all learn something.
As multiple comments says, many of the problems he talks about are already solved. And some of them were solved in the past and solutions abandoned.
If you want to learn something, you will be much better off starting from a post which does not ignore existing state of the field.
What if someone built an OS to deal with cloud-scale problems at the ground level - in the kernel? This isn't to say the likes of S3 or DynamoDB should be implemented in kernel space (far from it). But the mishmash of services AWS does offer seems to be more about solving cloud-scale problems without implementing an OS, while creating a lot of DevOps jobs and a ton of vendor lock-in.
At this point, AWS reminds me a lot of Windows Server: lots of UI, object-heavy scripting, a huge suite of expensive vendor-specific products, and a sheer inelegance about how the whole thing is built.
I also see a lot of personality similarities between Windows admins in corporate IT of the 2000s and today's AWS DevOps professionals.
Linux finally took down Windows Server because it had superior qualities as a development OS and was cheaper to run on server hardware. It also had a long history of people just building cool stuff on it...
I have no idea what innovation will finally take down AWS, but perhaps mainframe OS's are a promising trail to go down (if infrastructure-as-code could be applied).
Re "OS to deal with cloud-scale problems at the ground level - in the kernel" -- I cannot make sense of that. Why on earth would it matter which OS do services use? For all that I care, Amazon could rewrite DynamoDB using AmigaOS and I would not even notice. It is all the same HTTP calls -- and this is one of the good things about the system. People can use AWS services from windows, linux, mac, mobile, even things like FreeRTOS, using any programming language they like. I guess you can create one more OS which is designed with AWS use in mind, but I doubt it will be a big game changer.
I do agree this is one of the more interesting ideas in the post. But its also the least satisfying because its so vauge. "Imagine AWS but less shitty and more mainfrane like" is beyond vauge.
The author of this list specificly states that they are problems that should be easy to work on. That's very different. Most of the ideas are ideas that have been done in the past. Some are just bad ideas, others just didn't catch on, perhaps due to chance or fashion. None of them really have compelling stories behind them.
There's millions of things in the world that could be solved. A list of some subset is boring. The "Why" is the interesting part.
I do agree it's a little condescending, and that it's got a bit of a rambling flow; from semi-technical to straight bitching, all the way around to political.
It's a writing style. Like it or hate it.
Nonetheless, criticisms of writing style are far too cheap and shallow for HN. Be better.
You can't be rude and justify it by saying "it's just my management style" or "it's just my personality".
So, would you like to try again? Are you intellectually capable of providing a proper retort?
I love how idiots on HN are justifying blatant ad hominem attacks in their commentary as being perfectly valid.
WTF is HN becoming? Are people really getting this stupid?
Electron is awful. So are phones. These things don't have to be so.
I guess some would call this a feature, but the customizability of HTML makes for a lot of good things as well.
Good.
The author is trying to hard to be edgy without being humourous or having the depth of idea that could have saved this.
You have to be big enough or brave enough to move back to reinventing the whole universe.
In theory, any large company could use projects like Oberon and "STEPS Toward The Reinvention of Programming" as an inspiration and create a full stack that runs GUIs on all platforms.
In practice this is a monumental undertaking that not even companies like Apple could do. They still reused BSD for macos and KHtml for Safari.
I've read up a bit on seL4, but can't seem to find the rationale or design decisions behind Zircon. Not sure why Google needs to roll their own microkernel when there is a fast, secure, formally verified one they could use.
Fuchsia leads are on twitter; they seem very nice and some have open DM's. They'd probably be happy to answer
Like Dart, Flutter & Fuchsia?
“ Imagine if the EC2 were as clean as, I dunno, z/OS, which has more or less been around since the 1960s. That would be pretty cool. I could read a single book instead of 100 books on all the myriad tools and services and frameworks offered by Oligarch Bezos. He would be hailed as a Jobs-like technical innovator if he had some of his slaves do this, and he would be remembered with gratitude, rather than as the sperdo who dumped his wife for sexorz with lip filler Cthulhu.”
Comedy gold.
Drag and drop UIs have, as he indentified, been tried. They were a leaky abstraction where incremental functionality was difficult to implement.
He's not massively underestimating the complexity as much as saying that huge swaths of that complexity are unnecessary, were it not for business requirements that often require us to do things the cheapest way possible (like hiring "fungible" web engineers to build an electron app instead of paying native platform engineers to build a first-class native app) -- and thus cause long-term harm.
There are some projects working on this but they are not yet at the level of "copy paste works," or "you can use either a retina or non-retina display and it won't look badly scaled or blurry on either." But I hope this will be sorted out soon because there is a lot of software I want to write with it.
The fact that he thinks they would take money implies that he believes they would be complex. Simple problems shouldn't cost much to fix.
The hard problem is native vs. cross platform.
> Even html frames and tables were better than what we are using today
How? CSS and HTML can do practically everything frames could do (the only thing I can think of that doesn't apply is independent histories). There are a lot of different technologies at your disposal -- grid, which is probably the most intuitive; flex box; or just `position: fixed` divs.
I think way to many people massively underestimate the complexity they add to a problem when their solution involves Electron, React, and npm…
I’m less convinced than most commenters here that he’s underestimating the difficulty of some of what he proposes, he ends with:
“ The reality is they’re all quite possible, but nobody makes money doing them. Engineers are a defeated tribe; it’s cheaper to hire an “AI” (Alien or Immigrant) slave to write the terraform or electron front end rather than paying clever engineers well enough to build themselves useful tooling to make them more productive and the world a better place. ”
Amidst his snark (which I’ll acknowledge will put some readers off) and some borderline probable racist dog whistling (which certainly put me off a bit), he is totally acknowledging that these ideas require smart engineers with budgets and mandates to spend the time making them come true. He’s not suggesting the 12 week boot camp front end engineers should be parsing c header files and inspecting deeper I to he c code to discover the stuff you need to use those to auto generate interfaces for other languages. But surely some of the senior AWS engineers should be spending their time investigation his ideas about ec2 and cloud and OSes?
Offensive passage that subtly implies immigrants from the developing world are slavish (and dehumanising them as well, using the word alien), incapable of intelligence, and who're undercutting honest-to-god 'engineers', and preventing the world from becoming a better place.
I'm astonished that hordes of people are still ready to sell their first born if they can get a citizenship amid such a culture of passive racism and superiority complex.
Can you imagine how bad it is where they come from?
It is much cheaper to hire 5 offshore web devs for 5 weeks to force a solution into a web interface and then have an onshore dev spend 2 weeks turning web UI into an Electron app than it is to build any other type of solution.
He is simply stating the issue rather than not stating it.
Many langs get close with the ease of importing C headers (Go, Rust, etc), but once you ask for reasonably safe FFI'd calls, you're asking a bit too much since ownership goes out the window. Otherwise, if you mean turned into acceptably-unsafe FFI'd function calls, agree just about every lang with C interfacing built in should have that.
> It’s fascinating to me that people find it easier to write a pile of React and HTML on top of electron rather than dragging and dropping native widgets for a framework like we did in the old days.
Ok, on my mark, you write a reasonably complex native GUI for the 5 common platforms (and including the wiring, not just drag-drop) and I'll write a reasonably complex GUI w/ web tech. Once you see the difference in time to market, not to mention reduced maintenance cost, it'll be less fascinating.
Other than those points, I somewhat agree w/ the others, or rather don't strongly disagree (the condescending tone notwithstanding).
Two things on this: this was Java's promise (and Swing delivered on it for the desktop). And the expectations of a web app/electron app are still lower than those of a native app.
oh, it has to run in a browser too so that users don't need to "install" it.
I think you've missed the point of the title.
The answer is obviously Qt or Java. It works.
As someone who has written multiple Qt and Java GUI apps, it always seems fine at first until your UI needs become more unique (and you're subclassing QWidget/JComponent) and you have to jump through hoops to get something a web view has (e.g. streaming video).
I don't like the lack of native any more than the next guy, but I can understand sacrificing native benefits for cohesion/features. If you can tolerate a middleground of non-native but no-browser-bloat, Flutter or .Net Maui may mature enough to help for the complex uses.
Sure, writing your own UI components sucks, but it's not that much worse than writing a UI component for Electron. If you need to stream something from the web, QMediaPlayer works fairly well from my experience.
Also personally I consider Flutter to be native.
If you pass a pointer to a function, will it free() it? Or store it somewhere where it will later free it? Can you now free it yourself safely or not?
Same applies to returned pointer values: don't free or must free?
1. There are many such parsers. Rusts bindgen [1] is one of them, I have written a proprietary one last year. This is pretty common to do for narrow use cases, there just isn't one for "Convert a C API to Ruby"..
2. "Most VM designs I’ve seen are basically just student exercises". Seriously? Create a better on and get rich then! I'm pretty sure Google would pay good money for something better than v8.
3. You can run z/OS on EC2. They do very different things. It's like saying I wish that cars were as simple as a strawberry.
4. "People used to make GUI frameworks which did more than electron apps, looked better and fit in the tens of kilobytes range." That's correct and that's why lots of apps are based on native UI frameworks. For some use cases, electron seems to hit a sweet spot (mostly not having to write UI for each platform and the web too). If you don't like electron apps, don't use them, most run in the browser too.
5. "Compilers and interpreters should learn how modern computers work." I don't know where to begin here. Modern compilers optimize for latest hardware all the time, one recent example out of thousand others is this [2] where V8 redundantly inserts short functions into memory regions close to the code they are called from in order to get more instruction cache hits.
[1] https://github.com/rust-lang/rust-bindgen
[2] https://www.techradar.com/news/google-chrome-is-now-dramatic...
We don't have a choice. IMO it's perfectly fine to be consistently unhappy on that point and to rant about it.
For a guy like myself it'd be more interesting to have the much more tricky discussion of "how can we not use Electron without spending millions on inventing a cross-platform native GUI toolkit?".
I recognize that's a personal preference, yep.
The big issue with doing this is that C does not have enough of a type system to exactly specify the interface. Is that char pointer, a null terminated string, or is it a pointer to an untyped buffer? What is the ownership of the pointer you are passing in or is being returned from the function? Are you allowed to pass in null for the pointer parameter?
All of these are questions that the C type system does not tell you. You have to rely on some type of documentation to figure it out. And if you get it wrong, you have a memory leak at best or a security while at worse.
2. BEAM (Erlang VM) has several native mechanisms to communicate with the outside world (both in-process and out-of-process). In-process ones: linked-in drivers (.so/DLL), NIFs (.so/DLL, like JNI), dirty schedulers. Out-of-process: ports (external executables), C-Nodes/JInterface (an Erlang cluster node interface can be written in any programming language, not just C or Java). See [1].
3. Morphing into a Single Image System OS would be ideal evolution for the cloud vendors. I don't think Mainframe or Heroku-style PaaS are good directions, though. I have many ideas in this field, but they need to be fleshed out first.
--
[1] https://www.slideshare.net/nivertech/erlang-on-osv-49278675#...
Just look on this flowchat ("Which AWS container service should I use?"):
https://twitter.com/forrestbrazeal/status/140063975921564057...
2. The longer term solution would be something like DarkLang, "deployless" single image system development environment. Of-course it will be opinionated. It should include all best practices by default. I.e. think 128-factor, instead of Heroku's 12-factor.
3. Another direction is cloud-native or web-services oriented programming languages.
There is a reason they disappeared even though they were popular at one time. I thought they were a great idea until I actually used them. It is very difficult to write scalable high-performance software on those types of systems, so many edge cases.
1. LISP machines, Smalltalk dev environments, etc. A modern example would be the DarkLang.
2. Distributed OS with process migration like MOSIX - https://en.wikipedia.org/wiki/Single_system_image
The (1) are a good direction, but they're usually not distributed. I guess you're talking about (2) which was never properly implemented, or maybe they were problematic by design.
BTW, what do you think about Inferno and Plan9? They still have hobbyist communities around them, and some of their ideas influenced current mainstream SW like 9P protocol and GoLang channels.
This passage made me laugh though:
> The funny thing is, the same people who absolutely insist that the Church Turing thesis means muh computer is all-powerful simulator of everything, or repeat the fantasy that AI will replace everyone’s jobs will come up with elaborate reasons why these things listed above are too hard to achieve in the corporeal world, despite most of them being solved problems from the VLSI era of computer engineering.
You don't get nice things for free.
Seriously, we could build a space station around Jupiter if we reallllly wanted to. It would be hard, and people would probably die, but if you really wanted to, you could do it.
Similar story for these problems: Solvable? yes.
Valuable?
Well... maybe; but probably hard enough that you can't do them for free, and not valuable enough to justify the cost and effort of doing them.
> Engineers are a defeated tribe...
Is that the take-away here? Be sad, give up? Go and build some electron apps?
There are two problems here: doing (hard task), and paying for it; you can solve either of them by either a) volunteering your time to work on (hard task) or, b) helping fund people who are.
Not to say that the points raised are all invalid, and enumerating things which are worth working on is also helpful, but yeah, well, when people are trying to address them, and all you've got to say is:
> You see pieces of this idea here and there, but like everything else about modernity, they suck.
...complaining that no one else is doing either of these two things, or the ones that are trying suck, is... well, I'm going to be generous and say, entitled.
It's basically SWiG done right. Trying to write a C++ parser is a design doomed to fail.
In C++ ownership is much more explicit than C on average. The idea is to have a Python wrapping object for each C++ pointer. This wrapper can be owning or non-owning: if it's owning calls `delete` once the wrapper is destroyed. If a C++ function returns a std::unique_ptr we map it to an owning wrapper. If a C++ function returns an object by value we `std::move` it on a new object on the heap and map it to an owning pointer. If a C++ function returns naked pointers, we map it to a non-owning wrapper. The system is extensible, for instance you can say that a owner<int *> (see C++ Core Guidelines) is actually owning.
The wrapper can also be const or non-const, exposing the appropriate methods accordingly.
Also you have a lot of patterns you can exploit to provide high level constructs in scripting languages (e.g., `.begin` + `.end` ranges can become Python generators rather easily).
Here you can find the design document:
https://pad.rev.ng/s/__WrFSmm_#
Right now, we're struggling with default template arguments.
Many STL classes have default template arguments which make the name of types look ugly.Also, we currently instantiate all the methods of template classes. But not all methods are supposed to be instantiate with all the possible template values. If you do instantiate those, you can run into compile errors. This means we have to resort to a sort trial and error approach to see what it actually makes sense to instantiate.
ludwig will be open source, but still needs some love before going public.
The point on software not taking enough advantage of hardware is on point. I would also like the hardwares(e.g. SSDs) to expose a bit more how they work rather than have another CPU emulating spinning disks.
Oh I like this one so much. I love the era and idea of the mainframe. I caught the tail end of it in college. Our research professors would send their statistics jobs over to the mainframe and get the dot matrix printouts back showing what treatments showed significance. Maybe I watched Tron too much too. I just love the idea of one big central computer doing all the processing.
And yet at the same time, having a super computer in my pocket is spectacularly cool!
You can only install so many packages with this philosophy before size starts to be important after. More to the point, you can only run a few of them at a time, on machines with gigabytes of RAM. This is a profound embarrassment to our industry. If by "responsive" you're referring to input latency, Electron apps are at best on par with native, usually worse IME. If by "responsive" you mean accommodating different displays... it's a desktop app. Your statement about a "high quality framework" is basically orthogonal to reality, but I'd like to see you justify rating React "higher quality" than Qt5.
I can start with Qt5 today, and give up screaming in rage tomorrow because I can’t get my select dropdown to display what I want.
And be cursed into oblivion by the first user.
> I can start with Qt5 today, and give up screaming in rage tomorrow because I can’t get my select dropdown to display what I want.
File a bug report. Oh, i forgot, developers want to develop, not to fix bugs.
My M1 MacBook pro with only 8gb of ram, I asked 16gb but someone did an ordering mistake, has no issues to run multiple electrons apps at the same time and storage is not something I think about.
By responsive I mean accomoding different display sizes, to have a layout that makes sense on a small laptop with a touchscreen or a 4k 32" external display.
For most usages, I will rate react much higher than Qt5, like almost everyone one in the the industry. The only Qt interface that I think is nice and up to modern standards, and that I remember is the Tesla user interface. It may be a few others because sometimes Qt makes sense, but not for desktop in my humble opinion.
Appliance maker: "Electricity is cheap and there's plenty of it, who cares if all the devices we sell costs the consumer on their electricity bill and causes power plants to pollute the atmosphere more."
Car manufacturer: "Fossil fuel is cheap and there's plenty of it, who cares if all the cars we sell cost the customer extra at the pump and adds to air pollution."
There was a reckoning for both of those fields and there will eventually be a reckoning for software development as well.
right that sounds like a great business idea because then your cloud service company you're building will be easier to commoditize! Can't believe that Bezos guy didn't think of it.
1. Java is adding this with Panama. Definitely a sore point and should be standard when folks are making their languages. https://openjdk.java.net/projects/panama/
2. Meh.
3. This is exactly how to get zero people to use your cloud. Everyone would love to do this but adoption risk is too high.
4. This will never pass muster when it encounters design. There are plenty of tools that do this but generate half-hearted interfaces. Xcode (interface builder) does a pretty good job of it anyway but folks will still want to customize their UIs.
5. Fair criticism.
6. I think that CoreOS was a step in the right direction. Not sure if they have seen it.
It would take many man-years to build, and would take the dedication of Torvolds and the core Linux team to bring into the world.
We had Visual Basic. We had Dreamweaver. We had Microsoft FrontPage. What went wrong?
Most web pages really aren't doing anything that exciting.
> We had Visual Basic. We had Dreamweaver. We had Microsoft FrontPage. What went wrong?
Visual basic was only used to run macros in Office documents. And then viruses. And then MS killed it. Dreamweaver ? Hello Adobe. Frontpage ? Was broken by design.
SW is only about inovations. It does not need to last. It must be new.
> Most web pages really aren't doing anything that exciting.
Data collection is a very exciting thing, so I heard.
No, it got used to do a lot of things, so did Delphi.
VB6 was awesome, then they decided to abandon a good thing and went off on the stupid .NET folly.
If all the bare metal OS is doing is running containers in a data center, it should look more like Xen and less like Linux.
This.
I think C# Windows Forms are a great example of that (drag and drop GUI for creating GUI forms), and I wonder why no one is making things that easy in a cross-platform manner anymore!
"Posted in tools by Scott Locklin on April 1, 2021"
Misogyny is really cool! Thanks Scott Locklin!
https://www.nytimes.com/2019/03/08/style/misogyny-women-hist...
I give the guy credit for humor.
"Why does shit like DPDK exist?" I don't know, but I bet you could find out with a little investigation, which might make this sound more like a well-researched position and less like a tantrum.
"people who absolutely insist that the Church Turing thesis means muh computer is all-powerful simulator of everything". Yeaaah...we're done here.
And my personal favourite: "People may think I’m fighting above my weight class, because many of the people I label as clowns are on television and in important newspapers, much like the stars of 'The Bachelor.' "
Uh huh.
Heh, no Bezos was not smart enough to realize he was building a horizontally scalable mainframe out of commodity parts. All he knew was that they'd driven IT costs down below what anyone in the business had seen in other companies to the point where they could drop some APIs on it and sell it. Plus google was publishing papers like GoogleFS and coming up with GMail and everyone wanted to be seen to be as smart as them. This bit in particular: "he was also smart enough to constrain the spaghetti into something resembling an OS" is "lol, no". The big pile of web APIs was his vision. Literally its called Amazon Web Services.