How IFTTT, Mandrill, and Twilio is helping me find an apartment in SF

Note 7/8/2013: Craigslist makes it impossible (please let me know if you were able to get around it) to allow Mechanize to retrieve HTML from Heroku’s server. However, it works when I send a request from my local server. If anyone knows why it would make a difference, please leave a comment!

———————

Anyone familiar with the SF apartment market understands the tremendous pain and frustrations in finding an available lease at a reasonable price. We have all heard and shared war stories of the hourly refreshing of Craigslist and bringing all of your bank statements and necessary paperwork to the open house just to win a chance to secure a lease for an apartment. In true SF-technology fashion, I decided to minimize response time to a new choice apartment listings on Craigslist by wiring together IFTTT, Mandrill, and Twilio to auto respond with an open email and a click-to-call to my phone number and the number in the listing to schedule an appointment.

IFTTT

IFTTT (‘If this, then that’) allows you to create ‘recipes’ using the simple conditional structure ‘If this, then that’ and various ‘ingredients‘ (i.e. craigslist queries, instagram posts, buzzfeed articles, tweets). It is powerful due to its simplicity and flexibility; it can enable anyone to put the web to work without any programming knowledge.

I used IFTTT to send an email to my email address when there is a new Craigslist query that matches the me and my roommates’ apartment listing preferences. This way, any new Craigslist listing that fits the query that I have set will be sent directly to my email inbox.

Mandrill

I setup a subdomain (I added ‘to’ as the MX record and have it setup on my Mandrill account) responsible to receiving email messages and use Mandrill to parse the inbound email (similar to how I built the A-List inbound parser). In the below code sample, it is important to note that you must first return a ‘200’ to let Mandrill know that it is the right address to send the POST request of the inbound email.

Once the email is successfully received and parsed, I use the Mechanize library to navigate to the Craigslist listing (line 31). Then, a few regex commands to find and scrape an email address (line 34) and a phone number (line 35). With the email address, I use ActionMailer (line 46) to send out a templatized email, cc’ing my roommates, asking to schedule an appointment to check out the apartment.

Twilio

If I was successfully able to scrape a phone number from the Craigslist listing, then Twilio will automatically make two outbound phone calls (one to my mobile phone and one to the number on the listing). Throughout the day, I will be able to pick up my phone at my leisure and speak with somebody (if the call connects on the other end) to schedule an appointment.

Note that the routing must also be setup in your Rails app (the sample code is not shown here).

The first step is that we are sending a request to Twilio to initiate a phone call to my phone number (agent_number or ‘555-555-5555’ in the example below) with dynamic TwiML (Twilio’s XML-like proprietary markup language).

The first dynamic TwiML (line 38 above and ‘clicktocallcallscreen.xml.builder’ below) tells Twilio to listen, upon a call connecting with my phone (agent_number or ‘555-555-5555’), for a keypad response indicating that I want to be connected with the Craigslist lister’s phone number. If I hit a key, then proceed to dial the other number and connect us. Note that I am  providing yet another dynamic action URL (‘@post_to’) that will populate the final TwiML with the correct phone numbers that will be connected in the final call.

It is in line 46 in inbox_controller.rb where the clicktocall.xml.builder (below) is called dynamically (with ‘@calling_to’ and ‘@caller_id’ both being passed to the TwiML).

The result is Twilio automatically connecting me with the phone number listed on the Craigslist post. This is a derivation of a very popular Twilio use ‘Click-to-call’ that many lead management and sales teams use to better engage with their customers.

Conclusion

Now I don’t have to be on Craigslist 24/7 to find a suitable apartment listing; I can just wait for my web server to send out emails or phone calls to schedule appointments with Craigslist posts that fit our preferences. Now if there were only a way to automate the showing up, preparing the paper work, competing against other bidders, and the remainder of the apartment leasing process.

Andy

Advertisements
Tagged , , , , , , , , , ,

Phantachat: node.js, websockets, and ephemeral conversation

In person conversation is fleeting. Words hang in the air for a brief moment then vanish suddenly. All participating members have to be present and aware in order to keep up with the conversation.

Conversation online has traditionally been very asynchronous. Instant message and email both log your messages with a timestamp, allowing you to maintain a history conversations for you to browse afterwards. You can message your friend knowing that she probably won’t respond immediately.

Phantachat is an online chat web app, but tries to mimic chat in person. Your messages linger for no longer than a few seconds, forcing you to have that page open on your screen to be able to follow the conversation. Messages are also sent in immediate real time, without having you to hit enter, and there is no backspace.

Websockets

Websocket is a web technology providing simultaneous two-way communications channels over a single TCP connection. This allows for immediate, seamless, synchronous data passing between the client and the server. We decided that in order to get the chat to behave as real time as possible, that we would choose to use Websockets (we went with Socket.io with Node.js/Express.js).

Unfortunately, there are very few free web/application hosting services out there that support websockets. Heroku doesn’t support web sockets, but you can configure your application to instead use long polling, which allows the client to send HTTP requests to the server at regular intervals and immediately receives a response.

Some other hosting platforms out there (www.appfog.com, http://www.dotcloud.com, http://www.nodejitsu.com) may support web sockets, but unfortunately they don’t provide a free tier. Our next plans are to spin up an instance on AWS so we can deploy a solution that uses websockets instead of long polling.

Dynamic chat rooms

In order to generate a unique chatroom, we created added some logic to the routing: if someone goes to the root, then generate a new hash (I used the hashids package for generating codes) and redirect to the new route with the hash at the end and start a new socket.io namespace; if someone goes to a hash that exists, then throw that person into the same socket.io namespace; and if someone goes to a route that is a hash that doesn’t exist, the server will return an error page.

With socket.io, there are two main ways of creating ‘chatrooms’: using ‘rooms’ or using ‘namespacing’. We decided to use namespacing, because namespaces can be connected to by the client (but only if it already exists on the server). With rooms, they can only be joined on the server side.

When a new namespace is created (when a new hash is generated on the server), the server creates a new namespace, then passes the hash to the client to allow the client to join that specific namespace.

Next Steps

This is still a very simple app. Next steps could be sharing other types of media that will also vanish within a few seconds (images, for instance). Or to allow more than two people to join each chat room (right now, it is only one on one).

Suggestions, feedback, and new ideas are always welcome!

Github: https://github.com/lambtron/phantachat

Andy

Tagged , , , , , , , , , ,

Welcome to the A-list

Note (5/31/2013): Recently, this app was featured in Lifehacker. Kindly note that this app is still in beta and there are probably many bugs that have yet to surface themselves (one such obvious one is checking in multiple passengers, as I wrote this for me and my buddies and didn’t have children to buy tickets and for whom to check-in). If you do run into any issues or have any feedback, feel free to tweet at me @andyjiang or comment on this blog post and I will make a note of it.

———————————

Recently, a conversation over dinner about personal life hacks without the direct intention of blatant commercialism spawned a neat idea that scratches an itch that us west coast jet setters face occasionally—not only just checking into Southwest flights, but also checking into those flights as early as possible to attain a highly coveted ‘A-list’ boarding group.

There have been too many times when the 24 hour period prior to the flight occurs when I’m away from my computer. This web application, however, will check into your Southwest flight for you.

Instead of going to a website where you input the information necessary for you to check in (name and confirmation number), you now can you just forward your Southwest flight confirmation email (the one with the subject that says ‘Your trip is right around the corner!’) to sw@to.andyjiang.com. Then, when the 24 hour check in window opens up, the web application will check in to the flight for you.

How does the app work?

The Mandrill (hosted by Mailchimp) server receives an inbound email and sends a POST request to the web server. The web server then extracts the text from the body of the email from the POST request and runs several regular expressions on it to get the following pieces of information: first name, last name, confirmation number, your email address, the URL it needs to go to in order to check in for you. It saves this data into a Mongo database (MongoHQ add-on with Heroku).

An hourly task runs on the server (Heroku Scheduler) to look at all of the records in the mongo database; for each record, if it is time to check in, the web server  uses the Mechanize library to get and parse the HTML of the confirmation web site, fill in the required information, and check in for you. Then it takes your boarding group and boarding position and sends you a confirmation email.

Tools I used

Since debugging is 90% of any project, it is important to learn to break the project into small, achievable goals, to quickly isolate problems and to iterate through working solutions. Below is a list of some of the tools I used to test quickly and build out the application.

RubularRegular expressions were critical to parsing the body of the inbound email. This nifty website allows you to test all of your regexp patterns against Strings of your choice. Combined with IRB and .class?, you can very quickly determine the right commands to extract the information needed from the text.

LocaltunnelLocaltunnel, hosted by Twilio, allows you to expose an endpoint on your local server to receive HTTP requests from other servers. This is important when you are using a service that will send you webhooks (Twilio, Mandrill inbound emails, etc.), so you don’t have to push your changes to a production server in order to test whether your app correctly processes the POST request to your endpoint. With Localtunnel, you just follow the instructions on the site, copy and paste the localtunnel URL/endpoint generated (tied to your local server), and provide it to the web service so it knows the address to send its request, thereby allowing you to test locally.

View Elements in Developer Tools: In Chrome (Firefox and Safari, also), you can view the HTML document of each page you are on by going to View > Developer > Developer Tools (or Option + Command + I). This is important when you are using Mechanize, which allows you to parse HTML given the HTML element, id, class, name, etc. I would test code by using IRB, initialize a Mechanize object, open up the browser, and navigate the web from the terminal.

Conclusion

Feedback is always welcome. If you think you are going to forget to use this next time you fly Southwest, go into your Gmail account right now and set up an instant email forwarding. Go to your Gmail’s Settings > Forwarding and POP/IMAP > Forwarding, then select Add a Forwarding Address. Type in “sw@to.andyjiang.com” and send the verification email that will contain the confirmation code.

Forwarding and POP/IMAP > Forwarding to set up a new email address to auto forward your Southwest itinerary emails" class /> Go to your Gmail's Settings > Forwarding and POP/IMAP > Forwarding to set up a new email address to auto forward your Southwest itinerary emails.

Forwarding and POP/IMAP > Forwarding to set up a new email address to auto forward your Southwest itinerary emails” class /> Go to your Gmail’s Settings > Forwarding and POP/IMAP > Forwarding to set up a new email address to auto forward your Southwest itinerary emails.

You will receive shortly an email that will provide you with the confirmation code that you can enter in the above field. The return email will also include a link that you can just click on to verify and confirm sw@to.andyjiang.com as the new forwarded email address.

The generated email with your confirmation code to verify the auto forwarding email address

The generated email with your confirmation code to verify the auto forwarding email address

Once you confirmed the email address to allow you to auto forward to it, then you will have to set up the filter for the right emails to be auto forwarded. Click on the link in the tip ‘You can also forward only some of your mail by creating a filter!’ and then either copy and paste “from:southwest subject:(Your trip is around the corner)” into your Gmail search bar or use the template in your ‘Show Search Options’ drop down below.

Setting up autoforward for any Southwest itinerary emails to sw@to.andyjiang.com

Setting up autoforward for any Southwest itinerary emails to sw@to.andyjiang.com

Creating the filter to auto forward specific emails to sw@to.andyjiang.com

Creating the filter to auto forward specific emails to sw@to.andyjiang.com

 

 

 

 

 

 

 

 

 

 

 

 

That should set it up so that any future email from Southwest with that particular subject will be automatically forwarded to my web app, which should hopefully check you in so you won’t have to sit in the back between the two fat, sweaty guys.

I will blog more about the actual code in future posts.

If you have any questions, please let me know!

Andy

[EDIT]: Please note that this is still not 100% battle tested, but it will improve over time the more emails it receives! Thanks, everyone!

Tagged , , , , ,

TextMe: A bookmarklet that lets you send highlighted text in your browser to your phone

A few weeks ago, I built ‘TextMe‘, a derpy little bookmarklet that lets you send highlighted text in your browser to your phone as an SMS. My friend Jen actually inspired this app and I realized how useful it would be when I’m on my way out and don’t want to retype the address of the restaurant into my phone. I also felt that this would be a good project to improve my javascript (I’ve never written a bookmarklet), as well as learn to work around Cross-Origin Resource Sharing.

The technology stack for this project is HTML/css/javascript/jQuery, Rails, Ruby, Heroku.

Using TextMe!

TextMe! is straightforward to use: type in your phone number in the field and generate a link that is then dragged to your toolbar. Whenever you want to text yourself something, just highlight it in the browser and click the bookmarklet.

Things I’ve learned

1. Bookmarklet Javascript: The bookmarklet, essentially, is a function that is executed whenever you click on it. In this case, the function did the following things: attach a script to the HTML document body, execute that appended script, import two functions (“getSelText” that will capture the highlighted text and “sendSMS” that will send a POST request to my server, thus sending a request to Twilio to deliver the SMS), and then calling “sendSMS” that will initiate the SMS delivery.

Here is the code for the TextMe! landing page ( www.andyjiang.com/textme ). This essentially shows how I took the user’s phone number, generated a script (with the particular phone number) that will make the sendSMS call to the server, and put that into an anchor tag that the user can drag to the toolbar. Line 17 is the javascript function that ends up in the bookmarklet that is dragged to the toolbar:

When you click on the bookmarklet after it is dragged on your toolbar, the function appends some javascript to the HTML document and imports the below two functions. Then, once everything is imported successfully, sendSMS is called with the phone number passed as an argument. The function sendSMS will get the selected text and send a request to the server (passing the recipient’s phone number and the body of the SMS, which is the highlighted text) to then ultimately send the SMS.

2. Javascript without jQuery: Because this is a bookmarklet, the intention was to keep it as lightweight with minimal dependencies. As such, it made sense (and was a great challenge) to write all of the bookmarklet javascript without jQuery to help append scripts and traverse the document object model. Note the substantial amount of jQuery used in the first code sample.

3. Cross-Origin Resource Sharing (CORS): In computing, an important security concept for browser-side programming was what is known as ‘same origin’ policy. This policy allows scripts running on the same ‘origin’ (domain, hostname, web server) to access each other’s methods, properties, and attributes with no specific restrictions. However, this policy prevents scripts on one domain to access the methods, properties, and attributes of another domain (imagine if you could write some javascript on my hostname that can call methods on another web server—there are obvious security implications and risks involved).

In some instances, it is necessary to pass data from the client side of one hostname to the server of another domain, as is in the case of this bookmarklet. TextMe! attaches and runs a script on any website on the Internet, which takes the highlighted text and POSTs that data to my humble little WEBricks Heroku-hosted web server. In these cases, CORS is one modern way of allowing for these interactions to happen.

CORS defines a specific way to allow for cross-domain requests to occur. The browser making the cross-domain request to the server has to pass an ‘Origin HTTP header’, indicating its domain. Then, the web server responds with an ‘Access-Control-Allow-Origin’ header with a value denoting which origin sites are allowed.

Please see the example from my server side Ruby code below. Line 33 an onward shows the header response with ‘Access-Control-Allow-Origin: *’, meaning to allow every cross-domain request.

Note that I didn’t include any phone number validation, which should probably be included to some extent.

Conclusion

For a quick project, TextMe! certainly challenged me in new areas and helped me learn as a developer. Understanding how bookmarklets worked, writing jQuery-free javascript, and getting a better grasp of Cross-Origin Resource Sharing proved to be achievable, yet challenging goals.

Features to add in next version:
– easier to drag the bookmarklet to the toolbar
– form validation for the phone number!

So try it out and let me know what you think!

Andy

Thanks to Jen for the original idea, Yuning for proofreading a draft of this in 30 seconds, as well as Mike and Song who helped out with various engineering aspects of the project.

Tagged , , , ,

Business isn’t primarily a financial institution

“Business isn’t primarily a financial institution. It’s a creative institution. Like painting and sculpting, business can be a venue for personal expression and artistry, at its heart more like a canvas than a spreadsheet. Why? Because business is about change. Nothing stands still. Markets change, products evolve, competitors move into the neighborhood, employees come and go. There’s always the “son of Lenny” to threaten all you hold dear.

Business is one of the last remaining social institutions to help us manage and cope with change. The Church is in decline in the developed world, ceding leadership to a materialism of unprecedented proportions. City Hall is subserviant to the economic interest of its constituencies. That leaves business. Business, however, has a tendency to become tainted with the greed and aggressiveness that at its best it channels into productivity. Left to its single-minded pseudo-Darwinian devices, it may never deliver the social benefits that the other fading institutions once promised. But, rather than give up on business, I look to it as a way, indirectly, of improving things for many, not just a lucky few. I accept its limitations and look for opportunities to use it positively.”

Randy Komisar, “The Monk and the Riddle”, 2001

Tagged , ,

Managing your digital subscriptions (RSS Feeds)

Like any netizen with an interest in remaining culturally aware and quasi-relevant among my peers, I consume a lot of content. Not just articles on Hacker News or WSJ, but also various blogs, tumblrs, Facebook statuses, Instagram photos, and tweets. In addition, I am normally on the go, waiting in lines, or like to browse content while under my comforter in bed. What is the best solution to managing all of these subscriptions across various platforms (laptop, mobile, and tablet)?

 

Laptop / Desktop

I’ve been an avid user of Google Reader for some time because I can organize my subscriptions into various folders. Moreover, I can easily email content directly from the web interface to my friends who may find it interesting.

Another reason to use Google Reader is that your account can be linked to mobile subscription reader apps such as Pulse and Flipboard. This ultimately provides cross-platform managability for your subscriptions.

Plus, you can create “bundles” (collection of individual subscriptions) and share them with your friends. See my Angel/VC Blogs bundle here.

Screen_shot_2012-02-12_at_1

Google Reader web interface

 

Mobile / Tablet

The popular portable browsing apps include Pulse and Flipboard (both free and allows for social media integration). Before, I would add RSS feeds directly from the apps themselves, but that meant any change would require a separate, manual, and parallel change in Google Reader.

Pulse

Photo_4Photo_5Photo_6

Pulse, unfortunately, does require some parallel managing. However, it is marginally more convenient than going through their interface to find the RSS feeds.

All you have to do is add your Google Reader account, which then includes all of the feeds organized à la web interface. From here, you can select the individual feeds to populate your Pulse.

Flipboard

Photo_1Photo_2Photo_3Photo

Flipboard is nice in that it does not require any parallel managing. Similar to Pulse, just add your Google Reader account, then add the folders from Google Reader. Anytime you add or remove an individual feed from your folders on Google Reader, the change will be automatically reflected on your Flipboard.

 

Single location for subscription management

With this setup, I only have to manage my subscriptions with Google Reader. The only downside is that if I want to dynamically add or remove a subscription, I would have to go through Google Reader (of which the web app on the mobile phone is a bit clunky).

 

How do you manage your subscriptions? Do you have a better or a more preferable method? Any recommended blogs that I may be interested in? Do you only look at pictures of cats?

Comments and thoughts are appreciated!

 

Andy

 

Follow me on twitter at @andyjiang.

Tagged , ,

Description of Common Business School Classes

Pretty accurate description of Business School classes according to Jacob (via www.flailfast.com).

Andy

—–

Microeconomics: Taught by a professor supremely confident in their understanding of the world. Typically proven wrong every 10 years, but never in the classroom.

Macroeconomics: Taught by a professor supremely unsure in their understanding of the world. Typically proven wrong every 10 minutes, usually in the classroom.

Accounting: Criminally boring but universally regarded as important. Appeals to the perfectionist who demands compliance in their business dealings. Or the maverick who exploits accounting’s mile-wide holes. Both will likely be indicted in some sort of accounting fraud in the future, thanks to Sarbanes-Oxley, making the entire idea of becoming an accounting expert a lose-lose proposition.

Financial Markets: Where Microeconomics and Macroeconomics are distilled into supposedly practical “real-world knowledge.” A key example of the course’s pragmatism is the “Efficient Market Hypothesis,” an idea most elegantly proven wrong by the fact that a professor is paid $200,000 a year to teach it (a gross market inefficiency).

Human Resources: In this class you’ll learn how to dehumanize people as resources through the use of rewards and punishments. Outside of Financial Markets, the most efficient way to lose your soul.

Organizational Behavior: Ostensibly the study of advanced psychological techniques to bend large groups to your will, you wind up spending most of your time playing with legos, blocks, and fingerpaint to teach “team building” amongst adults. Colloquially called “Kindergarten Pro.” Strangely one of the most accurate representations of team building in modern business.

Operations: You learn how things are built but never how to build anything. You’ll discover concepts like “bottlenecks” and “critical paths” and spend weeks on “Six-Sigma Operations,” an idea popularized by Japanese automakers who were really, really consistent, by some arbitrary statistical value connected with the bell curve. You’ll marvel at the the technological sophistication but have absolutely no idea how to replicate any of it.

Marketing: Better described as “how to convince a consumer to buy damn near anything, usually against their self-interest.” Also known as “Advanced Lying Techniques” or “How Republicans Win Elections.” Biggest takeaway: never trust advertisements, PR agencies, or corporate executives.

Ethics: A class created by business schools to absolve themselves of any culpability when their graduates engage in evil, unethical things. Otherwise, serves the practical purpose of teaching you how to get away with doing evil, unethical things.

Strategy: The crown jewel of every business school’s core curriculum. Strategy synthesizes all other courses into a glorious edifice of oversimplifying frameworks and acronyms steeped in a solid foundation of rancid, steaming bullshit. It’s no coincidence that an MBA is sooner called a “Master of Bullshit Acronyms” than a “Master of Business Administration.” Strategy also holds many esteemed awards, including Most Frequent Abuser of the Case Writing Method, and Most Loved Class by Fortune 500 CEOs.”

 

 

Tagged , , , ,

Vipassana Meditation: Ten long days and a few negligible steps towards Enlightenment

Note: everything I learned about Vipassana was taught by S.N. Goenka in our evening hour long discourses after a long day of meditation, at my mind’s peak malleability. As a result, take everything with a grain of salt. If you are curious, you are welcome to do your own research or attend one of these 10-day courses.

 

You are in the forest. However, it is possible to leave the forest for a fabled, harmonious land of rolling grassy fields. All you have is a deprecated compass and your walking shoes. One day, you come across a man who claims he can help you fix your compass..

 

Day 0: S??la (morality)

The essence of Vipassana is to reduce misery and suffering in our lives by acknowledging the universal laws of nature and impermanence, or the law of Dhamma as it is known in Gotama the Buddha’s language of pali, that everything is constantly changing and any attachment towards something that is in a constant state of flux is futile and will lead to unhappiness.  The current habit pattern of our minds, consciously or unconsciously, is to react to various external inputs by innately generating feelings of either desire or aversion. These feelings of desire and aversion, if we don’t appease them (if you can’t get something that you want or get away from something you don’t want) will ultimately lead to misery. Since these feelings can be stopped by recognizing the law of nature, particularly the law of impermanence, teachers of Vipassana (~600 B.C.) believed that this technique is universal and can be practiced by anyone, regardless of his/her religious beliefs, heritage, community, etc.

For our 10-day course, we had the pleasure of being taught by S.N. Goenka, an Indian businessman born in Burma, who is now one of the main drivers behind this global Vipassana movement (there are Vipassana centers, similar to the one that I went to in Northern California, all over the world. Additionally, since the organization is non-profit, these centers are solely based on volunteer donations).

According to Goenka, Vipassana is one of India’s most ancient meditation techniques. It was ‘rediscovered’ 2,500 years ago by Gotama the Buddha (Siddhartha) and was taught to many people across Asia.  However, over hundeds of years, Vipassana lost its pure form because people started attaching religious symbols and doctrines to what was intended to be a universal technique.  However, only in Burma was this technique preserved in its “purest” form. And Goenka, though at first taught the technique to his sick mother back in India, eventually spread the technique around the world as more and more people found interest. Now there are hundreds of centers on all of the habitable continents.

The foundation of Vipassana is to observe certain precepts to guide the individual on living a more moral life. But with only ten days to learn and practice the Vipassana technique, the course is structured to maximize the limited time that we had to carve carefully out of our routine lives (from full-time work or student life). To achieve an experience that will yield the strongest results, the students’ lives were to mimic as closely as possible to that of a monk. This includes no eye contact with any other student, no speaking (except teachers), no interaction with the opposite gender, no contact with the outside world (you are expected to leave your phones in the car or with the course managers before the ten days begin), speak no lies (easy as we weren’t able to talk), and no audible flatulence (no speaking out of your ass). Observing these moral precepts provide us with a strong foundation to begin our journey along the Noble Eight-Fold Path.

Excited and curious, Mike and I signed up to get a better understanding of Vipassana. What is on the other side?

Upon arrival in the evening, we check out the facilities. While in our dormitories, I was shocked to learn the monks don’t live with mini-fridges stocked with Redbull and Snapple, as well as an alarm clock with an iPod dock. Those monks have much to learn.

In order to encourage students to practice meditation, as boring as we all (correctly) perceive it to be, the course had to eliminate anything and everything else that would be even remotely more interesting in comparison. As a result, everything mildly interesting thing with which you could occupy yourself was removed from the environment. Had there been just a single page ripped out of Charles Dickens’s “Great Expectations” laying in the common area, by day 10 all of the students would have memorized the entire text passage backwards and forwards, as well as have been able to provide an extensive analysis of the era’s crime, social class, empire, and ambition, on the personal development of Pip.

With absolutely nothing to do, I would have to do the next logical step: to abuse the most potent chemical substance we had in our possession: the caffeine in the Celestial green tea. Anything to keep my mind occupied.

Our first evening meditation was scheduled for that night, after which the vow of Nobile Silence would be placed on us. Mike and I hug, “see you on the other side”, and take our first steps into the unknown.

 

Day 1-3: Sam??dhi (mastery of the mind)

The daily schedule for the coming 10 days are as follows (it is posted in the Dining Hall so no speaking is necessary):

4:00am    First bell is rung to wake up
4:20am    Second bell is rung
4:30am    Meditate in the Meditation Hall or in your room (aka sleeping)
6:30am    Breakfast in the Dining Hall
8:00am    Mandatory Group Sitting in the Meditation Hall
9:30am    Meditate in the Meditation Hall or in your room
11:00am  Lunch in the Dining Hall
12:00pm  Interviews with the assistant teachers (you must sign up in advance)
1:00pm    Meditate in the Meditation Hall or in your room
2:30pm    Mandatory Group Sitting in the Meditation Hall
4:00pm    Meditate in the Meditation Hall or in your room
5:00pm    Tea in the Dining Hall
6:00pm    Mandatory Group Sitting in the Meditation Hall
7:00pm    DVD Discourse viewing of living a misery-free life from S.N. Goenka
8:00pm    Mandatory Group Sitting in the Meditation Hall
9:00pm    Get ready for bed
10:00pm  Lights out

Or for the lay person:

4:00am    Wake up
4:30am    Meditate
6:30am    Breakfast
8:00am    Meditate
11:00am  Lunch
1:00pm    Meditate
5:00pm    Tea
6:00pm    Meditate
9:00pm    Sleep

Or the schedule that most closely reflects reality:

4:00am    Wake up
4:30am    Meditate in the Meditation Hall
5:15am    Go back to your room because you are tired from insomnia last night
6:29pm    Stand outside of the dining hall because you are bored of sitting in your room
6:30am    Breakfast
6:36am    Finish eating breakfast
6:37am    Kick myself for eating breakfast so quickly
6:38am    Stare out of the window sipping on cup after cup of green tea
7:15am    Crawl back to my bed and lay there counting the minutes until 8am group sitting
8:00am    Group sitting in the Meditation Hall
9:00am    Unfold my contorted body for a short intermission
9:01am    Perform all stretching techniques (as taught by Tony Horton) that I can remember to regain sensation in my legs and back
9:05am    Begin meditating again
9:30am    Assistant teachers allow students to practice in their rooms
9:45am    Leave the Meditation
Hall to walk along one of the trails in the woods, in endlessly circular fashion
10:20am  Crawl into my bed to meditate with my back against the wall
10:23am  Collapse into my bed, sleeping
11:00am  Lunch!
11:07am  Kick myself for eating lunch so quickly
11:08am  Stare out of the window sipping on cup after cup of green tea
11:30am  Go back to quarters. Maybe take a shower. Maybe meditate in bed (aka sit idly there until I fall asleep)
12:45pm  Walk around the outside trails.  Make a rock formation of some sort. Play with some pinecones
1:30pm    Head over to the Meditation Hall to meditate
2:30pm    Group sitting begins
3:30pm    Stretch, strive to crack every crackable knuckle in my body
3:40pm    Begin meditating again
4:00pm    Assistant teachers allow students to practice in their rooms
4:03pm    Kick myself for getting back to my room so quickly. Sit idly for several minutes
4:06pm    End up falling asleep in bed
4:50pm    Wake up and wait around outside the Dining Hall for 5pm tea
5:00pm    Tea break
5:03pm    Stare boringly out of the window
5:30pm    Go back to the dormitories and brush my teeth
5:33pm    Crawl into bed and lay there counting down the minutes until 6pm group sitting
6:00pm    Group sitting in the Meditation Hall
7:00pm    Intermission before Goenka’s evening discourse
7:05pm    Teachers put Goenka’s DVD into the DVD player. Discourse begins
8:05pm    Another intermission before late evening meditation sitting begins
8:10pm    Begin meditating again
9:00pm    “Take rest”.  Meditation ends and assistant teachers allow us to get ready for bed
9:04pm    Crawl into bed and try to fall asleep as soon as possible
2:31am    Fall asleep 

 

The first meditation technique that we learned and practiced for these three days is Anapana–to focus the mind on the natural breath. In line with the general principal of refraining from concentrating on pleasant or unpleasant thoughts, past or future thoughts, we block out all mind chatter by bringing our attention to our natural respiration. It is important, Goenka emphasizes, that we don’t verbalize or visualize anything to help us calm our minds and to focus on the breathing, as it could lead to people associating religious names or images with the technique and lessen its universal quality.

Beginning with observation of the breath and the sensations around the nostrils is to sharpen the mind’s sensitivity. Anapana is a tool that we must develop before we can practice Vipassana, which is observing the sensations, not only around the nostrils, but the entire body. And we have three days to practice.

The first day is pretty challenging and painful, but, like a good masochist, I ignore my discomfort. Its easy to become distracted from your natural breath; you are breathing constantly, why must I give all importance in my mind do something that just happens? At first I would spend twenty seconds observing my respiration, only to find myself thinking about something else: I wonder if I got Coachella tickets. I wonder what my roommates are doing. I must remember to send that email to my friend. Remember that one time… continuously. Then I would start again. Having never meditated before in my life, I have never realized the complete random sequence of thoughts I had in my mind.

So Goenka tells us: our minds generate four types of thoughts: past or future, pleasant or unpleasant. It is these thoughts that cause us to attach desire/aversion to the objects in our life. In order to narrow the mind to the present moment, Goenka wants us to focus solely on our natural breath, as the breath is the only true current reality. Once the mind has been trained to observe the breath, it begins to observe sensations around the body, as these also reflect the true realities of the moment. Through practice and hardwork, you will progress further along the Nobile Eight-fold Path by observing subtler and subtler bodily sensations. Until you become a Buddha and are able to experience all of your subatomic particles constantly changing at immeasurable frequencies. This is the path to Enlightenment.

Every evening, there is a one-hour discourse from Goenka, where he provides some clarification to the meditation technique, as well as imparts Buddhist principals through stories of the life of Guatama Buddha. The teachers pop Goenka’s dvds into the dvd player and hit play, then resume their quiet meditation. Then, for the next hour, Goenka dispenses nuggets of wisdom through a 50″ Toshiba flatscreen television. Though I would’ve preferred my daily digest of Buddhist fables in tweets less than 140 characters or artfully placed behind the Lomo-fi filter on Instagram, I will take what I can get.

By day two, since there is no speaking or eye contact or noisy flatulence or Redbulls waiting in my non-existent mini-fridge, I find myself quieting my mind’s chatter much sooner.  And when my mind did wander, it did in a more rationally; less jumping from complete random thread to complete random thread, more flowing in a logical manner.  In the woods, Anapana was helping me calibrate my wildly moving compass. I was on my way out of the woods, I could feel it.

In the Meditation Hall, everyone has his/her own seat cushions setup for comfort.  Some people piled cushions upon cushions upon cushions. Obviously, the higher you are, the better you meditate–why else do monks meditate up in the Himalayas, among the mountains? I see others piling these softer yoga blocks to provide some back support. Might as well import in a LA-Z-BOY recliner and meditate on that. There are others, the hardcore ones, who just sit on the ground or on one small angled kneeling stool. Admirable. Then I notice that the man beside me had a Yves Saint Laurent meditation seat cushion. I look at my own motley pile of secondhand cushions. On the Noble Eight-fold expressway to Enlightenment, he was driving a Maybach, while I was pedaling a tricycle. It will be a long ten days.

 

Day 4-9: Paññ?? (wisdom)

The fourth day is the first day we are taught the Vipassana meditation technique. While before we were sharpening our mind’s sensitivity to bodily sensations by focusing on the area around our nose, now we expand our observation to the entirety of our body. In order to progress, to observe subtler and subtler sensations, two things are important. Awareness and equanimity. Yes, I left my life for ten days to receive vocabulary lessons from a foreigner. Equanimity, or the act of being equanimous, is to keep your mind from desire or aversion—to have a completely balanced mind. When you come across a sensation on the body that is an unpleasant sensation, you must stop yourself from generating the feeling of aversion towards it. Similarly, when you are experiencing a pleasant sensation, you must refrain from generating the feeling of desire. After all, everything is constantly changing: those bodily sensations will eventually go away, even if on an astronomical scale of time. Eventually. Through awareness and equanimity, our mind will become sharper and more sensitive, thereby allowing us to observe subtler sensations.

In addition to the new meditation technique, there was another surprise (or form of torture).  Starting on day 4, every group sitting will be Addithana, otherwise known as “Sittings of Strong Determination”. In these three-per-day, one hour power sittings, students are asked not to open their eyes or move at all, as it helps the mind observe, with utmost equanimity, the sensations of the body.

Observing
the sensations on my body was unusual at first. Anapana, compared to Vipassana, was child’s play. Goenka asks us to scan our body, top to bottom, bottom to top. Go through each part of the body separately and observe the sensations on that area. Body sensations can include anything–heat, cold, perspiration, itching, pressure, pain–anything. Whether the sensations are pleasant or unpleasant, we must remain equanimous. If we observe dull, unpleasant sensation, Goenka advises us to “smile and move onto next body part; understand that these feelings are impermanent, will continuously change, as it is the universal law of nature, law of Dhamma”.

So we begin. No matter what you are feeling on your body, you must remain equanimous, balanced. You are not to react–only to observe from an outsider’s perspective. “My foot fell asleep”. Just observe. Remain aware. Be equanimous. “My leg is getting a cramp”. Just observe. Remain aware. Be equanimous. “There is a sharp pain in my back”. Just observe. Remain aware. Be equanimous. “But my erection has not gone away after four hours”. Just observe. Remain aware. Be equanimous.

Without equanimity, the feeling of aversion towards the pain in your leg could be amplified in your mind, derailing its balance.  According to Goenka, “you are adding mental pain to physical pain, and that is unnecessary”.

Like a skateboarder, constantly pushing and stretching his/her abilities to balance with more advanced grinds, jumps, and tricks, so to is a Vipassana meditator continuously sharpening his/her equanimity through observing increasingly sensitive bodily sensations. At first Goenka asks you to observe easy sensations on your body such as the fabric of your clothes or the breeze of the air. Then, if your mind remains equanimous enough, you may continue to observe a free flow of vibrations throughout certain parts of your body. The final stage, according to Goenka, is where you are fully aware of the rapid dissolution and formation of your body on the tiniest subatomic scale.

Day 6, Goenka (correctly) advices, is notoriously difficult: “one feels like running away”. Whenever my body scans were interrupted by a dull sensation, mind chattering begins and I lose focus and concentration. I was not equanimous. Other, more fortunate times, I successfully experienced subtler sensations of slight tingling on my arms and legs. I consciously tell myself to not generate feelings of attachment to this sensation and to remain equanimous: this, too, will change. For unbelievably brief moments, the “subtle vibrations” flow through my body as if I was contiously dipping myself in a bath of the most luxurious oils and salts. Must be the caffeine.

By days 8 and 9, meditation is getting almost unbearable. In the sitting community, when you are unable to quiet your mind and focus on the meditation technique, it is called a “storm”. I am having a tempest. My mind starts wandering:

I wonder what the Enlightenment city would be like. Probably a Starbucks on every corner. Probably a guided walking tour that ends in a souvenir shop.  Would there be sales tax?

Was the quinoa and kale for lunch today a subtle reference to the popular 90’s Nickelodeon television series featuring the black comedic duo, Kenan and Kel?

The man to my left belches violently. With an odor that vulgar, a stench that foul, not even Guatama Buddha himself could remain equanimous.

 

Day 10: The journey is just beginning

The tenth day finally arrives and not a moment too soon. After our morning meditation session, the vow of Noble Silence will be lifted. I can’t wait to finally, and loudly, relieve the gaseous pressure building in my lower intestines without sneaking a cheek.

We also learn a new meditation technique, a “balm for the deep operative surgery of Vipassana” to heal ourselves, called Metta Bhavana. This technique is to permeate the free flow of love and compassion out of bodies to those around us and all over the world, to share our love, peace, and happiness with all beings. I wasn’t quite sure I was doing it right, as all I thought about were happy thoughts. Even though it required some mental exertion, it was a nice break to Vipassana.

The moments immediately after the silence was lifted were joyous. The dining hall and dormitories begin to fill with laughter and conversation; people recounting the past ten days for themselves, people bonding over shared miseries of the course, the insomniac nights, the tortorous sittings. Contact information is exchanged.

Unfortunately, we can’t leave the camp until the morning of Day 11. The rest of the meditation sittings were going to be unproductive and miserable. But recognize that this, too, will change.

There were some closing remarks from Goenka, about the merits of donations, especially volunteering, as any gift to allow others to learn the law of Dhamma is the most priceless gift. As mentioned earlier, my opportunity to come to learn and practice Vipassana is due to the donations and graciousness of those who proceeded me on the Noble Eight-fold Path. I feel incredibly grateful. And I can’t wait to tweet/Facebook/Instagram/blog about the whole thing. I look forward to climbing into that car and driving off to see my lovely roommates!

Of course, Vipassana is only one way of finding inner peace, connecting with something larger than yourself, and living a happy and joyous life. All religions strive to provide that opportunity for its believers. Regardless of the rites and rituals one practices, dogmas and doctrines one believes, holy names or images one uses, as long as the qualities and characteristics—infinite love and compassion—of these saints are emulated, then happiness for you and those around you can flourish.

Ten long, challenging days later and I am only tripping over myself on the first few steps of the Noble Eight-fold Path. Despite still in the forest, I have been handed a manual on how to fix my compass. Goenka highly encourages the students to continue practicing Vipassana twice everyday: one hour sittings in the morning and in the evening. Good luck sticking to that resolution; with our tight schedules of working jobs, staying fit at the gym, finding time to meet with friends and family, staying in touch with your 800 other friends on Facebook via passively “Liking” their statuses, and ekeing out a few hours to sleep at night, it can be difficult squeezing in two hours of meditation per day. Though we live in the Western society, one deeply rooted in the ailing free market, expensive health care and social security, mentality of infinite borrowing, and workaholic requirement to achieve financial success, we can always pursue its misery-freeing alternative: find a steady 9-5 job, make enough money to send your children to college, and have enough left over to afford a therapist, or, at the least, some xanax pills.

 

Bhavatu Sabba Mangalam — may all beings be happy.

 

Andy

 

Thanks go to Alvin, Steve, Shelley, and Pauline for reviewing a draft of this entry.

Tagged , ,

instagram, your e-peen, and you

instagram, hailed by the startup community as one of those great UX iphone app success stories and having grown to 13 million users within 13 months, has transformed into something greater than just a simple photo-sharing app (as was, arguably, originally intended by its creators).  i, a staunch believer that any chick with a DSLR will claim herself as a photographer, too, became enamored by the simplicity of sharing photos, especially with filters that can make a picture of your dog’s tight coils on the lawn look like a photo hanging in some soho art gallery.  and now i have gotten to a point where i do not look at any picture unless it is through one of instagram’s 17 magical filters.

like any platform that has reached critical mass in user size, there is a scale of user “influence” or “visibility” ranging from casual (user has average followers of 20 to 100, linearly correlated with the number of bikini pics she has shared on Facebook), as well as the “super user” (user has average followers exceeding a thousand).  a “super user” doesn’t necessarily mean the user is brilliant at choosing the best filter over a particular photo that will invoke the strongest emotions in the viewer or the user (with a great fundamental understanding of human behavior) shares great soft core pornography (i view my soft core porn #nofilter, but to each his own), but could mean that the user simply has great visibility in the real world (i.e. celebrity status, famous athlete).  but what is so great about having more instagram followers? why should i care?

 

Your “e-peen” and why it matters

well, obviously the greater your digital social presence means the bigger your “e-peen“. wasn’t this the entire purpose of the internet? to write a xanga entry solely for the most e-props, to create a youtube video to get more views than rebecca black’s critically acclaimed “friday” (republican candidate rick perry actually just surpassed “friday” with his “strong”, not by the number of views, but by the number of dislikes–perhaps one rare example of any publicity not being good publicity), or to make a Facebook account to get the most pokes?

the real power and influence that is derived from having a greater reach with your digital social presence is you may have a slightly marginal (perhaps seemingly immaterial) higher probability of persuading a follower to make a purchase somewhere. and the entity that ultimately sold to your follower would, ideally, attribute that sale to you (marginally).  given that premise, anybody can grow their influence and eventually get paid to create buzz or generate publicity (i.e. john mayer’s tweet about words with friends helped popularize the game).  like other aspects of legacy industries, the internet is slowly tearing down the barriers once reserved for celebrities and athletic endorsements–anyone with a large enough “e-peen” will get noticed.

 

Taking care of your “e-peen” and reaching “super user” status

so how do we increase the size of our “e-peen”? for instagram (and similarly, twitter), the steps appear to be the following:

1) hash tag your picture. the most popular hash tag is #iphoneography. also choose times of day where your target audience is awake and will most likely come across your photo.

2) like other people’s pictures so that your existence can be acknowledged by others and those who view their pictures.

3) lather, rinse, repeat.

however, with the above formula, it soon becomes a full time job to reach “super user” status (which it undoubtedly is, as major corporations have hired tech savvy marketers for the sole purpose of taking care of its “e-peen”).  the effort involved from growing from casual to “super user” also is self selecting: those not willing to invest the time and effort will not reap the benefits of having a large “e-peen” (note that it is hotly debatable whether or not these benefits are even worth the user’s time and effort to increase his/her social influence, especially given higher opportunity cost of working a 9-5 or anything else).  additionally, the higher the percentage of “super users” to casual users may slightly reduce the marginal benefit in the pursuit of a larger “e-peen” as the limited attention of users are to be split among more sponsored content.

the phenomenon of using these content sharing platforms to influence others have ushered in a wave of startups with the intent of helping users measure the length, girth, and yaw their “e-peen” (i.e. klout, crowdbooster) by providing colorful charts, infographs, and dials. and, according to klout, it appears that my “e-peen” has a healthy reach, one that i am satisfied with (it has definitely reached your eyes if you are reading this right now).

 

Content sharing and advertising value

the balance in the user base between casual users and “super users” is also important to the net value that the platform provides.  a network where every user follows every other user (where everyone is a “super user”) creates too much noise and will not provide value to anyone.  a network comprised solely of casual users is ripe for “harvesting” by an entity who finds this content generation valuable (in most cases, advertisers and marketers) and “super users” will naturally arise to take advantage of this wealth of data.

would any content sharing platform inherently devolve into a race and competition to get the biggest “e-peen”? what if you could measure all of your aim, QQ, msn, gchat messages?  would banner ads start showing up in my sms/text messages?  would i hear a commercial when checking my voicemail (honestly, though, who still uses voicemail)?  would all conversation, which is the heart of content sharing, boil down to thinly veiled product pitches, shameless advertisements, and promotions?

conversely, how much would mankind demand to get paid to allow this future to exist?

 

 

andy

Tagged ,

5 signs you are a silicon valley startup engineer

it has only been a few weeks since i have moved into the fast paced world of startups and engineering from that of the financial and capital markets.  however, there are just some hard truths that i had to wrap my mind around in order to become fully assimilated in this new universe.  here are five inarguable signs that occur when you are in the process of becoming into a silicon valley startup engineer.

1. less time spent on LinkedIn, more time spent on Github: LinkedIn is the professional social network of choice, because it is conveniently sandboxed from the rest of your virtual existence.  as such, the pictures from last night’s cat-burglar-themed orgy do not get automatically updated to  your profile (that and the fact that LinkedIn’s interface is way confusing with its ‘degrees of separation’ among other stuff that are the only differences from popular social networking tool Facebook).  However, LinkedIn profiles are prone to the same problem that normal resumes have: unbridled embellishment.  Your two week stint at your dad’s brother’s dental practice where you LOL’d at geekologie.com all day is incidentally a paid internship program where you helped manage multiple client accounts and successfully improved operational efficiencies (measured by several multiple-syllable data metrics) through method automation and strong analytical skills.  Engineers, however, are builders by profession and self-proclaimed statements infused with marketing buzzwords such as “created synergies through boosting aggregation operation logistics” have no positive effect.  Github is the place where developers keep their portfolios of cool things they have made; it is examples of their past work that demonstrate their abilities.  Engineers normally have githubs on their personal splash pages and business cards that are exchanged in person.  Some people even exchange github links prior to making eye contact (i have seen it done).  An engineer without a github is a young urban professional without a self-entitled attitude.

2. standards for women lowers drastically:  silicon valley is a black hole of attractive women. it could be the dense population of computers that largely inhabit a typical man’s time that could be the major deterrant for women to flock to silicon valley (computers do as their told and only requires a push of a button to turn on, especially if using a mac).  you’ll realize you have reached silicon valley when you start to notice when there is a female within the nearest 10 mile radius.  you’ll examine it quizzically, questioning its existence (‘is that really a chick?’), then followed by admiration (‘wow, i really respect her tenacity to be doing what shes doing’), then followed again by a mix of curiousity/fascination (‘what is her story? she probably took a wrong turn somewhere.’), then finally followed by skepticism (‘she is most definitely fake; i’ve seen real girls on the internet and that is definitely not it’).  moreover, your standards teeter on the edge of plummeting down a endless abyss.  you’ll start overlooking underbites and lazy eyes.  a symmetrical face is a godsend.  although there are few women here, it is definitely less distracting–had there been more physical women in silicon valley, the growth and innovation would grind to a screeching halt.

3. develop a strong affinity for white boards:  if silicon valleyers had it their way, all of the asphalt on the road would be replaced with shiny white boards.  because who doesn’t like a surface on which items can be most conveniently read/written/re-written?  startup offices are most often judged on the following two criteria: the abundancy of snacks and drinks, and the size and girth of white board space.

4. wardrobe shifts to cargo shorts/pants and running shoes:  not quite sure if this is the cause or the result of lack of women in the valley, but wardrobes tend to shift towards the standard engineer gear: hoodie, cargos, and running shoes. its the practical approach to attire: it is comfortable and those around you (people, computers, machines) don’t care what you wear.

5. 

Tagged , ,