Skip to content
November 18, 2014 / J A Burrows

Abbreviating Huge and Minuscule Numbers with Math and JavaScript

The Problem

Let’s say we want to write an algorithm for formatting very large and very small numbers using the standard SI decimal prefixes (because we really, really do!). We want something that will take numbers and create the abbreviated output, as below:

  1. 123784692876928714 → ‘123.78P’
  2. 1237846924 → ‘1.24G’
  3. 0.0000000000000002342 → ‘23.42f’
  4. 0.0000000002342 → ‘23.42n’
  5. 0.00000002342 → ‘234.22µ’
  6. 0.000012345 → ‘123.45m’
  7. 1234 → ‘1.23k’

I’m sure there are quite a few ways to do this. What if we could write something with only two non-repeated conditionals using a few math concepts in eight lines of code? Would you be more interested in learning about the math behind it? Let get started. First, let take a look at this algorithm and the lookup table it uses:

The Proposed Solution

// This is the list of standard SI unit prefixes
var symbols =  {
  '-8': 'y',
  '-7': 'z',
  '-6': 'a',
  '-5': 'f',
  '-4': 'p',
  '-3': 'n',
  '-2': 'µ',
  '-1': 'm',
   '0':  '',
   '1': 'k',
   '2': 'M',
   '3': 'G',
   '4': 'T',
   '5': 'P',
   '6': 'E',
   '7': 'Z',
   '8': 'Y',
   '9': 'H'  // Though not official, 'hella' is hella big → 10^(9*3) or 10^27
};

function formatNumber(val, decimalPlaces) {
  var exponent = Math.log(val) / Math.log(10);
  var magnitudeExp = Math.floor(exponent);
  var hasIntegerComponent = magnitudeExp >= 0;
  var sign = (hasIntegerComponent) ? -1 : 1;
  var adjustment = sign * (magnitudeExp % 3);
  var significand = val / Math.pow(10, magnitudeExp + adjustment);
  var index = (hasIntegerComponent) ? Math.floor(magnitudeExp / 3) : Math.ceil(magnitudeExp / 3);
  return significand.toFixed(decimalPlaces) + symbols[''+index];
}

That’s it! That’s all there is to the algorithm! It will handle numbers having up to 29 digits and small numbers having a significant decimal place with 24 zeros in front of it. If that’s not good enough, an index and symbol for it should be added in the lookup table.

If math like this is foreign, a little head scratching might be in order. The math is actually pretty simple. There’s some interesting things about number bases and logarithms here.

Number Bases

Number bases? As a programmer, one might be familiar with a few number bases — like decimal, hexadecimal, binary, and, perhaps, octal. A number base signifies how many symbols can be used to represent one digit. For instance, in decimal — or base 10 — there are 10 symbols that can represent a digit. These digits are 0, 1, 2, 3, 4, 5, 6, 7, 8, and 9. In binary, two symbols are used — 0 and 1. In Hexadecimal, 16 symbols are used — 0-9 and A-F. In octal, the digits 0-7 are used — though, octal is rare these days.

Each digit in a number in a certain base has a certain value, which is related to the number base. Each number position, starting with the ones place in the 0th position (the rightmost side) and continuing to the last or nth position, has a value which is a multiple of the base. Here are examples in a few number bases.

Decimal

1,234,567

Position: 6 5 4 3 2 1 0
Digit value: 1 2 3 4 5 6 7
Place value: 10^6 10^5 10^4 10^3 10^2 10^1 10^0
Position value: 1,000,000 200,000 30,000 4,000 500 60 7

To get the value of the number in decimal, simply add the values up:

\displaystyle 1,000,000 + 200,000 + 30,000 + 4,000 + 500 + 60 + 7 = 1,234,567

So each position has a value of the place times the value of the digit. In decimal, there is the ones place, the tens place, the hundreds place, the thousands place, the ten thousands place, and so on. Each digit happens to have the value that we normally give it, because the this is what we normally use and are used to.

What about other systems? Let us take a look.

Binary
10101010
Position: 7 6 5 4 3 2 1 0
Digit value: 1 0 1 0 1 0 1 0
Place value: 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
Position value: 128 0 32 0 8 0 2 0

To get the value of 10101010 in decimal, simply add the values up:

\displaystyle 128 + 0 + 32 + 0 + 8 + 0 + 2 + 0 = 170

Again, the value of the position if the value of the digit times the place value. It only has two digits and they still have the same values as the decimal versions of those digits. What about a system with more symbols than ours?

Hexadecimal

DEAD

“Wait, what!? That doesn’t even look like a number!”

In hexadecimal, it’s a perfectly valid number. The digits A-F are used in addition to digits 0-9. In fact, the digit A comes right after 9 and it has a value of 10. The digits B-F have the values 11-15, respectively.

Position: 3 2 1 0
Digit value: D = 13 E = 14 A = 10 D = 13
Place value: 16^3 16^2 16^1 16^0
Position value: 13 \times 4,096 14 \times 256 10 \times 16 13 \times 1

To get the value of the number in decimal, simply add the values up:

\displaystyle 53,248 + 3,584 + 160 + 13 = 57,005

Summary

Whew! What a whirlwind tour of number systems! This is all of the basic knowledge needed to understand what comes next. This covered the basics of number systems:

  • Each number system in base b uses b digits.
  • Each digit is in a position. Starting from the rightmost digit at 0 and increasing with each digit moving leftward.
  • Each digit in a number system has a value from 0 to b - 1 .
  • Each position, p , has a place value, or weight, which is b^{p} .
  • A digit with value, v , in a position, p , has a position value of v \times b^{p}
  • Number has a value of the sum of the digit values times their weights.

This also means that every number is actually a polynomial in disguise:

\displaystyle number = \sum^{places}_{i=0}{digit_{i} \times b^{i}}

The number of digits or places in a number indicates the order of the polynomial.

Logarithms

What is a logarithm? A logarithm is a special mathematical function that gives us a special number. Normally, it is written \log or \ln — the second means the base is \mathrm{e} (Euler’s constant). It is a special function that looks like this when graphed:

Graph ln

This graph conveys a few useful facts about the logarithm: The logarithm of a value is always less than the value. If an identity line of y = x was drawn on the above graph of y = \ln x , the two graphs would actually never intersect. \ln x is only zero at x = 1 . It could also be argued that \ln x doesn’t have a value at x = 0 . The heart of a logarithm lies in the mathematics defining it.

The base b logarithm gives the value of x in the equation:

\displaystyle b^x = n

The logarithm in base b of a number n is written:

\displaystyle x = \log_{b} n

In the case of JavaScript’s Math.log(), it is a natural logarithm. It will solve for x in this equation:

\displaystyle \mathrm{e}^x = n

The base 10 logarithm, \log_{10} , can be found by taking \ln n / \ln 10 . Generally, the base b logarithm can be found by \log_{b} n = \frac{\log n}{\log b} , where \log is a logarithm in any base available for you to use. Most likely it will be \ln , since it is so useful in math.

Now why is a logarithm useful?

Logarithms are useful for numerous reasons:

  • They can turn multiplication into addition. For instance, a^{x} \times a^{y} = a^{x+y} . Anyone can take the shortcut and mentally add up the numbers, but a computer can’t. However it can be programmed to use the properties a logarithms to change simplify parts of calculations without having to compute full values of repeated exponentiation until the final step. This also makes sure the numbers are smaller until the last step.
  • If one wants to encode a certain number of states as digits in a system, one would like to know how many digits that many states would take up:
    • In base 2, \log_{2} 2 = 1 . We can use 1 bit to represent two states. We can use 3 bits to represent 8 states (000, 001, 010, 011, 100, 101, 110, 111), \log_{2} 8 = 3 .
    • In base 10, \log_{10} 10 = 1 . This means we can use one decimal digit to represent 10 states — the range 0-9 encompasses ten digits. We can represent 1000 states with 3 digits (0-999), log_{10} 1000 = 3 .
    • Generally, digitsForNStates_{b} = \log_{b} N where N is the number of states to represent in base b .
  • In general, 1 + \log_{b} n gives us the length of digits used to represent a number n in the base b number system. For example 1 + \log_{2} 256 = 9 , which makes sense since we can represent 256 values from 0 through 255 with 8 bits. We cannot represent 256 with 8 bits, but we can with 9.
  • In physics and information theory, a logarithm is related to a value called the entropy of the system.

The primary reason why a logarithm is useful in this case is because it yields an exponent that encodes a lot about a number. Here’s a an example with a number in decimal:

\displaystyle 1,234 = 1 \times 10^{3} + 2 \times 10^{2} + 3 \times 10^{1} + 4 \times 10^{0}

This could also be written as:

\displaystyle 1.234 \times 10^{3}

In this case, 1.234 is the significand and 10^{3} is the magnitude.

Taking the base 10 log of 1,234 yields an interesting number. This number will be between 3 and 4. Why is it between 3 and 4? Well, \log_{10} 1,000 = 3 and \log_{10} 10,000 = 4 and this is somewhere between those two numbers. For instance, \log_{10} 1,000,000,000 = 9 for any number n between 1,000,000,000 and 10,000,000,000 (not including 10,000,000,000), the log_{10} n will be between 9 and 10 (not including 10).

This is also a valid relationship:

\displaystyle 1,234 = 10^{(3 + fraction)}

Now why is it 3 and a fraction? Taking the integer part of \log_{10}1,234 gives three. Taking 10^{fraction} gives 1.234. This means 10^{3} \times 10^{fraction} = 1,234 . So taking this and turning it into a bunch of math gives us everything anyone would ever want to know about the number and the different logarithms. It also means this information can be used to derive the magnitude of the number and get it’s most significant digits for any number.

Here is every identity and step used to formally derive these quantities:

  1. value = significand \times magnitude
  2. significand = 10^{significandExp}
  3. magnitude = 10^{magnitudeExp}
  4. value = 10^{significandExp} \times 10^{magnitudeExp}
  5. \log_{10} value = \log_{10} 10^{magnitudeExp} \times \log_{10} 10^{significandExp}
  6. \begin{array}[b]{l}      \log_{10} 10^{magnitudeExp} \times \log_{10} 10^{significandExp}\\      =\log_{10} 10^{(magnitudeExp + significandExp)}    \end{array}
  7. \log_{10} value = \log_{10} 10^{(magnitudeExp + significandExp)}
  8. exponent = \log_{10} value
  9. exponent = \log_{10} 10^{(magnitudeExp + significandExp)}
  10. exponent = magnitudeExp + significandExp
  11. value = 10^{exponent}
  12. value = 10^{magnitudeExp + significandExp}

By definition, magnitudeExp is an integer. The floor operation on the \log_{10} yields magnitudeExp . Also by definition, significandExp must be less than one or greater or equal to zero. But why must it be greater than or equal to zero and less than one? A decimal significand is going to be between 1 and 9. If the significand was zero, the whole number would be zero. If the significand was less than 1, then the magnitude was wrong. If the significand is greater than 9, the magnitude was wrong. These numbers map to values of 10^{x} , where 0 \leq x < 1 .

And of course, there’s the most straight forward way to get the significand:

  1. value = significand \times magnitude
  2. magnitude = 10^{magnitudeExp}
  3. value = significand \times 10^{magnitudeExp}
  4. significand = \frac{value}{10^{magnitudeExp}}

This method, just using exponentiation and division, is probably more accurate than using the significandExp in most cases, since finding the exponent using the Math.log function is just an approximation. Using it to extrapolate the significant digits can lead to errors, especially with very large or small numbers.

Back to the algorithm

The first few lines should be pretty obvious, given the explanation above:


var exponent = Math.log(val) / Math.log(10);
var magnitudeExp = Math.floor(exponent);

This figures out a few things:


var hasIntegerComponent = magnitudeExp >= 0;
var sign = (hasIntegerComponent) ? -1 : 1;
var adjustment = sign * (magnitudeExp % 3);
  • If the number has just a fractional component (magnitudeExp is less than zero) or if it has a whole number part, too (magnitudeExp is greater than zero).
  • The sign of the adjustment. If the number has a whole number part, the sign is negative and the adjustment is subtracted. If the the number is a fraction, the sign is positive and the adjustment is added.
  • The adjustment itself. This is how many digits away from a grouping of 3 digits the number would be given the magnitudeExp.

If scientific notation was all that was required, the significand and magnitudeExp would satisfy the problem. This algorithm is not actually converting to scientific notation. The algorithm should not show only one leading digit and a few decimal places. It should group digits into a maximum of three leading digits. Numbers between 000 – 999 will always be displayed before the suffix. It should be the equivalent of dividing the number by 1000, 1000000 and so forth (these numbers have counts of zeros which are multiples of three). This will group numbers into groups of 3 digits at most before the decimal place — this is where subtracting magnitudeExp % 3, (“magnitudeExp modulo 3″, the remainder of dividing by 3) comes from. That makes sure the abbreviations are only for place holders for the thousands, millions, billions, and so forth and never a placeholder for, say, ten thousand or a hundred million.

This code takes the adjustment into account when figuring out the significand to make sure that there is a group of at most 3 digits in the significand:


var significand = val / Math.pow(10, magnitudeExp + adjustment);

This code makes sure the suffix appended to the number matches up with the grouping of three most significant digits:


var index = (hasIntegerComponent) ? Math.floor(magnitudeExp / 3) : Math.ceil(magnitudeExp / 3);
return significand.toFixed(decimalPlaces) + symbols[''+index];

Depending on the logarithm of the number being positive or negative, we either take the floor or ceiling of magnitudeExp / 3, respectively. This makes sure we get the right integer for the index in the suffix lookup table.

That integer part of \frac{magnitude}{3} is actually the 1000, 1000000, 1000000000, and so forth in disguise. In fact Math.pow(10, Math.floor(magnitude / 3)) gives those values. This compresses the table of symbols so we don’t have something like the following, but rather the look-up table in the topmost code listing:


{
  ...
  -1: 'm', -2: 'm', -3: 'm',
   0:  '',  1:  '',  2:  '',
   3: 'k',  4: 'k',  5: 'k',
  ...
}

I suppose that the algorithm embodies a lot of knowledge about number systems, bases, and logarithms; but it’s very elegant. :-D I haven’t tested how efficient it is compared to other methods, but, given the flexibility it has from the way it’s derived, it’s probably a decent trade-off.

April 18, 2013 / J A Burrows

Thoughts On Death

I’ve had an interesting understanding of death all my life. I’ve always understood life and death in a materialistic sense. We are physical beings and when we die we no longer exist, but return to earth from which we came. Of course their was a spiritual side to it, but it was practical — even if it was Christian or just plain biblical. What is a spirit? It’s our breath. In most ancient literature “spirit” is synonymous with wind, air, or a driving force  — like wind filling a sail. In Greek it is πνεῦμα (pneuma)[1][2], where we get the root for the word “pneumatic”. In Hebrew, it’s וּחַ (ruach)[3]. In this context, what is death? It is what happens when someone stops breathing — their breath leaves them. To me, breath is spirit and breathing is living.

It’s interesting that this view of life, death, and spirituality came out of a Christian upbringing. I was Seventh-day Adventist and our faith was strong enough to not need a concept of the “Stuff Of Unending Life”[4] that transmigrates from one reality to another that is so darling to other ways of believing. For us, “God” would simply resurrect someone by recreating that person out of the ground and breathing life into them. This semi-materialistic view[5][6] shaped a lot of my beliefs — especially after I left my church and became an atheistic secular humanist. It also didn’t require a giant change in beliefs about spirits and souls.

A soul? What is a soul? To me, it’s a breathing, living being. One does not posses a soul, one is a soul. In Hebrew נֶ֣פֶשׁ  (nephesh)[7] is a being. That Hebrew word is used to refer to a being, a creature, and life. I really like the Hebrew word for it, even if the concept is muddied with other notions from Christianity (evidenced in the way most Bibles translate it). The Greeks also had word for it: ψυχή (psuche)[8]. Of course this word should look familiar, it’s the root of the word “psyche”. The greek word has more of the connotations of the English words “soul” and “spirit”, but it also means “life” and “self”.

Self, consciousness, is an emergent phenomena of our being continuously taking in energy from the environment and pushing itself out of equilibrium. It does an elaborate balancing act to keep itself in homeostasis. The end result is this amazingly intricate machine[9]. We’re alive as long as our complex organs and organ systems are working well and we’re breathing. But what makes someone special? It’s the embodied information of their genetics, interactions with their environment, their elaborate biochemistry, and labyrinthine neuronal connections. Our sense and experience of self is most likely so pronounced because we have several orders of magnitude more connections between neurons within the neurocortex than to neurons going to and from our senses. There’s an astounding amount of information in all of those connections. When we interact with someone each of us triggers different parts. Each of us experiences and interacts with others in a different way.

As long as a soul’s intricate inertial dance of life perpetuates itself, this amazing ability for us to connect with that unique being is possible. Our own physical being interacts with their systems in several intricate and deeply physical ways. I don’t believe the magic of a human being’s existence is diminished at all by this view. I believe it makes it more mind bogglingly unbelievable once we see the true complexity and wonder of what a human actually is. It also creates a physical basis for understanding death and what happens to someone once they die (and also how we connect on so many physical levels while they’re alive).

Before I share what I believe death entails, I must share a few prerequisites. Physics has led us to figure out a few things:

  • The law of conservation of energy; the law that energy can neither be created nor destroyed, just transformed from one form to another.
  • The equivalence principle; the law which states mass and energy can be converted from one form to the other.
  • The conservation of information at the quantum level[10]; transformations are unitary — this means that if you know the dynamics of the system you can recover the inputs from the outputted information.
  • The second law of thermodynamics; Entropy never decreases[11][12].

I would say that entropy has a relation to information like work has a relation to energy — except it’s more nuanced. If a physical process transforms one bit of information into another bit of information and the process is reversible then the entropy of the process is zero and it can spontaneously oscillate between those two states forever. If the physical process is irreversible (or takes energy to reverse it) then entropy increases. In a way entropy is like meta-information about a physical process containing the instructions of how it got to the current state[13] — like a knot being tied through space-time.

As far as the non-emergent properties of a person go, their body does indeed return to the earth. We are all made of the same stuff those who came before us were made of. We breathe the same air. Our matter continues to be a part of this world.

Every person who has ever lived lives on in the entropy[14] of the universe and their effect upon our intellect, affect, and physical being. This world would be a very different place if it weren’t for each and every person who lived and the pattern they weaved into the fabric of our reality. The world becomes a different place when each of us weaves our own patterns of entropy into the fabric of reality. When people die, this pattern is still there encoded in our universe’s entropy. Unfortunately for us, we can’t directly perceive these patterns; we only have our memories of a person and the effects they had on us. Fortunately, communities can come together and celebrate someone’s life. Each participant sharing more of a picture of the one being remembered and creating a more complete picture of that persons interactions and influences.

It is up to us to decide what happens to the memory of the deceased. Each of us has our role models and some of them are dead, but we allow ourselves to embody the behaviors and interactions of those who are dead. Unfortunately, sometimes the deceased is a counterexample of how to live. Whose effects are we enhancing?

Notes

  1. <http://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.04.0058%3Aentry%3Dpneu%3Dma>
  2. <http://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.04.0057%3Aentry%3Dpneu%3Dma>
  3. See <http://biblesuite.com/hebrew/ruach_7307.htm> and related וְר֣וּחַ (veruach) waw-conjuctive form <http://biblesuite.com/hebrew/veruach_7307.htm> and <http://en.wikipedia.org/wiki/Prefixes_in_Hebrew#Conjunctions>.
  4. Afterlife is a cute game where you get to play god and decide where souls go <http://en.wikipedia.org/wiki/Afterlife_(video_game)>.
  5. <http://ssnet.org/qrtrly/eng/99b/less04.html>
  6. <http://www.sdanet.org/atissue/books/27/27-07.htm>
  7. http://biblesuite.com/hebrew/nefesh_5315.htm
  8. See <http://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.04.0057%3Aentry%3Dyuxh%2F>. Coincidentally, it is the present subjunctive third person singular form of ψύχω <http://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.04.0057%3Aentry%3Dyu%2Fxw> (eg, ἐάν ψυχή, “if he breathes”).
  9. <http://jap.physiology.org/content/104/6/1844>
  10. <http://motls.blogspot.com/2005/07/hawking-and-unitarity.html>
  11. <http://en.wikipedia.org/wiki/Second_law_of_thermodynamics>
  12. <http://en.wikipedia.org/wiki/Entropy_production>
  13. In fact, I’m pretty sure one could derive this from Kolmogorov complexity and only using vector clocks or matrix clocks instead of local time and Lorentz transformations .
  14. Maybe there should be another term for this, since it’s the length of the algorithm (or sequence of operators) which can be use to calculate entropy and not pure entropy — but maybe they really are the same thing?

θάνατοι: In Memoriam

Name Date & Location Born Date & Location Deceased
Eni Korbeci March 19, 1980 Tirana, Albania January 12, 2002 Edmond, Oklahoma
Augustine “Auggie” Ariza March 2, 1925 June 28, 2005 Thousand Oaks, California
Brandon M. Fenton June 21, 1983 Grand Island, Nebraska June 25, 2009 Grand Island, Nebraska
Brandon Lee Glovatsky April 12, 1985 Grassy Butte, North Dakota June 9, 2010 Portland, Oregon
Eleanor Montané Ariza June 28, 1925 Santa Maria, Vera Cruz, Mexico January 5, 2011 Loma Linda, California
Joseph Paul Bingman November 21, 1948 Portland, Oregon April 3, 2011 Portland, Oregon
Tomás Pitagoras Gouverneur December 14, 1978 Berkeley, California March 13, 2011 Corvallis, Oregon
Kathleen Bosibori Sagini February 10, 1988 Lansing, Michigan July 26, 2012 Edmond, Oklahoma
Zachary Konowalchuk July 21, 1988 Florida October 8, 2012 Newport, Oregon
Kent Ryan Hall 1950 Fairbury, Nebraska February 20, 2013 Lincoln, Nebraska
Igal Koshevoy December 13, 1975 Moscow, USSR April 9, 2013 Portland, Oregon
Yan Forrest Hendersen January 29, 1958 January 22, 2014 Portland, Oregon
February 12, 2012 / J A Burrows

Moral Imperatives and God — or — “Why I Sometimes Want to Place You in Harm’s Way.”

C. S. Lewis would have thought the moral sense referred to in this meme was one of the strongest evidences of God’s existence.

One can, like C.S. Lewis, posit this evolved moral sense is a signifier of God’s existence. However, this is misusing a perceived correlation as a causation. Even this error hinges on interesting factors for it to even be made.

Tribal societies or hunter gatherers had a great incentive to treat their own members nicely and have fond feelings for one another. The biological mechanism backing this is mediated by oxytocin.1 One would be tempted to say that this extends to all members of our society. Sadly, as evidenced by people’s tendencies through history and by modern biological research, oxytocin plays a dual role.

An increase in oxytocin tends to produce fond feelings only for those that are part of your tribe. Those who share your culture or share a more similar appearance (a phenotype symbolizing a desirable genotype, suitable for reproduction). The other side of this, is an increase in oxytocin also increases the instinct to distrust others who do not share a simliar phenotype. It breeds xenophobic tendencies in people.2

Many other regulators of behaviors exist, but it turns out that this is a fairly primary motivator of a healthy and happy group of people:

As it turns out, the needs that are most linked with everyday satisfaction are interpersonal ones, such as love and respect. Our troubles, conversely, relate most to lack of esteem, lack of freedom, and lack of nourishment. Only when we look back on the quality of our lives thus far do basic needs become significant indicators for well-being.3

The other regulators basically cluster around having real and felt needs met. A lot of these needs are met through society and access to the proper resources. If these needs aren’t met for prolonged periods of time, the organizational unit (either the individual or group) will exhibit behaviors associated with self preservation and increased stress. This means acting more out of self interest than out of respect for others or any other moral imperative (theft, war, violence, distrust, etc. are all game here).

I think it is safe to say human biology doesn’t change much over time unless there is an adaptation to some external change or new constraint in the environment — in other words evolution. Even then, biology has noted the similarities of certain basic structures and chemistries of living organisms. I think it’s safe to extrapolate our modern biology back some 10,000 years (since that is a fairly short time scale, evolutionarily speaking). Under this extrapolation using the young earth hypothesis as a postulate, it is a logical conclusion that our biology was the same or very similar at creation. Which implies that the only way for our biology to have changed so suddenly is through an act of God.

If this was by God’s design, who said he intended us to love our neighbor and by extension all people, there is a severe disconnect between the biology we were “created” with and how he intended us to behave. If this was the case then the garden of eden would not have been perfect. As soon as groups split off there would be fighting in a perfect world and not as a result of “the fall in the garden”. There was no need of an apple for this to happen — and it is doubtful that an apple could change a human’s biology that much.

If God intended to rescue a race that was sinful, because of it’s own choice, why would he choose to change their biology intentionally to make sure they were inherently prone to distrust? A change like this would lessen the efficacy of free will to choose a moral imperative over natural tendencies. Also, why would this change in biology persist past the time of what Christianity defines as the final sacrifice for all time, meant to atone for all sin?

A contradiction such as this is most readily remedied by looking to evolutionary processes, where such tendencies would tend to promote group cohesion and the desire to protect itself when encountering a foreign group, thus ensuring its survival and the ability to reproduce and grow. As a result of continuing growth and constant interaction and breeding with differing phenotypes the level of hostility toward different groups has decreased over time. For more on this, please see Steven Pinker’s excellent TED talk on the myth of violence. 4

Through this process of increased interaction with foreign groups, moral imperatives regarding the treatment of people from other cultures arose. These moral imperatives are abstract high level constructs people create for themselves outside of and, sometimes, in opposition to their natural tendencies. Moral imperatives are not natural and take energy and practice to maintain. They are only good so long as reason can beat the lizard brain. As studies with Tibetan monks have shown, it takes time to develop strong pathways between the prefrontal cortex and the rest of the brain (the prefrontal cortex being the area that is understood to mediate higher level planning, decision making, and reason).5

This ability to use reason over natural tendencies is willpower. Willpower is the basic determining factor if someone will choose to act on a higher moral imperative or if they will go with their own path of least resistance. It has recently been observed that willpower is limited. This ability quickly depletes if the underlying biological mechanisms are no longer being fully supported. Willpower is entirely dependent on all of the biology supporting the brain and requires one’s body to be well nourished and in good health.6

Where scarcity is not a daily concern, it is easy to see how humans are becoming better people. We are able to make better decisions because we are not in survival mode. Without scarcity and with plenty of close social interaction, it is easy to think moral imperatives are natural. It however takes a “leap of faith” to believe they signify God’s existence.

  1. http://en.wikipedia.org/wiki/Oxytocin
  2. http://www.nytimes.com/2011/01/11/science/11hormone.html
  3. http://www.theatlantic.com/health/archive/2011/08/maslow-20-a-new-and-improved-recipe-for-happiness/243486/
  4. http://www.ted.com/talks/steven_pinker_on_the_myth_of_violence.html
  5. http://www.news.wisc.edu/13890
  6. http://www.nytimes.com/2011/08/21/magazine/do-you-suffer-from-decision-fatigue.html?pagewanted=all
December 17, 2011 / J A Burrows

What to Look for in PHP 5.4.0

PHP 5.4.0 will arrive soon. The PHP team is working to bring to some very nice presents to PHP developers. In the previous release of 5.3.0 they had added a few language changes. This version is no different. Some of the other changes include the ability to use DTrace for watching PHP apps in BSD variants (there is a loadable kernel module for Linux folks). This release features many speed and security improvements along with some phasing out of older language features (Y2K compliance is no longer optional). The mysql extensions for ext/mysql, mysqli, and pdo now use the MySql native driver (mysqlnd). This release also improves support for multibyte strings.

Built-in Development Server

In the past, newcomers to PHP needed to set up a server. There was no built in server like a few other languages/web frameworks already had. If developing on *nix, a server needed to be set up with the right modules and the the files to tested needed to be copied over to the document root. Now, you can just run PHP with some options to get a server:

$ php -S localhost:1337

It runs in the current directory, using index.php or index.html as the default file to serve. A different document root can be specified as either an absolute or relative path:

$ php -S localhost:1337 -t /path/to/docroot

The server will log requests directly to the console. Interestingly, this server will not serve your static files unless your script return false. Existing frameworks will need to be modified to add in functionality that is commonly in rewrite rules. This is really all that is needed:

// If we're using the built-in server, route resources
if (php_sapi_name() == 'cli-server') {
  /*
   * If the request is for one of these image types, return false.
   * It will serve up the requested file.
   */
  if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"]))
    return false;
}
// Process the rest of your script

One of the inconveniences of the server is lack of support for SSL. Granted, it is meant for development purposes only. However, some projects I’ve worked on required testing with SSL. Perhaps there will be demand for this once it’s out there.

An Overview of Traits

Traits are bits of code that other objects can use. Traits allow composing objects and they promote code reuse. The Self programming language, one of the precursors to the JavaScript language, introduced them. JavaScript, strangely, does not directly implement traits; instead it allows one to extend objects directly with other objects.

In PHP (and other languages), traits cannot be instantiated, only used to compose other objects. Traits do not imply inheritance, they just add methods to classes. They can be used with inheritance and interfaces. Traits could be used as standard implementations of interfaces, then one could easily compose classes that comply with certain interfaces.

Here is an example, demonstrating a simple use of traits:

<?php
/**
 * Define a trait called runner
 */
trait runner {
  // Does all the work
  public function run() {
    echo "Run, ".$this->name().", run!\n";
  }
  // Gets the name of the runner
  // Must be implemented by the class using the trait.
  abstract public function name();
}
/**
 * Define a class that uses the runner trait
 */
class runningPerson {
  // Use the runner trait
  use runner;
  // Used to store the person's name
  protected $name; // Constructor, assigns a name to the person
  public function __construct($name) {
    $this->name = $name;
  }
  // Retrieves the name of the person, required by runner trait
  public function name() {
    return $this->name;
  }
}
$gump = new runningPerson("Forrest");
$gump->run();

When a class implements a method that is also defined in a trait it uses, the method in the trait takes precedence and overrides the class method. If two traits implement the same method, the conflict needs to be resolved using the insteadof keyword, or given a new signature (only visibility and name can be changed) using the as keyword.

<?php
/**
 * Define traits with conflicting function names
 */
trait A {
  public function do_something(){
    echo "In A::do_something():\n";
    for($i = 0; $i < 10; $i++) {
      echo $i." ";
    }
    echo "\n";
  }
}
trait B {
  public function do_something(){
    echo "In B::do_something():\n";
    echo "Something else.\n";
  }
}
/**
 * Define a class using both traits
 * Prefers one over the other
 */
class ExampleA {
  use A, B {
    B::do_something insteadof A;
  }
}
/**
 * Define a class using both traits
 * Renames a function to use both
 */
class ExampleB {
  use A, B {
    A::do_something insteadof B;
    B::do_something as something_else;
  }
}

//Run examples
$testA = new ExampleA();
$testB = new ExampleB();
$testA->do_something();
$testB->do_something();
$testB->something_else();

More examples reside at the current PHP documentation for traits. If that documentation is lacking in substance, Wikipedia’s article on traits links plenty of background info.

Changes to Anonymous Functions

In PHP 5.3.x, working with anonymous functions needed a work around when stored in an array. The function needed to be stored in a temporary variable before it could be called. For instance:

$functions = array();
// assign an anonymous function to an array element
$functions['anonymous'] = function () {
  echo "Hello, the parser needs to make up a name for me...\n";
};
// to call it you had to do this:
$temp = $functions['anonymous'];
$temp();

Now, anonymous functions stored in an array can be called directly without first storing them in a temporary variable:

// assume $functions[] is still around.
$functions['anonymous']();

Closures in Classes

Closures defined inside of a class are automatically early bound to the $this variable. If a class method returns a closure, it retains access to the original class that defined it (along with all the public member properties and methods) no matter where it is passed. If assigned to a member property and called as a method, PHP issues a warning if it was called directly. If called as a local variable or by calling the Closure::__invoke() method (which it inherits), PHP issues no warning.

<?php
/**
 * Class that generates closures that reference a public method.
 */
class ClosureTest {
  private $value;

  public function setValue($value) {
    $this->value = $value;
  }

  public function getValue() {
    return $this->value;
  }

  public function getCallback() {
    return function() {
      return $this->getValue();
    };
  }
}

/**
 * Create a class that calls a closure.
 */
class ClosureCaller {
  private $callback;

  public function setCallback($callback) {
    $this->callback = $callback;
  }

  public function doSomething() {
    // Since this is a member variable, call Closure::__invoke().
    echo $this->callback->__invoke() . "\n";
  }
}

// Set up a class to generate closures that reference itself
$test = new ClosureTest();
$test->setValue(42);
$closure = $test->getCallback();
echo $closure() . "\n";

// Test calling a closure from another class
$testCaller = new ClosureCaller();
$testCaller->setCallback($test->getCallback());
$testCaller->doSomething();

Closures allow changing what object scope $this is bound to by calling the bindTo() method and passing in the new object to use as $this.

Currently, no consensus exists around letting closures bound to an object access the private and protected methods of that class. Additionally, PHP still needs to iron out the details around binding closures to static classes. One can find more details about closures, $this, and Closure::bindTo() at https://wiki.php.net/rfc/closures/object-extension

Outlook

There are a lot of established projects that may not immediately start taking advantage of these features, unless the community sees an obvious benefit to drastically changing their projects. When PHP 5.3.0 was released with namespace support and anonymous functions, new frameworks sprung up like Laravel (anonymous functions), FLOW3 (namespaces), Lithium (namespaces), and Symfony2 (namespaces). After PHP 5.4.0 is released, I’m sure new frameworks (or new versions, like Symfony2 vs. Symfony) will spring up around using traits to compose functionality and using the new $this functionality in closures defined in classes. The built in server definitely has some potential for making it easier for developers to debug their apps. It’s just a matter of time before frameworks start taking advantage of it.

Reference

PHP 5.4.0 Release Candidate 2 News

November 27, 2011 / J A Burrows

Installing Darwin 8.0.1 Using QEMU

When Darwin was first ported over to the x86 architecture, I thought I could get it running inside of a VM. I was stopped because QEMU was not quite ready for it. I tried it twice over a period of at least 4 years. I just tried it again and it worked. During the time since then, a patch was made to QEMU to make it work properly — which also got absorbed into releases after v0.10. Another big problem was figuring out the exact install process and that one could not really just boot it off the CD image and expect it to work. There is a specific process. I’m pretty altruistic, so I’ve documented it here.

First things first, grab the Darwin ISO image from Apple’s site. While you’re at it you can peruse the release notes. When it’s done, unzip it into a directory.

If you haven’t installed QEMU, please do so. To install Darwin you need to create a disk file to use with QEMU. For this, type: qemu-img create -f vmdk darwin-disk.vmdk 3G. The release notes recommend 3GB as a minimum hard disk size, but feel free to make it larger if you desire.

When you are ready to start installing Darwin, type: qemu -hda darwin-disk.vmdk -cdrom darwinx86-801.iso -boot d -m 1024. This will start QEMU and boot from the CD image. It will churn its cogs and then ask you which disk you want to install it on. If you’ve followed my directions, there will only be one disk available to choose from.

Next, it will ask you to partition the drive. Since this is a new disk, make it auto-partition. When it asks you for a volume name, it will fail. Start the machine over again. Choose to use the existing partitions, then continue with installation. When it asks for which partition to use, it should show you two options. Type in the second option. Now, wait for a really long time while it unpacks all of the files.

Once it’s done, it will ask you for a root password. Enter it and confirm it. Then it will ask if you want to create a user, start a shell or restart. Create a user, then restart. It should power the machine down.

When you want to run the disk image type: qemu -hda darwinx86-801.vmdk -cdrom darwinx86-801.iso -m 1024. This will start the machine from the disk image we just installed Darwin and the installation CD will be available to mount, too. The Network should be up and running. If that doesn’t work right, and it just sits there spinning, try re-installing it. I had to do that. The second install to the image proved flawless.

Interesting associated reading:

  1. Installing Darwin in a VM <http://althenia.net/wiki/darwin> — I found this after I published this. The instructions given for upgrading the compiler are interesting, also has more detailed steps to follow.
  2. Help with mounting disk images, especially .dmg files <http://www.puredarwin.org/developers/diskimages>
November 16, 2011 / J A Burrows

What is the #Occupy Movement?

The Intellectual Roots of the Occupy Movement

#occupy wall street poster

The #Occupy Wall Street movement is primarily a Dadaist expression. Dada originated out of anti-war sentiment during World War I. Participants classified it as a protest against the bourgeois nationalism and colonialism. They also saw it as a protest against intellectual conformity during wartime.

According to Wikipedia:

Many Dadaists believed that the ‘reason’ and ‘logic’ of bourgeois capitalist society had led people into war. They expressed their rejection of that ideology in artistic expression that appeared to reject logic and embrace chaos and irrationality. For example, George Grosz later recalled that his Dadaist art was intended as a protest “against this world of mutual destruction.”

Already at this point, there is a clear resemblance to the apparent chaos and disorganization of the Occupy Movement and the Dadaist Movement. However, this is only where the roots of the movement began. There is a very rich cultural and revolutionary history behind the Occupy Movement.

Situationists and the French Protests of ’68

The Avant-garde Dadaist Movement paved the way for the Situationist International group in 1957. The Situationists were primarily a restricted group of European revolutionaries spanning across several borders. The other heritage they drew from was the Marxist ideology. They were very involved in creating situations where people could experiment with alternatives to the group think of society. They created fields such as Unitary Urbanism and Psychogeography. Détournement is a particularly important practice of Unitary Urbanism.

Civil Unrest - France May 1968This group played a large role in supporting the General Strike of May 1968, in France. This strike lasted two weeks and brought the economy of France to a halt. Nearly 11 million people went on strike for the entire two weeks of the protest. This counted for nearly a quarter of nearly 49.9 million French citizens in 1968 and two thirds of the working population. The movement caused massive changes in society as a result of the total disaster it caused. Initially, it focused on educational system. Then it branched out into workers.

The Situationists called for workers to occupy the factories. They established the Council for Maintaining the Occupations. This instituted a democracy with equal voice for all participants:

The council implemented a policy of equal representation for its participants. It was described by Situationist René Viénet as “essentially an uninterrupted general assembly, deliberating day and night. No faction or private meetings ever existed outside the common debate.” It was formed on the evening of May 17, by supporters of the Sorbonne Occupation Committee.

The factory occupation was to prevent workers from being locked out of the factory. It resulted in the workers taking over and directing the factories through a democratic process.

Some may say that similarities abound between the French protests of ’68 and the Occupy Movement. Sure, they were both started by culture jamming societies. You could say they are nearly the same play from very similar organizations. Unfortunately, they were not organized in the same way and a very different intellectual history make them entirely unlike. These two events unfolded drastically differently due to many differences and concerns that may not have been thought out.

The Reality of Occupy

The Occupy Movement was started by Adbusters, a Canadian culture jamming publication and organization. It was formed in 1989, in Vancouver, British Columbia, by Bill Schmalz and Kalle Lasn (author of Design Anarchy). Adbusters describes themselves: “We are a global network of culture jammers and creatives working to change the way information flows, the way corporations wield power, and the way meaning is produced in our society.” Culture Jamming, coined in 1984, is a modern example of détournement, revived in the 1970s with the punk movement.

The Occupy Movement was inspired by the Cairo’s Tahrir Square protests, and the Spanish Indignants. The Egyptian Revolution wanted to overthrow an entire government regime. The Spanish protests have a little more in common with the Occupy Movement:

Even though protesters form a heterogeneous and ambiguous group, they share a strong rejection of unemployment, welfare cuts, Spanish politicians, the current two-party system in Spain between the Spanish Socialist Workers’ Party and the People’s Party, as well as the current political system, capitalism, banks and bankers, political corruption and firmly support what they call basic rights: home, work, culture, health and education.

Notice again, there is a definite similarity of the composition of the group and the demands between the Occupy Movement and the Spanish Protests. Occupy is a group of really different people all rallying around demands that each member has. Their focus is wide and there are a diverse range of needs represented.

Democracia real YA

A grassroots movement organized in March 2011 and became known as ¡Democracia Real YA!, which apparently is also the name of the social network that was used to organize it. This organization has created a manifesto and has brought about a (broad) set of demands and became an actual political platform to operate from. The real momentum behind organizing ¡Democracia Real YA! came from a prior timeline: On 29 September 2010, labor union strikes broke out in Spain. More strikes happened on 27 January 2011, when unions in Catalonia, Galicia, and Basque Country also protested. Both of these strikes were for reasons similar to the Wisconsin Labor Strikes in February 2011 and March 2011. On 7 April 2011, 5,000 people organized a protest in Madrid around the demands of Jovenes sin Futura (Youth Without a Future). On 1 May 2011, a riot broke out in Barcelona and destroyed many businesses in the richest neighborhood. The first occupation planned by the ¡Democracia Real YA! came on 13 May 2011. Two days later, 50,000 protesters joined in and showed support. The protests have continued since (over 6 months).

Interestingly enough, the Spanish protests have also been compared to the French Protests of ’68. The similarities: both started around education and employment. Both were in countries small compared to the US. Sure, there was some unrest and an area of Barcelona was trashed, but it has not caused a whole third of the country to cease their daily activities. It has not brought Spain’s economy to it’s knees.

The Intellectual Heritage of Modern American Protests

During the period of 1954-1968, the most recent African-American rights movement happened. Voting rights and racial desegregation were brought about in the south. The Black Power Movement also happened. It sought to bring about a true relief of oppression from white Americans and a power balance with white Americans. This movement was steeped in non-violent practices.

Second wave feminism emerged during this period, too. Women worked hard to gain equality in society. Women worked to attain equal pay, and equal footing economically. More generally, women worked hard to dispel the media’s portrayal of women’s role in society. This movement was also rooted in non-violence to achieve its goals.

Parallel to the development of the Situationists in Europe, the development of Happenings came about in the US during 1957. Allan Kaprow coined the term to describe performances happening that spring on George Segal’s farm. These happenings were meant to involve the audience and draw them into the art, to interact with it and become a part of the performance itself. In Kaprow’s words, “The line between the Happening and daily life should be kept as fluid, and perhaps indistinct, as possible.” A happening depends entirely on the audience that participates. Since the audience changes every time, each performance is never the same. This idea would go on to inspire others.

In San Francisco, The Suicide Club formed in 1977 by Gary Warne (also the founder of SantaCon). This secret society involved itself in urban exploration and social exploits borrowing ideas from happenings. They started The Billboard Liberation Front (one of the first US culture jamming groups) as a result of their bridge climbing antics. They performed street theater — sometimes this involved riding the streetcars naked. They hosted elaborate games in strange places like a cemetery. They also infiltrated organizations — such as the Unification Church and the American Nazi Party.

In 1986, ex-Suicide Club members founded the Cacophony Society. According to their website:

The Cacophony Society is a randomly gathered network of individuals united in the pursuit of experiences beyond the pale of mainstream society through subversion, pranks, art, fringe explorations and meaningless madness.

This group is responsible for creating Burning Man during Zone Trip #4. One of the co-founders, Kevin Evans, conceived it as “a dadaist temporary autonomous zone with sculpture to be burned and situationist performance art.”

The idea of the Temporary Autonomous Zone, came to Hakim Bey as early as 1985 while he was studying pirate utopias. The book on TAZ (Temporary Autonomous Zones) was published in 1991. The book skirts around defining the meaning of the TAZ, leaving the term as a floating signifier. Fortunately, the context of the book creates enough of a boundary around the meaning that one can grasp in intuitively. A protest, a happening, a Burning Man event, a Lost Horizon Night Market, a ComicCon, and the Oregon Country Fair are all examples of a TAZ (and happening) to one degree or another.

Hakim’s book on the TAZ begins with a section entitled “CHAOS: THE BROADSHEETS OF ONTOLOGICAL ANARCHISM”. At this point, we can see that the Situationist legacy had been united with the anarchic tendencies of the US Cacophony Society and earlier Suicide Club. Most likely the notions presented so shortly after Adbusters was founded would have been on the radar of Lasn, since Lasn is such a proponent of the anarchy of design and ideas. It would seem that much of the ideology behind the Cacophony Society would have made it into the minds of those planning the Occupy event.

What Does This Mean for Occupy?

Politically, the French protesters of ’68 failed. President De Gaulle tried to fight back with Police action. This was not met well and streets broke out with battles against the police. Fearing a revolution, President De Gaulle fled to Germany, staying at a French military base. He dissolved the National Assembly and held re-elections. His party emerged even stronger after the elections. The aftermath only included sweeping changes to French society because so much of society was effected by a fourth of France protesting.

Contrasted to the French protests of ’68, Occupy is definitely not a large movement concentrated in one area. It is not a sizable force that can recon with a cities economy, much less an entire country’s economy (maybe a neighborhood economy). Now, the Occupy movement is being confronted with police force in many states. If it were to get violent, that would be the end of the movement. Fortunately, there is a great heritage of non-violent protesting in the US. If this were not the case, the moment a violent fight broke out between protesters and cops, the movement would be dismissed and would have no political power. There is no way this movement as it stands will be able to bring about the social change the French protesters brought about through force.

Occupy may appear to be a grassroots movement, but it only became one after Adbusters manipulated the psychogeography by placing posters around the area Occupy Wall Street would happen. Unlike both the French protests of ’68 and the Spanish Indignants, it did not grow out of groups already protesting. Sure, there were union strikes in Wisconsin. Where were students already protesting about the educational system? The sentiment was not nearly as widespread as it was in May ’68 in France. There is a similarity between Spanish protesters and Occupy, the length of time occupations have been happening. Occupy has been going on for about 1/3 of the time as the Spanish Indignants, and the protests have lasted 1/3 of the time. They do seem to be very similar in action.

Occupy is seemingly artificial, not to disqualify it, but it was not an organic grassroots movement where lots of people decided to start protesting. It is an idea piggybacking on generally felt sentiments, sentiments felt very deeply by some. It was provoked, not by the government or economy itself, but rather by a culture jamming collective with a nod towards ontological anarchism. Occupy is a work of art. It is a readymade art installation and a happening. Kaprow and Duchamp would be proud.

Occupy quickly evolved into a special type of TAZ. It reminded people that there is more to life than this rat race of consumerism and capitalism. People’s belief in reality must be suspended when coming into contact with Occupy. If someone’s beliefs are not suspended, they, like many others, will probably be in conflict with Occupy. They might yell, “Get a job!”, as I heard many times around Occupy Portland. This is a city bound Zone Trip #4, the origin of Burning Man. As Matt Taibbi phrased it:

This is a visceral, impassioned, deep-seated rejection of the entire direction of our society, a refusal to take even one more step forward into the shallow commercial abyss of phoniness, short-term calculation, withered idealism and intellectual bankruptcy that American mass society has become. If there is such a thing as going on strike from one’s own culture, this is it. And by being so broad in scope and so elemental in its motivation, it’s flown over the heads of many on both the right and the left.

As Occupy stands, it cannot be sustained for long. If their sentiments are true, let them stop being a non-commissioned art installation occupying public space. It needs to get off the lawn, before too many anti-protest protests break out.

What Occupy Can Do to Be Taken Seriously

Occupy needs to realize it is a happening, a deeply heartfelt, everyday performance art gathering. It needs to realize that the needs of its actor-participants influence the outcome. The needs of its members must be met. Occupy represents a large cross section of people everywhere on Maslow’s hierarchy of self actualization (let us not delve into it being a hierarchy, just needs that people have). At Occupy, peoples needs include: physiological (air, water, food, sanitation, etc.), safety (health, shelter, clothing, employment, property, etc.), love & belonging (friends, family, sexual intimacy), esteem (to be accepted, valued, and respected), and self-actualization (morality, creativity, spontaneity, problem solving, lack of prejudice, and acceptance of facts).

This provides an interesting strain on Occupy. It is based on volunteerism, which is a very hard way to manage social services. The strain becomes pronounced in places like Portland where Occupy Portland held a march that ended in occupation of three blocks of parks — parks where a few homeless people already slept. Some of them didn’t know what was going on, but it was “cool” that all of these people came to join them. Word of the camp spread and soon there were a lot of actual homeless people with many needs living in the camp. Even today, there has not been any funding sought out to provide mental health and drug addiction counselling to people that desperately need it.

Occupy has a real need for expert facilitation to sort out the needs of people that are a part of the movement and firmly establish groups in charge of meeting those needs. They need to be groups separate from the people with the needs, so there is accountability. There needs to be a definite schedule for meetings around these different needs and concerns, not like the currently ad hoc situation. This would allow more representation in the spokes council meetings. General Assemblies seem to be derailed because of the number of needs represented by each participant.

In Portland at least, passers by and the media have noticed the homeless people, the drug problems, and the mental health problems. Having continuing issues around these untended needs presents many issues to having a consistent and positive view of Occupy by outsiders. Finding a way to take care of these needs will improve communities and improve the outlook for Occupy.

The language of the original poster for the Occupy Wall Street gathering, “What is our one demand?”, failed to specify any specific demand(s) but rather left it up to the Occupy group to democratically decide a set of demands, or rather, needs. Adbusters left demands wide open, greatly contrasting with the origin of the Spanish protests. This needs to happen soon. Once the needs and demands are sorted out they can be used to drive powerful changes that people can rally behind.

There are so many ways Occupy could incorporate and become a driving force for local economies. By doing so, Occupy would be setting an example for others to follow. A lack of skilled workers may arise, but this really only presents an opportunity to partner with local organizations and create training programs.

The environment of Occupy’s TAZ is ripe for experimentation and innovation. Occupy needs to involve the right people and generate ideas that spread and cause measurable change in society. Once people’s needs are met and actual progress and community improvement is made by Occupy, people will start taking it seriously.

September 18, 2011 / J A Burrows

Drunk Drivers Make Me Sad

I normally curse reckless drivers and hope they get what’s coming to them. Except for tonight. This driver was being far too reckless — and I was concerned for them.

A really nice silver car came zooming along in the carpool lane, engine furious, moving at least 35 miles per hour faster than anyone else on the bridge. The driver then cut in front of three cars in front of me and in the next lane over while changing into the rightmost lane. What really concerned me was how fast he was approaching the car ahead of him. Both cars disappeared around exit onto 14E towards Camas, WA — my exit also.

I followed them, lagging by about a minute. I was almost expecting an accident as I exited the I-5N to head east. I saw an intact tire towards the side of the road and I swerved to avoid it. I saw smoke. Then I saw glass. I braced to see the worst.

Ahead, a car had pulled over. It’s emergency blinkers flashed. Further ahead and opposite the tire, the silver car lay upside down without a tire on the front driver’s side and the back angled up towards the air.

As I passed the upside down car, I noticed the driver moving trying to get out. I drove about a hundred feet ahead and pulled over. Other cars were starting to pull over as well. I was walking up to the silver car with my cell phone in hand and 911 already keyed in. I saw the driver get out of the car. He said, “I’m alright.” He then proceeded to tell me that he had a few drinks and that he wanted to leave and asked if I would give him a ride a few exits toward the hospital. I said that I would, but really intended to call 911.

He turned around and went back to his car. As I turned to look at my car and dial, another car pulled over slightly ahead of me and behind my car. I heard a crash behind me and whipped around to see that another car had been hit by a truck right by the silver car’s tire. Two people got out of the Jeep that just pulled over and asked if I had dialed 911 as my finger had pushed the call button and I told them, “I’m calling right now”. I spoke with dispatch to tell them where this was happening — just north of the I-5 bridge on the off ramp to 14E. She told me that a team was on the way.

A guy wearing black came to have a look at the people involved in the accidents. This man was a Navy medic. He inspected the driver and thought he might have a concussion from the forehead and temple injuries. There was also a nurse who was doing an assessment on some of the people closer to the secondary accident.

An ambulance, fire truck, highway patrol officer and a local sheriff arrived just a few minutes afterward. The emergency crew responded to the secondary accident. The lady in the car that was hit in the rear was slowly extracted from the car and put into a stretcher and loaded into the ambulance. The silver car’s driver, suspected of intoxication and possibly marijuana (he was in possession of a pipe, which was laying in the open with his stuff), was being examined by the sheriff. The police took my information and starting taking notes on my recollection. I was cleared to leave.

I was tired. I walked back to my car. I got in, started it up, and drove home.

I thought, at one time, I could have been that reckless driver. If I hadn’t had passed out and fell down as I was leaving Rotture a month ago, I could have gotten into my car and drove off. I probably wouldn’t have driven so fast, but there’s no telling what I would have done that drunk. I basically passed out that night from alcohol. If had got into my car, drove off, then passed out — I would have been in really bad shape and others might have too.

I didn’t get a chance to touch my car that night, but I still ended up in an ambulance. I woke up at OHSU the next morning and took the bus back to downtown Portland and had breakfast at the Pearl Bakery. Then I walked to my car. I still felt terrible, and probably shouldn’t have driven my car that morning. I went to my Portland office, drank water, chatted with a friend online and passed out on the futon.

I now have a great respect for alcohol and how much of a poison it is. I still drink, but I’m now really responsible about it. I don’t want to injure other people. I also don’t want to injure myself. There’s enough to worry about without having drunkenness ruin your day. The next time I hear a story about a drunk driver, I’m probably going to cry. It’s so sad that it happens, especially when it’s so preventable.

Follow

Get every new post delivered to your Inbox.

Join 2,186 other followers

%d bloggers like this: