The sysadmin niche has recently been flooded with young people coming from development backgrounds (which, today, the cutting edge is dominated by languages like JS and Go and Python), and they are approaching systems administration from a software development point of view -- attempting to abstract away the systems themselves, set up repeatable and testable environments, that sort of thing.
There's a lot of it that's not bad, but as always happens in these situations, they're ignoring the advice and experience of everyone that's kept the lights blinking for several decades now, and those older folks are finding it impossible to keep up with the flood of new people.
If anything kills this project one day, it'll be that it's no longer considered "okay" to connect to an individual server over ssh at all; you're supposed to use an IDE-like interface in a web browser, that connects to a service written in Node, that uses an API to download crowd-sourced pre-written web server configurations from a paid service, that then spins up a new VM using an API from another service, that then installs a daemon written in Go, that then installs the new web server configuration, and then all of your data gets migrated over to the new server and the old one gets decommissioned. If you actually ever touch a server or, gods forbid, edit your own Apache or nginx configuration files, you're a fool and an old-timer and you should retire.
(Inspired by an actual comment I saw on HN not too long ago.)
For what it's worth, this comment is toxic. I am probably the kind of dev that would get lumped in to the group you're calling out, but I edit my own nginx files, I am interested in being close to the metal, and I'm focused on having strong fundamentals. So why not help out instead of being pessimistic? The eternal september thing is everywhere on the web. Everyone loves to talk about how much better it was 'back then'. It's very easy to look back and say that the past was better. You just strap on your rose tinted glasses and sense of superiority, and excuse yourself from any logical, productive discussion.
What I would like to see from experienced devs like yourself is some help with merging the best of both worlds. When should I be close to the metal? When should I work high up the stack? If you offer some real help, you could save us days or weeks or months, but if you take the easy route and point the finger then we all lose.
On HN specifically it's pretty challenging. I haven't made a billion dollars, I haven't scaled anything up to 10 million users, I don't have a Github project with thousands of stars, ergo there's no reason to listen to anything I have to say. I have no merits to spend on the meritocracy here.
HN also tends to rush to embrace the shiny and the new, so it's not sufficient to say something like, "build new things out of old, simple, battle-tested tools" -- which would be a stupidly obvious thing to say to a room full of greybeard sysadmins -- but you have to be able to justify why you should use older tools, and you have to be able to show that they're sufficiently better than the new thing, and you have to have specific examples, preferably from personal experience.
And I don't have the encyclopaedic knowledge to field that argument on much of anything, either.
...maybe a better way to handle this would be to just ask you, what is it that I could say that you would listen to?
I am looking to build a single-page app that communicates with a server several times per second. The idea is to have some python code created interactively in the browser through some click-and-drag process. That python code is sent to the server and ran alongside other similar python scripts; the scripts are actually competing game AI's. So you build it in the browser, and run it on the server with the game state being sent back to the browser to be viewed.
If you have a picture of the fundamental architecture this requires, would you kindly explain the major components and their functionality? I could use something like Django/flask on the server, but how do I keep my front end updated? It's hard for me to imagine the full stack, so if you could paint the picture and explain the parts that would be useful.
Thank you
> could save us days or weeks or months
I think you mean years or decades...
My point was more towards the JS side of things. JS just seems like a terrible choice of language for the tasks being performed where there are so many better alternatives, sure it makes writing a desktop app as easy as a web app but it just doesn't seem suited for the purpose. To me it's like writing complex systems in bash, sure it works but it's a pretty terrible choice.
But I agree, I wish it had been a different language.
2. Electron and React allow you to create desktop applications similar to how you create web applications. This make it easier to recruit engineers to work on your project. This also means you can follow modern best practices.
3. There are perceived benefits to tools that are created with web technologies in how easily they interconnect to the web. For example:
- This terminal supports displaying a website within itself.
- You get things like cascading style sheets for cheap, rather than needing
to build your own theme system.
I think it also gives a lease of life to the terminal environment. There has not been very much UX innovation there for a long while. Hyper in many ways is already much more interesting.I certainly can't think of a time I've ever said "you know what my terminal needs? CSS!" and I have a browser to render webpages.
They also seem to be unclear the difference between a terminal and a shell.
It could, for example let you operate and reuse the text it just displayed:
https://raw.githubusercontent.com/sedwards2009/extraterm/mas...
or even provide a command to let you reuse previous output, such as here:
https://raw.githubusercontent.com/sedwards2009/extraterm/mas...
More information and an implementation can be found here:
https://github.com/sedwards2009/extraterm/blob/master/docs/t...
Another difference is that this works across tabs, sessions and machines, but the classic pipe doesn't.
It makes your interactive shell a lot more interactive. Classic pipes etc still work as expected too, so you are feel to mix and match.
It however does make it easier which increases the chances of useful innovation occurring naturally.
* * *
When software moved first from the shell to the desktop and then from the shell to the browser it became less accessible and less interoperable.Why shouldn't we be able to one day pipe Unix tools directly into our Web apps?
You can't do what I'm suggesting already. You're thinking of sending data to backend APIs which is completely different from sending data into a visualisation function.
Actually, editing colors in my term... I could use some CSS there.
But eventually I head a podcast[^1] about it, and it started to make sense. It's nearly all about hackability. If you simply compare the number of people that are comfortable with adding UI elements to a native application in GTK or QT or whatnot, to those that are comfortable with enhancing a web application, it suddenly makes sense.
[1]: https://changelog.com/213/
Also the design of Hyper is one where everything goes through events, which you can intercept (and possibly re-emit) in extensions, so you don't even need nasty DOM hacking or text parsing to write extensions/plugins.
So now I'm still skeptical, but I also see the upsides. I guess my next step should be to actually try it :-) At least when a Linux version becomes available...
Hyper is just the window in which other programs such as bash, ls etc. run.
- Recent generation of developers who entered programming through JavaScript.
- Node.js being fashionable and hip.
- "Not invented here" syndrome.
- Open-source as a signaling mechanism for hiring and social pecking-order, which feeds the last three points.
Well, its gone way beyond bloat. Basically the idea of adding features to web browsers started snowballing years ago and then turned into a new animal.
That new animal is the web platform. The leading browsers now basically contain features that cover just about every single API a programmer could want. That even includes recently added experimental support for accessing USB devices.
So its an operating system that lives inside other operating systems.
The appeal of Hyper for me, as a JavaScript programmer who has been working with Linux for at least 15 years and likes the terminal -- (I do everything in zsh or fish shell, use vim to program, was playing TradeWars 2002 on telnet last night) is that now I can keep all of my cool ANSI and linux command-line workflow etc. PLUS I can add just about any fricking thing I can think of into my terminal. From sound to SVG to 3d graphics. Or just testing my JavaScript application or component.
But really it comes down to whether your belief system allows for the possibility of a terminal to have any feature that isn't in a classic terminal -- i.e. anything that isn't monospaced colorful text.
Also, if you don't like JavaScript, and ever consider expanding the capabilities of your terminal or integrating some other application somehow, there are tons of languages that can compile to JavaScript and therefore plug in to Hyper.app, including C or many languages that compile to C via emscripten, LiveScript, Haxe, TypeScript, Dart, Elm, RubyJS, Pyjs (Python), Nim, Shen (Erlang), Perlito (Perl), GWT (Java), Scala.js (Scala), Script# (C#), ClojureScript, Moby Scheme, OCamljs (OCaml), ghcjs (Haskell), Go2js (Go), jsForth (Forth), etc.
With javascript level, you can play the abstraction game which "can" make learning and prototyping way easier and unleash ideas.
I mean what is the appeal of node for system applications over something a bit more systems oriented? Is it just an overspill of web developers getting into systems and not knowing any other language? Does JS really offer something different languages don't?