Virality works. It’s a fact. It’s the core business component of many modern startups. It’s their key to retention, growth and, thus, success. 15 years ago, it took Hotmail almost a year to grow to 3 million users. In the past year, startups like Kik and LiveProfile did it in weeks and days. How? The answer is simple -viriality.
For a while, I’ve thought of virality as a mythical term that douchey business guys threw around to get investors empty their pockets for a new cool Web 2.0 startup. However, as I got more interested in entrepreneurship , I started to finally understand what it means for a product to have a viral component. Nevertheless, it was still something I have never experienced myself. Yes, I’ve seen products created by friends spread on Internet faster than high school rumors, yet I have never been the one to spark the fire.
It all changed over the last few weeks. About a month ago, I was in NYC on a work trip and I was hanging out with my good friend Ian who I haven’t seen in a while. In the past, I worked with Ian on TalkMesh, and he is definitely one of my favorite people to pair-program with. Since we haven’t coded together in quite some time, we decided to take advantage of my week in NYC and hack together on a project. Given the time constraints, Ian suggested to write a Facebook app with some sort of a viral component. Ian has previously successfully launched My Friend Map - a popular Facebook app for showing your friends’ location on a map. With my interest in virality and my past experience with Facebook APIs, his idea seemed quite interesting to me and well scoped for a single week of work.
After some brainstorming we decided to create an app that would generate tag clouds based on what has been posted on your Facebook wall. We looked at thecompetition, and realized that most of the similar existing apps really sucked at generating good-looking compact clouds. This is bad for virality.
A viral product typically has two notable characteristics:
While the competition also leveraged Facebook for an easy sharing model, they simply failed on the “cool” side of things. Let’s face it, people love to share stuf when it looks good. And good often means beautiful. It’s as simple as that. When people look at something that blows them away from esthetic point of view, all they want to do is share it with others to validate their own excitement. That’s why in order to make a viral tag cloud app, the results needs to look stunning.
So, what does a stunning tag cloud look like?
After some more Googling around, we realized that the most beautiful clouds on the web are generated by Wordle. This tool is quite amazing. By taking advantage of a great set of fonts, well thought-through color combinations and a smart generation algorithm, it manages to output some beautiful results. Even when the tags themselves were meaningless to me, the generated clouds looked so good that I wanted to share them. That was exactly what we needed it. Add the elegance of the Wordle-type clouds to the personalized set of tags extractable from your Wall posts, and you got the “cool” factor.
With that in mind, we started hacking away. Luckily, we were able to dig up a paper by the author of Wordle that helped us get started. A week later we had an app at our hands: I’m not gonna lie - I was pretty happy with the outcome. The results were quite stunning. Here is a quick sample:
The app’s functionality was very straight-forward:
However, these 3 simple steps contained an important viral loop. The app added a caption to the image that included the URL to the app itself. Then, it posted the images to your wall for all your friends to see. Since the images looked really attractive, your friends would follow the link in captions to generate their own clouds. And so on..
We hoped that given the viral loop, the app would “explode” and spread like wild fire. And so it did.
Even though, we only seeded the app by asking a few close friends to try it out, two weeks later the app grew to over 200 hundred thousands users! The real growth happened over just a few days. Have a look at the graph below:
The most interested part of the growth was that the app somehow randomly exploded in Nederlands and Brazil. People there loved it:
What happened next? The app got shut down by Facebook. Apparently, we were violating some terms. They offered us an opportunity to fix things and relaunch the app. However, in my mind the project has accomplished its primary goal: it has proved me that virality is one of the primary drivers of product growth and adoption. If you are designing a product, you need to focus on the user. However, it’s often not enough. In order to succeed and succeed fast, you need a good distribution channel. Viral growth is often the solution.
A common thing you might want to do, when you developing an Android app, is to have a ListView of checkable items. For instance, you might want to have a functionality in your app to share something with a bunch of people, who you would like to select from a list of contacts. For common choice for this task is to use a CheckedTextView and the android:choiceMode parameter of the ListView. This extension of a regular TextView has a check box on the right, so that it can be selected. However, there is a limitation here. CheckedTextView has to be the root element of the layout that you use for your items. So if you wish to display multiple things (user name and email) for each item by using a LinearLayout, you are out of luck. The reason for this limitation is that he root item must implement the Checkable interface and the LinearLayout doesn’t implement it. The solution here is to override LinearLayout to implement the required interface. I present to you CheckableLinearLayout. Upon inflation it searches through its children for the CheckedTextView, and then forwards any calls required by the Checkable interfaces to that component:
Now, we can use that component in the layout file for our list items:
Make sure you set in your ListView’s XML: android:choiceMode=”multipleChoice”.
Follow me @tokudu
UPDATE 5/2/2013: I wrote this post almost 3 years ago. At this point, Google GCM is the best way to implement push if you are targeting Android 2.2+. However, this post is still relevant if you want to implement push on ALL versions of Android.
Hello everyone. In this post I will try to provide you with a quick example on how to implement push notifications for your Android app using MQTT protocol. I will NOT discuss here why an application might need push notifications or the advantages of Push over Pull. I assume that you know exactly what I mean by push notifications are and why you might need them. However, before jumping in straight to the good stuff, let’s go over how it all started.
It’s been around 4 months now since I’ve started developing apps on the Android platform. It began with me scoring a free Nexus One phone at one of the Android Developer Labs. Obviously, I couldn’t resist trying to hack around with some code, so I downloaded the SDK and dove in. I guess in some sense, that’s exactly what Google was hoping for when they starting giving out free phones. While it might sound like I got lucky, in the end Google is the one who won. Anyway, developing for the Android platform turned out to the a pleasure. The SDK was easy to setup, easy to use and and easy to understand. Putting together your first app was a breeze. I was very impressed. Unfortunately, I soon realized that Android is not perfect. One of the things that really disappointed me was the lack of a native method for performing push notifications. Over the past year push notifications became almost a standard in the mobile space thanks to Apple. Even though BlackBerry utlilized Push since god knows when, it was Apple that really brought Push mainstream. Obviously, lack of native Push on Android seems like a huge drawback. Naturally, I started looking around for a solution. After Googling through dozens and dozens of blogs and message boards, I’ve realized that there are 3 generally accepted ways to implement push notifications for your Android app. All of which are non-trivial, hacky and have their own disadvantages. Let’s go over the list:
Poll? The name obviously tells you that it’s really not even push. The idea here is to periodically poll the server for new messages from a background local or remote service. The more often you poll the closer you get to the real-time push.
Advantages: easy to implement. no cost solution
Disadvantages: Obviously, you will never be actually real-time. If you polling interval is 30 min, you can get a message that is 29 minutes and 59 seconds late. Moreover, polling more often than every 15-30 min will kill your battery pretty quickly: https://labs.ericsson.com/apis/mobile-java-push/blog/save-device-battery-mobile-java-push
SMS Android allows you to intercept SMS messages. Your server sends a specially encoded SMS to your phone, whenever there is something new. Your app intercepts all messages, looks for the ones from the server, then pops up a notification.
Advantages: easy to implement. Fully real-time updates. Known drop-in solutions exist such as one provided by Ericsson Labs: https://labs.ericsson.com/apis/mobile-java-push/
Disadvantages: Can be costly to you and the user. There are only a few services that allow you send around free SMS and even those are often limited to North America. If you want to have a reliable SMS-based service that is available worldwide, you will likely need to pay. Similar goes for the users. Not everyone has an SMS plan and you don’t want your users getting charged by 3rd party for using your app.
Persistent TCP/IP The phone initiates a long-lived mostly idle TCP/IP connection with the server and maintains it by occasionally sending keepalive messages. Whenever there is something new on the server, it sends a messages to the phone over the TCP connection.
Advantages: Fully real-time updates.
Disadvantages: Hard to implement a reliable service on both the phone and the server side. The Android OS is known to be able to kill services when it’s running low on memory, so your notifications service can easily disappear. What happens when your phone goes to sleep? Some people complain about battery life issues related to maintaining an active connection.
The first two methods have significant disadvantages that we cannot do anything about. However, the third method’s drawbacks are not as severe. It seems like with enough work and a good design, the persistent TCP/IP method can work. After all, that’s how GMail, GTalk and Google Voice implement their real-time updates. In fact, many developers out there agree that it is probably the best way to go until Google actually takes the matter in their own hands. Persistent TCP/IP.
After more Googling around I was able to come across three reasonable efforts to implement push notifications using a persistent TCP/IP connection:
While all of the work done by these guys is incredible, none of their results are quite ready for drop-in use by other developers. In my effort to implement push notifications, I decided to put the pieces of the puzzle together and combine their results to produce a relatively stable way of implementing push. The example that I provide you with further, is a combination of Josh Guilfoyle’s TestKeepAlive project and Dale Lane’s MQTT work. I borrow quite a bit of code from those guys, so they should get most of the credit. Anyways, enough for the introduction, let’s get to the good stuff.
The problem with the TestKeepAlive project is that it creates a raw TCP connection, which means that you need write your own server to take care of push on the other side. While it’s, without a question, doable, it is exactly why TestKeepAlive is far from a working solution. On the other hand, the MQTT example shown by Dale Lane uses the IBM’s MQTT broker to handle the server work. To backup a little, MQTT stands for MQ Telemetry Transport, which is a protocol developed by IBM. Let’s take a quick look at the man page:
mqtt is a publish/subscribe messaging protocol intended that is designed to be lightweight. It is useful for use with low power sensors, but is applicable to many scenarios.
Did you see the part about ‘low power’? So did I. Basically, the reason why one might consider using MQTT is that it was designed to be very lightweight, so that it doesn’t consume much power. This is ideal for a mobile push solution as it addresses many battery life related concerns about persistent TCP/IP connections. Obviously, MQTT also has some disadvantages such as privacy, but we can talk about that later.
So, my idea consists of taking a KeepAliveService and replacing the raw TCP/IP connection with an MQTT connection. In this case, each device can simply subscribe to a unique topic which is based on its device ID. Now, assuming that your server knows the device ID, it can push data to the device over MQTT by publishing to that unique topic.
In my example, I utilize a PHP script as a server. This uses the Simple Asynchronous Messaging library (see project SAM http://project-sam.awardspace.com/) to publish MQTT messages to the broker on which I host on my server. Let’s have a look at the overall system diagram:
wmqtt.jar is a simple drop-in implementation of MQTT protocol provided by IBM. It can be downloaded from http://www-01.ibm.com/support/docview.wss?rs=171&uid=swg24006006. The file that you download has a bunch of different stuff. Just look for the right jar file. You can include this jar as a part of your Android app.
Really Small Message Broker (RSMB) is a simple MQTT broker also provided by IBM http://www.alphaworks.ibm.com/tech/rsmb. It runs on port 1883 by default. In our architecture it accepts messages from the server and passes them on to the right devices. RSMB can also be replaced by the Mosquitto server http://mosquitto.atchoo.org/.
SAM is a drop-in PHP library for MQTT and other stuff. You can either get it as PECL extension or download the source online http://pecl.php.net/package/sam/download/0.2.0.
send_mqtt.php is a simple PHP script that accepts messages over POST and uses SAM to pass-on messages to the broker.
Sample Code and Demo
The goal of my work on push notifications was to develop a working demo, which is what all other examples out there lack. I’m happy to say that I accomplished my objective. You can download the sample android app on GitHub.
This app (shown on the left) has a TextView and two buttons. The TextView contains your device ID and the buttons are used to start and stop the push notifications service. Once you have the app on your phone, start the service. Then go to http://tokudu.com/demo/android-push/ ( UPDATE 5/9/2013: temporarily not available) and enter the device ID in the first text box and enter the message text in the textarea below. Press “Send Push Message” and you should get a notification on your phone. It’s as easy as that.
You can see the source code for andoid-push in this GitHub project. It contains the aforementioned send_mqtt.php script.
If you didn’t get a notification, make sure you have network connectivity. It can also be that the broker is down on my server (see server status on the page). If that’s the case, please post a comment and I will look into it bringing the broker back up.
Final Thoughts and Comments
MQTT is definitely not the best way to implement push for Android, but it does work. One of the main drawbacks of MQTT is that anyone who knows the IP and the PORT at which the broker is running can connect and intercept your Push messages. So it’s probably a good idea to encrypt them. Alternatively, you could write your own broker and introduce some sort of authentication to MQTT.
The code I provide here for the push service still needs more testing. Reliability is definitely the main question. I think the code can definitely be improved to better handle connectivity loss and other erroneous situations.
You are welcome to post your comments here regarding how it can be improved.
Also let me know if you find any bad bugs. Good luck testing!
Follow me on twitter @tokudu
In July of this year, I will be starting my first real full-time job. It’s no longer gonna be an internship that will eventually end in 4 month. So it’s definitely a bit scary. However, what is even more terrifying is the kind of a job that I will be starting. It’s Google Associate Product Manager. Google describes this position like this:
The Associate Product Manager Program is an elite two-year rotational program, consisting of two one-year rotations, designed for top recent computer science graduates who are interested in exploring product development and leadership opportunities. This select group is given broad responsibilities, generous access to resources, visibility into Google’s executive team and many opportunities to grow . the organization. The program combines on-the-job experience with additional training, mentorship, and support from current associates and the rest of the product team
As an Associate Product Manager, you’ll work with engineers to define new features and grow our products based on your understanding of user needs. You’ll also conduct research on markets and our competitors, focus on strategies that impact the direction of future products and develop leadership experience in a variety of Google’s product areas. Technical, analytical and strategic planning skills are vital to performing successfully in this position.
Another popular way for Google to label this job is “an engineer that doesn’t code”. Let me repeat that for you: DOESN’T CODE. Now you know why it’s terrifying, no? After all, I spent past 5 years of my undergrad at the University of Waterloo and 2 years worth of internships learning how to code stuff, and now I’m gonna throw it all away? It sure does sound like it.
Many of you have asked me, why DID I take this job over many other offers such as graphics developer at Pixar and a game developer at Microsoft? Well, it was definitely a difficult decision. In fact, I sometimes look forward to July 12th and think: “Anton, what the hell are you doing?”. Like, what would I be do for 8 to 10 hours during the day, if I’m not developing things? I love to code, so why am I taking a job that doesn’t involve it?
Well, to answer all of these questions, we have to look back to 6 months ago. Back in September of 2009, I was starting my final internship of my undergrad career at Pixar Animation Studios down in Emeryville. A dream job for some, and maybe for me. At least that’s what I thought back then. At that point I was set on specializing in computer graphics and all I wanted to do is work on CG in movies.
I loved working at Pixar. I’ve met dozens of incredibly talented people, who very extremely passionate about what they do. I’ve made a number of good friends. However, there was obviously no guarantee that I will get a full-time offer from Pixar at the end of my internship. Therefore, to be on a safe side I decided to apply for some other jobs. Since, I was very interested in graphics, I applied to Microsoft Game Studios (MGS). Moreover, since I’ve previously interned at Google, I decided to apply there as well.
Google usually comes to the University of Waterloo campus to hire new grads. However, for some stupid reason I missed the deadline to apply for the on-campus interviews, so I had to apply online. First thing I applied for was the regular Software Engineer position (SE). After I submitted my application, the website asked me, if I wanted to apply for any other “new grad” positions. I looked through them, and figured that it’s not gonna hurt for me to apply for the Associate Product Manager (APM). I selected the job and pressed “Apply”. Just like that, I might have changed my life by one click of a mouse.
Two weeks later, I got a response from the Google hiring team. I was asked to have a phone interview. Interestingly enough, it was for the APM position and not the SE. Even though, at that point I was more interested in the SE position, I wasn’t gonna turn them down, so I went for it.
I’m not gonna describe the long-ass process I had to go through until I got the APM offer, since many people online have done it before. It was tedious, but quite life-changing. After all, I even interviewed with Marissa Mayer (Google VP of Products & User Experience). Meanwhile, I also interviewed at MGS for a job as graphics developer for the Forza Motosport team, which was very cool. In the end, I was offered the SE and APM position at Google, and the Pixar and Microsoft jobs. It was the point in my life, when I had to make a really hard choice. Should I abandon my passion in computer graphics, and take a hip job at Google that I know nothing about?
So, what eventually made up my mind was the advice that Marissa Mayer once gave to Jessica Lee, who eventually became a PM of one of the most successful Google products - Google Maps. Jess writes about it on her blog, but I’m gonna quote it here:
In my interview with Marissa, I confessed that I already had an offer as a software engineer with Intuit and wasn’t sure if being a product manager was what I wanted to do. She gave me some advice based on her own experiences. She told me to take the job that I thought would be more challenging and that would push my comfort level the most. Reflecting back on her own life, she said that all the best decisions she’d ever made were ones where she had chosen the harder, more personally challenging path.
I compared my 2 options - engineer at Intuit or product manager at Google. Engineering definitely felt more comfortable and familiar to me. […] Product management felt unfamiliar and uncomfortable and there seemed to be a high possibility I would suck at it. I wasn’t sure I had enough leadership skills to lead a team. […] Could I really hold my own in a press interview when I was terrified to do any public speaking or presenting at all? The answer to all of these questions seemed more likely to be no than yes.
I felt like I was in the same position as Jessica back 4 years ago. Therefore, Marissa’s advice definitely applied. So with the fear in my heart, I accepted the APM offer.
This fear is not gone yet. It probably won’t be until I start in July, or maybe until even later. However, certain thing do make me feel better about my decision. For instance, check out this article on News Week about the APMs. Meanwhile, I all I can do is wait for July is hope that my experience will be as great as Jessica’s.
Weightless white smoke was slowly escaping the decaying cigarette and drifting upwards. It seemed as if it was absolutely unreal and it would easily abandon this rapidly evolving earth and disappear in distant clouds. Gray ashes were piling up on a vividly dark ashtray and were only occasionally disturbed by a light breeze from an open window. Tiny, yet insatiable cigarette flame was slowly reaching the yellow paper of the filter. Soon enough, it as well started to die under the inevitable heat of the fiery monster… Another moment and the smoke was gone… it became history… and nothing could be changed…
They were a strange couple and everyone knew that . No one would ever try to guess how long they had been together and why… Her name was Kate. She worked as a journalist in a for local newspaper. In fact, it was her first job as she had just graduated from university. She was twenty three. Many people around her thought she was strange or even bizarre. Her obsession with academia and constant hunger for knowledge dated back to her first years as a student. Now it got replaced with absurd career goals, which became her highest priority. Work supplied her with a certain type of incomprehensible energy, which could not be understood by others. She was very different from other women of her age. Perhaps that is why she was with him. His name was Dima. She had no idea how old he was and for some mysterious reason she never wanted to ask. Perhaps it was not important… He was a one of the most popular DJ’s in town. He played Trance. Music was his job and his life. It lived with him, ruled him and fed him.
They were different. They had nothing in common but the fact that they lived together and they were together. It seemed like they were simply satisfied with each other . He did not want commitment; she did not have time for it. However, the fact that there was always a person who you could talk to or meaninglessly sleep with after another party was convenient for both of them. Most of their common friends were long gone and lost under the burdens of marriage, kids and family. Not them. They had never talked about marriage. They both thought they didn’t need it. Even if they did, they were too scared to admit it. No one around them knew if they loved each other, neither did them. Their mysterious coexistence was a riddle that no one cared to solve. They both had a goal in life that they tried to accomplish through suffering and pain. From the early childhood she wanted to work with people from all over the world. He had been obsessed with electronic music since the second grade, when he first saw a personal computer. One might say that their devotion to their careers was the only thing that made them a tiny bit similar.
The Night was his time – one of the specifics of his job. Tonight, just like always, he was sitting behind the wheel of his old Beetle – the car that he got from his dad, who once saved up a fortune and bought it. He was speeding down the busiest city avenues, which were slowly getting lit up by the mysterious yellow street lights and filled up by long lines of determined club crawlers. Everything around was becoming alive and moving. He loved this time. Street intersections and traffic lights were flying by in front of his eyes in the quick rhythm, which matched the bass of the blasting stereo. He had never listened to his own sets by
himself, and so now the car’s CD player was spinning the music of the famous hard trancer Bruno Fergani. Everything was quite usual for Dima, except for a strange fatigue that has been bothering him since the morning and making him sleepy.
Tonight Dima had a set at one of the city’s hotspots, a club called Starter, and that is where he was heading right now. When he drove by the main entrance, it was still quite early and only a couple of eager teenagers were hanging around the club’s front doors. A big flyer on the wall of the building read: “Only tonight, mega-trance party with special guest DJ Fake”. Yeah, Fake, that was his alias. That is how he was called by his friends, partners and fans. That is how he was called by everyone. Everyone, but her…
Dima walked inside the club, where he was immediately greeted by the general manager Gena also know among other sharks of the city club scene as Kecks:
— What’s up, Fake! So are you gonna set this place on fire tonight or what?
— Not much, Kecks. How is it going? The place is gonna be hot tonight. Who else is playing?
— Stas and Max. You are the main event, though. That’s why people are coming tonight. Other guys are just here to warm it up for you.
— Perfect. I’ve put a couple of people on the guest list. I hope that’s cool.
— No problem. By the way, when you are done tonight, don’t take off right away as usual. There is someone who wants to talk to you.
— Ok. Who?
— You’ll see later…
— Fine. I’ve gotta go get ready.
— Good luck, Fake.
Dima has never admired Kecks, but occasionally he had to put his feelings on hold as Kecks was an important man in this business. After all, he decided whether Fake could play in the club or not. Moreover, sometimes Kecks actually managed to be a nice guy. However, that happened quite rarely and only with Dima, as he was quite famous in town.
Dima went upstairs to a small room, where he kept all of this equipment and his computer, on which most of his sets were composed. Fake plunged into his favorite chair and started thinking. He was trying to figure out who would want to have a meeting with him in the middle of the night in a club. This question had been torturing his brain matter for a couple of minutes, but soon got phased out by another one…
She acted strange today. She didn’t go to work like she always did, even when she was sick. He had asked her in the morning why she was home, but she had just turned her eyes away and said that she was a little out of it. It worried him then and now his heart was beating twice as fast again, as if it wanted to jump out of his chest. Everything seems very weird. He had never worried about her before as he had always thought of her as a strong woman who always managed to deal with her problems on her own.
Suddenly, it all stopped. It felt like his heart had just ceased to exist or went into cardiac arrest in the hands of a surgeon. The same fatigue that kept bothering Dima in the car came back and started slowly putting him to sleep. Within five minutes he had passed out, strangely curled up in his comfortable chair…
— Are you absolutely insane? — Kecks’ loud voice interrupted Dima’s midnight nap. — You need to set up, man, and you are sleeping.
Dima didn’t want to answer. He slowly got up from his chair, walked passed the door and slammed it right in front of Kecks. Today was not his best day, but he still needed to play. Though, he would never say No to music anyway, as it cured him from all diseases.
People, people, people – they spread everywhere like an enormous colony of fearless ants looking for their prey. They filled up all available space like water in a bottle. All of their five senses are climaxing as never before. Their sweaty bodies are seizing in the sharp variations of the beat. They are blinded by numerous colorful lights speeding across endless ceilings. Their eardrums are pushed to the limit by unbearable explosions of Trance. Their lips are frantically looking for a significant other, recognizing the sweet flavor of passion and craze. Their entire existence becomes unstable as it desperately struggles to level itself with Music, which materializes into a mystifying substance and gets absorbed by air, walls, people and everything else around. Here rules his highness Rhythm, but it rules under Fake’s control. Set after set, beat after beat – all of it is his doing. He is swallowed by the four dimensional space. He feels nothing, but music, he becomes an irreplaceable part of it. Everything is forgotten, all worries and troubles, all fears and disappointments, all love and life. There is nothing here now except a thousand of dancers, who in this very moment think of Fake as God. Think of him as a creator of their destines, that Supreme Being that could do anything to them, could cease their existence and torture them to death by the terrifying serenity of quietness…
…Fake loved people. He loved them, because they have strength. The strength that one else has… Alone in the dark they are vulnerable and week, but when they come together, they shine the light into the darkness and become invincible. They start to emit energy that surrounds you. It makes you leave this senseless life, this rapidly rotating earth, and flee to the endless infinity of space, where you meet happiness, love and her majesty Music…
… Fake had never liked to perform all night. Around 5 am, he gave up his warmed-up turntables to Stas and Max, who we in fact identical twins as, thus, earned an alias Dj Twinz. Dima quickly left the DJ booth, greeted the brothers, and started quickly walking towards his room. Suddenly he heard Kecks’ voice behind him:
— Hey Fake. Don’t forget, I need you stop by my office to talk to some people.
— Yes, Kecks. I’ll be right there, — said Dima and kept walking without even turning around.
His heartbeat was usually fast again. He entered his room, grabbed his car keys and his bag and quickly went back downstairs. A strange sense of anxiety rushed through his mind. Something in chest was nervously shifting around, just like back in his childhood days, when he hesitated over calling a new girl that he met at the movies. He stopped for a second in front of the door to Kecks’ office and then walked in. Kecks was sitting behind his desk and talking to a talk, skinny man. Fake immediately thought that the man looked somewhat odd and seemed to be a foreigner to this city. Dima was just about to close the door, when the tall, skinny man asked:
— Are you – Fake?
— Yes. How may I help you?
— My name is Alex. Alexander Strancev, if you wish.
— Nice to meet you. So how may I help you?
— You are good at what you do.
— So I heard, — Dima started getting annoyed by this stranger, who kept ignoring the only question that mattered to Fake.
— You are quite famous in this city and elsewhere.
— So I heard, but what do you mean by ‘elsewhere’?
— I’m from Moscow.
— Ok, and I’m not from Moscow. What’s your point?
— Look Mr. Fake, don’t get angry. I guess, I should stop beating around the bush.
— Look Mr. Strancev, you are quite right about that. So what brings you here? — Fake was seriously considering walking out of this conversation.
— I’m a manager at the trance-club “Speaker” in Moscow. Have you heard about it?
— Yes and not once. It’s proven to be quite popular.
— Indeed and our owner wants to see you play there on a regular basis.
— You are kidding? — nervously said Fake desperately trying to control his mixed emotions. A part of him always wished for an opportunity like this. Another never expected it.
— No, Mr. Fake. I’m not kidding. In fact, I’m quite serious. If you wish to accept our invitation, you have to pardon us for its conditions. We have to leave for Moscow at 7 am. That means you have about an hour and a half to get ready. You don’t need to take anything extra, everything will be provided to you. Any questions?
— …. — Dima did not know what to say.
— Well. It is up you. Remember – 7 am. If you are there, then you are there, — Strancev got up from his chair and walked towards the door, — Don’t worry about Kecks. Everything has been worked out.
Fake sat down on the couch and could not move a muscle. It seemed as if his dream was coming true. He quickly imagined the moments of future – new clubs, new music, new sets and people, people and people. Everything now seemed so real and so close. There was only one thing, that slowed down his train of thought. Her… The one that has always been beside him. The one that always helped him with an advice and provided a shoulder to lean on in a hard situation. What was he supposed to tell her…. This last thought instantly killed all the previous ones and sent Fake back to earth….
He quickly jumped up from the couch, picked up his car keys that he dropped earlier, and rushed outside of the club. He had never driven this fast in life. He couldn’t quite comprehend himself why he was in such a hurry. He was speeding across the city without noticing any traffic lights and intersections, early hour pedestrians and cars. It seemed as if everything around him had stopped in daze, anxiously trying to figure out what is on the mind of this handsome man with a strangely sad face.
Finally, the old red beetle pulled up to a 5-story apartment building and rapidly stopped with a squeak of the breaks. Dima quickly got out of the car and ran upstairs to the third floor.
The front door opened with an unfamiliar creaking noise. Dima walked in the living room and immediately noticed a strong cigarette smell. He couldn’t have mistaken it with anything else. He missed that smell for a quite a while, since he quit smoking a couple of years ago. He couldn’t wait to walk into the bedroom and tell her everything that happened earlier. He wanted her to help him build the next stage of his life… He knew that she was still sleeping, since today he returned home unusually early. Dima opened the bedroom door and he saw Her…
… he saw Her lying down on the chest of an unknown man. His keys slipped out of his hand and loudly fell on the wooden floor. He leaned over to pick them up, but when he looked back up he saw her eyes that were innocently staring back at his face. He didn’t say anything, neither did she. Dima left the bedroom and closed the door behind him. Passing by through the kitchen he noticed a pack of her cigarettes on top of the refrigerator. He grabbed one and lit it using the gas stove near by. After taking a couple of drags, he threw it in the ashtray. There was no time to smoke, a long road awaited him. It was 20 minutes to 7.
Weightless white smoke was slowly escaping the decaying cigarette and drifting upwards. Gray ashes were piling up on a vividly dark ashtray and were only occasionally disturbed by a light breeze from an open window. Tiny, yet insatiable cigarette flame was slowly reaching the yellow paper of the filter. Soon enough, it as well started to die under the inevitable heat of the fiery monster… Another moment and the smoke was gone… it became history… and nothing could be changed…
Written – August 2003
Translated from Russian – December 2007
If you would like to read the original Russian version, email me.
He was standing there and viciously striking the door in front of him with his feet. Multiple seizures were paralyzing his body. His eyes were nervously twitching. He felt as if everything around him had seized to exist. He was simply standing there and landing deadly powerful strikes onto the wooden door. He had already forgotten the reason why he was doing it, but his brain was stubbornly forcing him to continue due to an absence of better options. Another wave of seizures pierced his flesh like a samurai sword, when a quiet and senile voice from the behind the door announced “There is no Snake living here!”. However, the only part of that phrase that his confused brain was able to comprehend was the word “Snake”. Finally realizing that there was someone behind the massive wooden obstacle in front of him, he pulled together the last bits of strength remaining in this exhausted body and started pounding on the door even harder. Snake… Snake… Snake - that tall skinny man that turned him into something one would hardly call a human being. Snake - the man that made him a creature with no meaning or goal of existence, but only with a raw animal instinct to get another hit…
Suddenly the waves of unbearable seizures were overwhelmed by a tsunami of thoughts that started smashing into his brain. The grey matter inside his head helplessly tried to resist, but eventually gave in and Max remember that goddamned Monday, January 15th…
… Max was in a bad mood that day. There was barely any snow on the streets, but the ice cold wind was reaching even the most protected regions of his body. Max as usual had nothing to do and he decided to wander around in the streets. He walked, looking down at his feet. Everything around him seemed senseless. It had been a while since his life lost its meaning and Max lost his understanding of it. Max was a typical difficult teenager, though his teenage years were rapidly escaping away. He was living in a small one bedroom apartment that he received as a part of his grandfather’s will. He worked sporadically and only if someone else offered him a job. After all, he lived close by a commercial warehouse that once or twice a week hired contractors to move various merchandise. There was nothing interesting going on in Max’s life. He could not even recall the last time he had a girlfriend or the last time he went out with friends. Prostitutes were a common occurrence and often the happiest moments of his miserable existence. His one and only friend was his Sony TV that Max also got from his grandfather after his death. Max did not know what he was living for, and he often thought of life as a worthless habit similar to his routine of meaninglessly walking around cold winder streets.
He walked, from time to time shivering from the cold. He always looked down at his feet, because he was too disgusted to look around. While he walked he always thought of the same thing, that this life will eventually tire him out…
— Max! — someone suddenly called his name. He looked up and saw his former classmate Alex, who was standing a couple of meters in front of him beside a skinny and strangely tall man that Max did not recognize. — What’s new my old friend? — Alex continued talking, - I haven’t seen you in a while.
— Nothing much, just taking a walk…
— That sounds way too boring buddy. How about you join us to do something more exciting, — said Alex pulling a bottle of vodka out of his coat pocket and smiling.
Max remembered that even back in the school days Alex was into drinking, which constantly caused him problems with the teachers and the principle. However, this time Alex’s offer seemed harmless and quite tempting. While Max’s inner voice was saying “vodka kills our individuality”, he was not in the mood for listening to it:
— So, what’s the occasion?
— An occasion will always come up. The only thing we need is booze and we’ve got that, — answered Alex with the wisdom of a professional alcoholic, while staring at Max with his dark, almost black eyes, as if trying to hypnotize him.
The other man also stared at Max for a moment without saying anything. Then he took a deep drag from an almost finished cigarette that he was holding and looked away.
— Alright, let’s go, — gave in Max, trying to avoid eye contact with Alex, who was for some reason scaring him.
Shortly Max found himself in an old dark apartment, where Alex said he lived his entire life. The ceilings, which became grey over the years due to cold and damp, were ominously looming over Max’s head. The walls no longer had any wallpaper and were mostly covered with dirty yellowed newspapers “Soviet Russia”. It seemed one wrong move or excessively loud footsteps would cause the entire house to collapse. Alex walked to the other side of the room, which had the only small window. That part of the apartment was the cleanest, and that is where Max saw a small dilapidated table surrounded by exactly three wooden chairs, which he thought of as a strange coincidence. Max and “the quite guy” sat down on two of the chairs. Moments later, the table was no longer empty. Two bottles of vodka were now joined by some simple salad, bread and a can of pickles. Alex filled up three shot glasses practically to the rim and stood up to say a toast. “Well, to you Max… and to new friends,” — said Alex and winked at “the quite guy”. For a second there Max opened his mouth wanting to say that he did not even know the name of the new drinking companion, but he chose not to interfere and obediently took the shot. Fifty grams of the clear liquid instantly ended up in his stomach. Momentarily, Max felt a warmth that quickly spread through his entire body. A couple of more shots and Max’s mood started going up. His feeling of complete loneliness and uselessness vanished and the ceiling no longer seemed so dark and menacing…
When Max decided to interrupt the drinking marathon and reached for the plate with the salad, Alex said a long-awaited, but somewhat unexpected phrase: “Snake … Max, Max … Snake”. Max did not grasp at first that he was finally introduced to “the quiet guy”. He looked with his lost eyes at Alex, then on Snake, swallowed a piece of bread stuck in his throat, and was about to say something, when a large hand of “the quite guy” appeared from the dark in front of him. Snake did not say a word, but gave Max another mysterious look similar to the one on the street a couple of hours earlier. Max finally snapped out of it and silently shook Snake’s hand.
After drinking another round of shots, Max and Alex engaged in a more easy going conversation. Max realized how glad he was to have someone to talk to. They talked about everything: about school and the old days, about girls and their bitchy nature, about life and its insignificance, about vodka and its “benefits”, about love and its absence. Max thought they touched on every matter there is to discuss. It was very easy to talk to Alex except for one small thing that kept bothering Max. During the entire conversation Snake remained completely silent and motionless, only seldom turning his head and looking out of the dirty barely see-through window. Vodka was running out, and it seemed that the good conversation was about to end as well. Max thought he would do anything in his power to prevent that…
— Max, what do you thing is the best feeling in the world? — asked Alex after coming back from the bathroom.
— I don’t know. Probably sex? People do say that sex with a loved one is the something extraordinary.
— Maybe, but you said two seconds earlier that real love doesn’t exist.
— Well, then I definitely don’t know, — said Max.
He suddenly felt illiterate and confused. Alex, who Max knew for many years and often despised for his addiction to liquor, now seemed omniscient and venerating. In Max’s eyes, Alex appeared as a genius that would know an answer to any question.
— Have you ever tried blow?
The unexpected question interrupted Max’s thinking. It caught him by surprise. Max remembered how long time ago he swore to his father that he would never touch a cigarette. He also recalled how in fourth grade, after his father’s death from lung cancer, a pack of Northstars became a common resident of his backpack. He thought of high school days, his promise to himself that hard liquor will always remain off limits and how that promise was broken by him years later. And now, Alex’s offer appeared wrong and sinful, but Max could not find any willpower to say no.
— Don’t you want to experience the best feeling in the world? — Seemingly rhetoric question brought Max back from his little fantasy world back to reality.
Max realized the Alex was not really waiting for an answer, or in other words, he already knew it. Max’s inner voice was screaming inside his head in disapproval, but he chose to ignore it. Seconds later, Snake’s massive tall body emerged from the dark part of the room. Max rolled up his sleeve in anticipation of something magical… In Snake’s hands he saw a small syringe filled with mysterious brownish liquid. The needle entered a vein easily and painlessly… Max looked at Snake noticing a leer in his cold eyes.
Sensations came out of nowhere. A warm feeling relaxation made Max’s body weak. He felt as if he had been launched in space. Gravity ceased to exist and there was nothing out there to push him back down to Earth. Everything around him became calm and quiet. He could no longer hear the street noise, Snake’s heavy breathing or Alex’s merry ignorant laughter. Life seemed simple, enchanting and full of meaning. All problems, pains and frustrations started to disappear. Max was slowly falling down into an abyss of unconsciousness and appeasement…
He woke up hours later from feeling extremely cold. At first he could barely move his limbs. He looked around and realized that all this time he had been laying in a pile of garbage outside Alex’s apartment building. Half an hour later he was finally able to pull himself up and start limping back to his house. He walked down the quiet and bleak winter streets of his city dragging his feet in complete exhaustion. His mind transitioned from a state of tranquility, satisfaction and unforgettable bliss to a usual feeling of loneliness, self-doubt and irrelevance. As Max walked this feeling was not going away, but only God knew that this was just a beginning…
…A new thousand of small needles pierced his joints. He felt as if he was being broken in half. Max pushed away from the door, made a couple of awkward steps back and slipped. His almost weightless body flew down a dozen of stairs. His head, like small basketball, hit the concrete floor. Blood sprayed from his face… Conciseness started slowly leaving Max. His strained joints finally relaxed and his hands that were just moments earlier viciously pounding on the wooden door now calmly rested on the cold staircase.
Pasha locked the door of his small one-bedroom apartment located on the fourth floor of the building and started walking down. When he reached the second floor, he saw a skinny young man laying with his face down in a puddle of blood. Pasha thought that the stranger was dressed somewhat inappropriate. Ripped, dirty sweater and thin track pants seemed unsuitable for the middle of February weather. Young man’s skin also looked strangely pale or even blueish. Pasha did not want trouble, so he quickly rang the bells of the second floor apartments and ran out of the building. He was in a bad mood that day. There was barely any snow on the streets, but the ice cold wind was reaching even the most protected regions of his body. Pasha as usual had nothing to do and he decided to wander around in the streets….
Written: 18th of July, 2003,
Translated from Russian: 17th of August, 2008
If you would like to read the original Russian version, email me.