HN user

_TwoFinger

78 karma
Posts1
Comments34
View on HN

Not PP, but I used to work for an automotive subcontractor company, and I've heard a few stories about fatal car accidents that lead to lawsuits, which proved that the car design was the reason for the accident, yet the car manufacturer just payed "damages" to the relatives (or settled out of court, maybe) and never bothered to change the design. Apparently, it was more expensive to reconfigure their production pipelines than pay for an occasional death.

That said, this is probably what any big enough company would do. So your point still stands, maybe car manufacturers are no different.

For prose, it probably is the best, but have you tried it for programming? I find that my keyboard usage is dominated by text-editing shortcuts and punctuation characters. Not sure how well stenography would fit in.

On a similar note, though, I have amassed a "dictionary" of 50+ bash aliases, 1-, 2-, or 3-characters long.

Some "theories" emerged as well - I have groups of aliases whose names follow a pattern and depend on what subcommand (e.g. in git or kubectl) or options are included in the alias. This is good for mnemonics.

For extremely common commands, I ditch mnemonics and just choose a 1- or 2-character name that has no connection to the name of the command. For example r='cd -'. I chose "r" simply because it's on the opposite side of Enter, and I get to alternate my hands. (I guess this is a "brief".)

What got me into the alias hoarding business was the discovery of complete-alias[1] and, later, the progcomp_alias bash option. Turned out, you don't have to choose between aliases and programmable completion, you can have both.

[1] https://github.com/cykerway/complete-alias

Just want to mention sticky keys[1], as it seems often overlooked.

Instead of holding the modifier key(s) when activating a shortcut, you can press and release each modifier sequentially.

It does come with some of the fancy keyboards' firmware, but is also a built-in feature of all major OS-es. You can get it without spending a single dollar.

[1] https://www.emacswiki.org/emacs/StickyModifiers

Emphasis on "also".

If you optimize a shell feature for general-purpose programming, interactivity will suffer (increased verboseness, usually), and vice versa.

If we try to bring shells closer to the real PLs, instead of just using those PLs when it matters, we'll lose some of things that made shells attractive in the first place.

So, bash is a programming language, right?

No, it's a shell that lets you interact with the OS. All the "clasical" UNIX shells were created with interactive use in mind and optimized for it, but happen to be good enough at batch processing[1] to be conflated with programming languages (mostly these days, like, 40+ years later).

The focus on interactive use is the reason you don't have to

- surround command argument lists with parentheses

- put commas between command arguments

- put semicolons at EOL

- surround string literals with quotes (unless the content interferes with the syntax, like, sigils or IFS chars, and you want to escape it).

- surround variable names in braces (unless you want to use some advanced substitution)

- call commands to manipulate I/O; it's baked in.

And these are just the things that existed 40 years ago. Bash gives you so much more stuff that makes interactive use a bliss, but I'm not going to dump the man page here.

[1] https://en.wikipedia.org/wiki/Batch_processing

I had to [...] and set my shell to bash/zsh

Most likely a command in your script (or one source-d into it) makes an assumption about your $SHELL or login shell that is true for bash/zsh but not for fish.

Merely adding a shebang won't fix such a script.

having to retype the whole filepath when using mv can lead to errors.

If you use bash, or any readline-based command line (in emacs mode):

  mv long.file.name |^W^Y^Y
results in
  mv long.file.name long.file.name |
(| is the cursor). Then, you just edit the second copy of the filename. BTW, M-C-b/M-C-f will move by one whole "argument" (even if it contains escaped spaces).

edit: and if your filename has spaces, replace the ^W above with M-C-b C-k

we effectively have infinite vertical space

It's only infinite if you scroll for infinitely long time.

I think the author's point was about how much code you have on the screen at any given instant. Without having to scroll or jump.

I don't use the tiling at all.

I use the multiple desktops feature a lot, though. Some programs are pinned to a dedicated desktop and run all day. Others I start in (or move to, later) a numbered desktop, and switch to them by changing the desktop. Often, most of the desktops contain only one window.

I once used i3 and sway the right way, of course. I guess I had one too many of those programs that were not designed to work at arbitrary window sizes, added the above rule and called it a day.

Just an idea, if you find yourself unable to warm up to tiling:

  for_window [all] floating enable
It's stupid, but I've been using this for a couple of years now.

They mention history expansion, but only briefly. It is a favorite of mine. Learning the full syntax probably doesn't give good ROI these days of mice, but I think the following shortcut notations are worth knowing:

Everything but the last argument:

  % git add -p dir1
  % !!- dir2
  git add -p dir2
Everything but the command:
  % textadept a b c
  % vim !*
  vim a b c
Substitute a string (once):
  % echo helo world
  % ^lo^llo
  echo hello world
First and last arguments:
  % diff path/a/file path/b/file
  % diff !$ !^
  diff path/b/file path/a/file
A cool detail is that even a long quoted string containing spaces is considered a single argument, and it all works fine.

Also, the bangs can be anywhere on the command line, even inside other kinds of expansion; history expansion has highest priority of all.

Edit: the above is csh-style history expansion, available in bash as well.

916 Days of Emacs 3 years ago

Here is my current keyd configuration (on US QWERTY hardware): https://dpaste.org/aGp3o/slim (I'm not entirely happy with it, though.)

The one thing I wanted the most was to avoid any long presses. Everything that requires holding a modifier, even if I do it touch-typing style, with the opposite hand, is unpleasant (to me). So, besides moving most of the punctuation characters to lowercase positions, I also switched to sticky modifiers. (keyd might have some flaws wrt sticky modifiers, and they... get stuck. Not when I want them to be. I might try to go back to XKB.)

Regarding the home-row modifiers, I've only tried moving Control there. I always ended up triggering it by mistake when typing, because when you are typing fast, there is an almost unavoidable overlap in certain sequences, you press the next key before fully releasing the previous key. Some people advice practicing, other software provides various options with timeouts, it's a rabbit hole of work-arounds. So I settled with sticky modifiers.

916 Days of Emacs 3 years ago

ADM-3A also has

- the : key to the right of the 0 on the number row, no Shift needed.

- the Enter key to the right of the P.

I've made both changes to my keyboard layout and, not surprisingly, it's quite convenient.

Downside is, you'll have to move the original keys somewhere else. But since I already intended to totally reshuffle all the non-alpha keys for RSI reasons, it wasn't an issue for me.

You can still do it with awk, but with different "ergonomics":

  awk -F= '$2 ~ /[0-9]+/ { print $2 }'
With imaginative choice of FS and RS you can push it very far.

Whether other people having to deal with such code will appreciate your imagination is another matter, though.

Edit: I missed the detail where you want to specifically match "foo" as lhs, and anywhere on the line. So the correct condition would be even lengthier : ^ ) You have a valid point. Captures would provide for shorter patterns.

I remember one of the projects I was part of, in a big company.

It was called Voyager, and was about porting the company's software, that was currently running on SunOS/SPARC, to Linux/x86. (As SPARC was about to be EOL'd.)

Like Voyager, the space probe, it was about moving away from the Sun (OS) :-)

it has poor handling of strings and I don't know how that fares with an editor extension language.

I guess the parent refers to Lua treating strings as simple byte arrays, whereas a text editor has to deal with characters in various encodings, some of which can be multi-byte.

I used actual toilet paper to write programs on for the first year or two after I started programming. (I just had no computer of my own.)

This was not the kind of toilet paper you would see nowadays, though. It was not in a roll, but a deck of precut pieces, and they were not soft at all. One side was glossy, and the other - rough. The glossy side was perfect for writing. It was almost like a notebook, only cheaper.

Here's a link to a somewhat similar kind - https://www.ebay.com/itm/VERY-RARE-OLD-ORIGINAL-RUSSIAN-TOIL...

(I'm not the seller, I swear.)

I do miss these times. I could actually write a whole program without compiling it, and it would run fine on a computer later. Most of the times.

Uggghhhh, I loath being asked that.

Some of them hate asking you too. Sometimes it's a policy forced on them by management, and they are to be fined if they skipped a customer. Overheard this in the bus, a cashier was complaining to her friend. There were cameras installed at every register specifically for that.

To be honest, the cashiers and waitresses I've talked to in the US delivered a pretty good act, totally believable. When the big chain stores in my country decided to copy the US, the lack of acting skills in our culture was very noticeable.

The second then tried to imitate that manner, failing pathetically.

Your comment reminded me of a similar experience of mine, but in reverse.

I was washing my hands in the restrooms at work, and decided to drink some water. I bent over, cupped my hand and started drinking.

At this moment, a guy went out of another stall and walked up to the sink next to me. He was some sort of manager, I guess, because he'd always be in a suit when I've seen him around the office before. When I got up, I saw him drinking water the same way I did, only he was failing to get much of it into his mouth. :-) Obviously, this was his first time.

They might have falsified the statistics in order to boost people's morale, but they were also very serious about actually progressing.

Bulgaria was under USSR's wing when I was a kid, and I have first-hand experience about that.

There was this thing called "kruzhoks", (a Russian word, diminutive of "circle", like in "circle of friends"), which were after-school interest-based clubs, mainly about technical stuff. Every other kid was a member of some kind of kruzhok. Back then I didn't realize that, but the state must have had some sort of "master plan" to prepare as many kids as possible for technical careers when they grow up.

I also distinctly remember the exceptional quality of the textbooks (math, mechanics, electronics). The content was presented in a pedagogical order, with increasing difficulty, and carefully selected exercises that helped the concepts sink in. I used Russian textbooks from the 60's and 70's up until I graduated the university in 2005. (I'm a mechanical engineer, physics hasn't changed much since then, heh.) The typography was also excellent. When I first saw LaTeX output, the first thing that came to mind was Russian textbooks. I don't know how they did it back then.

I find very long BTD loops to be personally offensive though

Encountering these in my very first programming job made me learn make(1).

The thing is, I'm not very bright and my work "style" involves a fair share of trial and error. Obviously, all this waiting prevented me from doing my thing, so I eventually rewrote the whole build system just so I can do more trial-and-error.

I've always considered my dependency on a fast BTD loop a weakness, though. I guess the majority of developers can just imagine what the code does in their head and only make the changes when they know what they're doing.