During today's market trading Sprint (S) fell over 16% on the news of AT&T's intention to acquire T-Mobile. Just days before, rumors of merger talks between Sprint and T-Mobile had circulated the web, so the stock hit shouldn't be a surprise.
(If you can't tell, this was written, tongue-in-cheek, but only somewhat.)
What the fuck is up with Jobs?
A Samurai Warrior wins battles, he takes care of his troops, and at the end of the day, his work done, he reports to his Master with Good News.
But. Both, the Master and the Warrior, know, that before battle can be done on the Green Hillside, there had better be a damned hillside to do Battle On!!
The warrior fights, he takes care of his troops, his family. He reports to his master, but NO ONE forgets that EVERYONE is in the Service of the Great Provider, for whom they are THANKFUL. Thankful for providing the green pastures to do battle on, for providing the food to nourish their troops, for giving the clear air through which they charge, which fills their lungs with the life affirming energy that it needs.
Take Care of the House! Take care of the Home! Take care the Earth!
The Battle is Important, but do not get caught up in it, or you will forget that it can only take place in a BattleGround.
Pop Quiz!
Inside of what form (function/macro) is the println on the highlighted line located?
I don't know about you, but it takes me a while to figure that out.
Whereas in other languages I can usually rely on the indentation of code to understand its structure, with most Lisp formatting I often end up having to rely on the editor, like a crutch, to figure it out.
It's not just me. Lots of other people have the same issue. You may have heard people complain about Lisp's parenthesis. Some have called it a "parenthesis jungle" or a "parenthesis zoo." The historically poor readability of Lisp has nothing to do with parenthesis and everything to do with how they're used, or rather, abused. That is the underlying complaint.
Without the help of fancy editor tricks, the only hint at where the 'println' function is located are just a few spaces (often no more than two) that are separated by many lines of code. Lisp is the only language that I'm aware of where this happens.
To address this issue, people will often rely on their editors. Rainbow parenthesis, visible whitespace, and indentation guides are some of the editor features that attempt to address this issue. The problem though, is that these features aren't universally available across editors, nor are they available when the source code is viewed outside the editor, for example, on Github or some other code hosting site.
For every language I've used (other than Lisp), these editor tricks are completely unnecessary. The only time I've ever wanted rainbow-parenthesis support in my editor is while I'm looking at someone else's Lisp code.
In short:
The readability of your source code should not depend on the editor used to view it.
Lisp code can be just as readable as C, Ruby, and Python. The only thing stopping it is a community adopted convention, and I find that both sad and disappointing. Lisp is a beautiful language, so why make the structure of its code unreadable?Let's have a look at that same block of code, this time formatted differently:
Now try the question again, in what function or macro is the highlighted line located in? Was it easier to answer this time?
This style is called "trailing your parenthesis," and is almost a taboo in the Lisp community. When asked why it is a taboo, you'll often hear answers like, "So that your parens don't end up lonely," and "It wastes lines!" In other words, no real reason. Parenthesis cannot get lonely, and the "importance" of "line count" is second to that of readability, at least I hope you'll agree.
What I found most puzzling and ironic about all of this is the irreverence that some Lispers treat parenthesis with. I've actually heard it said that parenthesis aren't even meant to be looked at. Sometimes this attitude and disdain for parenthesis is laughably obvious:
Nothing says "Get out of my sight" like piling up, or "stacking" parenthesis. I think the root of these feelings stem from the fact that parenthesis aren't used to help structure code, and when that's true, I can see how it's possible to feel that they're just "in the way."They are treated as merely a necessary evil of the prefix syntax of function calling in Lisp.
This not only hurts readability but it hurts writability as well. Say I want to insert a new function call at the end of the body of a let call, only to discover that the closing parenthesis that I need to find is buried inside a paren stack. In this situation, you have to resort editor tricks, either the highlighting of matching parenthesis or a keystroke to jump to the matched paren. Those are some interesting hoops to jump through when in other languages it would be a simple point-and-click.
Detractors of "paren trailing" will say that you shouldn't use parenthesis to delimit scope because they are not scope delimiters (as braces are in C or Java). I think this is a very weak argument because they do delimit a scope. "Scope" does not only refer to variable scope, but it can also refer to the scope of a function call. Why treat parenthesis with such disrespect, and at the cost of the readability of your code, when by using them you are enhancing the readability of your code and giving them the respect they deserve?
No other language that I'm aware of stacks scope delimiters or has a community where the standard indentation width is two spaces wide, and where sometimes even a single space is considered acceptable.
Supposing this wasn't the case though.
What would it look like if C developers adopted this convention?
With apologies to the developers of Aquaria for this experiment, here's C++ code, showing Lisp-style stacking on the left, and what for C code is considered "normal" brace trailing on the right:
Conclusion
Code style is an almost religious affair, and debates over it can get heated.
I am not asking you to change your style if you're comfortable with paren stacking. I am merely explaining the reasons why some choose not to do so.
If you feel that parenthesis stacking actually improves the readability of your code, by all means, feel free to do so! However, "everyone else is doing it" is not a good reason to sacrifice the readability of your code.
(P.S. If you want trailing paren support in Emacs, I've written a simple 'lisp-indent-line' function you can use or build off of.)
Update: Another argument made is that "Lisp nests more than C" and therefore stacked parens are good. I think this is a poor excuse for a couple reasons:
This weekend I've been diving head-first into the world of Clojure, and before I become too accustomed to it I'd like to put my thoughts down, as they're currently coming from an exceedingly important perspective: that of the total n00b.
Here's how I installed the Clojure REPL on my system.
1) Downloaded clojure-1.1.0.zip
2) Unzipped clojure.jar
3) Ran java -jar clojure.jar
It seems to me that instead of leading people, Obama tries to reason with them.
Let's go back and take a look at that person in the convenience store, the one who was devoid of all of this indoctrination.
It would have to be explained to this person that in convenience stores you're supposed to buy the convenience you're looking for, and then leave. The whole place would feel to them to contain a feeling of cold imposing, why can't they strike up a conversation with the interesting people inside? Why does everyone avoid eye-contact and pretend not to know you? Surely they know we're all the same sort of monkey blobs hobbling about? Why are you hobbling about? What's that you've got there? Why are you getting it?This sort of behavior does not happen in convenience stores. Why? Social roles.Each of these hobbling monkeys has a persona, and that persona is very much like a chocolate pudding pie that has had tons of layers of multi-colored lard placed atop of it.We have had these layers slathered all over us since our birth.First we're a child. Next we're a boy (or girl). Next that boy is given a constant name, the purpose of which is so that this boy can be easily differentiated out of the other boys.This boy is then told that he is that name that he was given. You're not "Johnny", why you're "Bill". For a few days you don't play this idiotic charade, you don't respond when the name that's been given to you is called. But soon enough you'll learn to respond when "Bill" is called. After a while you'll actually begin to identify yourself *as* "Bill", saying that you "are" Bill, and you won't realize that what you consider to be a your "real" personality, your likes and dislikes, etc. is something that has been largely manufactured since your birth, it is, in a way, almost as fake as the actors that you see on TV screens.This is not a bad thing we've done, but what's important to recognize and remind ourselves of is that it's something that's been *done* to us, by other hobbling monkey blobs.This "layering" continues though. It doesn't stop. Perhaps this is how human beings in their normal states of consciousness think, but this is how we identify ourselves. Not by what we really are but by these symbols and references and titles and names.You are an "employee", a "student", a "son", a "daughter". Sure, some of these words have real physical meaning behind them. "Son" means, literally, that you are the growth that happened when your father impregnated your mother.However, the role that typically comes into play has little to do with that. It means, among other things: You're supposed to obey your parents. You're supposed to do what they say, and not just that, you're supposed to love them. These ideas are beaten into you from an early age, through either physical or emotional means. Sometimes the monkey blobs calling themselves your parents turn out to be real assholes and you start questioning whether you really ought to follow that role or not. Conflict then occurs, both internal and external, between you and your parental figures, and between the different roles that are playing inside of your head.Do you see though that all of this is foolishness that we've invented? What started out as a symbol that referred to a physical thing ("son" meaning "egg-sperm of these two monkey blobs"), has now become a role. A script to follow.This is OK. It has certain consequences like ethnic wars and mental illnesses but on the whole it's OK, if only because it seems to be the only way these monkeys are currently capable of functioning and doing the things that they do.After all, someone has to be convinced that they are a "student" and therefore need to spend their time in constant anxiety instead of playing and fornicating. Otherwise nothing will get done!When you know someone's social role that gives you a leg up on them. "Oh you're a student? I see.. I see.. I know what you are, you study!"So now you will ask, "Well if you are not a student then what are you?"If I answer: "You are a monkey blob", will that satisfy you? It might satisfy some of you, but others who know a thing or two about psychedelics or eastern philosophy will know better.You are not just a monkey blob, you are everything in existence. That is what you really are. This thing we refer to as the "whole of existence" is capable of what we refer to as "consciousness," and through these particular monkey blobs it is able to interact with non-other than itself. You sitting there in the audience, on a deeper level, are just me pretending to be not-me, interacting with myself.There exists a certain perspective, a mindset, where one suddenly realizes, and becomes absolutely astounded, at how human beings normally view the world. It is not easy to explain this perspective, but in this post I will try to give you a taste of it.
Whenever you are going about your daily doings, interacting with your environment, you are constantly taking this environment in through your senses and begin this very peculiar process of framing what you are witnessing in a previously known context.
In effect what ends up happening is that your brain becomes this gigantic, complicated cliché (or archetype) generating machine. Let's look at a few examples: You're at a party. Right there, before you even enter the party, your brain already frames this concept in a familiar context of what a party is, and it brings all sorts of clichés and expectations to the forefront of your consciousness. When you enter the party you immediately begin categorizing and framing every individual you encounter. "Oh, she's a slut. He's a party animal. He's a frat-boy. She's hot." Normally you are not even aware that this process is taking place in your head, you are so used to it that anything other than this kind of thinking does not seem possible or relevant.A party is an easy, cliché environment to discuss. What you must realize is that this mindset persists in almost all environments that you find yourself in. The more familiar the environment, the more this sort of thought process takes place, and since most people find themselves in the same or similar sort of environment on a daily basis, their thoughts are usually nothing but this sort of thinking, but on an almost subconscious level where they do not even realize that they're doing it.When you become truly aware of this thought process, it can be a shocking realization, for you begin to see it in action everywhere. It's as if you suddenly discover that the world you live in is actually inhabited by millions of invisible ghosts! For example, when you walk into a store or any sort of institution, all sorts of unwritten rules "exist" that dictate the actions that you must (or should) take.When you walk into a convenience store, it is expected that you go and get whatever item it is you're looking for, walk up to the cashier, hand her some paper or a plastic card, and promptly leave. There are even signs that enforce this behavior ("No loitering!").
Imagine a person unaware of all these invisible, man-made rules that exist in the minds of men. They might walk into a convenience store, and just sort of aimlessly look around, stand around for a while, and perhaps look a bit confused. This person would be asked if they need any help, and to this question the person would then likely react with further confusion. "Help? Is there something wrong?"Perhaps the easiest way to stop this kind of "frame thinking" from happening is to place yourself in a totally unfamiliar environment, for then your brain is at a complete loss of what to do. For modern American humans especially, it might be ironic to note that the most unfamiliar environment would likely be... "the environment." Walk along a trail you've never been on by yourself. You might be surprised at how quiet it can be, this is partly because your brain is chattering less, and partly because you aren't surrounded by all the other humans making all sorts of noise. Instead of classifying everything it sees into models and archetypes it sees the world slightly closer to what it actually is. Meditation is perhaps another way, as it helps stop the chatter, but you should have your eyes open, not closed, so that you can experience your external (as opposed to internal) environment.In such a situation you might then become more aware of the "frame mindset" that I'm referring to. You might be astonished then to realize how much of the world you've lived in has been a world completely imaginary. A world that you carry around with you like a massive weight. This world is the world that our society has created for itself. It exists solely in the minds of human beings. It's important to think of it as a "world", because that's essentially what it feels like. You might then begin to wonder at all the different worlds that exist in our world. Travel to the middle east or to a remote tribal village and marvel at how different the world they've created for themselves is compared to yours. It is very similar to what we mean when we say "culture."There is, actually, a point to this note. And that is that this world that everyone carries with them, that you carry with you everywhere you go, is just in your head. Even though it may seem like it *is* the world, it is not. The actual world out there is far more complicated, and far larger than the one that's in your head. These may seem like obvious statements but they are not. Most people do not realize this because they're not even aware of this distinction. They are completely absorbed in the world of symbols in their head, and they apply these man-made symbols onto the objects that they encounter. For example, we say that a rabbit is hairy, or that sandpaper is rough. These concepts of "hairy" and "rough", "cold" and "hot", do not exist in nature on their own. They are relationships between you and the world, and their feeble existence depends on your ability to experience them. They can only be said to exist in the world through you. There is no "hairiness" out there.You may not be aware of this, but the internet as you know it is under attack.
Some recent developments have made the matter all the more urgent. It looks like the FCC chairman may cave to corporate interests and back down on Net Neutrality. Please consider filing a public comment under proceeding 09-191 before it's too late.
Here is mine:
I'm writing to urge the FCC to reclassify broadband under Title II of the Communications Act as a a telecommunications service, which it should have been in the first place.
This will give the FCC the necessary authority to ensure Americans unfettered access to the internet.This issue is of colossal importance, not just to Americans but to humanity at large. A neutral internet is vital to the progress of man as a whole. Net neutrality would ensure that the internet remain as level a playing field as it is today, unharmed by the interests of corporate giants.At stake is the very foundation of information, knowledge, and even freedom of speech. The FCC has a duty to protect all of these values and the American people.We have seen what happens when industries become dominated by mega-corporations, where a small handful of very large companies have absurd control over the government and the lives of Americans in general. One need only to take a look at our current health crisis, the growing number of obese people and Type-II diabetics, or to the disparity in funding for education as opposed to military spending, to see what happens when public policy is dictated to the government through the lobbying efforts of mega-corporations whose sole motive is to cut costs and make profits.There are countless examples of industries out of control due to the obscene power poorly wielded by conglomerates. In some States it is illegal to disparage a hamburger [1][2]. The fast food industry has led to the dissolution of a diversity of healthy foods and to the creation of a monoculture of a small number of commodity foods, manufactured by about only 6 corporations, with questionable nutritious content, occasionally deadly [3][4], and with a negative environmental impact that is wholly undeniable.It may sound odd to compare the state of modern industrial food to internet access, but the point should be clear. When a small number of extremely powerful, profit-motivated companies are given unrestrained control over any resource, the quality of that resource plunges, and access to better alternatives becomes marginalized.What a tragedy to humanity it would be if this were to happen to the medium that connects us all.As a government entity you are the only force that can protect us, the people, indeed that it is your primary function.Please act.Sincerely,
Greg Slepak[1] http://www.purefood.org/disparg.html
[2] http://www.examiner.com/x-12153-Nashville-Indie-Movie-Examiner~y2009m6d29-Foo...
[3] http://www.google.com/search?q=salmonella+poisoning
[4] http://www.google.com/search?q=mad+cow+disease
UPDATE: Looks like there's hope still!