Shitty Code

Standard

While working on something, I realised something else. Well… that is how I go about life usually, but this time, a stroke of intelligent design struck me. Also, lately, my blogs have been all about friends and feelings pertaining to happiness and warmth between fellow humans. To restore the balance, I’d like to share a small hack I did. It is very cool in the sense that it uses an obscure concept of C programming.

Suppose that one has multiple sources of data. In words of MVC, suppose that you have multiple data Models. In C, such Models are represented as structures. For every type of Model, a structure can exist that provides a user accessible way to manipulate the data. For brevity, consider two SQL tables in a database. One containing the name and ID number of a person (call it contact) and the other containing height and weight (call it body) of that person.

Now, ways exist to make a C program connect to a data source to fetch data and one can cast that data into a particular structure. Let us assume that, after obtaining data from the tables, we have formatted that data into following structures.

struct contact {
  int id;
  char *name;
};

struct body {
  float height;
  float weight;
};

struct contact contacts[n]; // list of contacts of N number of people
struct body bodies[n]; // list of body type of N number of people

A problem arises when one tries to read or update these structures. Each structure needs a dedicated read and write functions because each structure is unique to itself. Like such:

void readContacts(struct contact *contacts) {
  int i = 0;
  int id;
  char *name;
  while(contacts[i] != null) {
    id = contacts[i].id;
    name = contacts[i].name;
    i++;
  }
  // do something with id and name
}

void readBody(struct body *bodies) {
  int i = 0;
  float h, w;
  while(bodies[i] != null) {
    h = bodies[i].height;
    w = bodies[i].weight;
    i++;
  }
  // do something with height and weight... redundant code. <- not cool.
}

But what if we have a generic type called LIST? In QtC++ and Android, we have ListViews that provide methods to manipulate such lists. We may have different “lists” for different types of Models but functions that manipulate them are same. That is what object orientation is all about… encapsulation and abstraction.

The problem statement hence can be laid down as such: We have lists of disparate data that we want to manipulate using a single abstract and generic data type LIST. This will let us define manipulation functions only once and use them for different lists… data encapsulation, that is to say.

Having understood the problem statement, we conclude that we need a “new” data type LIST. This data type must be able to store the data as well as provide methods to initialise, access and update the stored data. That is, we need a “constructor” to set the data in the list and a “getter” function to get the stored value.

struct _hidden {
 char *data;
 void(*constructor)(char *someData, struct _hidden *this);
 int(*size)(struct _hidden *this);
 char*(*getter)(struct _hidden *this);
};

As you can see, the above structure has a variable to hold the data and functions (pointers or rather pointer-to-implementation) to manipulate the data. C doesn’t have the concept of “this” pointers, but we need to keep a track of the current object that is being manipulated, struct _hidden *this is used to keep track of the current object.

Defining these functions are trivial:

void psuedoConstructor(char *data, struct _hidden *this) {
  this->data = data;
}
int size(struct _hidden *this) {return sizeof(this->data);}
char* getter(struct _hidden *this) {return this->data;}

The element of black magic that we now need is a way to set the function pointers defined in our structure to these manipulating functions. We must use such a method so that every time a new LIST object is created, these functions are available for them and that too, exclusively. This hallowed and dark piece of code is manifested as follows:

#define LIST(X) struct _hidden X = {.data = NULL, \
                                 .constructor = psuedoConstructor, \
                                 .size = size, \
                                 .getter = getter} // the crux of the magic

This syntax is used to initialise a structure with default values. If we use this in a macro we can now write a something like: LIST(L1). L1 automatically has all the member functions and can access the hidden data member of this structure. The actual structure (struct _hidden) is abstracted away.

We can now write an example:

#include <stdio.h>
#include <stdlib.h>
#include "shittycode.h" // the header file with all the black magic

struct contact {
 int id;
 char *name;
};

struct body {
 float h;
 double w;
};

struct contact contacts[3];
struct body bodies[3];

void makeModel1(){
 int i = 0;
 for(i = 0; i < 3; i++) {
 d1[i].a = i + 1;
 d1[i].name = "Code Ninja";
 }
}

void makeModel2(){
 int i = 0;
 for(i = 0; i < 3; i++) {
 d2[i].a = i + 2;
 d2[i].b = i * 0.235;
 }
}

int main() {
 LIST(l1); // generic data type list.
 LIST(l2);
 makeModel1(); // demo model... model can come from any where
 makeModel2(); // demo model... model can be any thing
 l1.constructor((char *)&d1, &l1); // must send a reference to self
 l2.constructor((char *)&d2, &l2);
 struct data1 *r1 = (struct data1 *)l1.getter(&l1);
 printf("%s, %d\n", r1[2].name, r1[1].a); // just checked random entries
 struct data2 *r2 = (struct data2 *)l2.getter(&l2);
 printf("%f, %f\n", r2[2].b, r2[1].a); // use loop to go through each entry
 return 0;
}

Clearly, L1 and L2 in the above code represent different lists having different data. We can still use same functions on both these objects without a conflict. Also, all the implementation of LIST is abstracted away from the user. They just need to call the appropriate functions related to this particular object.

We can of course have such implementation for anything we can imagine. For example: we can define a BUTTON to simulate a GUI button and associate an “onClick” event with it instead of a “getter”.

This little piece of black magic is available here.

 

Ninja.

Advertisements

Paean for a dream

Standard

Alright, since my last blog post, that social interaction group has become a friend circle. That’s what happens when you go out for a social gathering over a social lubricant in a social setup. The floodgates open and you start talking with your fellow attendees. Although I spilled half a glass of a golden liquid on one of the attendees, I still had a very good time with this social thing I have going on.

We have added a new human to this social circle but The Guy was missing. This new character, along with another, threw a party to commemorate their births. As per my understanding of a social regime, it is canonical to raise a toast, with some liquor, in such cases. After all, we are celebrating the best gift that we can get… the gift of life.

BDayGuys - 1

Usually, when I feel like having  a taste of that bubbling golden liquid, I go out alone to some exclusive bar and get high with myself. That’s the case when I’m very happy and achieved something very great. That golden yellow poison takes me to another level of happiness and I share it with none other than my solitude. This time, sharing it with four other humans, it was exuberant. Awesome location, awesome people and awesome weather were what complimented this time I had with these people.

IMG_20160228_174151.jpg

The evening started with us reaching this cafe in one of the best spots in Delhi. I was already in a good state of mind with my own poison and wanted not to indulge in this social mutual poisoning. But since the canon calls for everyone’s indulgence, I couldn’t say no to my favourite yellow bubbling liquid. Oh how the three ladies looked! Oh how happy The New Human seemed! And all was complimented by that warmth everyone seemed to be radiating!

IMG_20160228_170736.jpg

Out of all the situations I have observed, the social lubricant helps to make a bond between people. Lady D was being facetious (and tipsy) and didn’t mind when we laughed at her naiveness of the moment. Soni and Sweet P were laughing and their auras were a beautiful adjuvant to the awesomeness of the evening. The New Human was a bit too loud to my taste but I like people who hide not their state after being held up by some hard and strong intoxicant. I was, as usual, in the same state of mind I’m always in, albeit a bit more interactive and colloquial.

IMG_20160228_153916095_HDR.jpg

It would seem incomplete if I say naught about our food fetishes. The food was… satisfactory. I mean, you cannot expect more out of a generic bar other than chicken and cottage cheese. It was savoury no doubts and Lady D’s tinkling laughter made it all the more an occasion to enjoy the hot and spiced platters. Sweet P was in some other state of mind enjoying her trip and The New Human was chugging on his liquor with much fervour and enthusiasm so as to get sincerely intoxicated.

We have come together in this moment in time from different walks in life. Never did we realise that we would be sitting together in a company like such and have some laugh about things. It was an evening worth remembering and since there are only words I have to take your heart away, I quote this:

“Who am I, you ask?

I’m made from all the people I have encountered and all the situations I have experienced.

Inside, I hold the laughter and warmth of my friends.

Inside, there is a cracked heart and bitter words from heated arguments.

Inside, there are emotions I canst not convey and music that gets me through.

I’m made from all these moments I have had and all these people I have been with. That is who I’m.” ~ Ming D. Liu.

I raise my glass to each member of this social group and hope that they are as awesome as they were today for some time to come. I seldom say such things to people but I kind of like being around this set of human entities.

A great night I wish upon you all.

Ninja.

More than a feeling

Standard

Since my last post, that little social interaction group I had, has become a bit more tight. In this spirit of next level of acquaintanceship, we had an evening together. It was invigorating and more than a feeling. Good food, good company complimented by pleasant climate and an endless stream of human population in the crowded streets of Old Delhi. It was a good experience given the fact that I usually shun such bondings and interactive activities.

Father was a bit unwell and was under medical supervision. He was given a green signal today to carry on with life as he usually does whilst taking certain precautionary measures. It took sometime to get things done and get him back home. I wrote this because I wanted to give a reason for my late arrival to the venue for the evening. But anyway, I was present at the scene and thus started the evening of passing smiles and random sentences. Since all the participants are food lovers and Old Delhi is known for it’s delectable street food, we, being sincerely foodie and sidelining health concerns, went on a street food spree.

IMG_20160130_164808

In lieu of Indian Republic Day on 26th of January, Delhi Tourism has organised a food festival at the magnificent Red Fort. Various people from various states of India had on display and sale, various food items. Various states showcased their traditional art forms and specialities of their states in forms of tableaux and stage performances. It was a good atmosphere and I really enjoyed the positiveness of the moment. Lady D and Soni looking pretty as ever were making me skip a heart beat with every other smile that lingered on their lips. The Guy was, as always, in total tune with my frequencies and we had a laugh about many a thing. We have such social interactions at work too but the punch was the ambiance of the location.

groupie - 1

Chandni Chowk is especially known for this street called “Parathe Waali Gali” which roughly translates to “Baker Street”. Well, wtf to that. The crux of the evening was this restaurant which has a legacy almost 200 years old. The walk from Red Fort to this restaurant was long and in the overly crowded streets of Chandni Chowk, navigating your way through is an exhausting activity. The company was such and the euphoria of being with amicable humans, the walk didn’t put much strain on any muscle as such. Good, I usually avoid putting any strain on any muscle during weekends. All were chittering and the good thing about it was, none of it seemed exasperating. Given the fact that Lady D has naught capacity for bullshit, it was fun to say random stuff to her and listen to an equally random hooting from the ladies as a consequence.

IMG_20160130_172346

And coming to the heart of the street food spree, the parathas were decadent and savoury. The restaurant was established in 1875 and has been, since then, serving various kinds of parathas in an overly small shack located inside a more overly crowded street. It’s a shack yes… don’t let that fool you. The food there is worth all the money that you’ll shell out after stuffing yourself till you choke. We, being sincerely foodie and sidelining health concerns, satiated our craving for such delicacies. The Guy suggested the “banana paratha”. Its’ roughly equivalent to a croissant stuffed, generously, with pieces of bananas and cashew and cream. It was something I have never eaten and it was delicious as fuck amongst other things. The buttermilk or, in native tongue, Lassi was as authentic as a Lassi in this part of Delhi can get. They still use the same ingredients and methods going back almost 200 years.

IMG_20160130_174906041

A traditional Indian meal ends with a dessert and we, being sincerely foodie and sidelining health concerns, honoured this tradition. Falooda is a speciality of this area of Delhi and this place is the to-go point. Oh damn the sweetness. I have never kissed a female human but I think this falooda would be sweeter than that. The walk to that place was lengthy too but again, with the company, it was jovial and jocund. The falooda called to an end, this awesome evening, that is forever laid down here with these words.

Wishing that this level of acquaintanceship only grows upwards, I sign off with a special tip of my hat to the humans of this little social interaction group. Let’s keep this spirit of new level of acquaintanceship alive and kindle it to a newer and better level.

Ninja.

Some personal issues.

Standard

Well, hello again. So last time (I’m too lazy to link… so help yourself), we saw a bit about the internals of the Texas Instruments CC254x BLE firmware. Well, today I try to put down how I managed to compile the firmware using the IAR Workbench and RedBea Lab’s Biscuit firmware. It was pretty messy. There are problems that have to be resolved and while at it, I intend to resolve some personal issues.

Talking about problems, I have one too many. First, a cigarette. So what? I run everyday for ~2Kms. For a former chain smoker, who has just started to make something good of his pathetic life, 2Kms is a fucking achievement. And so is compiling the code for the BLE firmware. I started by obtaining the Biscuit firmware from here. If you have read my previous post (I’m really worried about you if you did), you might know that you have to install the IAR Workbench to compile and run the code. Assuming that you have installed the Workbench and the TI BLE library (I’m sorry, I couldn’t find the Git link I was talking about), I’ll try and describe the implementation of the Biscuit firmware. I’ll briefly (if time and consciousness permit) describe how to compile the code. So unzip the firmware and open up IAR Workbench.

The IAR Workbench. I'm using the 30 trial version (Lisenced!),

The IAR Workbench. I’m using the 30 day trial version (Licensed!),

So, click on open and select “workspace”. The workspace file is simply a synonym to a project description file (you have them in Android projects and many other IDEs).

So whatever, I’m listening to Sing by Blur… it reminds me of a very small room where I lived in utmost secrecy. Well, I’m not going into that but the gist of it is, attachments are an issue with me. I mean ok, you like someone, you talk to them, you have a good time and then when you’ve had enough, you should be like “hey that was a great run with you… I hope we meet again some day.”. But no, that does not happen. Maybe I’m too lame that I get attached or too promising to get someone attached to me or maybe both. Both I guess… thats pretty fucking stupid. I’m so freakin’ attached that without thinking I opened up to a random person from my past. That too completely… well that IS *he* stupid. And not stopping at that, some other random person is so fucking attached to me that it is getting hard to breathe… well that IS *he* also fucking stupid.

Coming back to the IAR Workbench. Open the workspace file from the Biscuit directory (after you unzipped the Biscuit source code). To do that, search for a file ending with “.eww”. Viola! you imported the whole project.

The source code!

The source code!

Now lets start hacking. The important files are, biscuit.c, Biscuit_Main.c and OSAL_Biscuit.c. The last one is the OS Abstraction Layer, the second is the entry point of the firmware and the first one is the actual firmware. The TI docs very clearly explains how it all glued together. The following code:

const pTaskEventHandlerFn tasksArr[] =
{
  LL_ProcessEvent,                                                  // task 0
  Hal_ProcessEvent,                                                 // task 1
  HCI_ProcessEvent,                                                 // task 2
#if defined ( OSAL_CBTIMER_NUM_TASKS )
  OSAL_CBTIMER_PROCESS_EVENT( osal_CbTimerProcessEvent ),           // task 3
#endif
  L2CAP_ProcessEvent,                                               // task 4
  GAP_ProcessEvent,                                                 // task 5
  GATT_ProcessEvent,                                                // task 6
  SM_ProcessEvent,                                                  // task 7
  GAPRole_ProcessEvent,                                             // task 8
  GAPBondMgr_ProcessEvent,                                          // task 9
  GATTServApp_ProcessEvent,                                         // task 10
  BiscuitPeripheral_ProcessEvent                                  // task 11
}

Here, we register every layer’s even processing function. It is taken from OSAL_Biscuit.c The purpose of this file is to initialize every layer of the protocol stack and finally boot the application. They have used a very ingenuous trick. By making the order of initialization as the order of defining the event processors, they can now give unique task IDs to each process of each layer. That’s like very cool. We don’t have to change anything in this as such. The second file Biscuit_Main.c:

int main(void)
{  
  /* Initialize hardware */
  HAL_BOARD_INIT();

  // Initialize board I/O
  InitBoard( OB_COLD );

  /* Initialze the HAL driver */
  HalDriverInit();

  /* Initialize NV system */
  osal_snv_init();

  /* Initialize LL */

  /* Initialize the operating system */
  osal_init_system();

  /* Enable interrupts */
  HAL_ENABLE_INTERRUPTS();

  // Final board initialization
  InitBoard( OB_READY );

  #if defined ( POWER_SAVING )
  osal_pwrmgr_device( PWRMGR_BATTERY );
  #endif   

  /* Start OSAL */
  osal_start_system(); // No Return from here

  #if defined FEATURE_UBL_MSD
  extern void appForceBoot(void);
  appForceBoot();
  #endif

  return 0;
}

calls the osal_start_system() function. The osal_start_system then calls the task initialization routine from OSAL_Biscuit.c. The system is now up and the application has started running (BiscuitPeripheral_Init() in OSAL_Biscuit.c).

The application initialization routine is quite straightforward. It is divided into blocks. The GAPRole_Set/GetParameter() function interacts with GAP API to set or request certain parameters of the GAP layer. TI distributes the GAP API’s documentation in an interactive HTML form so I cannot basically tell you all the parameters. The used parameters are aptly named, so even if you study theoretically about Bluetooth Low energy from basic beginners’ guide, you’ll know what those parameters are (well thats my perception cuz I did that).

The interesting part is the event processing routine. It is called BiscuitPeripheral_ProcessEvent(). It takes two parameters, task ID and the event that occurred.

Again, there is an ingenuous hack. The second parameter, events is a bit map.

if(events & SYS_EVENT_MSG) {
        // a system event has occured.
        uint8 *pMsg;
        if((pMsg =osal_msg_receive(biscuit_TaskID)) != NULL) { // allocate the message
            biscuitPeripheral_ProcessOSALMsg((osal_event_hdr_t *)pMsg); // defer to OSAL message processing function
            VOID osal_msg_deallocate(pMsg); // deallocate the message
        }
        return (events ^ SYS_EVENT_MSG); // unset the SYS_EVENT_MSG from the events bitmap.
    }

This particular case checks for the system events. It defers the event processing to some other system message processing routine. It then removes the particular event from the bitmap (the return value XOR’s the system event message).

Well apart from that, coming back to attachments. So this random person whom I’m attached to, is pretty fucking annoying. Fine, I maybe be cribbing but really I knida loose myself if this random person is not around (even though the distance is great between us). I kinda expect something back because I’m attached. I want this random person to be as fervent as I’m. But that cannot happen. That random person cannot possibly act the way I want. In fact any random person will do that. Obviously… a random person has their free will! Well, when the fuck will I understand that? What I think should happen cannot and will not happen between this random person and me. I’m a random person too from this random person’s perspective and I have my own free will… I took this random person a bit too seriously. My bad folks…

Well ok… coming down:

void uart_data_received(uint8 *buf, uint8 len)
{
    Biscuit_SetParameter(TX_DATA_CHAR, len, buf); // data recieved. Char2 is set.
}

This function is responsible for reading commands from the phone. In the accompanying Android app that comes with the BLEMini, you can search for the routine that sends command to the BLE device. RBLService.java is responsible for that. It basically sets a GATT Parameter of the Biscuit’s service. The TX_DATA_CHAR is the data transmitted by the phone. It is sent to pin TX of the device. This data can then be used by the Arduino to do what ever you want. If you scan through the code, you can see that there are arrays and structures that you can modify. Like:

static uint8 scanRspData[] =
{
    // complete name
    0x08,   // length of this data
    GAP_ADTYPE_LOCAL_NAME_COMPLETE,
    'B','i','s','c','u','i','t',   // TODO: change this to Nyx

    // connection interval range
    0x05,   // length of this data
    GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
    LO_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ),   // 100ms
    HI_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ),  
    LO_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ),   // 1s
    HI_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ),  

    // Tx power level
    0x02,   // length of this data
    GAP_ADTYPE_POWER_LEVEL,
    0       // 0dBm  
};

You can change the name of the device here. I modified to say:

    // complete name
    0x04,   // length of this data
    GAP_ADTYPE_LOCAL_NAME_COMPLETE,
    'N','y','x', ...

Pretty cool huh? But what is not cool is the other random person who is attached to me. Dude, I was just being good to this random person. Does it really mean that I’m responsible for this random person?! Fuck no man! This is the moment where humans should be like “Ohh well… I had a great time with you and cherish your every memory. I hope we meet again someday, till then have a great life.”. Simple… good bye and ok I will, some day listening to High Hopes, will recall their memories and call them maybe. But thats that. Why on earth am I held guilty that this random person is attached to me? For being good? Well damn it then.

So I’m gonna drop dead anytime now, so I’ll run through the compilation. It will be redundant for me if I reproduce the already available document. Refer to the final chapters of the Software Developer’s Guide linked above. But I was not able to compile the source directly. Copy the unzipped Biscuit firmware folder to your TI Library’s Project’s directory. Then follow the steps in the guide. That too did not help me. So I did something ingenuous. I merged the Biscuit source with the SimpleBLEPeripheral application firmware. That required me to hack the above mentioned files according to the new application firmware. I basically removed the Biscuit specific services and used the stock SimpleBLEPeripheral service. Then hacked the source for SimpleBLEPeripheral service to have some features of Biscuit’s original service.

Code compiled… awesome. Now, do whatever the fuck you want, you cannot upload the firmware. Not yet. You have to convert the generated hex file to a bin file.

Refer to this discussion on TI’s forums. There are many options there. You should search options yourself, as this is what I did. I really cannot explain in words what each option means. Search the TI’s forums, you’ll end up with something.

So well… I’m a big fucking loser rambling, as of this moment, 1604 words. But really, it does actually bother me that one can have such profound and intense feeling for someone. So intense that you build your thoughts around them without knowing that whatever you’re thinking is actually just… shite. Well… whatever, I let it out… its all good. Tomorrow is a new day. Have a great night folks!

May the force be with thee!

Ninja.

Dear WordPress

Standard

I usually don’t get many comments on my posts because (maybe) they are too technical or too useless (I don’t think so though) but since I posted this I have been suddenly getting many comments and all of them spam.
I log into my account and see that there are at least 10 comments requiring moderation and I get so happy that people are reading my posts but all that those 10 comments require is deletion and I get so sad about the false positives.
FIX THIS!

Sincerely,

Bruce Wayne.

The tale of two days (part 2)

Standard

15th of August, 2012.

Before I start elaborating the day, I’ll take a small trip down the memory lane and relive the last semester in college.

Remember, I do, the fifth of November, the day of meeting with a girl on an eve so somber. Who knew, that a random girl I met in a way that was equally random would become so important to me that she is now the center stage of all my thought processes.

Being a computer programmer, my acuity enabled me to judge a broken smile on her face. She was wronged and left with a broken heart but so strong was her character that she faked her smile effectively making things serene in her presence. A dint there was, in my logic and compelled I was to analyze her.

Analyze her, I did and realized that there was more to her than meets the eye. Her convoluted way of “data abstraction” appalled me and I gave up lest my mental faculties would be damaged. I started seeing her everyday and we had a great time. Cuddled her, fought over petty things we did, shared a few deep kept secrets and for the first time, I truly generated some feelings for someone. Jovial were the days and serene the eves were and on one such jovial day, I made her a jocund promise. A promise that said I’d be with her when she needs me. A promise that I presumed would be broken on the day when college concludes.

A few weeks passed in serenity when suddenly a fiend of a friend (her friend) butted in. He messed up everything I shared with her and I was actually hurt (not my logic this time, I generated feelings for the first time and they were hurt) by the way she acted. I figured out her one “drawback”, she cannot prioritize. Misunderstandings, grave ones, we did have and the bond I shared with her was on the verge of being severed. To top the already delicate situation, a set of mindless wights (this time, my “friends”) tried to shut me off. The myriad situation that I described in the post before, were already starting to take shape and her perennial absence was tolling my thinking capabilities. I tried getting her back with whatever logic that seemed right at that instance but drifting away, she seemed.

Nevertheless, the dark phase showed me only how important she is to me. The college ended but we did not. Craved every day I did, just to listen to her voice over the phone. A general salutation from her would make me jump and smiled I did with a childish joy. Passed, the summer did and she came over to my city but to my greatest sorrow, my myriad situation called me back to my college. Again separated from her, I wished every minute for past one month to be with her just once. I wished to see her face and cuddle her again and feel the feeling I get in her gracious presence.

The wish was fulfilled on my birthday on 15th of August. She, just out of the blue, asked me to come home and meet her on my birthday. She half meant it and was half expecting it but there was something in her voice that told me that she did want to see me. I realized that this was the time, I had to fulfill the jocund promise I made her on a jovial day. Travelled what seemed like 10000 miles I did, to spend a day just with her and even without an extravagant party and pompous gifts, a day worth remembering it was.

The moment I saw her and touched her face; filled inside me was that small empty space. An utter and deep relaxation covered me. Just like the sun seems, after a long cold night, her smile gave me that warmth and her gracious presence felt like a cool breeze enjoyed covered in a blanket watching the sun rising after that long cold night.

Nothing much we did save roaming around in malls and talking complete gibberish. But she cannot contemplate the feeling I was having when I held her hand or when she facetiously tapped me on my cheeks. Her voice was like anodyne to my soul that was half dead without her. Her touch gave me goose-bumps every time. Like a heroin addict craves for a dose of his poison, craved I did for her smile and satiated the craving was with her magnanimous smile.

On the trip that brought me back to my college, I realized that the one jocund promise made on that jovial day is the second most important thing in my life (she being the first). My presumption that the promise would no longer hold after college concludes was a fallacy. Hold, it shall, till I’m left with one last breathe. Never did I think that someone I met on an eve so somber would mean so much to me. To her, I give myself, in full submission and this 15th of August, this birthday, will be cherished forever and ever more.

The tale of two days (part 1)

Standard

Sunday, 13th August, 2012

Amidst the myriad situations that I’m facing right now, there is something inside me that compels me to forget my grave situation and imbibe that carefree attitude for which I’m quite famous. On this day, I, half-heartedly, compelled myself to go out with three of my best juniors (read: buddies for I treat them more like my buddies than juniors). Never did I think that my half-hearted decision will turn to full-hearted gregariousness. This post basically describes the characters of the concerned date and the day that forget we shall not, for years to come. On request, it is, by the second character. J

Before, I start elucidating the 13th of August, I’ll laconically describe my myriad situation. It goes like this: GRE == 305/340 (which is supposed to be awesome), TOEFL == 100/120 (which is supposed to be fucking awesome), 3 research papers (who in the world publishes papers in undergrad?!), a GPA of 6.0/10 and 3 backlogs that I’m yet to clear. The last point, 3 backlogs, is the myriad situation that is taking all the time in the world to resolve and is the reason for my irritation.

It started when the husky voiced and dusky colored “Auspicious Goddess of Money” asked me if we could go out on Sunday. Just so you know, I’ve a weakness for husky voices and dusky colors. We discussed a bit about it on facebook and I ended up calling her. Lo! The voice! Her voice seemed like melting in my ear like chocolate and there was a slight flutter in my gut. Her voice is perfectly modulated. Not too loud, neither too low but just enough to discolor all with tunnel vision. The husky voice and dusky color makes her quite an enigma. Smiles, she does, with her eyes angled in such a way that it seems like she is hiding some secret from you. You tend to do mistakes and she will look at you as if she is coldly scrutinizing your every move to make an opinion of you. This demeanour of hers hits my calculating mind with much ferocity and I really am awed by it.

Saying all this, I decided that it would be discourteous to deny her “request” and I acceded with her plan of catching-up on Sunday.

So nonetheless, she was quite excited about the Sunday and I asked her to tag along my personal dose of nightshade. Nightshade, well, her big black eyes twinkle like stars in the clear night sky of our college. You can see a certain unfathomable depth that will helplessly pull you into cheerful limbo. Her spectacular smile was something I wanted to see for a long time. The way her eyes lights up when she smiles almost gives the effect of nightshade. Her childish behavior and impish attitude makes her quite captivating. To and fro save hither are her eyes. A trip her eyes, through the brightest of nights, will take you. Like the effect of nightshade, she may seem like an anomaly at one instance and in another, when you suddenly come back to your senses, she seems like all the right things in the world.

So far so good, but then a guy calls me up. I cannot describe this guy as such because words are not enough to describe the bond I share with him. He has been my saviour in matters that are outside the screen of my laptop and I owe him, the experience I’ve gained by solving those matters. His logical way of thinking is something I can deeply relate with. His sharp intellect and equally blunt hubris makes him worth being around with. About anything, you can talk with him and the joyous way the conversations are held are always quite refreshing.

Nevertheless, he asked me if I was free on Sunday and in turn, I asked him to join me with the “Auspicious Goddess of Money” and my personal dose of nightshade. Thrilled he was and we four were going to have a “normal” day out with friends.

Start our day we did, at this inn with three bottles of that bubbling golden-yellow liquid. Amazing was the start as we got a bit high and started laughing. Opened up the floodgates, we did, that was restraining us from bonding with each other. Three bowls of juicy chicken and cottage cheese count one along with a quarter of another golden-yellow liquid (which was not bubbling but was stronger) was served to us. Our common poison seemed so ecstatic and my half-hearted happiness was giving way to magnanimity of the day.

We talked incessantly enjoying the good food and the poison and my nightshade got higher than her threshold. Slept like a baby, she did, cuddled in my arms, while we were aboard a three wheeler on our way to the “greatest” city of all, Guna. The “Auspicious Goddess of Money”, my guy and me, in our high state of mind, rambled about most random things we could cook up.

Awesome, even more, the return trip was. Rain poured down from heavens and again my nightshade was cuddled with me and we four were, quite comfortable with the warmth and the bonds we made with each other on the 13th of August. A break from the grim monotony of my myriad situation was unconsciously called for by me and refreshed me it did. Out of the abyss of foul creatures in college (as I see the population of my college in my mind) I got 3 more (along with 2 others) jewels, now etched in my memory never to be erased.