08 March 2015

When you stare into the abyss...

When you stare into the abyss, the abyss looks nervously over its shoulder. Are you looking at it? Does it know you? It stares back. Then it gets aggressive. "Are you staring into me?" it asks. It edges closer, into your personal space. You step back, break eye contact, nervously apologize, wander off feeling like a jerk.

27 December 2014

The pre-history of sudo...

I was reminded by this article on Evi Nemeth of the days before sudo. It seems like every group of UNIX users had an "su alternative" that avoided having to share the root password.

The su alternative at Berkeley was called "setsh". It wasn't just used for root, users could let other users into their account using setsh - this was a necessary evil back then because users could only be in one group at a time. It was generally distributed as source, users would edit the names of other users they wanted to let into their account into a table in the code, and compile it and leave a copy in ~/bin. So to run a command as someone you were working with you'd run "~them/bin/setsh" and if you were in the list, you'd get a shell su-ed to them.

Surprisingly, in hindsight, I don't recall ever hearing of anyone putting a boobytrap into ~/bin/setsh.

10 December 2013

BCPL pointers were not zero indexed because of compile time issues.

Re: Citation Needed - blarg?

Mike has done a bit of research, but not enough. Reading and understanding the BCPL manual (let alone having any experience with '60s and '70s compiler technology) would have made this jump from Martin Richard's comment (which says nothing about the cost of optimizing the code) to "in that context none of the offset-calculations we’re supposedly economizing are calculated at execution time" obviously wrong.

First, the yacht thing is a complete red herring. You always had to limit your job run times because computers were just plain unreliable. They could easily go down several times a day, forcing the restart of a job. Higher priority jobs could always show up and bump you, and getting bumped was not all that big a deal... you'd just get run again once it was done, if by chance you happened to be late in the queue you'd run a day or so later at the most... and that could happen anyway if jobs before you ran into problems or there was too much maintenance downtime. A handicapping run a few times a year? that's nothing.

Second, you could have expressions on both sides of the dyadic "!" operator. "V!I" was exactly the same as "I!V" ... Richards spells that out explicitly in the text Mike quoted! There's no reason to treat it as a compile-time-only issue.

Third, of course BCPL had pointers. It was completely typeless, an address was just a number. When you wrote

LET V = VEC 5

You create both a pointer variable "V" and allocated a 5 element array to it. Yes, it really allocated a total of six cells. As far as I recall, "V" could be reassigned to point to another vector, or incremented within itself.

Fourth, local variables were dynamically created on the stack. So a local

LET V = VEC X

could be at any address in the stack, depending on the call history.

Fifth, and backing up my recollection in the third point, the BCPL manual has an example of pointers being initialized on page 27:

LET IOV = VEC 650
LET IOVP, IOVT = IOV, IOV + 650

Sixth, he's applying 21st century reasoning about compilers to the '60s. When you wrote:

V!1

it's virtually certain that the compiler would actually generate the code to fetch "V" and add one to it. I would be staggered to learn that the compiler optimized away this extra indirection, ever, because that would have required tracking the state of every variable used as an lvalue to know when that optimization was safe.

Finally, seventh, and most critically, using 1 index on the dyadic "!" operator would have caused extra complexity for *programmers*, because suddenly "!(V+I)" would mean something different from "V!I", and having "!(V+I)" mean "the memory at V + I + 1" would be just nutty.

BCPL arrays, like C arrays, were zero-origin because it fell naturally out of the unification of pointers and other values in a low level language.

13 August 2013

Hipster NSA

Hipster NSA was into data before they got big.
Hipster NSA only taps underground cables.
Hipster NSA says you don’t really collect data until you listen to it.
Hipster NSA stopped 50 terrorist attacks. You’ve probably never heard of them.
Hipster NSA stalked you before you were cool.


28 June 2013

Onward Sauron’s Soldiers

Just leaving this here...

Onward Sauron’s Soldiers

Words by Richard Tatge, Al Kuhfeld and Ken Fletcher. Sung to the tune of 'Onward Christian Soldiers'

Onward Sauron’s soldiers,
Marching as to war,
With the eye of Sauron
Going on before
Darkness like a banner
shadows all the foe.
Forward into battle see the Nazgul go.

CHORUS:
Onward Sauron’s soldiers,
Matching as to war,
With the eye of Sauron
Going on before.


Trolls and Balrogs mangle
Dragons burn and bite!
With us you must tangle
Or run and scream in fright.
Evil is our watchword,
Pain is our delight;
Middle-Earth must crumble,
Under Mordor's might.

CHORUS

From the dread dark tower.
To the black Khazad-dum.
We’ll send elves and hobbits
Shrieking to their tomb.
Men and dwarves together
Go down in defeat.
In the hunger after the battle.
They’ll be nice to eat.

CHORUS

Conquer every village!
Yell out the battle cry!
Murder, rape and pillage,
Then spit in their eye!
See the craven victims
Quivering with fear:
We’ll be leaving Mordor
Sometime late next year.

17 June 2013

Teal Deer has a new buddy! PW;DR

Via @Skud RT @NeuroPolarbear Proposed new internet slang: BPW;DR. Means, "behind paywall, didn't read".

I'm just going to use "pw;dr".

The Teal Deer has a new buddy. What do we call this one? Power Deer?