Explicating the survival of the Shell as default OSS UI


  • ♿ (Parody)

    @ben_lubar said:

    And it actually works the way I told it to, unlike the other program's GUI.

    CLI PRIVILEGE

    You should feel ashamed.



  • @powerlord said:

    To actually load the libraries in question, Java uses the classpath and .NET uses the References system.

    I can't speak for Java, but C# also has an optimizing compiler, so if you really want to "remove the boilerplate" you could simply include literally every reference in literally every C# class (make a template and have the IDE do it), and let the compiler optimize 95% of them away.

    The "kill 'em all and let God sort 'em out" method of includes.



  • @ben_lubar said:

    And it actually works the way I told it to, unlike the other program's GUI.

    Is there a point you were getting at here, other than "bad software is bad"?

    Or maybe "all software under the Windows Live brand is complete and utter shit" which, BTW, I 100% agree with.



  • Can you suggest a free video editor that works on Windows that isn't complete and utter shit?



  • No. Because video editors are hard to build and therefore aren't generally free. There aren't any worthwhile free ones on Linux either.

    You could try Lightworks?



  • I briefly had NCH Software's VideoPad but it wasn't free. It was actually pretty easy to use, except just a couple months after I purchased a license for nearly $90 they released a new version, expired my license AND my installed software, and expected me to pay full-price for the upgrade. Homey don't play that.

    Not that that answers any of your questions....I guess as a warning don't get VideoPad unless you like wasting money.



  • Dwarf Fortress took 12 years (and counting) to build, but it's free. Digital books cost $0 to manufacture, but they usually cost more than physical books. Hardness-to-build and cost are not related.



  • No, Dwarf Fortress is like that machine in The Princess Bride and it sucks years off your life and basically it all totals up.



  • Well, Discourse is free and it certainly isn't easy to build or they would have done it right.



  • @ben_lubar said:

    Dwarf Fortress took 12 years (and counting) to build, but it's free. Digital books cost $0 to manufacture, but they usually cost more than physical books. Hardness-to-build and cost are not related.

    In this country there's a reason for that; physical books attract a 0% VAT rate, but e-books are not considered under the 'essentials' category and therefore attract the standard 20% VAT rate.



  • Does that mean Jeff is really Count Rugen in disguise?

    WTF does that make you, the Man in Black?


  • I survived the hour long Uno hand

    I had a project underway once to write an intuitive GUI for video editing.
    It would have just been a GUI wrapper for ffmpeg because ffmpeg does everything already way better than any video editing software, but I wanted a nice GUI for it.



  • What kind of product research did you do? Because Sony Vegas isn't even the top in the field, and it blows ffmpeg away at everything including rendering speed.


  • I survived the hour long Uno hand

    I didn't try Vegas. I did try a number of products, but somehow missed that one. Is it any good? I'm still looking for a good one.

    Is their Movie Studio good for entry-level?



  • It's the best you can get in the $80 range. I've had people tell me Premiere is worth the price, but honestly at this point if I did upgrade I'd just buy the full Vegas package. (Which is definitely priced to compete with Premiere, I assume it competes on features, too.)



  • I felt like doing that too, but I never got around to starting.

    Which is unusual for me, since I usually start every project I think of and just never get anywhere with them.



  • I spent too much time writing this not to post it so here goes nothing

    @KillaCoder said:

    Because the people developing those programs are all already experts on CLI and see no reason why they should move away? Users should "just learn".

    You do realize that no one is born an expert on CLI, right? Most CLI users actually do not hail from Bashistan. Most people that do have learned the hard way after fucking around a little with their Linux live CD. Other people just say "I'm a software developer and what is this shit. Go away from my life forever."

    Why do people use Google? Wouldn't it be easier to have a single page that links to every web site ever? Surely you've heard about web directories — from history books, mainly. Google is the quintessential command line interface: you tell it what to do, and it does it for you. No one has trouble using it. Almost everybody who doesn't have much of a clue about the internet knows enough to type "facebook" in Google to get to the Facebook page. Oh, and that command line does actual commands, too — using voice and an Android device you can use that very same interface to search you can set reminders, create appointments, text people, whatever. There's no button or UI for it. You just issue the command.

    I like the Linux CLI enough to have it installed on Windows. Here's the fish shell in all of its glory. For bonus points, I have the git command line interface installed. Can it get even more heretic than this?

    http://i.imgur.com/7nlhld1.png

    A CLI comes with features that are simply impossible to do on GUI:

    • Command autocompletion, so you don't have to use the -f/-F short options that people here like to whine so much about
    • Recalling and searching past commands, so that once you get the short option right, you don't have to do that again twice
    • Aliases: still feel really scared by that short option? Alias it away! Creating git-reset-and-lose-my-unstaged-changes to call git reset --hard is trivial, and you don't even have to type in all of that every time you want to use it.
    • Robust homogeneous automation. This is huge. If you find yourself issuing the same commands over and over, you can just stick them in a file and call that instead.

    Let me illustrate:

    Let's say you have to infrequently disable a couple of Linux features on a local machine for debugging purposes. You google around and run these commands:

    echo 0 > /proc/sys/kernel/sysrq
    echo 0 > /proc/sys/vm/oom-kill
    swapoff -a
    

    You do lose the effects on reboot however. Instead of googling the result every time you want them gone, you just write this in a file:

    #!/bin/bash
    echo 0 > /proc/sys/kernel/sysrq
    echo 0 > /proc/sys/vm/oom-kill
    swapoff -a
    

    You mark this as executable and then run this file instead of the two commands individually.

    Say, however, that you want this on every reboot. You drop this very same script into whatever folder is appropriate for your distribution (e.g. /etc/init.d/rc.local) and that's it. If you want to do this on a thousand computers, you just distribute this file in the same folder on each machine with whatever mechanism is cool today.

    All you needed to do is Google a little.

    Now say you want to disable paging on Windows (hey, that's roughly as good an idea as running those two commands above). You know that you can simply do that through Control Panel → System → Advanced System Settings → (Yes, UAC, I want this) → Settings... (the first from the top) → Advanced → Change → Select system disk → No paging file → Set → Ok → Ok → Ok → Close control panel. (Let's ignore the case where you might have multiple swap files on multiple disks)

    Okay; now do that on all machines in your domain. The equivalent here is going through the 14 click long rigmarole on every single machine you have. The alternative is learning an entirely new paradigm, assuming whatever automation APIs Windows may make available even allow this kind of change. Of course: when you have multiple ways of doing things, chances are they won't all expose the same set of features. Soon you have things you can only do clicking and things you can only do from the command line.

    In the CLI, the automation interface is the same as the normal interface. This means that automating menial tasks becomes almost second nature. If your interface is command-line-first, automation becomes that much more powerful, let alone natural. You can use and install simpler GUI interfaces if you really want to, but those are a separate concern, a different task from the program's actual business logic. Blakeyrat puts it best:

    @blakeyrat said:

    "Here's the deal: to get Apple Certified, which still matters because it's 1992 and that's how you get into Egghead Software and Computer City, you gotta implement at least the 4 required AppleEvents: Open, Save, Print, Quit. Oh, and, BTW, since you gotta implement the AppleEvent handling code anyway, you'd save time just having your native GUI send AppleEvents to itself."

    Replace all the Apple* stuff with the CLI and enforcement through certification with enforcement through having the GUI in its own separate optional program anyway.

    This also results in less bugs: git cannot hang its interface by running code in the UI thread if it doesn't have a UI thread in the first place. Since all UI interfaces all interact with git through the public command line interface, you enforce the kind of separation between view and model/controller that is universally recognized to be a good idea in software. This also means that the GUI interface is a full subset of the CLI: anything the GUI does, the CLI can automate.

    Does that mean that any user interface can possibly expose all features available through git's 34+ subcommands and options thereof? No! And that's okay.

    There is no way to make NTFS junctions from the built-in Windows user interface; you have to either get a third-party GUI program or drop to the command line. Does this bother anybody? No. Is mklink any less complete for not having a GUI? No. What's the GUI equivalent of vol? Where in the Windows interface is the Volume Serial Number shown? Is Windows incomplete for not having this? Doesn't Windows have customers with needs?! I DEMAND A FULL REFUND.

    So yeah, sometimes you do have to drop to the command line and use copy paste (oh the horror! how will people ever figure this one out!) stuff in a terminal to get one-off setup and tweaks done. Does that mean that Linux is incomplete or defective? No. Just paste the command you've been given for free in and be thankful, for Pete's sake.

    @blakeyrat said:

    This goes back to my complaints about developers writing software before educating themselves on what came before. The reason the state of the art never advances is because there's no "standing on the shoulder of giants" in our field, at all.

    You literally can't stand on wider, taller shoulders than Unix.

    @blakeyrat said:

    > AFAICT, he insists that there should be no difference between developers and end users, because everyone should be able to be a developer.

    Yes, but what people here on this forum don't get is that that's the ideal.

    The first step to making software development so hard to be inaccessible is having to relearn everything about how to use a computer just so it fits in a text file.

    I stopped reading this thread at about post 130 or so. Surely that's not a problem right? The internet is write-only anyway.



  • I'm not going to reply to your whole post, but.

    @bp_ said:

    Now say you want to disable paging on Windows (hey, that's roughly as good an idea as running those two commands above). You know that you can simply do that through Control Panel → System → Advanced System Settings → (Yes, UAC, I want this) → Settings... (the first from the top) → Advanced → Change → Select system disk → No paging file → Set → Ok → Ok → Ok → Close control panel.

    Turning off the page file is difficult on purpose.

    @bp_ said:

    The alternative is learning an entirely new paradigm, assuming whatever automation APIs Windows may make available even allow this kind of change.

    Right but Windows admins, presumably, have spent as much time learning VBScript/PowerShell as you have Linux CLIs. So why include their learning curve, but ignore the Linux CLI learning curve?

    @bp_ said:

    If your interface is command-line-first, automation becomes that much more powerful, let alone natural.

    Except you can do this without having the interface be CLI-first. Like I posted above and you quoted literally a paragraph below.

    @bp_ said:

    You can use and install simpler GUI interfaces if you really want to, but those are a separate concern, a different task from the program's actual business logic.

    Bullshit for multiple reasons:

    1. As we've discussed many times previously, if you have a GUI using a CLI as an ad-hoc API, you end up in a shit-situation where you can now never change the CLI or you risk breaking an unknown number of other applications.

    2. GUIs operate on fundamentally-different principles than CLIs (for example, they are fundamentally multitasking and non-modal in a way that CLIs aren't), and thus a GUI building on a CLI will be inferior to a traditional GUI.

    3. For most applications, the GUI is the business logic. What's the business logic of a web browser? What's the business logic of a spreadsheet application? What's the business logic of Paint.NET? What about Sony Vegas? How about Cakewalk?

    @bp_ said:

    This also results in less bugs: git cannot hang its interface by running code in the UI thread if it doesn't have a UI thread in the first place.

    ... well technically true I suppose? Also perhaps the dumbest reason I've ever heard for building a CLI and no GUI.

    @bp_ said:

    Since all UI interfaces all interact with git through the public command line interface, you enforce the kind of separation between view and model/controller that is universally recognized to be a good idea in software.

    How? What part is the View? The text going to the console?

    Also I don't recognize it as a good idea in software, mostly because I'm always assigned tasks that don't fit that model at all. Which is a surprisingly large number of tasks.

    @bp_ said:

    What's the GUI equivalent of vol? Where in the Windows interface is the Volume Serial Number shown?

    The correct GUI-user response to something like this is, "volumes have serial numbers? Who gives a shit. You only ever refer to them by name."

    @bp_ said:

    Is Windows incomplete for not having this? Doesn't Windows have customers with needs?! I DEMAND A FULL REFUND.

    Other than perhaps a guy writing HD drivers, does anybody have a need to see this?

    @bp_ said:

    So yeah, sometimes you do have to drop to the command line and use copy paste (oh the horror! how will people ever figure this one out!) stuff in a terminal to get one-off setup and tweaks done.

    Copy/Paste is a GUI concept that doesn't exist in the CLI world. You only have it available because most CLI consoles now run as windows within a GUI.

    @bp_ said:

    Does that mean that Linux is incomplete or defective? No. Just paste the command you've been given for free in and be thankful, for Pete's sake.

    Being free doesn't make it immune to criticism.

    @bp_ said:

    You literally can't stand on wider, taller shoulders than Unix.

    You're joking, right?



  • @bp_ said:

    Now say you want to disable paging on Windows (hey, that's roughly as good an idea as running those two commands above). You know that you can simply do that through Control Panel → System → Advanced System Settings → (Yes, UAC, I want this) → Settings... (the first from the top) → Advanced → Change → Select system disk → No paging file → Set → Ok → Ok → Ok → Close control panel. (Let's ignore the case where you might have multiple swap files on multiple disks)

    Okay; now do that on all machines in your domain. The equivalent here is going through the 14 click long rigmarole on every single machine you have.


    Or you could use group policy like any sane system administrator.



  • @blakeyrat said:

    The correct GUI-user response to something like this is, "volumes have serial numbers? Who gives a shit. You only ever refer to them by name."

    You'd think that, and then you have to install Matlab. (Just to give you an example I actually did experience.)

    @blakeyrat said:

    Copy/Paste is a GUI concept that doesn't exist in the CLI world. You only have it available because most CLI consoles now run as windows within a GUI.

    That is not true. You can do copy paste from the terminal just fine if you use tools such as screen or tmux.

    @blakeyrat said:

    Turning off the page file is difficult on purpose.

    I know, and I'm aware; just for your amusement, those three commands disable a couple emergency keystrokes, an emergency mechanism that prevents kernel panic when the system runs out of memory and disable swap. (They require root, obviously, and don't survive a reboot.)

    @blakeyrat said:

    Except you can do this without having the interface be CLI-first. Like I posted above and you quoted literally a paragraph below.

    You can, but I believe I understand that even Apple dropped the ball on that one.

    @blakeyrat said:

    As we've discussed many times previously, if you have a GUI using a CLI as an ad-hoc API, you end up in a shit-situation where you can now never change the CLI or you risk breaking an unknown number of other applications.

    Yes. That's not a shit situation. The CLI is your public interface. You don't change it without good reason.

    @blakeyrat said:

    What's the business logic of a web browser?

    Turn HTML into graphical elements and run JS to update those graphical elements. The decoupling is weak in this one, obviously.

    @blakeyrat said:

    What's the business logic of a spreadsheet application?

    Input: list of (cell, contents or formulas) tuples
    Output: list of (cell, contents) tuples

    If you insist I use software that actually exists: basically bc.

    @blakeyrat said:

    What's the business logic of Paint.NET?

    Basically ImageMagick.

    @blakeyrat said:

    What about Sony Vegas?

    Basically ffmpeg.

    @blakeyrat said:

    How about Cakewalk?

    Still basically ffmpeg, at least so it seems.

    @blakeyrat said:

    Right but Windows admins, presumably, have spent as much time learning VBScript/PowerShell as you have Linux CLIs. So why include their learning curve, but ignore the Linux CLI learning curve?

    A Windows sysadmin's learning curve (one I haven't climbed, admittedly, and might never have to, but still this does mean I am very much subject to the dunning kruger effect here; I'd love to learn more and be proven wrong) is spent mostly using Windows-sysadmin-specific programs that usually aren't even available in consumer versions of Windows to begin with (with good reason.)

    On Unix, a sysadmin's learning curve begins with typing commands in a text file and googling about where those text files should go. It starts with scratching your own itches, as opposed to having to manage a fleet of computers. I don't think AppleScript was built with the latter in mind.


    Filed under: You just activated my trap card; I finally figured out how to make this work and it's deliciously discoursistent; Experiments in post writing and history rewriting; Notifications are a barrier to threads that actually end; You can probably expect to find the paragraph-by-paragraph rebuttal to this post in post #194



  • @bp_ said:

    You'd think that, and then you have to install Matlab. (Just to give you an example I actually did experience.)

    So what? Matlab is terrible software written by idiots, and therefore Windows is somehow broken? Is that the argument here?



  • @ben_lubar said:

    I'm making a new Dwarf Fortress video

    I would have liked your post, but for this statement.



  • @M_Adams said:

    😭

    That has got to be one of the worst of the new emoji.



  • @ben_lubar said:

    I usually start every project I think of and just never get anywhere with them.

    Are you my evil twin?



  • @bp_ said:

    I like the Linux CLI enough to have it installed on Windows.

    All hail Cygwin!



  • @bp_ said:

    You do realize that no one is born an expert on CLI, right?

    Yes.
    @bp_ said:
    Most CLI users actually do not hail from Bashistan. Most people that do have learned the hard way after fucking around a little with their Linux live CD.

    "Fucking around" doesn't work. You need to learn the commands and arguments by rote and get them 100% correct, every time. There is no way to intuitively discover it by clicking around, no way to gradually learn it through feedback from the program. You simply must get the command and it's arguments perfectly correct, or it fails utterly, sometimes catastrophically and with no feedback whatsoever. Fun! It's the "hard way" indeed.

    @bp_ said:

    Other people just say "I'm a software developer and what is this shit. Go away from my life forever."

    I don't say that. I have to use it for my job. I do hate how unintuitive and opaque it is though.
    @bp_ said:
    Why do people use Google?

    Because it's fast, easy, intuitive and corrects mistakes for the user. The command line is fast too, but not the others.

    @bp_ said:

    Wouldn't it be easier to have a single page that links to every web site ever? Surely you've heard about web directories — from history books, mainly.

    No, it wouldn't, it's easier for humans to have their information broken up into small, sensible, digestible chunks. That's why that stuff is gone.
    @bp_ said:
    Google is the quintessential command line interface: you tell it what to do, and it does it for you.

    Bullshit. Google does not require exact commands. Never mind typos or phonetic mistakes, Google can correct mangled garbage for you. On the CLI if I get a single letter wrong, or damn it, even a single letter in the wrong case, the entire thing falls over, or worse, can do the complete opposite of what I wanted. That's a million miles away from the ease and helpfulness of Google which "Just Works"(tm), so trying to conflate them is either stupidity, lies or trolling.

    Also, Google does not hide what it ACTUALLY DOES from me. It has a nice big button labeled "Search". So, it searches. If I'm using a command line to call a program, how do I know what it's doing? Oh yeah, I have to learn it by rote from a manual/colleague, rather than the program just bloody telling me what it's doing.

    In short: Google does as much work as possible for me, CLI dumps as much work as possible on me.

    @bp_ said:

    No one has trouble using it. Almost everybody who doesn't have much of a clue about the internet knows enough to type "facebook" in Google to get to the Facebook page.

    Yeah buddy, if that was a command line argument, it fails. You didn't have a capital "f" for "Facebook". So you get zero results. And no info as to why. See how far away Google is from the CLI and it's strictness and lack of helpfulness?

    @bp_ said:

    Oh, and that command line does actual commands, too — using voice and an Android device you can use that very same interface to search you can set reminders, create appointments, text people, whatever. There's no button or UI for it. You just issue the command.

    That's cool. I didn't know that. I'd be surprised if there's anything you can do that way, that you can't do with a GUI somewhere though.

    @bp_ said:

    I like the Linux CLI enough to have it installed on Windows. Here's the fish shell in all of its glory. For bonus points, I have the git command line interface installed. Can it get even more heretic than this?

    You do whatever you want buddy. Freedom is good. Options are good. I just want the option to use what are, for me, the vastly superior option of GUIs. I don't want to take your CLI option away, why do you want to take my GUI option away? 😛

    @bp_ said:

    A CLI comes with features that are simply impossible to do on GUI:

    • Command autocompletion, so you don't have to use the -f/-F short options that people here like to whine so much about
    • Recalling and searching past commands, so that once you get the short option right, you don't have to do that again twice
    • Aliases: still feel really scared by that short option? Alias it away! Creating git-reset-and-lose-my-unstaged-changes to call git reset --hard is trivial, and you don't even have to type in all of that every time you want to use it.

    "Impossible"? All of that is simply techniques to make the CLI less horrible. None of that applies to GUIs. It'd be like me saying "you can't use CSS to style buttons on a CLI!" Well, uh, CLI doesn't even have buttons, so that makes no sense.
    @bp_ said:
    * Robust homogeneous automation. This is huge. If you find yourself issuing the same commands over and over, you can just stick them in a file and call that instead.

    That's great for sure. No reason it couldn't be done in a GUI though. Click a "Create Repeated Task" button, click through your GUI screens and buttons, click your "Finished Repeated Task" button. Then call that from a menu whenever you need it. Boom 😛

    @bp_ said:

    [...etc...]

    Of course there's tons of amazing stuff that can be done on the CLI. It's usefulness and functionality is not in question. Just it's usability, friendliness and ease of use.



  • @bp_ said:

    So yeah, sometimes you do have to drop to the command line and use copy paste (oh the horror! how will people ever figure this one out!) stuff in a terminal to get one-off setup and tweaks done. Does that mean that Linux is incomplete or defective? No. Just paste the command you've been given for free in and be thankful, for Pete's sake.

    Separate post for a separate issue...

    Dude, this attitude is why so many people hate Linux, it's users, it's whole culture. The sarcastic, superior, user mocking tone. "If you have a problem, it's YOUR PROBLEM! Linux WORKS! If you don't like it then GO AWAY!"

    There's a reason why Apple (who I am not a fan of at all btw) are the most successful tech company in the world and the whole Linux movement in all it's flavors never ticks past 1 - 2% adoption rate. Apple serves the users first and bends everything else to make their experience as easy and enjoyable as possible. Linux puts the tech first and dismisses users for not jumping through all it's hoops.

    You say "be thankful" because it's free? Apple shows that people would much rather pay huge amounts and "be thankful" for a much better end user experience!

    (Yeah I get this is a tangent and not really applicable to devs like us. Whatever :P)

    (I also liked your post because even though I disagree with it, I do enjoy a big wall 'o text!)


  • Discourse touched me in a no-no place

    @KillaCoder said:

    You simply must get the command and it's arguments perfectly correct, or it fails utterly, sometimes catastrophically and with no feedback whatsoever.

    That's a poorly designed particular instance, and not indicative of what a CLI necessarily entails. We can also have shitty GUIs (and damn, there are some bad ones out in the real world) and yet they're not taken as condemning the entire paradigm.

    The shorthand options thing isn't very easy. Until the user of the interface learns to use the documentation as a matter of course, they are definitely impenetrable.



  • @KillaCoder said:

    "Fucking around" doesn't work. You need to learn the commands and arguments by rote and get them 100% correct, every time. There is no way to intuitively discover it by clicking around, no way to gradually learn it through feedback from the program. You simply must get the command and it's arguments perfectly correct, or it fails utterly, sometimes catastrophically and with no feedback whatsoever. Fun! It's the "hard way" indeed.

    @KillaCoder said:

    Because it's fast, easy, intuitive and corrects mistakes for the user. The command line is fast too, but not the others.

    #notallcommands

    I feel your pain that sometimes shells don't go enough of the way to help you; it feels like you're describing sh, which indeed does nothing to help the user. On the other end of the spectrum there's fish, which autocompletes every single command from history, gives live syntax highlighting for commands, underlines correct paths, tries to parse man pages to provide parameter autocompletion, lets you recurse over subdirectories with **s, has a web interface for its settings and whatnot. It does all of that out of the box, too.

    zsh is also another shell with a great reputation of providing all kinds of assistance. From their webpage:

    % setopt correct
    % sl
    zsh: correct `sl' to `ls' [nyae]? y
    % setopt correctall
    % ls x.v11r4
    zsh: correct `x.v11r4' to `X.V11R4' [nyae]? n
    /usr/princton/src/x.v11r4 not found
    % ls /etc/paswd
    zsh: correct to `/etc/paswd' to `/etc/passwd' [nyae]? y
    /etc/passwd
    

    Even if you probably can't get away with installing those shells in a server farm and the fish syntax is compatible with the clusterfuck that's bash's syntax, they're great for fucking around with your own computer. And you can still issue commands remotely through ssh and whatnot; I'm sure I didn't have to say this :)

    @KillaCoder said:

    If I'm using a command line to call a program, how do I know what it's doing? Oh yeah, I have to learn it by rote from a manual/colleague, rather than the program just bloody telling me what it's doing.

    For most commands, http://explainshell.com/ does the work of looking up things for you. (Most commands will also try and tell you what's wrong, but apparently you have to work with at least one that doesn't. That said, it's not like error reporting is a function of CLI vs GUI...)

    @KillaCoder said:

    Click a "Create Repeated Task" button, click through your GUI screens and buttons, click your "Finished Repeated Task" button. Then call that from a menu whenever you need it. Boom

    Ah, yes. The shrine of usability, friendliness and ease of use. 😉


  • kills Dumbledore

    @bp_ said:

    zsh is also another shell with a great reputation of providing all kinds of assistance. From their webpage:

    % setopt correct
    % sl
    zsh: correct sl' to ls' [nyae]? y
    % setopt correctall
    % ls x.v11r4
    zsh: correct x.v11r4' to X.V11R4' [nyae]? n
    /usr/princton/src/x.v11r4 not found
    % ls /etc/paswd
    zsh: correct to /etc/paswd' to /etc/passwd' [nyae]? y
    /etc/passwd

    Oh, well that's alright then. I see that I was completely mistaken in thinking command lines are unintuitive. If only Windows had a [nyae] option

    @bp_ said:

    tries to parse man pages to provide parameter autocompletion

    so the man page is an API as well? Better not make any changes that might make it more human readable at the expense of the shell parsing it.



  • @KillaCoder said:

    Dude, this attitude is why so many people hate Linux, it's users, it's whole culture. The sarcastic, superior, user mocking tone. "If you have a problem, it's YOUR PROBLEM! Linux WORKS! If you don't like it then GO AWAY!"

    That's not what I said! I'm saying that sometimes for more advanced and arcane stuff you have to drop to the console. Most of the time this sort of arcane stuff has already been figured out for you, so all that you really need to know is how to copy and paste. This is no different from Windows. I provided two examples of tasks that require you to use the command line in Windows; no one feels like, or is arguing that, Windows is defective or incomplete because of that.

    You do need some sort of attitude when switching to Linux: it's a different operating system with a different philosophy and different paradigms and trying to do things the Windows way is painful. You could say the same of OS X, which seemingly goes out of its way to make Windows users uncomfortable and stupid. Yet its reputation for usability, friendliness and ease of use is stellar. :)



  • @jaloopa said:

    Oh, well that's alright then. I see that I was completely mistaken in thinking command lines are unintuitive. If only Windows had a [nyae] option

    I don't need a crystal ball to guess that means "No Yes Always nEver".



  • Because that's still so intuitive, right? (I had to double-take and I didn't figure out that e = Never)


  • kills Dumbledore

    wouldn't it be nice if it was possible to have some sort of... I'll call it a "Button", with space for entire words. You could then use a "mouse" to "click" the button, maybe even have some way of highlighting a letter in each button so you can still use the keyboard to select it. Wouldn't that be an amazing advance in technology?



  • Sure. I'm not arguing that the GUI shouldn't exist. Hooray for GUIs. Did you know Linux has GUIs, too?

    What I'm arguing is that the CLI should exist. The title of the thread is "Explicating the survival of the Shell as default OSS UI", not "Why you should drop whatever you're doing and use ncurses instead."



  • That's probably for the better, because if I'm going to be honest I have no idea why "always" and "never" are even options there to begin with. How do you change your mind later on? Iunno, I don't use zsh. :)


  • kills Dumbledore

    I will give you this: That fish screenshot above looks quite nice for a CLI. I've often wondered why shells don't try to add in something a bit like Intellisense. Tab completion is a very incomplete solution IMO, but it looks like fish has a much nicer interface for discovering commands, especially with the description of each command.


  • Discourse touched me in a no-no place

    @jaloopa said:

    I've often wondered why shells don't try to add in something a bit like Intellisense.

    Some do, but discovering all the possible options in a loosely coupled system is quite difficult, especially for the obscure things where you really need it. Just doing it for builtins is chickening out. There certainly isn't a format for a descriptor that programs must produce to say how they should be called (that would be wonderful if it existed; the shell would not be the only consumer of the information, I can assure you) nor any spec for how to actually tell a program to produce it. Without the information, improving the UI is really difficult.



  • @dkf said:

    There certainly isn't a format for a descriptor that programs must produce to say how they should be called (that would be wonderful if it existed; the shell would not be the only consumer of the information, I can assure you) nor any spec for how to actually tell a program to produce it

    It's either sad or funny that the closest thing to this that I know of is the argparse python module, which requires you to explicitly enumerate the options in your program. Dynamic programming to the rescue? :P

    Of course there's also the "object oriented" Powershell, which does solve this particular problem. You can even opt into Intellisense by running ise at the Powershell shell which opens a second Powershell shell in a separate window. Credit where credit is due!


    Filed under: in before @Luhmann.


  • Discourse touched me in a no-no place

    @bp_ said:

    Of course there's also the "object oriented" Powershell, which does solve this particular problem.

    At a cost of increasing the coupling between the shell and the executed command (the base level is COM, isn't it?) I suspect that's inescapable…


  • BINNED

    @jaloopa said:

    why shells don't try to add in something a bit like Intellisense

    Like ... euh ... PowerShell?
    PowerShell ISE is default installed, but not enabled, from Windows 8. I had a nifty screenshot with Intellisense autocompleting and commandlet help showing but Dicsourse doesn't like images at the moment.


  • ♿ (Parody)

    @blakeyrat said:

    So what? Matlab is terrible software written by idiots, and therefore Windows is somehow broken? Is that the argument here?

    The whooshing sound is the goalposts moving, is what you're saying?



  • @jaloopa said:

    I've often wondered why shells don't try to add in something a bit like Intellisense.

    There have been attempts to add similar features before, called 'predictive menus' or 'auto-guess' or things like that, as well as auto-correct features such as the notorious DWIM (do what I mean) feature on BBN Interlisp back in the early 1970s. Unfortunately, none really worked, for two reasons.

    First, they generally have had to be limited to what is easily done in a linear text environment, which rules out a proper menu approach. Some have applied more advanced text UI systems like curses to the problem, but that runs counter to the minimalist design of most shell UIs.

    Second, and more importantly, the problem with the number of possible outcomes is nearly insurmountable. With most programming languages, a predictive systems like Intellisense rarely has more than a dozen or so options to offer you by the time the sensing kicks in; it deliberately delays until a reasonably sized menu can be presented (that's why Intellisense usually lets you type in about 4-6 letters before showing a menu). With a shell system, especially one for Unix, the most frequent commands are usually the shortest, meaning it rarely hits the threshold; but more importantly, with longer commands there may be dozens or even hundreds of options, making a simply menu impractical.

    As for DWIM, it has the same basic issue, except that the tree of possible meanings is even bigger. It is more likely to guess wrong than right, as anyone who has used an auto-correct on their phone knows. And Finagle overlook you should you try to have it work without prompting the user, as the original DWIM did (though it became clear quite quickly why that was a bad idea, and a prompt was added).

    Worst of all, combining both features can lead to a combinatorial explosion, as every pathway of possible meanings has to be explored. The time spent waiting on it would make the features useless by itself.

    In any case, neither of these solve the real problem with a shell, which is the Gulf Of Execution: there is no way to know what command you need perform the task you want just from observing the system. Without an extensive help system, or at least some sort of external documentation, it is impossible to learn a shell system simply by experimentation. Worse, most shell systems give little or no feedback unless a catastrophic error is made (and often not even then), making the Gulf Of Evaluation equally difficult to bridge. A workable, non-punitive system for novices does best if it gives a clear set of starting points for the beginner, and a clear and immediate response to their actions.


  • ♿ (Parody)

    @jaloopa said:

    I've often wondered why shells don't try to add in something a bit like Intellisense.

    Wonder no more. They have.



  • @jaloopa said:

    Oh, well that's alright then. I see that I was completely mistaken in thinking command lines are unintuitive. If only Windows had a [nyae] option

    Well it's fun to say at least. "You want me to use a CLI? Nyae!"

    @jaloopa said:

    so the man page is an API as well? Better not make any changes that might make it more human readable at the expense of the shell parsing it.

    One thing I've learned talking to nix users is that they don't know the difference between interfaces for humans and interfaces for programs, and don't understand the value of having those be different things. Thus, they write stuff that goes and attempts to read the human-readable documentation. Or, when you talk about GUI scripting, they literally can't imagine anything other than having a robot drive the mouse around and if you move a window slightly suddenly it breaks.

    These same people who Do Not Get It on a fundamental level are also the same group of people likely to think themselves better at software than those who use Windows. Hm.

    @bp_ said:

    That's not what I said! I'm saying that sometimes for more advanced and arcane stuff you have to drop to the console.

    The counter-argument is that if you ever have to drop into the console for any reason, then the OS has failed the user. Nyae?

    @bp_ said:

    Most of the time this sort of arcane stuff has already been figured out for you, so all that you really need to know is how to copy and paste.

    ... which you can only even do in a CLI environment because they stole the feature from GUIs.

    @bp_ said:

    This is no different from Windows. I provided two examples of tasks that require you to use the command line in Windows; no one feels like, or is arguing that, Windows is defective or incomplete because of that.

    On the contrary, Windows is far better than Linux in this area.

    For one thing, all its functions are scriptable using VBScript/JScript, which can be developed in a normal IDE with handy things like a debugger and variable inspection.

    On the other hand, when Windows users want a *nix-type CLI, they have PowerShell which has the same concepts but is significantly better in many fundamental ways. For example, it can pipe around data without having to serialize it into text first. This is something that can never happen in the *nix shells, because it'd break everything-- they're so fucking stagnant there's no way to improve or evolve them at this point.

    @bp_ said:

    You do need some sort of attitude when switching to Linux: it's a different operating system with a different philosophy and different paradigms and trying to do things the Windows way is painful.

    More painful than losing all your files because you typoed ONE character, and there being no way to "undo" the command or recycle bin to recover the files from? That's not "painful", that's "stupid."

    @bp_ said:

    You could say the same of OS X, which seemingly goes out of its way to make Windows users uncomfortable and stupid. Yet its reputation for usability, friendliness and ease of use is stellar. :)

    Nobody's saying Linux should be Windows. Nyae. We're saying Linux should be usable.

    @bp_ said:

    What I'm arguing is that the CLI should exist. The title of the thread is "Explicating the survival of the Shell as default OSS UI", not "Why you should drop whatever you're doing and use ncurses instead."

    Yes; but do you think it should be the default interface for OSS programs?

    @dkf said:

    There certainly isn't a format for a descriptor that programs must produce to say how they should be called (that would be wonderful if it existed; the shell would not be the only consumer of the information, I can assure you) nor any spec for how to actually tell a program to produce it. Without the information, improving the UI is really difficult.

    Gee. Sounds like what you really need is something like AppleEvents.

    Not that anybody in the open source world would learn anything from Mac Classic.

    @boomzilla said:

    The whooshing sound is the goalposts moving, is what you're saying?

    No; I'm saying that if MATLAB cared about the usability of their product, they also would say, "what is a volume serial number, and why should our users be expected to know it?" It also says that Microsoft should have removed that unnecessary implementation-detail stuff from their CLI, because now it'll have to be there forever or they've "broken" MATLAB.

    I don't get where any goalposts are moving here. And in any case, I never cited Windows as a perfect GUI environment. However, that's no excuse for what MATLAB is doing to its users, which is inexcusable.

    Nyae?


  • ♿ (Parody)

    @blakeyrat said:

    I don't get where any goalposts are moving here. And in any case, I never cited Windows as a perfect GUI environment. However, that's no excuse for what MATLAB is doing to its users, which is inexcusable.

    It's the sort of thing Windows people have to deal with. Just like applications doing silly things in Linux are things those people have to deal with. Which was the point.


  • BINNED

    @KillaCoder said:

    Dude, this attitude is why so many people hate Linux, it's users, it's whole culture. The sarcastic, superior, user mocking tone. "If you have a problem, it's YOUR PROBLEM! Linux WORKS! If you don't like it then GO AWAY!"

    I've only seen that attitude from a very vocal minority of the Linux user community, and I suspect much of it is in response to people who don't really want Linux but instead are looking for a free Windows replacement (and yes, @blakeyrat, they do exist) .


  • I survived the hour long Uno hand

    I don't think anyone's saying the command-line should vanish. I've gotten to like the command line in my adventures with linux; every time I try out a new distro and get frusturated with not being able to find where they've hidden my settings I drop down to command-line.

    BUT.

    The only way I can use the command line is because I have a GUI environment with a nifty little web browser so I can go to google and search for how the fuck the syntax works. In a world without GUIs, I'd be a starving actor, because I would be literally incapable of using a computer anymore.

    A GUI is far more discoverable, easier to use, and MUCH easier to remember how to do things. I never have to google for how to make a bookmark in my browser, even when using a browser I rarely use like IE. I always have to google the syntax for restarting apache on debian. (And get about 3 wrong answers before I remember which arcane syntax works on my copy of debian. Hint: it changed last time I moved to another box with supposedly the same fucking OS. Every time I've installed apache from apt-get and let it keep all the default settings and it still fucking changed).



  • @blakeyrat said:

    The counter-argument is that if you ever have to drop into the console for any reason, then the OS has failed the user. Nyae?

    E

    @blakeyrat said:

    For one thing, all its functions are scriptable using VBScript/JScript, which can be developed in a normal IDE with handy things like a debugger and variable inspection.

    On the other hand, when Windows users want a *nix-type CLI, they have PowerShell which has the same concepts but is significantly better in many fundamental ways. For example, it can pipe around data without having to serialize it into text first. This is something that can never happen in the *nix shells, because it'd break everything-- they're so fucking stagnant there's no way to improve or evolve them at this point.

    N

    @blakeyrat said:

    More painful than losing all your files because you typoed ONE character, and there being no way to "undo" the command or recycle bin to recover the files from? That's not "painful", that's "stupid."

    N

    @blakeyrat said:

    Nobody's saying Linux should be Windows. Nyae. We're saying Linux should be usable.

    N

    @blakeyrat said:

    Yes; but do you think it should be the default interface for OSS programs?

    Y

    @blakeyrat said:

    No; I'm saying that if MATLAB cared about the usability of their product, they also would say, "what is a volume serial number, and why should our users be expected to know it?" It also says that Microsoft should have removed that unnecessary implementation-detail stuff from their CLI, because now it'll have to be there forever or they've "broken" MATLAB.

    N

    @blakeyrat said:

    Nyae?

    A


  • Discourse touched me in a no-no place

    @Yamikuronue said:

    A GUI is far more discoverable, easier to use, and MUCH easier to remember how to do things.

    The huge majority of that is precisely because many people have worked to make it so. It doesn't happen by magic.


Log in to reply