A Working Nomad Now

Somewhere between the Thakek Loop in Laos and Danang Bay in Vietnam… my friend forwarded me a job listing – and the email traveled in minutes all the way from Princeton, NJ to my phone in Four Thousand Islands in the South of Laos.

One really shaky Skype call later and after sending my resume over email – I stopped being a freelancer and I entered the ranks of the employed. I’ve been grinding the last two months in Bangkok, working with an amazing product and marketing team. Last month I visited Bagan in Myanmar, and last week we set up a project in Kirtipur, Nepal.

I’ve been so blessed – but also have struggled immensely over the last few months. It’s easy to lose myself in the distraction of technology or endless tasks. It’s tough to simply surrender and accept the unpleasant things in life. To let the past go. To focus on the present and the future.

I’ve been deeply influenced by Buddhist philosophy – from Dialectical Behavioral Therapy, to the teachings of Eckhart Tolle, to wanting to go to Vipasana – and attending a class at the Rangjung Yeshe Institute.

Sometimes  I wonder if it’s too late though. Moments like today when my heart spasmed for 20 seconds and I started to feel dizzy. In that moment I thought my heart wouldn’t start beating again, and I was excited at the thought that it might not. I know a candle that burns brightly, burns out faster.

I’ve done a lot, traveled a lot, experienced a lot. I feel like an old woman inside. And biologically, stress makes you age more – the telomeres divide and shorten faster. I know that my stress levels are regularly 10x what is healthy.. but it’s the life I choose.

Mom, Dad, Sonia – I love you. This is in case my heart actually does stop beating tonight. And everyone else, I love you too! It’s been a great ride in this collective boat of humanity. Each day is a blessing, full of both pain and pleasure. Full of samsara. I am sorry to the people who I’ve hurt.

(Alex McGlothlin, I was really mean to you and you didn’t deserve it – and I’m sorry.)

(Jeff Liu, I was also inconsiderate and selfish and you were a great person and great friend. I really love you and hope all is well)

❤ the world, the universe, humanity – and am ready for whatever adventure comes next. Whether it’s another day in this life, or something else beyond. 🙂

getmii.com getmii getme get me doyougetmii goyougetme need kornukopiarala

Understanding Reactivity in Meteor using Iron Router and Google Maps

Often Meteor JS can feel like magic.

I’ve been working with Meteor for a few weeks now, and just now grasped the full splendor of Meteor Reactivity. If you are new to Meteor, this is a short read that will give you an “aha!” moment.

Here’s the project I’m working on, it is very simple.

Before the reactive way, was the non-reactive way. It involved about a hundred lines of code dedicated to controlling and managing timer intervals for certain variables whose load times were variable. Those days are gone.

The Reactive Way

In my project/lib/environment.js file I define routes for http://www.coffee-and-wifi.in/ and http://www.coffee-and-wifi.in/bangkok

The hooks (the functions) are reactive – which is awesome because it means that anytime one of the Session variables changes, all functions that use those specific Session variables will re-run.

Since I’m writing this website through a VPN in China, the load speeds for each one of the code blocks below is really variable. The problem here, is that in order for Google Maps to render a map, it needs coordinates for the center of the map (Block #3) . In order to get coordinates for the center of the map, I need to get information from Iron Router about which map to load (Block #2). If I need to load the current location map, I need the current location (Block #1).

Code Block #1 – Navigator

Meteor.startup(function() {

 // get current position
 if (navigator.geolocation) {
   navigator.geolocation.getCurrentPosition(getPosition);
 } else {
   alert("Geolocation is not supported by this browser.");
 }

});

Code Block #2 – Iron Router

Router.route('/', function () {
 Session.set('latitude_center', Session.get('latitude_current'));
 Session.set('longitude_center', Session.get('longitude_current'));
});

Router.route('/bangkok', function (){
 Session.set('latitude_center',13.741943);
 Session.set('longitude_center',100.548653);
});

Code Block #3 – Google Maps

This block involves David Burle’s dburles:google-maps package, which really neatly wraps up the Google Maps API for easy Meteor accessibility.

In the app-maps/client/maps-client.js (I chose to structure my files into subdirectories) I have the helper functions for the template called “map”. Helper functions are by default reactive computations which means that anytime a reactive piece of data (like a Session variable) inside the function changes, the function is re-run. So take a second to look at the code.

Template.map.helpers({
 // This is a helper function, so it is a 'reactive computation'
 // Any time a Session variable inside it changes, the function surrounding it will run again

 exampleMapOptions: function() {

  if(GoogleMaps.loaded()){

  // Map initialization options
   return {
    center: new google.maps.LatLng(Session.get('latitude_center'), Session.get('longitude_center')),
    zoom: Session.get('zoom'),
    mapTypeControl: true,
    navigationControl: true,
    scrollwheel: false
   };
  }
 }
});

The return function causes the Google Map to render. And since the helper function is a reactive computation, whenever the Session variable for ‘latitude_center’ and ‘longitude_center’ change, the center of the map will move accordingly.

Summary

In Block #2 the Session variable for ‘latitude_center’ (center of the map) is set to equal ‘latitude_current’ (current location). Most of the time, when this code is first called, the current location is not yet known. So initially ‘latitude_center’ is undefined. If it stays undefined, no map will load.

In Block #1 the Session variable for ‘latitude_current’ is set. Sometimes it takes the navigator a while to get running. Sometimes Block #3 runs before Block #2 and the map renders as a gray because the values for the center are undefined.

Finally, in Block #3 the map is rendered according to Session variables for the center of the map. If either Block #1 or Block #2 haven’t finished running, the map will be gray. If you pay close attention, you might notice it load gray before quickly changing to a visible map.

The nifty thing, is that it doesn’t matter which order these blocks load. Because they are all linked together with reactive Session variables, each block gets “notified” when it’s time to update.

More Practice

For more practice, check out David Burles’ How to create a reactive Google map in Meteor.

getmii.com getmii getme get me doyougetmii goyougetme need kornukopiarala

NomadList in Bangkok

I just discovered NomadList after meeting Arthur at the Bangkok Visa Office two days ago. I was drawn to a well-designed sticker and sheen of his Macbook, and looked over to see that he was writing some code. A bit starved of the English language and missing technology a bit, I struck up a conversation with him – and it turns out that there is a little community for nomads in Bangkok.

I’m about to leave for a meet-up at The Hive and realize how much I have been missing fellow human beings who share my struggle.

I once again marvel at the Internet and it spurs many questions about the future of our society – but for now, I’m going to explore my newfound identity as a “nomad” and enjoy some good food and new faces. 🙂

getmii.com getmii getme get me doyougetmii goyougetme need kornukopiarala

Root Canal Retreatment in Thailand

So, it’s finally happening.

The moment I’ve been both dreading and looking forward to. This horribly painful pest of a root canal (see below) is finally getting the attention it has always wanted and I have been want to give. In a few hours, I am going to BIDC and getting this tooth retreated, hoping to save the tooth. If the tooth is not save-able, it’s implant time.

olivia jeffers 2

See broken filling and abscess (infection) on bottom right hitting nerves of tooth behind it. No fun, or in Thai, “mai sinook”.

My Consultation Experience

I requested a bunch of quotes online to get a feel for what the prices were. If anybody is interested, leave me a comment, and I’ll give you my entire spreadsheet.

I did a consultation for around 2,000Baht with Bumrungrad International Hospital, one of the premier hospitals in Bangkok. And it was certainly premier. You know it because it’s one of the best hospitals for the wealthy oil countries, all the immediate neighboring restaurants were Arabic; it has high speed Internet and several types of coffee and cafes – Starbucks included. But my consult was just average, the doctor told me the same thing I’ve heard and read online, and had to consult a root canal expert within the consult, and told me that maybe they could save the tooth, maybe they’d have to do an implant.

After a lot of pushing and asking a series of “why” questions, the doctor did a bite analysis and figured out something that I hadn’t known before. Two teeth were impacting really hard on the tooth with the infection. I am honestly shocked that after $2,000 worth of TMJ Bite Analysis Testing, that my previous dentist was not able to figure this out and adjust the bite three years ago, before I even had the first root canal done. All it took was a simple bite test with crayon-coated paper to figure this out (see below).

MarkLefkoDots

Crayon-like material on a piece of paper, blue on the top, red on the bottom, tells which teeth are hitting where. A basic examination that should be done with anyone whose teeth are cracking or painful. Unfortunately, I don’t think it’s stressed in dental training, because I had to really push one of the doctors to do this test.

I believe in the medical industry in general, there really can be a problem with too much technology and not enough common sense. Long story aside, this is one of the reasons I chose not to become a doctor, despite interest and passion in medicine.

This doctor at Bumrungrad shaved down my tooth in the right spot (I would have done it myself three years ago if I had access to a dental drill) and my pain was gone, 100% gone.

So that was awesome, but I still had an infection. And the quote for re-treatment was 40,000Baht and for an implant 120,000Baht flat fee with Bumrungrad.

Why Bangkok International Dental Center?

Even though the total quote for BIDC was 47,000 as compared to 40,000, the dentist that I saw was remarkable holistic and was an expert in root canals. Immediately she saw my X-Ray and said that I had enough bone structure to save the tooth and that it is always better to save the natural tooth. Any dentist who is trying to make money off you will tell you to go for the implant, because it is a much more expensive procedure.

Additionally, she recommended that the crown be done in the same material as the tooth above, because the “two teeth operate as a unit.” I was amazed when she said this, because it is the first time that a dentist has used this philosophy with me. In my vast dental experience, and I’m not even joking, I have spent a lot of time in dentist chairs, dentists are primarily concerned with how to treat a single tooth. At this point, I can rattle off the checklist that most dentists go through when they look at a tooth and decide how to treat it.

One of the reasons I have had so many problems is that the treatment for one tooth, ended up damaging the tooth adjacent to it. It’s no fun when it’s not cavities that are causing your pain, but having large pieces of ill-fitting metal glued onto your natural tooth.

Back to the point of the actual experience. They spoke English fluently and were very up front about what times and dates I would need to come in, and how much I would need to pay at each visit. Bumrungrad was rather vague, saying that it would be 3-4 visits to retreat the root canal, and then 2-3 visits for the cap, each visit 2-3 weeks apart. BIDC told me I need to come in on February 25, March 4, and March 11 and I was so impressed with the philosophy, reputation, and clarity of service that I scheduled the appointments then and there.

Alright… and it’s almost go time. Fingers crossed that the local anesthetics work!

getmii.com getmii getme get me doyougetmii goyougetme need kornukopiarala

Connecting without the Internet

I had intended to finish my design and code portfolio and also keep writing while traveling. My sister’s husband also had work to do that required Internet connection, so a consistent Internet connection was important to all of us.

But after a two week trip to Ko Samui, where I nearly became an IT professional troubleshooting problem after problem with Internet connection, I am beginning to wonder how much I should really be pushing for the Internet.

We spent so much time waiting for pages to load, resetting routers, climbing up rocks and jerry-rigging old boards to place the router where it could better fish for signal – I woke up each morning thinking, “Is the Internet working?”

And all this time I was staying here (below). In a beautiful mountain/jungle/beach and all I was thinking about was my email and getting frustrated that I couldn’t get any connection.

IMG_1396

On the last few days, after getting ill from a little too much communal water drinking, and being forced to just lay around doing nothing, I decided to forego my computer and phone. I often found myself alone looking off the balcony, while other people were on their phones, and I realized how crazy it is that we get so sucked in.

On the last night, I just hung out and talked with my sister – because, guess what? The Internet wasn’t working. And it was one of the first times we’d connected in quite a few years.

Makes me think that, maybe instead of fighting the Internet, that I should have just been enjoying the ride.

getmii.com getmii getme get me doyougetmii goyougetme need kornukopiarala

Whatever Works & Common Sense

One thing I love about Bangkok so far, is the attitude of “whatever works” mixed with good, old-fashioned common sense.

Here are my top three favorites:

Beer or Water?

“I’m really thirsty, can I have a beer?”

“If you’re thirsty, you should drink water.”

“….”

“I’ll take a water.”


whateverworks 2

Two options for mail: Bangkok or Other Places, genius. Why make up a long word like “International”?


safe

“Don’t believe an invitation from a stranger inviting you to the place you don’t know.”

There couldn’t have been truer words.

getmii.com getmii getme get me doyougetmii goyougetme need kornukopiarala

The Beginning of My Quest

A few days ago, I packed my bags for San Francisco to begin a new life.

It was very short.

Minutes into my new life, I realized I had booked the wrong ticket from the wrong airport. My flight had left before I even left my apartment.

Feeling (and looking) like the deflating remnants of a once silly and exuberant balloon, passively accepting the end of my new beginning, I asked myself “Since I am here anyway, where in the world do I want to go?”

The answer hit me like a ton of bricks, not only getting me away from my problems but actually solving them. The answer was Thailand.

It is world renowned for it’s medical tourism, the cost of living is low, it has great Internet infrastructure, and it’s a place where spirituality is mixed in with every day life.

I booked a flight, called my parents who rushed over to the airport with one last meal from home, and began my quest.

I would argue though, that the true beginning of my quest, was the moment when I accepted my reality and gave myself the permission to want something. That was the beginning.

getmii.com getmii getme get me doyougetmii goyougetme need kornukopiarala