Silence speaks so much louder than words.

The other day I was out on one of my nocturnal cycling trips. Having reached the destination, a secluded beach, I found myself a nice quiet spot to sit down and unwind. I began to meditate on the serenity of the silence occasionally broken by the pleasant sound of waves crossing onto the shore, thinking about nothing in particular, when a rather loud group of people broke the tranquility of the scene. I did not pick up what they were chattering about, since they all seemed to be speaking together without any significant pauses. It got me wondering – why are we always so eager to speak and so reluctant to listen when others speak?

I consider speaking to be a form of art, not unlike painting. A speaker feels something and chooses to express the feelings through his speech. He tries to evoke the same feelings in you through his speech. A good speaker is one who manages to get the intended feelings across without any misunderstandings or ambiguities. And yet I believe speaking differs fundamentally from painting.

To me, the biggest difference between the two art forms lies in where the painting takes place. All of painter’s tools – the colors, the brushes and and the canvas – lie right in front of him. He is free to do with them whatever he pleases. The same liberty is denied to the speaker. The tools here do not lie with the speaker, but with the listener. The speaker merely dictates while the listener, the actual painter, has at his disposal the colors of his own experiences, the brushes of his own judgment and the canvas of his own imagination to paint his own picture.

Words are merely a guide to the listener. And quite an unreliable one at that. The speaker wants to express something profound, cobbles up a brief approximation of what he feels using whatever limited vocabulary he possesses and speaks it out loud. His intended feeling, thus deflated and depleted of it’s essence, piggybacks on these words which travel through the physical world, subject to all of it’s chaos and noise, reach the listener’s ears and are intercepted by his brain. His brain registers the sound and begins the process of inflating the words back. But the essence of the feeling that was lost in transit though the narrow conduits of our language, the magic that was vaporized while burning through the pathways of our vocabulary, makes the words sound hollow to the listener. So his brain paints them up with it’s own tools and tries to recreate the lost magic.

Silence is the best part of any conversation. As long as words are being spoken back and forth, the real feelings and emotions they intend to convey keep getting slaughtered. Silence offers a chance to recollect and rearrange. A chance to pick up the strewn bits and pieces lying around from the obscene onslaught of words. The listener will still paint them up using his own experiences and judgments. But now, given the time, he will use the best possible combination of colors, the right shades of judgments to breathe life back into the words. He will use the time to draw the best possible curves, curves that reach out the listener and make him yell with joy, “That is exactly what I meant!”

I have done it all

I have, during my nocturnal yawns,

Slain mythical beasts with my bare fists

Ridden the storms perched on mighty gryphons

I have, within my mental fence,

Made decisions that influence nations

Flown continents to dine with presidents

I have, from the comfort of my pillow,

Exceeded infinity twice in written history

Slipped in Zero and let Aryabhatta be the hero

I have, in the gospels of my religion,

Slain the Satan inside the Garden of Eden

Expunged heaven, decreed Men and God as one

I have, in the cosmos of my creation,

Witnessed star birth light years from Earth

Breached Event Horizon aboard Starship Poseidon

I have, while living my alter ego’s life,

With utmost clarity seen the illusion of reality

Ended mortal strife by revealing the meaning of life

Behind closed eyelids, I have seen it all

Beyond sealed lips, I have said it all

Past my forbidden thoughts, I have done it all

The Kernel and I are one now

Inspired by this xkcd : http://xkcd.com/456/

Once upon a time there lived a Devoted Linux User

Bestowed upon him was the moniker /dev/luser

For long he put up with the tantrums of Ubuntu

And the mandatory biannual tearing of hairs too

Then one day he had a life altering epiphany

Or perhaps, I daresay, just a drink too many

He let out a violent scream that shook the Earth

“Curse be upon you, O Canonical, O Shuttleworth!”

Down the stairs, into the basement he did resign

Locked the door, complete with a “Do not disturb” sign

Hours turned to days, days into several weeks

Yet from beyond the door came not a single squeak

He left the basement neither to wine nor to dine

Neither to unload his bowels nor to release his brine

His loyal friends, worried for his health and sanity

Decide to break the door down with utmost urgency

As the dust settles, a ghastly scene meets their eyes

For the room is full of spiders, cobwebs and flies

In the far corner, sitting on a chair, back turned to them

/dev/luser typing feverishly, all ten fingers in tandem

Screen an undecipherable wall of scrolling green text

Which /dev/luser groks keenly without breaking a sweat

Bravest friend takes a cautious step forward. A big folly!

His first step lands upon something circular and shiny

A primal fear grips him as he bellows loudly, “NOOO!”

For embossed on the CD were the letters “GENTOO”

Time slows down, everything gets frozen in space

Except /dev/luser who persists typing at unabated pace

He turns back, his eyes bloodshot, his face lifeless

His voice, inhuman and robotic, pierces bone and flesh

“Forget the why, forget the when, forget the how”

“All I remember is that kernel and I are one now”

The foul yellow nights

Getting back to the city after a brief vacation in the far countryside makes you realize how accustomed you have become to all the filth and dirt surrounding you, especially if the city is as filthy and dirty and overflowing with people as Mumbai.

Meat crammed in with meat
Inside concrete contraptions
Spills out onto the streets
In all it’s sweaty olfaction

The silent gaseous killer
Lurks ominous and omnipresent
Each breath a planted dagger
Of toxic fumes and putrid scents

Night reveals the true plight
Of life in vapid lucent cocoon
Lit by artificial yellow lights
Instead of stars and the moon

The majesty of the night sky
Lost forever in the urban haze
Yet the automations roll by
Uncaring, oblivious, unfazed

Remember to breathe

One day, I will stand alone
Against all odds, against all I own.

One day, I will look back
And see no beauty, nothing but wreck.

One day, I will scrutinise
All the unkept vows, all the broken ties.

One day, I will lament
Each missed chance, each silenced intent.

One day, I will die
Not a soul will notice, not a soul will cry.

That’ll be the day
I look up to the sky
And smile – trick or treat?

That’ll be my day
And I’ll remember to breathe.

The creature within

Highly disturbed by the mind-numbingly brutal rape of a 23 year old in Delhi, yet incapable of doing actually doing anything about it, I decided to express my angst using literature. Written from the perspective of the victim.

A new creature is born within
Crawling viciously beneath my skin

Born out of carnal lust
Getting stronger with each thrust
Forever feed on my sanity, he must

I feel him inside me, defiling
desecrating, besmirching, befouling

I feel him outside, the penetrating gaze
The hushed voices, the media craze
Not the sinner, it’s your dress who betrays

Million digital black dots he conceives
Yet none match the blackness of his malice

It wasn’t me who lay there in that bus
Alone, helpless raped by beasts amorous

I have died a million times already
With each lecherous glance upon my body
Cast by the same who are shout today
“Injustice! Inequality! Heresy!”

We’re not so very special, You and I.

We people take ourselves way too seriously. We think too little and act too much. We listen too little and speak too much, yet never truly say what we want to say. We split ourselves up into personalities to fit into the roles we are expected to play – each person being just a pathetic semblance of our true self. In school, it’s the obedient Oswald, in college, it’s the studious Steve, in office it’s the hard-working Harold, at home it’s the angry Adam. In all the hustle and bustle of juggling between these persona, we have forgotten that we are greater than the sum of these fractions of our individuality. What we need is to take a step backwards and ask ourselves “Where the hell did I come from and where am I going?”

Think for a moment about the time when you were a kid – when you still had the ability to marvel at the bulge of a water drop, or the air brushing past your hair, or the sunlight streaming in through the window, exposing a million fluttering dust particles floating aimlessly in space. Think for a moment about the time before you were even conceived in your mother’s womb. Or the time before your parents. Think of all the people who have lived throughout history whom you never had the chance of knowing. Think about the Neanderthal and the Australopithecus whose main concerns were how to survive the day without starving or being eaten alive and not what I should wear to impress that hot chick who smiled at me yesterday. Think of the mighty reptilian dinosaurs who roamed freely through the planet before a renegade meteor sealed their fate. The very place you are sitting at right now might have once witnessed an epic territorial dispute between a stegosaurus and a tyrannosaur. Think about the first photosynthetic organisms – the prokaryotes – who gave off oxygen as a waste product, releasing it freely into the atmosphere and making evolution of advanced life possible. You owe your existence to these tiny single-celled beings who have survived for fifty million of your lifetimes. Think about the time after you are gone. Your first death. You still continue to live in the memories of your loved ones. Time passes, they do their deeds, meet their ends much like you met yours. The last person to have any memory of you dies. This is your second death. From now on, no one knows of your existence. You become a mere statistic for the books – Six million died in India in year 2078. Without you, the figure would have been one shy of six million.

If we really are this insignificant in the grand scheme of things, what really is the point of living at all? Why not just put a bullet through the head and vanish without causing as much as a flicker in the grandiosity of the universe? We wouldn’t be wrong in thinking so – we do matter very little and our presence or absence hardly causes a ripple in the cosmic ocean. But consider the alternative. Since none of our actions are going to have any far-reaching consequences, we are free to do anything we want! Performed badly in exams? Girlfriend ditched you in favor of someone else? Think your life is ruined? In another billion years, the Sun will become too hot for liquid water to exist on Earth. That’s when life will be ruined. Worried about whether or not you made a good impression in last night’s party? Guess what, there will be no more parties to attend when the Andromeda galaxy rams into our Milky Way in another 4 billion years.

Once we can stop being so stuck inside our heads all the time and look – truly look – at the world as it exists outside the self-centered pseudoworld created by our mind, we cannot help but look back and laugh, “Those were my concerns and worries?”

Peering deeply into space might just become my new favorite pastime! 🙂

i2s4D

Atheism in the land of a thousand Gods

Having been raised in a devout Hindu household, I never had the courage or the desire to think or question my beliefs. I just performed whatever religious liturgy was expected of me, lest I end up offending one of the innumerable gods of Hinduism and be stuck forever in the cycle of life and death. Yikes! What could have transpired in the life of this hopelessly brainwashed religious retard that made him question and ultimately renounce his religion? I would love to look back on the past year of my life and pinpoint at one moment of sudden clarity and epiphany where I stepped out of the self-constricting bubble of religion and let the light of science and knowledge wash over me and transform me. The truth is, it was more of gradual change involving several events like death of a close relative, exposure to people from other religions besides my own, Aldous Huxley’s Brave New World (being forced to follow a religion from birth is not much different than decantation in the World State) and liberal amount of meditation and introspection.

To renounce something, you first have to understand it thoroughly. All religions, despite their proclaimed differences, when distilled down to their bare essence, can be broken down into three components.

  • God
  • Self
  • Rituals connecting the two

God

The coupling between god and religion is so strong, it’s impossible to think of one without dragging in the other. But do god and religion really need to be bundled together this tightly? I sincerely want to believe that there is a force more powerful and knowledgeable than an individual that primarily exists to guide him. Perhaps this force is just my own subconscious mind, perhaps it is the collective intelligence of mankind in a “By your powers combined, I am Captain Planet” sort of way. I cannot be sure and, at this point, have no desire to pursue this question any further. I am happy being an agnostic atheist. What I am sure of is that, even in gnosticism, I wouldn’t need no stinkin’ religion attached to my idea of god.

Self

If you look at Self from a religious perspective, your only purpose is to praise and worship the lord of your religion in hopes of seeking a place in heaven/enlightenment/liberation from life and death cycle. So, once you become an atheist and are no longer bound to submit to the will of the Almighty, what is your purpose? This is not an easy question and the difficulty of finding an answer is perhaps the reason why religion was invented in the first place – a clear cut answer to a difficult question that requires nothing more than your silent obedience. I subscribe to the philosophy that life is inherently meaningless. You are free to add whatever meaning you see fit.

Rituals connecting the two

If we do away with the worshipping aspect of a religion, they all preach the same message. From Monty Python’s Meaning of Life, “it’s nothing very special. Uh, try to be nice to people, avoid eating fat, read a good book every now and then, get some walking in, and try to live together in peace and harmony with people of all creeds and nations.” I will gladly stand side by side with a religious person who is trying to do some good, but please spare me the kneel-before-the-lord-or-suffer-eternally-in-hell chicanery. Religious people have chosen to live by a protocol made by others. I have simply made my own protocol.

Haskell: Using already computed part of list to compute further list

I faced a rather difficult (for a functional programming noob anyway) problem while coding in Haskell recently. Say I have a list which needs updating. Flex some FP muscles and you realise that if you have a function to update a single element, like:

updElem :: a -> a
updElem cur = --definition goes here

then the function to update the list of elements is simply defined as:

updList :: [a] -> [a]
updList = map updElem

Pretty simple. A basic observation here is that if we denote original list by Lo and updated list by Lu, then Lu[n] depends on Lo[n]. Now here’s the problem I faced. In my case, Lu[n] depended not only on Lo[n], but also Lu[n-1]. Not a big issue, I say, and proceed to redefine my updElem as

updElem :: a -> a -> a
updElem cur prev = --definition

And what about updList? It gets redefined thusly

updList :: [a] -> [a]
updList (prev:cur:[]) = [updElem cur prev]
updList (prev:cur:rem) = updElem cur prev : updList (cur:rem)

I gave myself 3 gentle pats on the back for coming up with this function and proceeded to test it out. It failed. Big time. Compiler having failed me, I resorted to my favorite debugger – pen and paper! I walked through each recursive call of updList and it wasn’t hard to see why it was bombing out – the pattern match is matching against Lo the whole time and I need my prev to come from Lu, not Lo.

Realizing the problem was but a small part of the solution. Fixing it is where the headache lay. Lu, while being created, needed reference to it’s own previous element to grow further. I guess the main reason I got stuck here was because I got thinking that I needed to access the stack of updList somehow since that is where the state of Lu will be stored while being created.

Several fruitless hours later, I gave up and sought help of the expert minds over at Stack Overflow. When I saw the solution posted there, I banged my head on the nearest wall for each pat I had awarded myself earlier, plus one. Picking up my jaw up from the floor, I proceeded to implement the simplistically brilliant solution which had totally eluded me so far. Here I present to you the final and correct version of updList in all it’s idiomatic glory:

updList :: [a] -> [a]
updList xs = zipWith updElem xs shifted
where shifted = 0 : updList xs

Where comes the magic number 0 from, you ask? Notice how in this entire post I have been silent about what element of the updated list Lu[0] depends on? Well it really depends on your problem. In my case, assuming it depends on 0 is works fine enough. Otherwise, if [a] is a list of your custom data types, perhaps you can introduce a null type constructor to replace the zero.

Installing and configuring dwm under Ubuntu

dwm is an ultra-minimal tiling WM written in C. Ubuntu offers a binary package, but it’s kind of pointless since the only way to configure dwm is by editing its source code and recompiling. Instead we will grab the latest source from the project website directly.

First install the dependencies needed for compiling dwm along with the package suckless-tools which contains a bunch of utilities for use with dwm.

$ sudo apt-get install build-essential libx11-dev libxinerama-dev sharutils suckless-tools

Now grab the dwm source code from the project website and extract it locally.

$ cd /usr/local/src
$ sudo wget http://dl.suckless.org/dwm/dwm-6.0.tar.gz
$ sudo tar xvzf dwm-6.0.tar.gz
$ chown -R `id -u`:`id -g` dwm-6.0
$ cd dwm-6.0

Before proceeding further with compilation, have a look at the README file. It tells you to modify the config.mk file to match your system. However the defaults work just fine on a normal Ubuntu system. So, go ahead and compile!

$ sudo make clean install

At this point, dwm is installed as /usr/local/bin/dwm, but you still need to add an entry for dwm so that it shows as an option in your login screen. For this we will install dwm from the repositories which, as I said before, is not of much use. But, it will also install a file /usr/share/xsessions/dwm.desktop which is what we need. So we will back up this file, remove dwm, and restore the backup file.

$ sudo apt-get install dwm
$ sudo cp /usr/share/xsessions/dwm.desktop{,.bak}
$ sudo apt-get purge dwm
$ sudo mv /usr/share/xsessions/dwm.desktop{.bak,}

Now we are all set to log in to our dwm setup! So log out and log back in to dwm session to be greeted with a shiny new desktop that looks something like this:

Default dwm under Ubuntu 11.10

Default dwm desktop

There you go, unabashed simplicity for you, right there. No oversized icons to waste screen space, no system trays, taskbars, panels to distract you and no apparent way to launch applications. What you do have is an narrow bar running along the top edge of the screen displaying some numbers and symbols with “dwm-6.0” written in the right corner. This bar is known as….we’ll just call it bar for now. Try pressing Alt+B to toggle the bar visibility. The numbers you see are virtual desktops (called tags in dwm) – dwm provides 9 of them by default. Try Alt+[Num] to switch between tags. The weird “[]=” symbol you see next to the tags is your current tiling layout. dwm offers three layouts by default – tile ([]=), monocle ([M]) and float (>). The “dwm-6.0” string you see in the far left can actually be changed to show useful information like current date, time, network status, battery status etc.

This is a good time to get yourself acquainted with dwm’s keyboard shortcuts. Remember, keyboard shortcuts are of prime importance in tiling WMs and you should know them as your life depended on it. You can configure them to your liking, but it helps to get acquainted with a few default ones:

Alt+Shift+Enter
    Launch xterm
Alt+Shift+C
    Kill a client (a window, if you must insist)
Alt+t
    Switch to tile layout
Alt+m
    Switch to monocle layout
Alt+f
    Switch to floating layout
Alt+b
    Show/hide bar
Alt+p
    Launch dmenu
Alt+[num]
    Switch to tag [num]
Alt+Shift+Q
    Quit dwm

dmenu is an application launcher from the author of dwm following the same minimalist philosophy as dwm. It is a part of the suckless-tools package we installed earlier.

Now we will try out the tiling modes of dwm. First close any open clients (Alt+Shift+C) and switch to tile mode (Alt+t). Now open up xterm using dmenu. Press Alt+p and you should see the bar get replaced by something like this

dmenu under Ubuntu 11.10

dmenu

Start typing the name of the app you wish to launch, and once dmenu has narrowed down the search, select it using arrow keys and press Enter. Launch xterm this way. It will occupy the entire screen. (Number 1 has been added by me)

single client open in dwm

Single xterm client.

Open another xterm client (using either dmenu or Alt+Shift+Enter). You will find the previously open xterm automatically resize and move to make space for this newly opened xterm.

two clients open in dwm

Two xterm clients.

Here, area 1 is called the master area and area 2 is called the stack area. The master area can hold a single client while the stack area holds all the remaining ones. Any newly opened clients always occupy the master area and the existing clients gets pushed into the stacking area. Open up a couple more xterms to see how it works You can switch focus between clients using Alt+j and Alt+k. Focused clients are denoted by a blue border while the rest have gray border. You can move a focused client from stacking area to master area using Alt+Enter. Play around with these shortcuts till you get the hang of how exactly the tiling works. Finally, you can change the ratio between master and stacking areas using Alt+h and Alt+l.

multiple clients in dwm

1 Client in master, 4 in stack with highly skewed area ratio

Now switch over to monocle layout (Alt+m) to have the focused client occupy the entire screen. Note how the “[]=” sign in the bar changes when you switch layout. This layout is equivalent to maximized windows in floating WMs. Note that Alt+j, Alt+k and Alt+Enter shortcuts will work in this layout too.

The final layout is the floating layout which is equivalent to your conventional floating WMs. Move the clients around using Alt+LMB+Drag and resize them using Alt+RMB+Drag. Note that you can switch individual clients into floating mode without affecting the layout of the rest by using Alt+Shift+Space. Floating clients always stay above the tiled ones.

Tags in dwm are a more powerful version of virtual desktops in KDE/Gnome etc. A client can have more than one tag associated with it and you can view all clients from any number of tags simultaneously. Use Alt+[num] to view all clients having tag [num], Alt+Ctrl+[num] to view clients having tag [num] in additon to currently visible clients, Alt+Shift+[num] to associate focused client to tag [num] and Alt+Ctrl+Shift+[num] to associate in addition to current tag associations.

There is still a lot more tweaking you can do before you using dwm as a full-fledged replacement for Unity. This includes configuring a system tray so you can use NetworkManager applet under dwm, displaying some meaningful information in the bar instead of the the curt “dwm-6.0”, configuring dwm by editing it’s source code (Have a look at /usr/local/src/dwm-6.0/config.h file to get started) and making your gnome themes and settings carry over to your dwm session (if you open any gnome apps at this point, they will have an ugly theme and unreadable fonts).

PS: Use “nautilus –no-desktop” in dmenu to launch nautilus, or else it will mess up your dwm session. A default rule in dwm specifies firefox should open in tag 9 by default. Happy tiling!