About John Baker

Professional curmudgeon and relentless skeptic. "Belief" is a bullshit word. You know or you don't know!

iNap #1: Enough People are Scum

Intelligible systems are built on a few basic principles.1 While reducing my dour skepticism to the memorable maxims that codify Informed Naked Ape Protocol I repeatedly asked myself what animates unflagging skepticism? What turns naturally cheerful and optimistic people like myself into raging cynics? What motivates noble trolls to put down the pizza and grab the keyboard? Only one answer sprang to mind: other people.

Regardless of your politics, gender, education, race, age, nationality, or ethnicity, you have probably noticed there are a lot of scummy people out there.

Why is this?

The answer derives from our evolution. Evolutionary advantages often accrue to individuals that cheat. Cheating is a fundamental behavioral adaptation that has been observed in many animal, bird and plant species. Cheating is so common that cheating the system is the system! How cheaters might benefit was best illustrated in the hilarious Ricky Gervais movie The Invention of Lying. In Ricky’s world, everybody told the truth until one day he discovered that you could lie. The best scene in the film has Ricky running into a beautiful woman on the street. He tells her that the world is doomed unless she immediately agrees to have sex with him. Given the dire circumstances, she instantly agrees to save the world. Clearly, liars are going to enjoy immense reproductive success in a world of truth tellers. Similarly, scumbags will profit in a world of purely honorable people.

We don’t live in a world of purely honorable people or purely scummy people. Human scum density is complicated; it depends on more variables than the weather. Nevertheless, we can infer that human scum density is seldom zero and is often appreciable.

How big is appreciable?

My bitter sampling of humanity yields an estimate of approximately 0.05 for contemporary American society.2 It’s definitely bad news that 5% of the people around you cannot be trusted or depended on. It’s even worse news that human scum, like pond scum, often floats to the upper echelons of society. This is a nasty reality and I wish it wasn’t so but reality is often unpleasant and leaves few options: either adapt or be crushed.

The first step in adapting to scummy naked apes is acknowledging the most fundamental fact about them — enough people are scum!


  1. The human preference for systems with a few axioms is an artifact of our primitive intellects. There are few if any human beings that would be comfortable with axiomatic theories that depend on trillions of independent axioms yet we know that such systems exist and remain incomplete. Our drive to reduce things to a manageable set of rules, even when we know it is naïve and futile, amounts to little more than thumb-sucking. It makes our baby brains happy even if it will not solve our problems.
  2. Yes, human scum density varies with culture. Some societies are briefly more virtuous than others.

Informed Naked Ape Protocol

Many think we are living in a golden age of bullshit. That public discourse has never been gaudier or more demeaning. That respect for truth and decency has reached all-time lows. The mental pygmies that hold these opinions don’t read or think for themselves. Deceiving ourselves and others is the one thing our species excels at. Lies are the bedrock of art, economics, politics, and religion. Only two tiny slivers of human thought have ever breached the bullshit barrier and approached something that might be credibly labeled truth: hard science, and harder mathematics.

If you think I am going to praise brave men, (and bitches), of science for lighting a candle in the perpetual darkness, (Carl Sagan already wrote an entire fawning book on this self-aggrandizing theme), think again. Scientists are just as flawed and full of crap as the rest of us. Science occasionally succeeds because it has evolved protocols that correct for human bullshit. A good protocol protects us against our worst enemy – ourselves.

My Informed Naked Ape Protocol, or iNap for short, consists of eleven1 pithy maxims that force a hard ass skeptical view of things. I will manifest my maxims here and elaborate on each one in following posts.

Informed Naked Ape Protocol

  1. Enough people are scum.
  2. Trust is for imbeciles.
  3. “Belief” is a bullshit word.
  4. Assume corruption.
  5. Analyze the data, not the drivel.
  6. Demand full analytic disclosure.
  7. Practice relentless verification.
  8. Centralized systems are always corrupted.
  9. If you don’t control it you cannot trust it.
  10. Only scientific and mathematical arguments are admissible.
  11. Correct errors.

  1. Why eleven? The last time somebody tried to get the inhabitants of planet moron to follow ten simple rules it didn’t work out.

NumPy another Iverson Ghost

During my recent SmugMug API and Python adventures I was haunted by an Iverson ghost: NumPy

An Iverson ghost is an embedding of APL like array programming features in nonAPL languages and tools.

You would be surprised at how often Iverson ghosts appear. Whenever programmers are challenged with processing large numeric arrays they rediscover bits of APL. Often they’re unaware of the rich heritage of array processing languages but in NumPy's case, they indirectly acknowledged the debt. In Numerical Python the authors wrote:

“The languages which were used to guide the development of NumPy include the infamous APL family of languages, Basis, MATLAB, FORTRAN, S and S+, and others.”

I consider “infamous” an upgrade from “a mistake carried through to perfection.”

Not only do developers frequently conjure up Iverson ghosts. They also invariably turn into little apostles of array programming that won’t shut up about how cutting down on all those goddamn loops clarifies and simplifies algorithms. How learning to think about operating on entire arrays, versus one dinky number at a time, frees the mind. Why it’s almost as if array programming is a tool of thought.

Where have I heard this before?

Ahh, I’ve got it, when I first encountered APL almost fifty years ago.

Yes, I am an old programmer, a fossil, a living relic. My brain is a putrid pool of punky programming languages. Python is just the latest in a longish line of languages. Some people collect stamps. I collect programming languages. And, just like stamp collectors have favorite stamps, I find some programming languages more attractive than others. For example, I recognize the undeniable utility of C/C++, for many tasks they are the only serious options, yet as useful and pervasive as C/C++ are they have never tickled my fancy. The notation is ugly! Yeah, I said it; suck on it C people. Similarly, the world’s most commonly used programming language JavaScript is equally ugly. Again, JavaScript is so damn useful that programmers put up with its many warts. Some have even made a few bucks writing books about its meager good parts.

I have similar inflammatory opinions about other widely used languages. The one that is making me miserable now is SQL, particularly Microsoft’s variant T-SQL. On purely aesthetic grounds I find well-formed SQL queries less appalling than your average C pointer fest. Core SQL is fairly elegant but the macro programming features that have grown up around it are depraved. I feel dirty when forced to use them which is just about every other day.

At the end of my programming day, I want to look on something that is beautiful. I don’t particularly care about how useful a chunk of code is or how much money it might make, or what silly little business problem it solves. If the damn code is ugly I don’t want to see it.

People keep rediscovering array programming, best described in Ken Iverson’s 1962 book A Programming Language, for two basic reasons:

  1. It’s an efficient way to handle an important class of problems.
  2. It’s a step away from the ugly and back towards the beautiful.

Both of these reasons manifest in NumPy‘s resounding success in the Python world.

As usual, efficiency led the way. The authors of Numerical Python note:

Why are these extensions needed? The core reason is a very prosaic one, and that is that manipulating a set of a million numbers in Python with the standard data structures such as lists, tuples or classes is much too slow and uses too much space.

Faced with a “does not compute” situation you can either try something else or fix what you have. The Python people fixed Python with NumPy. Pythonistas reluctantly embraced NumPy but quickly went apostolic! Now books like Elegant SciPy and the entire SciPy toolset that been built on NumPy take it for granted.

Is there anything in NumPy for programmers that have been drinking the array processing Kool-Aid for decades? The answer is yes! J programmers, in particular, are in for a treat with the new Python3 addon that’s been released with the latest J 8.07 beta. This addon directly supports NumPy arrays making it easy to swap data in and out of the J/Python environments. It’s one of those best of both worlds things.

The following NumPy examples are from the SciPy.org NumPy quick start tutorial. For each NumPy statement, I have provided a J equivalent. J is a descendant of APL. It was largely designed by the same man: Ken Iverson. A scumbag lawyer or greedy patent troll might consider suing NumPy‘s creators after looking at these examples. APL’s influence is obvious. Fortunately, Ken Iverson was more interested in promoting good ideas that profiting from them. I suspect he would be flattered that APL has mutated and colonized strange new worlds and I think even zealous Pythonistas will agree that Python is a delightfully strange world.

Some Numpy and J examples

Selected Examples from https://docs.scipy.org/doc/numpy-dev/user/quickstart.html Output has been suppressed here. For a more detailed look at these examples browse the Jupyter notebook:  NumPy and J Make Sweet Array Love.

Creating simple arrays

 
 # numpy
 a = np.arange(15).reshape(3, 5)
 
 NB. J
 a =. 3 5 $ i. 15

 # numpy
 a = np.array([2,3,4])
 
 NB. J
 a =. 2 3 4
 
 # numpy
 b = np.array([(1.5,2,3), (4,5,6)])
 
 NB. J
 b =. 1.5 2 3 ,: 4 5 6

 # numpy
 c = np.array( [ [1,2], [3,4] ], dtype=complex )
 
 NB. J
 j. 1 2 ,: 3 4
 
 # numpy
 np.zeros( (3,4) )
 
 NB. J
 3 4 $ 0
 
 # numpy - allocates array with whatever is in memory
 np.empty( (2,3) )
 
 NB. J - uses fill - safer but slower than numpy's trust memory method
 2 3 $ 0.0001 

Basic operations

 
 # numpy
 a = np.array( [20,30,40,50] )
 b = np.arange( 4 )
 c = a - b
 
 NB. J
 a =. 20 30 40 50
 b =. i. 4
 c =. a - b
 
 # numpy - uses previously defined (b)
 b ** 2
 
 NB. J
 b ^ 2

 # numpy - uses previously defined (a)
 10 * np.sin(a)
 
 NB. J
 10 * 1 o. a
 
 # numpy - booleans are True and False
 a < 35
 
 NB. J - booleans are 1 and 0
 a < 35

Array processing

 
 # numpy
 a = np.array( [[1,1], [0,1]] )
 b = np.array( [[2,0], [3,4]] )
 # elementwise product
 a * b

 NB. J
 a =. 1 1 ,: 0 1
 b =. 2 0 ,: 3 4
 a * b

 # numpy - matrix product
 np.dot(a, b)

 NB. J - matrix product
 a +/ . * b  
 
 # numpy - uniform pseudo random
 a = np.random.random( (2,3) )
 
 NB. J - uniform pseudo random
 a =. ? 2 3 $ 0
 
 # numpy - sum all array elements - implicit ravel
 a.sum(a)
 
 NB. J - sum all array elements - explicit ravel
 +/ , a
 
 # numpy
 b = np.arange(12).reshape(3,4)
 # sum of each column
 b.sum(axis=0)
 # min of each row
 b.min(axis=1)
 # cumulative sum along each row
 b.cumsum(axis=1)
 # transpose
 b.T     

 NB. J 
 b =. 3 4 $ i. 12
 NB. sum of each column
 +/ b
 NB. min of each row
 <./"1 b
 NB. cumulative sum along each row
 +/\"0 1 b
 NB. transpose
 |: b

Indexing and slicing

 
 # numpy 
 a = np.arange(10) ** 3 
 a[2]
 a[2:5]
 a[ : :-1]   # reversal

 NB. J
 a =. (i. 10) ^ 3
 2 { a
 (2 + i. 3) { a
 |. a

Government Shutdown and Rapture 2018

It’s 2018. 2018 has prime factors of 2 and 1009, e.g. 2018 = 2 * 1009.

Did anything happen in the years 2 and 1009?

  1. In the year 2 Venus and Jupiter were in conjunction. Some speculate this may have been the “Star of Bethlehem.”
  2. In 1009 the Church of Holy Sepulcher was destroyed.

How odd, the prime factors of 2018 yield two Jesus related events, separated by over a thousand years that are mysteriously tied to his birthplace. Evidently, the Star of Bethlehem marked the beginning, 1009 marked the middle, and 2018 is the end! Repent, the rapture is upon us! Better buckle up non-gender specific bovine control officers (cowboys) 2018 is going to be rough.

Just how rough you ask? Imagine hordes of underachieving and mostly useless bureaucrats forced to take an impromptu paid holiday1 because even more useless legislators cannot agree on how to spend other people’s money. Let’s hope the government stays shutdown down until the imminent rapture renders it redundant.

My calculations cannot pinpoint the exact time and date of the rapture. My guess would be the first2 blood moon of the year, January 31, 2018. Get your affairs in order and divest yourself of your worldly bitcoins.3 Use the address encoded in the QR graphic of this blog.

Hey: If you think this micro-epiphany is batshit crazy take a look at this! It’s getting to the point where it’s no longer possible to be satirical because somewhere on the intertubes you’ll find true believers that go way beyond satire.


  1. None of the furiously furloughed will miss a single damn paycheck. Where can I get a job that pays me to sit on my ass and whine about whatever the idiot talking point of the day is?
  2. 2018 has two total lunar – blood moon – eclipses. If we’re not raptured on January 31st wait until July 27th
  3. Sky Fairy consultants, also known as prophets, have high overhead and need substantial donations to maintain their close connections with the divine.

Dear Apple Pay Stop Harassing Me!

Dear Apple Pay stop harassing me! I will never sign up for you and no amount of iOS app-nagging will change that. You’re pathetic interruptions merely remind me why I “resist” installing every freaking iOS upgrade the Apple mothership foists on its hapless phone users.

I use an iPhone1 but I am not a member of the bleating iSheep. I’ve slowly, one unwanted upgrade after another, developed an intense loathing of Apple’s holier than thou, we know what’s best for the iIdiots, attitude. You’re beginning to remind me of the Hildabeast. Remember that foul creature and her well-deserved fate!

Loathing aside, I have a perfectly logical reason for refusing Apple Pay. Unlike the bleating iSheep, I see what you are trying to do. You want to become a financial “middleman.” You want to skim an ever-increasing percentage of every transaction your well-trained herd of iSheep makes. I admire your larcenous spirit but if you haven’t noticed, we have enough parasitic financial rent-seeking middlemen on this insane planet. Part of the allure and promise of cryptocurrencies is that they show a way to rid the universe of skimming scum like central banks, government fiat, rapacious money transmitters, exchange controls and abominations like Apple Pay.

Don’t ever darken my day with another “activate Apple Pay now” message again. You have been warned!


  1. Unless there are big changes at Apple this is my last iPhone. I want a device that I absolutely control. “If you don’t control it you cannot trust it.” Any phone that I cannot even be sure is off does not qualify. Burners may be my only option.