<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Suyash Lakhotia's Blog</title>
    <atom:link href="http://suyashlakhotia.com/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <link>http://suyashlakhotia.com/blog/</link>
    <description>A collection of observations, thoughts &amp; ideas</description>
    <pubDate>Tue, 21 Dec 2021 14:28:41 +0000</pubDate>
    
      <item>
        <title>Freedom of Failure</title>
        <link>http://suyashlakhotia.com/blog/2021/12/20/freedom-of-failure.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2021/12/20/freedom-of-failure.html</guid>
        <description>&lt;p&gt;The last time I wrote something for my blog was during the COVID-19 lockdown in the first half of 2020. It seems only appropriate that I update the blog again during my 20 day vacation from work that I’ve primarily spent within the four walls of my apartment. While Omicron has torn apart travel plans I was really looking forward to, there’s something about unexpectedly getting 3 empty weeks on my calendar that felt liberating — an unknown burden lifted off my shoulders. It brought me back to an eerily similar emotion I felt during my latest performance review at work. Let me explain.&lt;/p&gt;

&lt;p&gt;Growing up, I was consistently in the top 10% of my class. This was the result of several factors including my academic curiosity, supportive parents (with high expectations), competitive peers and tying my self-worth to grades. That last bit is especially crucial because as children, we were constantly told by the all-knowing adults around us that getting good grades leads to a better life. Unbeknownst to them, my anxious mind also added on the converse interpretation that failing to get good grades will result in a terrible life. Reflecting back on my formative years, I ended up internalizing this as two irrefutable truths — (1) not being in the highest X% would have awful consequences and (2) paths less traveled were not for me since those don’t have the measurable success indicators the world would judge me on.&lt;/p&gt;

&lt;p&gt;Notice I didn’t internalize a drive to succeed but rather a fear of failure. While the latter does often lead to the former, I’ve now come to realize it’s not a sustainable way of life. The most striking example of this is my emotional response to success, which tends to be &lt;strong&gt;relief&lt;/strong&gt; and not pride or happiness. Nearly every time I’ve gotten promoted at work or scored well in an exam, the overwhelming emotion has been respite from anxiety instead of the joy of success. Combined with the gamified “levels” in academics and corporate ladders, this has perversely also meant achieving every milestone merely shifted the goalpost further ahead. My peers often talk about the cognitive dissonance of staying content and wanting more while I’ve yet to even truly feel the former.&lt;/p&gt;

&lt;p&gt;Vilifying failure has also resulted in my two Achilles’ heels — inexperience with defeat and an aversion to risk. I’ve never experienced a major setback in my life, partly due to over-preparedness &amp;amp; hard work but also because I’ve always chosen the beaten path. Growing up in developing economies usually means not having the luxury of a government safety net or familial wealth to fall back on. This is why some Europeans are comfortable backpacking across Asia until their savings run out while most Indians keep their passports in ziplock bags to avoid water damage on a trip to the Sahara. Compound this desire to play it safe several times over and you get a highly-represented member of the industry working in a stable job at a top-tier company within a country that runs like a well-oiled machine.&lt;/p&gt;

&lt;p&gt;Tying my self-worth to external recognition has also led to pretty unhealthy outcomes. For example, needing to please a semi-anonymous performance review system that spits out a rating twice a year to validate my self-worth and dismiss my imposter syndrome was the quickest way to burnout. This is further exacerbated now that I’ve worked alone from a corner of my home longer than I’ve worked from an office with familiar faces. And while grinding at work got me promoted twice in three years (with every promotion leading to a sigh of relief and an immediate shifting of the goalpost), the exponential growth also meant feeling pressured to maintain an unsustainable trajectory.&lt;/p&gt;

&lt;p&gt;This brings me to my latest performance review at work, where I received a less-than-stellar rating for the very first time. It wasn’t a bad rating and was still better than average but it suddenly threw me off my always-on-top trajectory and I felt…relieved. But this wasn’t the unhealthy relief I’ve always felt with success! It was the relief of being able to take it slower for the next few months because I didn’t have to work overtime to maintain this rating. It was the relief of being able to switch teams (maybe even jobs!) without delaying my next promotion due to ramp-up time. It was the relief of having the space to dive deep into a new area or focus on my wellbeing without the guilt of “wasting” precious hours. It was the relief of knowing the world around me doesn’t crumble when I’m not in the top 10%.&lt;/p&gt;

&lt;p&gt;The way I see it is that when you’re leading a race, your only concern is not giving up your position and following the path laid out for you. If you trip and fall, you start noticing the world around you that was previously a blur and the alternative routes that have always existed. And after you lose the lead, you’re free to take a breath, question the race’s purpose and recalibrate yourself. Let failure set you free!&lt;/p&gt;
</description>
        <pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Komodo National Park &amp;amp; Flores</title>
        <link>http://suyashlakhotia.com/blog/2020/05/25/komodo-national-park.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2020/05/25/komodo-national-park.html</guid>
        <description>&lt;p&gt;I really enjoyed writing about my trip to Germany a couple days ago and since I find myself missing traveling again today, I thought I’d take some time to reflect upon another fun adventure from last year. In August 2019, my parents and I spent a week detached from the rest of the world (due to the remote nature of these islands) in the highly underrated tranquility of East Nusa Tenggara, Indonesia. The trip was divided into two segments — three days on a boat exploring the Komodo National Park followed by a four-day road trip across the island of Flores.&lt;/p&gt;

&lt;h3 id=&quot;komodo-national-park&quot;&gt;Komodo National Park&lt;/h3&gt;

&lt;p&gt;After an early morning flight from Jakarta to Labuan Bajo (with one of the most gorgeous landings), we were jettisoned onto a repurposed fishing vessel that would be our home for the next few days. The guide and crew of four introduced themselves to us and we set sail for our first destination. On the way there, we realized just how untouched this part of Indonesia truly was. The sky was clear, the ocean sparkled blue and there was not a single piece of floating plastic! Could this be how Bali used to be before the tourism boom?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Komodo-National-Park/IMG_6859.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Landing in Labuan Bajo&lt;/p&gt;

&lt;p&gt;Our first stop was Kelor Island, where we were greeted by a lavish white sand beach and the challenge of hiking up a very slippery slope to the top of a hill on the center of the island. The climb was our first taste of adventure on this trip as the loose gravel fell apart beneath our shoes and we struggled to find our footing without any guardrails. Once we reached the top, little did we know the climb down was going to be even harder. I spent most of it sliding down on my posterior!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Komodo-National-Park/IMG_6949.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Snapped a photo of my parents on our hike up!&lt;/p&gt;

&lt;p&gt;After lunch on the boat (and a quick dip in the ocean), we made our way to the famed Komodo Island to look for the man-eating dragons the national park gets its name from. These beasts of the past can only be found in this part of the world and are one of the most savage creatures on the planet. They are venomous, cannibalistic (some even eat their own children!) apex predators who have nothing to fear and roam free on these islands, which are largely uninhabited by humans.&lt;/p&gt;

&lt;p&gt;While we were accompanied by a ranger at all times, his primary weapon of choice - a long stick that branched into two at one end for jabbing the eyes of the dragon - did not instill a lot of confidence. Due to August being mating season, most of the Komodo dragons had made their way deeper into the jungle and we were sadly unable to spot a lot of them in the designated trekking area. However, we did see a few younger ones scampering about and also caught a couple adult dragons lurking around the ranger village looking for scraps. There were also several monkeys, wild boars and deer on the island too!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Komodo-National-Park/IMG_7177.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Camera Tricks &amp;amp; Komodo Dragons&lt;/p&gt;

&lt;p&gt;After watching the sun set over the hills of the island, we spent the night on the boat. An unexpected (but welcome) surprise was the immensely starry night that blanketed the open sky as I tried to spot any constellations I could recognize. Unfortunately, I wasn’t carrying the right gear to capture this beautiful sight but it will forever be etched in my city-dwelling mind.&lt;/p&gt;

&lt;p&gt;We started the following day bright and early to hike up Padar Island and watch the sunrise atop the Instagram-famous lagoon trio. After a photo session that lasted longer than I’d like to admit, we made our way down and to the next activity - snorkeling! While the plan was to swim alongside turtles and manta rays, they’re both extremely shy creatures and it was hard to get a hold of them without being overly intrusive. So, we decided to just stick to the coral reefs around us and watch schools of fish swim around in the crystal clear water.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Komodo-National-Park/IMG_7139.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Family Portrait at Padar Island&lt;/p&gt;

&lt;p&gt;The next few hours were spent relaxing at a nearby pink sand beach before heading back to Komodo Island to try our luck with the dragons again. We weren’t able to spot any adults this time either but did spot a younger one jumping down from a tree (where they live to protect themselves from older dragons) and running across the beach!&lt;/p&gt;

&lt;p&gt;The subsequent day was our last day on the boat and the only agenda was to swim at different snorkeling spots in the national park. At one point during my afternoon laze on the deck, I noticed a couple wild dolphins swimming alongside our boat! In the evening, we watched thousands of flying foxes fly out from their island to several others as the sun set. This daily phenomenon was a sight to behold as the nocturnal creatures dotted the sky in search of food.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Komodo-National-Park/IMG_7598.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Sunset over Kalong (i.e. Flying Fox) Island&lt;/p&gt;

&lt;h3 id=&quot;flores&quot;&gt;Flores&lt;/h3&gt;

&lt;p&gt;After an overnight pit stop at Labuan Bajo, we set off for the next half of our adventure — a road trip across the island of Flores. The island is not usually part of first-time itineraries to Indonesia and because of its relative obscurity, it provides a glimpse into the more traditional side of the country. The first day was spent driving across endless rice fields (as well as &lt;a href=&quot;https://www.atlasobscura.com/places/spider-web-rice-fields&quot;&gt;spiderweb-shaped ones&lt;/a&gt; in Ruteng) towards a live archaeological site where they initially discovered &lt;a href=&quot;https://en.wikipedia.org/wiki/Homo_floresiensis&quot;&gt;Homo floresiensis&lt;/a&gt;. This was especially interesting for me as I observed the international team of scientists sift through the dirt and label each piece of evidence with extreme care.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Komodo-National-Park/IMG_7632.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;I wasn't kidding when I said endless rice fields&lt;/p&gt;

&lt;p&gt;We spent the night at a lodge in Ruteng before heading further east the next day. On our way, we stopped by a traditional village (where we were kindly invited into the home of the village elder) and explored a large lake and its surrounding jungles. After lunch, we visited a local arrack distillery and tasted some of the traditional (and extremely strong) coconut liquor before relaxing at natural hot springs close by.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Komodo-National-Park/IMG_7904.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Breakfast with a view!&lt;/p&gt;

&lt;p&gt;After a night of well-deserved rest (who knew sitting in a car all day would be this exhausting?), we spent the day exploring another traditional village, where we were welcomed by friendly locals and even friendlier cats! After a drive across some rice terraces, we found ourselves at Blue Stone Beach in Ende known for its turquoise pebbles that fall from the cliffs nearby. After a delicious Indonesian meal at a beach shack, we drove for the rest of the day to our overnight lodging at the base of Mt. Kelimutu.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Komodo-National-Park/IMG_7963.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Bena Traditional Village&lt;/p&gt;

&lt;p&gt;The highlight of our last day in Flores was hiking up Mt. Kelimutu in pitch black using nothing but flashlights to watch the sun rise over the three lakes at the top of the volcano. It was an extremely picturesque scene that made the early morning alarm and hike very worth it! I highly recommend spending some time on top in order to avoid the crowds on your way down since the hiking path is equally serene (which you miss in the darkness on your way up).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Komodo-National-Park/IMG_8141.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Sunrise at Mt. Kelimutu&lt;/p&gt;

&lt;p&gt;After a quick visit to another traditional village nearby, we hopped onto a twin-rotor plane back to Labuan Bajo from the local airport (which only opened for certain hours in the day when an airplane was due to take-off / land) and caught a flight back home from Komodo Airport the next day.&lt;/p&gt;
</description>
        <pubDate>Mon, 25 May 2020 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Two Weeks in Germany</title>
        <link>http://suyashlakhotia.com/blog/2020/05/23/two-weeks-in-germany.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2020/05/23/two-weeks-in-germany.html</guid>
        <description>&lt;p&gt;As I write this, the world is facing an unprecedented global pandemic and I’ve personally been stuck at home for most of the past 90 days. I decided to clean out my notes earlier this week (don’t judge, I’m running out of things to do) and came across a note I was using to keep track of my trip to Germany late last year. It was meant to turn into a blog post at &lt;em&gt;some point&lt;/em&gt; and since I really miss traveling, this is a good time as any to relive those precious memories.&lt;/p&gt;

&lt;p&gt;For some context, this was my first time traveling solo (ignoring some shorter weekend excursions) and came at a time when I was on a binge of “personal growth”. My other &lt;em&gt;growth hacks&lt;/em&gt; during this period include starting drum lessons, finally making a dent on my growing shelf of unread books and attempting regular meditation. While history, food and German beer were definitely significant factors in my decision to make this trip, I was also determined to challenge my anxiety by spending two weeks alone (for the most part) in a foreign country.&lt;/p&gt;

&lt;h3 id=&quot;munich&quot;&gt;Munich&lt;/h3&gt;

&lt;p&gt;I started my travels in Munich, a city famous for its architecture, culture and of course, Oktoberfest. While I had missed the actual festival by a month, the city did not fail to deliver the best beers and lively company of strangers that Oktoberfest is so popular for!&lt;/p&gt;

&lt;p&gt;After a (relatively comfortable) 13 hour flight from Singapore, I was greeted by a freezing early morning in the Bavarian capital. As someone who has spent their entire life in the tropics, I’m definitely not used to 5°C weather but welcome it wholeheartedly, albeit for short spans of time. I got sorted out at the airport (SIM card, Euros, jacket) and hopped on a S-Bahn to the city to begin my trip. Since my Airbnb check-in was not for another eight hours, I left my luggage at the central train station’s lockers and headed to Munich Residenz for an early morning stroll.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_9148.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Residenz München&lt;/p&gt;

&lt;p&gt;This was my first time experiencing autumn and I immediately fell in love with the foliage (a common theme for the rest of my trip). The chilly breeze and fall colors of the empty park around Munich Residenz were a great cure for my jet lag and I spent a lot of time mindlessly wandering around (much to the envy of other people in the park rushing to work).&lt;/p&gt;

&lt;p&gt;Following a quick breakfast at a nearby coffee shop, I headed to Marienplatz for a (free!) &lt;a href=&quot;https://www.neweuropetours.eu/sandemans-tours/munich/free-tour-of-munich/&quot;&gt;walking tour by SANDEMANs&lt;/a&gt;. The walking tour lasted a couple hours and our guide, Brett, was very entertaining, knowledgeable and unbelievably funny. As part of the tour, we visited the Frauenkirche, caught the world-famous Rathaus-Glockenspiel and warmed up in the lobby of the legendary Hofbräuhaus beer hall. Interestingly enough, I ended up having my first beer in Germany from a kebab shop across the street from Hofbräuhaus and was delighted at the lack of judgment for doing so before noon.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_9203.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;My first beer in Germany!&lt;/p&gt;

&lt;p&gt;For the rest of my first day, I hung out with Greg, a friend I made during the walking tour who also joined me for the pre-noon kebab shop beer! We ate authentic Bavarian food at Schneider Brauhaus München, climbed to the top of St. Peter’s Church and roamed around the old town exchanging stories about growing up in Indonesia and Brazil respectively. Overall, a fantastic start to the trip!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_9250.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Meet my new friend, Greg!&lt;/p&gt;

&lt;h3 id=&quot;day-trip-to-nuremberg&quot;&gt;Day Trip to Nuremberg&lt;/h3&gt;

&lt;p&gt;My second day in Germany started early with a day trip to Nuremberg, offered by &lt;a href=&quot;https://www.getyourguide.com/activity/munich-l26/nuremberg-day-trip-from-munich-by-train-t24233/?utm_force=0&quot;&gt;these fine folks&lt;/a&gt;. We spent the first half exploring the medieval town and learning its rich pre-WWII history and dove into WWII in the latter half as we veered into the nearby Nazi rally grounds. Josh, our guide, was a great storyteller and engaged us in deep discussions about the rise and fall of Nazism (as well as parallels in the modern world).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_9328.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Nuremberg's Medieval Town&lt;/p&gt;

&lt;p&gt;This was also a day of gluttony as I ate the legendary €3 sausages from Bratwursthäusle bei St. Sebald in Nuremberg and treated myself to a delicious candle-lit Greek dinner (complemented with German beer) at Taverna Cyclades back in Munich.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_9407.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Solo Date Night at Taverna Cyclades&lt;/p&gt;

&lt;h3 id=&quot;back-to-munich&quot;&gt;Back to Munich&lt;/h3&gt;

&lt;p&gt;The next day was the peak of my brief (but intense) romance with autumn as I headed to Nymphenburg Palace in the early hours of the day to explore the surrounding park. With more than a couple hot chocolates in me, I aimlessly strolled around the park for a few hours as swans, ducks &amp;amp; the occasional jogger piqued my interest from time to time. I took endless photos of the rolling fog, trees, paths and lakes in an attempt to capture the scenes forever. There’s also a voice note on my phone where you can hear a stream run through the park as birds chirp overhead!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_9469.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After a quick stop at Deutsches Museum (whose computer history section I highly recommend) later in the day, I made my way to the renowned Hofbräuhaus for dinner and a couple pints. While I didn’t plan on staying for too long, I was lucky enough to share a table with a bunch of other solo travelers and we spent the night reveling, drinking great beer, munching on pretzels and exchanging tales over Google Translate! Luca, I hope to visit you in Italy soon to try your homebrewed beer!&lt;/p&gt;

&lt;p&gt;My last day in Munich was mostly spent nursing my hangover in the English Garden, one of the largest urban parks in the world (where I was constantly losing my way). I mean, who wouldn’t feel better after a couple hours of views like these!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_9801.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;berlin&quot;&gt;Berlin&lt;/h3&gt;

&lt;p&gt;For the next leg of my trip, I jumped on a high-speed DB train (we hit 280km/h during our ride!) to Berlin, the city I was most looking forward to! The ~4 hour ride was a great opportunity to catch up on some reading (as well as some well-deserved sleep). As I pulled into the train station, I texted Saurya, a friend who would be joining me for the Berlin leg, to meet me at Alexanderplatz.&lt;/p&gt;

&lt;p&gt;After a couple delicious street-side sausages, we headed to the top of Berliner Fernsehturm (or Berlin TV Tower) for a view of the Berlin skyline at night. The view was less than impressive but the overpriced beers at the bar made it slightly more palatable. We followed that up with a quick stop at Brandenburg Gate and a traditional Bavarian dinner at Gaffel Haus.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_9874.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Brandenburg Gate at Night&lt;/p&gt;

&lt;p&gt;The next day, we grabbed a couple hot chocolates from The Barn (this became our daily rendezvous point as well as morning coffee joint) and headed back to the Brandenburg Gate to explore the surrounding area. We took a closer look at the Brandenburg Gate, visited the Reichstag Building and paid our respects at the Memorial to the Murdered Jews of Europe. We spotted a SANDEMANs walking tour taking place and since I had a great time with the Munich version, Saurya and I decided to join the one here too. Again, the tour was really well done and Saurya’s history tidbits throughout definitely added to the experience!&lt;/p&gt;

&lt;p&gt;Post the walking tour and quick visits to Bebelplatz and the Berlin Cathedral (whose rooftop has a great view), we ended the day with the &lt;a href=&quot;https://www.neweuropetours.eu/sandemans-tours/berlin/berlin-pub-crawl/&quot;&gt;SANDEMANs pub crawl&lt;/a&gt;. This led to an incredibly fun night involving a lot of new friends, kebabs, beer, group singing and dancing to &lt;em&gt;Mundian To Bach Ke&lt;/em&gt; at the final spot of the pub crawl - Club Matrix!&lt;/p&gt;

&lt;p&gt;As you would expect, I began the next day later than usual and visited Bellevue Palace &amp;amp; Victory Column before roaming around Tiergarten (to continue my fling with autumn). Finding out the German Spy Museum ends their exhibit with the infamous quote from Eric Schmidt about privacy was slightly disillusioning but our Georgian feast at Kin Za more than made up for it!&lt;/p&gt;

&lt;p&gt;No trip to Berlin is complete without a visit to the East Side Gallery and the street art truly lived up to the hype. After clicking photographs for our upcoming boy band’s album cover, Saurya and I headed to the Jewish Museum for a more somber evening. I highly recommend the haunting Holocaust Tower here, which brought back memories of my deeply moving trip to Auschwitz a couple years ago.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_0139.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Debut Album Dropping in 2021&lt;/p&gt;

&lt;p&gt;Our last day in Berlin started off at Charlottenburg Palace and its surrounding grounds, where we met several sheep, ducks &amp;amp; swans. There were also several people playing fetch with their dogs (a rare sight in Singapore) and it was great to take a minute to pause and appreciate our surroundings. We ended the day at the Berlin Wall Memorial, which was a great way to learn about the impact of the wall on people’s lives as well as the numerous escape attempts of East Berliners.&lt;/p&gt;

&lt;h3 id=&quot;heidelberg&quot;&gt;Heidelberg&lt;/h3&gt;

&lt;p&gt;In every trip, there is always one transit experience that doesn’t go according to plan. For me, it was my transit to Heidelberg when my second train (from Frankfurt to Heidelberg) got unexpectedly canceled. Fortunately, since I had a day ticket (and managed to speak to some friendly locals), I was able to hop onto a couple different trains with my luggage and make it to Heidelberg in time for dinner and more importantly, rest.&lt;/p&gt;

&lt;p&gt;Heidelberg is not on every German itinerary but I definitely suggest making a quick stop here, especially if your flight connection is from/to nearby Frankfurt. You only need a day to explore the old town area, which is the main attraction, and it’ll definitely make you feel like you’ve traveled back in time (if you can ignore the luxury stores that now occupy these well-preserved medieval buildings).&lt;/p&gt;

&lt;p&gt;I started the day by walking along Philosopher’s Walk, an extremely serene path with a gorgeous view of the old town and the Heidelberg Castle across the river. After crossing the Old Bridge into town, I spent the rest of the day wandering the cobblestone-laden streets &amp;amp; alleys of this quaint little time capsule. I think I started missing home a little at this point because I ended up eating lunch at Hans im Glück, a German burger chain popular in Singapore, before heading to Frankfurt.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_0409.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Panoramic View of Heidelberg from Old Bridge&lt;/p&gt;

&lt;h3 id=&quot;frankfurt&quot;&gt;Frankfurt&lt;/h3&gt;

&lt;p&gt;After 14 days of traveling, I was definitely exhausted and the 4 PM sunsets were not helping with my mood. I think that’s why I ended up spending a good chunk of my time in Frankfurt reading at my Airbnb or nearby riverside cafes. Nevertheless, I managed to hit the major attractions - Römerberg, Eiserner Steg, Frankfurt Cathedral, Paulsplatz, Commerzbank Tower - and gorge on German food &amp;amp; beer one last time. I was also happy to carve out a couple hours to grab a hot chocolate and stroll along the autumn trees in Grüneburgpark before saying my final goodbyes and boarding the Singapore-bound A380!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2020/05/Germany/IMG_0541.jpeg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

</description>
        <pubDate>Sat, 23 May 2020 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Sikkim</title>
        <link>http://suyashlakhotia.com/blog/2018/12/30/sikkim.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2018/12/30/sikkim.html</guid>
        <description>&lt;p&gt;A couple weeks ago, I traveled to &lt;a href=&quot;https://en.wikipedia.org/wiki/Sikkim&quot;&gt;Sikkim&lt;/a&gt; with my family. Sikkim is a state in northeast India, known for its glaciers, mountains, tea gardens and diverse flora! It is also home to India’s newest airport (&lt;a href=&quot;https://en.wikipedia.org/wiki/Pakyong_Airport&quot;&gt;Pakyong Airport&lt;/a&gt;) built at 4,500 ft above sea level, whose news sparked our interest to travel there.&lt;/p&gt;

&lt;p&gt;We flew from Kolkata, West Bengal to Pakyong on a small Bombardier Dash 8 and the view as we approached Pakyong was absolutely breathtaking! In the middle of the flight, the pilot instructed us to look on our left side, where we caught an aerial view of Kangchenjunga, the third highest mountain in the world, and Mt. Everest. The landing approach was just as scenic as we passed by hilltop towns on the same level as our flight!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/12/Sikkim/IMG_4972.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Aerial View of Kangchenjunga&lt;/p&gt;

&lt;p&gt;Once we landed in Pakyong, we were greeted by locals who were flight-watching at this brand new airport while we took in the beauty of their home. On our drive to Gangtok, Sikkim’s capital city, we visited the Rumtek Monastery, the largest monastery in the state. Located at an altitude of 4,900 feet, the silence and serenity of the gompa truly enabled one to focus on the beauty of the architecture and surrounding mountains as the monks went about their daily routines.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/12/Sikkim/IMG_5063.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 28em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Rumtek Monastery&lt;/p&gt;

&lt;p&gt;The next day, we drove to Baba Mandir &amp;amp; Lake Tsomgo (or locally known as Changu Lake), in the eastern part of Sikkim. Traveling here require a Protected Area Permit due to the proximity to the border, however, it is completely worth the trouble. On our way to Baba Mandir, the roads started to get icy and our car ended up skidding down a slope that didn’t have any road-side barriers! We ended up retreating and waiting for the locals and soldiers who had come to help to clear the road using a sack of salt and a couple shovels. This took a little over an hour but given the surrounding scenery, there are worse places in the world to be stuck in traffic.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/12/Sikkim/IMG_5300.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 28em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Traffic Views in Sikkim&lt;/p&gt;

&lt;p&gt;Baba Mandir is a temple dedicated to Baba Harbhajan Singh, an army officer who is believed to reveal himself in the dreams of army officials in the area and provide them with protection and guidance. It stands tall at an altitude of more than 13,000 feet and the continuously playing patriotic music combined with the myriad of Indian patriotic symbols is reflective of the army presence in the state and instills one with a strong sense of patriotism. The temple also provides a magnificent viewpoint of the mountain range and surrounding landscapes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/12/Sikkim/IMG_5403.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 28em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;View from Baba Mandir&lt;/p&gt;

&lt;p&gt;Lake Tsomgo is the most popular destination in Sikkim and rightly so! The lake is at an elevation of more than 12,000 feet and remains frozen for most of the winter season with the ice just starting to form on the surface while we were there. The lake and the surrounding mountains provide a scene of unparalleled beauty that makes you wonder why Bollywood movies are shot in Switzerland after all? There is also a ropeway on the lake grounds that transports you to a seemingly different dimension of snow and fog on the top of one of the surrounding mountains.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/12/Sikkim/IMG_5497.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 28em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Lake Tsomgo&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/12/Sikkim/IMG_5458.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 28em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Lakeside Yaks&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/12/Sikkim/IMG_5910.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 28em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Can you tell I'm freezing?&lt;/p&gt;

&lt;p&gt;On our last day in Sikkim, we traveled to Namchi in southern Sikkim and briefly to Nepal, where I successfully crossed an international border on foot while devouring a plate of &lt;a href=&quot;https://en.wikipedia.org/wiki/Momo_(food)&quot;&gt;momos&lt;/a&gt; before making our way to Darjeeling, West Bengal. We were in Darjeeling only for one night to catch the famous sunrise atop Tiger Hill. After waking up in the middle of the night in the freezing cold, we drove to Tiger Hill and watched (albeit while shivering) as the sun rose in between the mountains and bathed the Kangchenjunga range in shades of pink and orange.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/12/Sikkim/IMG_5763.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 28em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Sunrise at Tiger Hill&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/12/Sikkim/IMG_5772.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Kangchenjunga Range at Sunrise&lt;/p&gt;
</description>
        <pubDate>Sun, 30 Dec 2018 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Grad Trip!</title>
        <link>http://suyashlakhotia.com/blog/2018/07/25/grad-trip.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2018/07/25/grad-trip.html</guid>
        <description>&lt;p&gt;The last few months have been a complete whirlwind — wrapping up my undergraduate thesis, final examinations, graduating from college, moving to a new home &amp;amp; starting my first &lt;em&gt;real&lt;/em&gt; job at Google! More on all of this in future blog posts but in between all of the adult-ing, I also traveled to eastern Europe with a few friends from university for our grad trip!&lt;/p&gt;

&lt;h3 id=&quot;stop-1---athens-greece&quot;&gt;Stop #1 - Athens, Greece&lt;/h3&gt;

&lt;p&gt;After a grueling 12 hour flight from Singapore, Athens was the first stop on our grad trip and my first taste of Europe (quite literally, given how many gyros platters I ate). There were some very pleasant surprises in Athens — surreal street art, unbelievably great service and the friendliest people!&lt;/p&gt;

&lt;p&gt;We spent our first day exploring the major tourist sites (Temple of Zeus, Panathenaic Stadium, Mt. Lycabettus &amp;amp; Acropolis) and ended at Plaka for dinner followed by different flavors of ouzo at Athens’ oldest distillery, Brettos.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_8303.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Sunset at Acropolis&lt;/p&gt;

&lt;p&gt;The next day, we got up early and started the day with a glass of freddo cappuccino and a breakfast pretzel. After a quick stop at the Ancient Agoda, we made our way to Exarcheia, an edgy alternative part of Athens with a vast collection of street art. We ended our day with dinner at A Little Taste of Home in Gazi, where the waiter treated us to a shot of mastika, another local liquor.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_8641.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Street Art in Exarcheia&lt;/p&gt;

&lt;h3 id=&quot;stop-2---mykonos-greece&quot;&gt;Stop #2 - Mykonos, Greece&lt;/h3&gt;

&lt;p&gt;After a couple days in Athens, we hopped on a ferry to Mykonos, part of the world-famous Cyclades group of Greek islands. The island is as picturesque in real-life as it is in postcards and the splashes of blue and white make for remarkably beautiful scenes! The island is extremely paradoxical, with the peaceful lanes and pristine beaches coming to life with house music and bright lights as the sun sets.&lt;/p&gt;

&lt;p&gt;We spent most of our daytime in Mykonos town mindlessly strolling through the streets, stopping only for some delicious Jimmy’s Gyros and photographs. It was incredibly serene, despite the island’s population increasing ten-fold during the tourist season.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_8929.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Little Venice&lt;/p&gt;

&lt;p&gt;On our second and last day in Mykonos, we took a bus to Paraga and hiked through breathtaking seaside cliffs to get to Paradise Beach, where we relaxed, got some reading in, swam in the Aegean sea and danced to great music at Tropicana. Oh, and they serve amazing €5 gyros that tasted even better after hours of dancing!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_9634.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 30em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;The Grad Trip Crew on Paradise Beach&lt;/p&gt;

&lt;h3 id=&quot;stop-3---prague-czech-republic&quot;&gt;Stop #3 - Prague, Czech Republic&lt;/h3&gt;

&lt;p&gt;The next stop on our grad trip was Prague, which is everything you expect from a quintessential eastern European city and some. I couldn’t stop clicking photographs of the nearly symmetrical streets with colorful buildings on either side and this was just on the way to our AirBnB!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_9675.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Random Street in Prague&lt;/p&gt;

&lt;p&gt;We started our stay in Prague by exploring the Old Town area, which truly represents the dichotomy of Prague — carefully preserved historical buildings that are now leased to luxury brands, pubs and Hooters. You’ll find study groups touring the main square, attentively listening to their tour guide explaining the history of the city while groups of men in full costume on their stag do walk past. There’s also an abundance of talented street performers and musical artists scattered across the town that  make you truly fall in love with the city. Of course, the deliciously sweet chimney cake and cheap beer helps too!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_9552.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Church of Our Lady before Týn on Old Town Square&lt;/p&gt;

&lt;p&gt;A pleasant surprise was the Apple Museum, which is an exhibition of an anonymous private collection of Apple products since the company’s inception. If you’re a fan of Steve Jobs or Apple, the museum serves almost as a pilgrimage through the company’s history and the founder’s mind. It is also one of the few offline places that accept cryptocurrency as payment!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_9629.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Portrait of Steve Jobs (made out of old computer parts)&lt;/p&gt;

&lt;p&gt;Since we were in the beer capital of the world, we went on a beer tour where we tried several different local beers at bars that were centuries old and learned about the process of brewing beer at a microbrewery. We were even awarded “Beer Diploma” certificates at the end of the tour! Though, I think it’s fair to say none of us can still tell the different between an ale and a lager. Another great stop for beer aficionados is BeerGeek, a popular local watering hole that boasts an immensely large collection of international beers.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_9875.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 30em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Interior of St. Vitus Cathedral in Prague Castle&lt;/p&gt;

&lt;h3 id=&quot;stop-4---oświęcim-poland&quot;&gt;Stop #4 - Oświęcim, Poland&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_0119.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Auschwitz II-Birkenau&lt;/p&gt;

&lt;p&gt;A trip to eastern Europe would not be complete without paying our respects at Auschwitz. We traveled there as part of a day tour and the experience, though brief, was incredibly moving and deeply personal. The museum has been very well-preserved and serves as a haunting reminder of the atrocities mankind is capable of when fascism, ignorance and hatred is allowed to proliferate without restraint.&lt;/p&gt;

&lt;h3 id=&quot;stop-5---český-krumlov-czech-republic&quot;&gt;Stop #5 - Český Krumlov, Czech Republic&lt;/h3&gt;

&lt;p&gt;Our last stop in the Czech Republic was the quaint town of Český Krumlov. It hosts a UNESCO-listed castle complex and scenic garden landscapes. Unfortunately, it rained while we were there which prompted most of the tourist sites to close down. However, walking through the narrow lanes of this unspoiled town allows you to travel back in time and admire the sheer beauty of the postcard-like architecture around you.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_0250.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Panoramic View of Český Krumlov&lt;/p&gt;

&lt;h3 id=&quot;stop-6---vienna-austria&quot;&gt;Stop #6 - Vienna, Austria&lt;/h3&gt;

&lt;p&gt;In our last few hours in Prague, we forgot we had to leave the town we had fallen in love with and ended up running across a busy highway with our luggage (in hindsight, probably not the best idea) to catch our bus to Vienna. We had less than 24 hours in Vienna but we managed to cover most of the major sights and end the day chilling by the Danube river.&lt;/p&gt;

&lt;p&gt;The first item on our packed itinerary was Schönbrunn Palace, whose palace tour exhibited the tremendous opulence of the royal family as we moved from room to room, admiring the art and luxurious furniture. The palace grounds were just as beautiful with fountains and well-maintained landscapes on either side of the path.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_0604.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Schönbrunn Palace&lt;/p&gt;

&lt;p&gt;From there, we made our way to the Hundertwasserhaus, an apartment building inspired by funky, contemporary architecture and in stark contrast with the surrounding beige buildings. The building stands out with its use of bright paints and climbing plants and has become part of Austria’s cultural heritage. After a quick coffee break, we wrapped up our tour by visiting The Hofburg, City Hall and the Parliament building.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_0753.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Hundertwasserhaus&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_0969.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;A Statue on The Hofburg Grounds&lt;/p&gt;

&lt;h3 id=&quot;stop-7---budapest-hungary&quot;&gt;Stop #7 - Budapest, Hungary&lt;/h3&gt;

&lt;p&gt;The last stop on our trip was in my city of choice, Budapest! A combination of two towns, Buda and Pest, with the Danube river going through the middle, it has become one of my favorite cities in the world with its rich history, wide variety of cafés and restaurants, outdoor spas, friendly locals and an impressive nightlife!&lt;/p&gt;

&lt;p&gt;We started our first day in Budapest by eating at a medieval-themed restaurant, Sir Lancelot, which was not worth the hype but did introduce us to the local food. Next, we walked down the Danube river on the Pest side, visiting the Hungarian Parliament building, St. Stephen’s Basilica, Liberty Square and the Chain Bridge. The Hungarian Parliament building, in all of its Gothic glory stands tall on the riverbank and provides quite a treat for the eyes as the sun sets! We sat across the building on the Buda side of the river and watched the sun set as the lights of the city came to life. Once the sun set, we made our way to Bors Gasztrobar  and Szimpla Kert for some good food and great vibes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_2176.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Hungarian Parliament Building at Night&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_1456.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Interior of one of the rooms in Szimpla Kert!&lt;/p&gt;

&lt;p&gt;The highlight of the second day was renting Segways and doing a tour of Buda Castle and the Fisherman’s Bastion on them. This was a really fun way to see the sights and also enabled us to zip through the crowds. We ate lunch at the For Sale Pub, which is a themed restaurant that has a bucket of peanuts at every table and the floor is covered in peanut shells! Right after lunch, we visited the Széchenyi Spa for a relaxing thermal bath followed by a scenic walk down Andrassy Avenue from Heroes Square where we spotted a double rainbow!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_1488.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Segway-ing on Castle Hill&lt;/p&gt;

&lt;p&gt;We also spent a day walking around the Castle District to catch the changing of the guards at Sandor Palace and visit the Hospital in the Rock, a WWII-era hospital built inside a network of caves.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_2011.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Panoramic View of Budapest&lt;/p&gt;

&lt;h3 id=&quot;stop-8---helsinki-finland-layover&quot;&gt;Stop #8 - Helsinki, Finland [Layover]&lt;/h3&gt;

&lt;p&gt;Even though we just spent a few hours at Helsinki airport waiting for our flight back home, Helsinki has etched itself into my memory when it surprised us with a bright day sun as we landed at 10:30 PM! As someone who has spent most of their life at the equator, this completely baffled my mind and has intrigued me to visit the Scandinavian countries very soon!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/07/Grad-Trip/IMG_2243.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;View from our flight at 10:30 PM!&lt;/p&gt;

&lt;h3 id=&quot;i-made-a-thing&quot;&gt;I made a thing!&lt;/h3&gt;

&lt;p&gt;Inspired by Casey Neistat’s &lt;a href=&quot;https://www.youtube.com/watch?v=WxfZkMm3wcg&quot;&gt;adaptation&lt;/a&gt; of &lt;a href=&quot;https://www.youtube.com/watch?v=zlfKdbWwruY&quot;&gt;this video from 2008&lt;/a&gt;, I made a video of myself running across eastern Europe in the same style! Shoutout to Bobby &amp;amp; Akash for patiently helping me film this!&lt;/p&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;500&quot; src=&quot;https://www.youtube.com/embed/cLWz0oxrZSI&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Wed, 25 Jul 2018 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Workshop on Neural Networks &amp; Keras</title>
        <link>http://suyashlakhotia.com/blog/2018/03/23/neural-networks-workshop.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2018/03/23/neural-networks-workshop.html</guid>
        <description>&lt;p&gt;Earlier today, I conducted a workshop on the basics of neural networks and implementing them in Keras. You can find my slides below and the supporting implementation code &lt;a href=&quot;https://github.com/SuyashLakhotia/NTUOSS-NeuralNetworks/blob/master/notebook.ipynb&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;iframe src=&quot;https://docs.google.com/presentation/d/e/2PACX-1vS7ev4E0FzVCkCxQ8R0on9UkGpDwfvNVe48f8RXb2wfge7umn0lzKlVoYhovRAI4HmoR28zU3YXMgUV/embed?start=false&amp;amp;loop=false&amp;amp;delayms=3000&quot; frameborder=&quot;0&quot; style=&quot;width: 100%; height: calc(100vw * 0.45);&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Fri, 23 Mar 2018 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Context News Bot: Tackling Echo Chambers &amp; Misinformation</title>
        <link>http://suyashlakhotia.com/blog/2018/01/30/context-news-bot.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2018/01/30/context-news-bot.html</guid>
        <description>&lt;p&gt;In the past few years, two major patterns in our consumption of online content have come to light — the proliferation of misinformation (or “fake news” as Trump would say) and the entrapment of users in personal filter bubbles. This was especially true during the 2016 US Election and is becoming increasingly prominent in my home country of India, where I constantly see family members being swayed by an article or a claim that panders to their inherent bias. The alarming part is that false (or somewhat false) “news” is no longer limited to dodgy blog sites and virus-ridden webpages but also posts on social media by influential people (read: politicians) with valid credentials and a large following.&lt;/p&gt;

&lt;p&gt;As a generation that grew up bombarded by information owing to the boom of the Internet and social media, many of us have learned to filter out certain things (or at the very least, question it) when we realize the source may have something to gain. However, our parents and their parents have always received information from somewhat credible sources and have never had to fact-check leaders of nations or the news, which is believed to be the absolute, objective truth. And even if one has learned to Google something before trusting it, it is not always easy to judge misinformation as it is usually wrapped around some truth, which can allow it to get past our checks (especially if it agrees with our bias and provides a target for our frustrations).&lt;/p&gt;

&lt;p&gt;Additionally, what doesn’t help the cause is the fact that social media algorithms are solely built around engagement &amp;amp; likes, which means we’re constantly being fed information that agrees with past content we’ve interacted with regardless of whether any of it is grounded in reality. This lack of perspective and resulting lack of empathy is dangerous and can be easily taken advantage of.&lt;/p&gt;

&lt;p&gt;Thus, I pitched an idea to tackle this very problem to my team (&lt;a href=&quot;https://chaitjo.github.io/&quot;&gt;Chaitanya&lt;/a&gt;, &lt;a href=&quot;http://nikv96.github.io/&quot;&gt;Nikhil&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://bobbyranjan.com/&quot;&gt;Bobby&lt;/a&gt;) and in the recent &lt;a href=&quot;http://hacknroll.nushackers.org&quot;&gt;NUS Hack&amp;amp;Roll 2018&lt;/a&gt;, we decided to build it.&lt;/p&gt;

&lt;h3 id=&quot;finding-a-solution&quot;&gt;Finding a Solution&lt;/h3&gt;

&lt;p&gt;Misinformation is an especially hard problem to solve because the people you’re trying to solve it for might not actually want a solution. Let me try to explain. Let’s say you’re an X (any form of identity — nationality, religion, section of society) and you read something about how X-people are great and Y-people are responsible for your Z (any problem — unemployment, lack of government support). You will automatically be inclined to believe this statement because 1) it praises X, 2) it refers to a real problem Z you’re facing
and 3) it gives you a target Y to blame for Z. Now, if I tell you the statement is false and that Z is caused by X &amp;amp; Y or maybe even solely by X, your initial instinct will be to get defensive and discard what I said as untrue because I have suddenly robbed you of your external target and pushed some of the blame onto X (and by way of identity, you).&lt;/p&gt;

&lt;p&gt;Furthermore, any algorithm that simply tries to check whether a statement is true/untrue (assuming the world is not ambiguous) will eventually develop its own bias and you’re back to square one. This is why automated “truth meters” or fake news classifiers are not going to be able to completely solve these issues. What we need is a way to allow people to rationalize an informed decision on their own by providing more than one (reliable) side to a story, primarily a side that disagrees with their beliefs assuming it exists.&lt;/p&gt;

&lt;p&gt;That’s where Context News Bot comes in.&lt;/p&gt;

&lt;h3 id=&quot;context-news-bot&quot;&gt;Context News Bot&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/01/Context-News-Bot/CNB-Banner.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Context News Bot is a Chrome extension that attaches itself to your Twitter timeline and provides a one-click solution to retrieving diverse perspectives on an issue. It does this by running the tweet you’ve selected through a natural language pipeline (built on top of Google Cloud Natural Language API) and extracting the important entities in the tweet &amp;amp; sentiments associated with them. Next, it uses this information to form search keywords to retrieve relevant news articles from a variety of reliable sources after which the retrieved articles are scored on their relevance based on our own heuristic (explained below) and the top articles are delivered to the user for easy reading. Along with the top articles, we also try to retrieve a relevant Wikipedia entry to provide an objective collection of facts regarding the issue.&lt;/p&gt;

&lt;p&gt;By providing more context to the tweet, we aim to enable users to make a more informed decision on the knowledge they absorb through Twitter.&lt;/p&gt;

&lt;p&gt;The entire source code can be found on &lt;a href=&quot;https://github.com/SuyashLakhotia/ContextNewsBot&quot;&gt;GitHub&lt;/a&gt; and further technical details can be found on the &lt;a href=&quot;https://devpost.com/software/contextnewsbot&quot;&gt;DevPost page&lt;/a&gt;. You can also try the system yourself by following the instructions on the GitHub README.&lt;/p&gt;

&lt;h4 id=&quot;retrieving-news-articles&quot;&gt;Retrieving News Articles&lt;/h4&gt;

&lt;p&gt;We retrieve the initial news articles from the News API by creating search phrases from the important entities mentioned in the tweet, the geotag of the tweet and the name of the user tweeting (if he/she is verified). We differentiate important entities from non-important ones by checking if their type belongs to one of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[&quot;PERSON&quot;, &quot;LOCATION&quot;, &quot;ORGANIZATION&quot;, &quot;EVENT&quot;, &quot;WORK_OF_ART&quot;, &quot;CONSUMER_GOOD&quot;]&lt;/code&gt;. Lastly, because tweets can be about incidents that happened weeks/months/years ago, we retrieve all the relevant news articles as opposed to the top headlines at that moment in time.&lt;/p&gt;

&lt;h4 id=&quot;selecting-news-articles&quot;&gt;Selecting News Articles&lt;/h4&gt;

&lt;p&gt;Because we had to hack out a prototype in 24 hours and didn’t have access to a dataset that mapped tweets to news articles (to train a custom model or otherwise), we used a custom heuristic to score an article on its relevancy to a tweet. The heuristic uses the entity information outputted by Google’s API in a weighted approach by taking into account every matching entity’s type, saliency &amp;amp; number of mentions:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;total_score&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# matching_entities are the entities found in the tweet and news article.
&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;entity&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;matching_entities&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# REALLY_IMP_ENTITY_IDX are the indexes for &quot;PERSON&quot;, &quot;LOCATION&quot;, &quot;ORGANIZATION&quot;
&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;# &amp;amp; &quot;EVENT&quot; entity types.
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;REALLY_IMP_ENTITY_IDX&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;total_score&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;salience&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;1.5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mentions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;total_score&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;salience&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;entity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mentions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once we score all the articles, we filter them out by source (no more than one article from a single source) and sentiment to deliver a diverse set of views to the user.&lt;/p&gt;

&lt;h4 id=&quot;client-user-interface&quot;&gt;Client User Interface&lt;/h4&gt;

&lt;p&gt;In order to make the user interface as non-intrusive and intuitive as possible, we simply integrated an action button into every tweet with the other existing buttons as below:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/01/Context-News-Bot/Screenshot-0.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 8em&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Once the button is clicked, it loads up the news articles as cards (which seamlessly blend with Twitter’s native UI) below the tweet along with each tweet’s sentiment color (green for positive, orange for neutral and red for negative):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/01/Context-News-Bot/Screenshot-1.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 35em&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In the case that an appropriate Wikipedia entry is found, it is provided below the news articles:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/01/Context-News-Bot/Screenshot-2.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 35em&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h3&gt;

&lt;p&gt;We want to work on increasing the accuracy of our (currently rudimentary) pipeline in order to retrieve relevant news articles every single time, integrate with other social networks and lose the dependencies on external APIs, particularly for the natural language processing tasks whose calls are especially expensive. You can help us out by contributing to our &lt;a href=&quot;https://github.com/SuyashLakhotia/ContextNewsBot&quot;&gt;GitHub repo&lt;/a&gt;!&lt;/p&gt;

&lt;hr /&gt;

&lt;h5 id=&quot;side-note-we-won&quot;&gt;Side Note: We won!&lt;/h5&gt;

&lt;p&gt;As an added bonus to building a complete prototype of something we consider to be of utmost importance within 24 hours, we also ended up winning a Top 8 prize and Most Socially Useful Hack at the hackathon!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/01/Context-News-Bot/Team-Photo.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 20em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Photo of the team (minus Chaitanya) with our winning loot!&lt;/p&gt;
</description>
        <pubDate>Tue, 30 Jan 2018 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Classifying Movie Reviews from Rotten Tomatoes using Deep Learning</title>
        <link>http://suyashlakhotia.com/blog/2018/01/14/classifying-movie-reviews.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2018/01/14/classifying-movie-reviews.html</guid>
        <description>&lt;p&gt;As part of the initial studying for my final year project (more on that in a future blog post), I had to learn how to build deep models for text classification. As a newbie to deep learning at the time, I decided to start with a small project to familiarize myself with deep learning concepts, TensorFlow and the field of text classification. After some digging, I decided to build classifiers for the movie review sentence polarity dataset (&lt;a href=&quot;http://www.cs.cornell.edu/people/pabo/movie-review-data/&quot;&gt;Pang and Lee, 2004&lt;/a&gt;) since this was a relatively smaller dataset, dealt with sentences (as opposed to documents) and was a binary classification task. Additionally, there were multiple existing references that I could use as a starting point, which proved to be extremely useful. The complete source code and detailed results for my project can be found on &lt;a href=&quot;https://github.com/SuyashLakhotia/RottenTomatoesCNN&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There were three main models I built for the classification task — a convolutional neural network that processed each sentence with words replaced by word embeddings (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Model v1&lt;/code&gt;, based on Yoon Kim’s &lt;a href=&quot;https://arxiv.org/abs/1408.5882&quot;&gt;2014 paper&lt;/a&gt;), a convolutional neural network that processed each sentence with words replaced by similarity vectors calculated from word embeddings (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Model v2&lt;/code&gt;) and a graph convolutional neural network that processed each sentence as a TF-IDF vector with the feature graph constructed from word embeddings (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Model v3&lt;/code&gt;, based on M. Defferrard’s &lt;a href=&quot;https://arxiv.org/abs/1606.09375&quot;&gt;2016 paper&lt;/a&gt;). All three networks used Google’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;word2vec&lt;/code&gt; (&lt;a href=&quot;https://code.google.com/archive/p/word2vec/&quot;&gt;Google Code Archive&lt;/a&gt;) as pre-trained word embeddings.&lt;/p&gt;

&lt;h4 id=&quot;model-v1---convolutional-neural-network&quot;&gt;Model v1 - Convolutional Neural Network&lt;/h4&gt;

&lt;p&gt;This model consists of an embedding layer followed by multiple parallel convolutional + max-pool layers before the outputs are combined and classified by a softmax layer.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/01/Movie-Review-Classification/v1_Graph_Compressed.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Computational Graph for Model v1&lt;/p&gt;

&lt;p&gt;Training 128-dimensional word embeddings from scratch along with the network resulted in a model with a maximum test accuracy of 74.30%, however, training the model with the pre-trained 300-dimensional embeddings from Google resulted in a maximum test accuracy of &lt;strong&gt;79.46%&lt;/strong&gt;. An interesting point to note was that fine-tuning the embeddings for the task at hand (as opposed to keeping them static) consistently resulted in a slight bump in accuracy (and allowed to model to completely converge).&lt;/p&gt;

&lt;h4 id=&quot;model-v2---cnn-on-similarity-vectors&quot;&gt;Model v2 - CNN on Similarity Vectors&lt;/h4&gt;

&lt;p&gt;While building and training &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Model v1&lt;/code&gt; with different hyperparameters, I explored the resulting embeddings in terms of the cosine distance between certain words. For example, the words “good” &amp;amp; “bad” were very similar in the embeddings provided by Google (perhaps due to their syntactic purpose) but the network learned to treat them on opposite ends of the spectrum considering the task at hand.&lt;/p&gt;

&lt;p&gt;Thus, I decided to feed the model the cosine distances between words directly by using the same architecture as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Model v1&lt;/code&gt; but replacing the 300-dimensional word embeddings with 18,758-dimensional vectors that contained the cosine distances to every other word in the vocabulary (calculated from the word embeddings). This is obviously &lt;strong&gt;not&lt;/strong&gt; a practical model but it allowed me to experiment with representing the vocabulary as a “graph” where each 18,758-dimensional vector represented the edge weights of a word (i.e. node) to every other word (i.e. node) in the vocabulary.&lt;/p&gt;

&lt;p&gt;The resulting model had a lot of trainable parameters (and took a very long time to train) but had a maximum test accuracy of &lt;strong&gt;75.61%&lt;/strong&gt; (lower than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Model v1&lt;/code&gt;).&lt;/p&gt;

&lt;h4 id=&quot;model-v3---graph-convolutional-neural-network&quot;&gt;Model v3 - Graph Convolutional Neural Network&lt;/h4&gt;

&lt;p&gt;I wanted to take the idea of representing the vocabulary as a graph further and decided to implement a graph convolutional neural network for the classification problem. The feature graph is a 16-NN graph constructed from the pre-trained word embeddings of the 5,000 most frequent words in the vocabulary and each sentence is represented by its TF-IDF vector (using scikit-learn’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TfidfVectorizer&lt;/code&gt;). The model runs the sentence through graph convolutional + pooling layer(s) sequentially followed by an output softmax layer.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2018/01/Movie-Review-Classification/v3_Graph_Compressed.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Computational Graph for Model v3&lt;/p&gt;

&lt;p&gt;The model had a maximum test accuracy of &lt;strong&gt;76.17%&lt;/strong&gt; with a single graph convolutional layer and did not have a significant increase in performance with additional graph convolutional layers.&lt;/p&gt;

&lt;h4 id=&quot;summary&quot;&gt;Summary&lt;/h4&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Model&lt;/strong&gt;&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;&lt;strong&gt;Test Accuracy&lt;/strong&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Multinomial Naive Bayes (TF-IDF Vectors)&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;77.58%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Model v1 (CNN)&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;74.30%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Model v1.2 (CNN w/ Pre-Trained Embeddings)&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;79.46%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Model v2 (CNN on Similarity Vectors)&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;75.61%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Model v3 (Graph CNN)&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;76.17%&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Overall, most of the models I implemented tend to hover around 75% - 79% test accuracy for the movie review dataset with multiple trials, which is only slightly better than the Multinomial Naive Bayes benchmark (which takes a significantly less amount of time to train).&lt;/p&gt;

&lt;p&gt;In closing, while the results of my project aren’t groundbreaking, implementing all the models and learning the concepts behind them was very educational and serves as a great foundation for my final year project!&lt;/p&gt;

&lt;hr /&gt;

&lt;h5 id=&quot;references&quot;&gt;References&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/1408.5882&quot;&gt;Convolutional Neural Networks for Sentence Classification - Yoon Kim (2014)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/&quot;&gt;Implementing a CNN for Text Classification - Denny Britz (2015)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/1606.09375&quot;&gt;Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering - Michael Defferrard, Xavier Bresson &amp;amp; Pierre Vandergheynst (2016)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 14 Jan 2018 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Creating &amp; Evolving a Hackathon</title>
        <link>http://suyashlakhotia.com/blog/2017/09/29/creating-and-evolving-a-hackathon.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2017/09/29/creating-and-evolving-a-hackathon.html</guid>
        <description>&lt;blockquote&gt;
  &lt;p&gt;With iNTUition’s &lt;a href=&quot;http://intuition17.ieeentu.com&quot;&gt;fourth iteration&lt;/a&gt; happening soon and being my final year in college, I thought it would be a good idea to document how iNTUition began and share how we started Nanyang Technological University’s only 24-hour hackathon and one of Singapore’s largest student hackathons.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As a freshman at Nanyang Tech back in 2014, I remember being particularly disappointed with the lack of tech events and clubs on campus. NTU just had a handful of tech-oriented student clubs, barely any major tech events and no annual hackathon (unlike &lt;a href=&quot;https://www.treehacks.com/&quot;&gt;most&lt;/a&gt; &lt;a href=&quot;https://www.yhack.org/&quot;&gt;major&lt;/a&gt; &lt;a href=&quot;https://calhacks.io/&quot;&gt;engineering&lt;/a&gt; &lt;a href=&quot;http://hacknroll.nushackers.org/&quot;&gt;universities&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Nonetheless, there were two student clubs that caught my attention (despite being designated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Tier 3&lt;/code&gt; by NTU’s club system) — &lt;a href=&quot;http://ntuoss.com&quot;&gt;NTU Open Source Society&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://www.facebook.com/IEEENTU/&quot;&gt;IEEE NTU Student Branch&lt;/a&gt;. I applied to both and had interviews with both clubs’ executive members. By my third week at university, I had joined IEEE NTU Student Branch as a Publicity Director and had gotten rejected by NTU Open Source Society (I’m now President of the club :wink:).&lt;/p&gt;

&lt;h4 id=&quot;intuitioninit&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iNTUition.init()&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;I don’t exactly remember how the idea of a hackathon was brought up but during one of the club’s initial meetings in August 2014, it became fairly clear that we would organize one — NTU’s first &lt;em&gt;proper&lt;/em&gt; 24-hour hackathon. Having never been to a hackathon myself, it was exciting to be part of a team that was organizing something so integral to &lt;a href=&quot;https://en.wikipedia.org/wiki/Hacker_culture&quot;&gt;hacker culture&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We didn’t have a name for the hackathon yet and I distinctly remember the brainstorming session we had as a team for the same. At some point during the discussion, we knew the name had to be tech-y (i.e. must be one word or multiple words concatenated in &lt;a href=&quot;https://en.wikipedia.org/wiki/Camel_case&quot;&gt;camel case&lt;/a&gt;) and it had to relate to NTU somehow. After someone Googled which words contained ‘ntu’ in them (in case you’re curious, &lt;a href=&quot;https://www.morewords.com/contains/ntu/&quot;&gt;here&lt;/a&gt;), we settled on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iNTUition&lt;/code&gt;, which not only was a fantastic pun but also represented how problem-solving &amp;amp; coding is second nature to most &lt;em&gt;hackers&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Finally, it was decided that the hackathon would be held on the weekend of 25th &amp;amp; 26th October, which gave us just enough time to set things up and wasn’t too close to the final examinations.&lt;/p&gt;

&lt;h4 id=&quot;error-variable-hackathon-already-defined&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Error: Variable 'hackathon' already defined.&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Immediately after the meeting, the team got to work. We had to write an event proposal for NTU’s Student Affairs Office (SAO), source for sponsors, get a venue and decide on prizes in a month’s time before we opened registrations. It was extremely overwhelming.&lt;/p&gt;

&lt;p&gt;As luck would have it, it wasn’t too long before we hit our first hurdle. SAO wouldn’t let us use the term ‘hackathon’ for our event because there was already another event on campus using the same term. &lt;strong&gt;What?! Where?&lt;/strong&gt; Turns out, one of the student clubs [name redacted] was holding a two-hour coding challenge and calling it a hackathon. Despite our best efforts, we couldn’t convince the management to let us use the term too and we had to rename our event to ‘iNTUition: 24-hour Coding &amp;amp; Pitching Competition’. Oh, bureaucracy.&lt;/p&gt;

&lt;h4 id=&quot;intuitionsetup&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iNTUition.setup()&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;On the flip side, we managed to score a venue and our first sponsor for the event — &lt;a href=&quot;http://www.ntc.ntu.edu.sg/Pages/home.aspx&quot;&gt;Nanyang Technopreneurship Center&lt;/a&gt;. The Director of NTC at the time also agreed to be part of the judging panel, which was great.&lt;/p&gt;

&lt;p&gt;Other potential sponsors, however, were not that receptive. We cold e-mailed numerous technology companies in Singapore and overseas but to no avail. We learned pretty quickly that nobody wanted to sponsor the first of anything and realized that if we didn’t prove ourselves this time, iNTUition would go back right where it came from.&lt;/p&gt;

&lt;p&gt;Thus, began the incessant e-mails to personal connections and after some effort, we managed to rope in IEEE (since we’re their student branch), Microsoft (through members of the Microsoft Student Partner program), GitHub (surprisingly responsive to cold e-mails) and a few other &lt;em&gt;interesting&lt;/em&gt; sponsors like PUB (Public Utilities Board of Singapore) who gave us cartons of water bottles, BBQ Wholesale who gave us BBQ vouchers to give away and a resort in Bali that sponsored accommodation for 4.&lt;/p&gt;

&lt;p&gt;We were still short on cash when SAO came swooping in with a $700 grant (thanks to the extremely well-written event proposal) and we managed to have just enough money to cover the logistics, meals &amp;amp; prizes for the event.&lt;/p&gt;

&lt;p&gt;A few days after our sponsorships deals closed, the posters below (my Photoshop skills aren’t the best) went up around the university and registrations started flowing in.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/09/iNTUition/iNTUition-2014-Poster.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;iNTUition 2014 Poster&lt;/p&gt;

&lt;h4 id=&quot;intuitionrun&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iNTUition.run()&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;And so, we ran the very first iNTUition with ~70 participants. Most of the event went smoothly (thanks to our logistics team) but we ended up overshooting the time allotted to us on Sunday by a few hours, which wasn’t the best thing for a bunch of sleep-deprived college students. Nonetheless, we &lt;strong&gt;successfully ran NTU’s first 24-hour hackathon&lt;/strong&gt; and actually had some pretty quality hacks come out of it! If I remember correctly, the winning hack was one that aggregated loyalty points across e-commerce platforms &amp;amp; physical retail stores.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/09/iNTUition/iNTUition-2014-Photo.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;iNTUition 2014's Opening Briefing&lt;/p&gt;

&lt;h4 id=&quot;intuitionupgrade&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iNTUition.upgrade()&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Since the first iNTUition in October 2014, we’ve had major improvements to branding, event quality and general tech-iness. We’ve organized iNTUition two more times, once in March 2016 (&lt;a href=&quot;http://intuition16.ieeentu.com/&quot;&gt;iNTUition 2016&lt;/a&gt;) when I was Chair of iNTUition’s organizing committee and another time in October 2016 (&lt;a href=&quot;http://intuitionv3.ieeentu.com/&quot;&gt;iNTUition v3.0&lt;/a&gt;) when I was President of the club. Each year, we’ve gotten more participants and sponsors, better prizes &amp;amp; hacks of higher quality through the hard work and dedication of the team.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/09/iNTUition/iNTUition-2016-Winnings.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 20em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;The Winning Loot of iNTUition 2016&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/09/iNTUition/iNTUition-v3.0-Winners.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Winners &amp;amp; Judging Panel of iNTUition v3.0&lt;/p&gt;

&lt;h4 id=&quot;whiletrue--intuitionrun-&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;while(true) { iNTUition.run() }&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;In conclusion, iNTUition has been a pretty important part of my university life and while I’m no longer part of the organizing committee, having ended my term as President in July 2017, I’m extremely excited to attend iNTUition 2017 as a participant and can’t wait to see how iNTUition grows over the next few years.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/09/iNTUition/iNTUition-2017-Poster.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 25em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;iNTUition 2017 Poster&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; A lot of this happened three years ago, so forgive me if I missed out on or didn’t accurately describe certain events.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 29 Sep 2017 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>First Week at Google!</title>
        <link>http://suyashlakhotia.com/blog/2017/05/27/first-week-at-google.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2017/05/27/first-week-at-google.html</guid>
        <description>&lt;p&gt;So, yesterday marked the end of my first week as a Software Engineering Intern at Google Singapore and I couldn’t be more excited about the next three months I’ll be spending here!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/05/Google/Google-Sign.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;the-office&quot;&gt;The Office&lt;/h3&gt;

&lt;p&gt;Right off the bat, the Google Singapore office is arguably one of the best offices in the world. It spans two and a half buildings and is divided into sections called &lt;em&gt;kampongs&lt;/em&gt; named after different localities in Singapore. The meeting rooms are named and designed around places in Asia and the attention to detail is extremely impressive.&lt;/p&gt;

&lt;p&gt;In addition to the beautiful office, working at Google comes with all the Google perks, including free breakfast &amp;amp; lunch at two cafeterias in the office, micro-kitchens stocked with snacks &amp;amp; drinks, freshly brewed coffee, a 24/7 gym, game rooms, nap rooms and Balinese-style massage rooms. The amount of food that Google provides for its employees is pretty insane and many Nooglers suffer from &lt;em&gt;Google 15&lt;/em&gt; i.e. the fifteen pounds you gain during your first year at Google.&lt;/p&gt;

&lt;p&gt;Here is a video I found online showcasing &lt;em&gt;most&lt;/em&gt; of the common areas at Google Singapore:&lt;/p&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;500&quot; src=&quot;https://www.youtube.com/embed/Skp7iaLfsD4&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h3 id=&quot;people--culture&quot;&gt;People &amp;amp; Culture&lt;/h3&gt;

&lt;p&gt;The first couple of days of the week were spent in Noogler (i.e. New Googler) orientation, which introduced us to the company and its culture.&lt;/p&gt;

&lt;p&gt;I was pleasantly surprised by the fact that Google implements a relatively open and transparent internal policy, which allows for greater collaboration between teams and prevents individuals and teams from being silo-ed. At the same time, Google’s commitment to helping its employees (and their families) stay productive and remain happy is pretty commendable.&lt;/p&gt;

&lt;p&gt;The Googlers I met throughout the week (and during TGIF, a weekly event with free flow beer, wine &amp;amp; champagne) were extremely friendly, welcoming and went out of their way to help me. More importantly, interns are treated pretty much the same as full-time employees at Google and I never felt like I was &lt;em&gt;lesser&lt;/em&gt; than anyone working there (apart from their intimidatingly over-qualified resumes, of course&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;).&lt;/p&gt;

&lt;p&gt;Additionally, from what I gathered during my first week, the engineering teams in Google Singapore seem to retain a very strong “startup culture” of moving fast and building great products, which is an environment I thrive in but something that a lot of tech companies tend to lose as they scale up.&lt;/p&gt;

&lt;p&gt;In closing, I’m thrilled to be working here for the summer (already pushed a few lines of code to production on Friday, yay!) and can’t wait for Monday (something I thought I’d never say). Here’s to the next three months! 🍻&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/05/Google/Interns.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;All of the summer interns with our Noogler caps!&lt;/p&gt;

&lt;hr /&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;https://en.wikipedia.org/wiki/Impostor_syndrome &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 27 May 2017 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Learning a New Technology</title>
        <link>http://suyashlakhotia.com/blog/2017/05/21/learning-a-new-technology.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2017/05/21/learning-a-new-technology.html</guid>
        <description>&lt;p&gt;In the field of software development, it seems almost necessary to stay up-to-date with the latest trends, technologies and even programming languages in order to take advantage of their benefits and stay ahead of the competition. This is especially true in web development, where it seems like a &lt;em&gt;shiny&lt;/em&gt; new JavaScript framework is released every other week. Following from this, I decided to pick up &lt;a href=&quot;https://vuejs.org/&quot;&gt;Vue.js&lt;/a&gt; over the weekend in order to learn something new and brush up my web development skills before my upcoming internship.&lt;/p&gt;

&lt;p&gt;As I pulled myself out of the vortex of Shark Tank clips on YouTube and decided to finally start, a thought crossed my mind.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;How do I usually learn the basics of a new technology&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; and is it the &lt;em&gt;right&lt;/em&gt; way?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My process of learning a new technology &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; usually goes something like this:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Someone tells me about how great &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; is or I stumble upon it online.&lt;/li&gt;
  &lt;li&gt;I read up on the benefits of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; and its popularity.&lt;/li&gt;
  &lt;li&gt;I open up &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt;’s official documentation and navigate to the “Get Started” section.&lt;/li&gt;
  &lt;li&gt;I look for introductory online courses on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; (&lt;a href=&quot;https://www.udacity.com/&quot;&gt;Udacity&lt;/a&gt;, &lt;a href=&quot;https://www.udemy.com/courses/&quot;&gt;Udemy&lt;/a&gt;, &lt;a href=&quot;https://www.edx.org/&quot;&gt;edX&lt;/a&gt;, &lt;a href=&quot;https://www.coursera.org/browse&quot;&gt;Coursera&lt;/a&gt;), which usually end up playing in the background as I go through the documentation.&lt;/li&gt;
  &lt;li&gt;Once I feel like I’ve read/watched enough, I &lt;strong&gt;build&lt;/strong&gt;. I think of a small application that I can build using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; and get started on it.&lt;/li&gt;
  &lt;li&gt;I continue the cycle of Read ⇄ Build until I feel satisfied with the amount I’ve learnt as well as what I’ve built.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This process, of course, relies on my foundational knowledge of Computer Science to help me learn the basics of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; in an accelerated fashion (since most software principles remain the same from language to language and framework to framework).&lt;/p&gt;

&lt;p&gt;Sometimes, an additional step in my learning process is conducting an introductory workshop on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; for students at my university. I strongly believe in the concept of &lt;em&gt;docendo discimus&lt;/em&gt;&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; and usually end up clarifying my own understanding of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; as I prepare the material and conduct dry runs of the workshop.&lt;/p&gt;

&lt;p&gt;Obviously, this entire process is only meant to achieve an initial exposure to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt;. Further depth requires more experience working with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; and a deeper understanding of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt;’s features &amp;amp; inner workings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But is this the &lt;em&gt;right&lt;/em&gt; way to learn?&lt;/strong&gt; Let’s look at the pros &amp;amp; cons.&lt;/p&gt;

&lt;h5 id=&quot;pros&quot;&gt;Pros&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;This learning process is efficient (barring one’s procrastination habits) and doesn’t &lt;em&gt;usually&lt;/em&gt; get boring.&lt;/li&gt;
  &lt;li&gt;There is a constant application of the concepts learned and there is an end goal to work towards.&lt;/li&gt;
  &lt;li&gt;The final application built is “proof” of one’s newly learned skills.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id=&quot;cons&quot;&gt;Cons&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;It’s not that easy to come up with ideas for applications to build using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt; when you’re still learning. &lt;em&gt;There are only so many &lt;a href=&quot;http://todomvc.com/&quot;&gt;todo list&lt;/a&gt; or note-taking applications one can build in a lifetime.&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;There is a tendency for Google searches and StackOverflow to take precedence over documentation during the “building” phase, which is not always bad but can lead to a shallow understanding of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;The lack of a deadline in self-learning generally requires a high level of motivation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In conclusion, the concurrent learning &amp;amp; building makes the process less mundane and allows for creativity but a conscious effort has to be made to learn “properly” and avoid &lt;em&gt;hacky&lt;/em&gt; fixes &amp;amp; workarounds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But is this the &lt;em&gt;right&lt;/em&gt; way to learn?&lt;/strong&gt; Honestly, I still don’t know but it has worked alright for me so far so I’ll stick to it, &lt;em&gt;for now at least&lt;/em&gt;.&lt;/p&gt;

&lt;hr /&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;i.e. programming language, platform, framework, tool etc. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;https://en.wikipedia.org/wiki/Docendo_discimus &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 21 May 2017 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Mt. Bromo</title>
        <link>http://suyashlakhotia.com/blog/2017/05/13/mt-bromo.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2017/05/13/mt-bromo.html</guid>
        <description>&lt;p&gt;I spent the last few days traveling to East Java, Indonesia with my family to visit the &lt;a href=&quot;https://en.wikipedia.org/wiki/Bromo_Tengger_Semeru_National_Park&quot;&gt;Bromo Tengger Semeru National Park&lt;/a&gt;. The national park is centered around &lt;a href=&quot;https://en.wikipedia.org/wiki/Mount_Bromo&quot;&gt;Mt. Bromo&lt;/a&gt; or &lt;em&gt;Gunung Bromo&lt;/em&gt; (in Bahasa Indonesia), an active volcano near the cities of Malang and Surabaya.&lt;/p&gt;

&lt;p&gt;There were two major highlights of the trip. The first was watching the sunrise over the national park from Mt. Penanjakan (2,770m or 9,088ft above sea level).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/05/Mt-Bromo/Sunrise.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Sunrise at Bromo Tengger Semeru National Park&lt;/p&gt;

&lt;p&gt;We left our lodge at 3 AM in order to make the hour-long drive and subsequent short trek to the viewpoint before the sun started to rise around 5 AM. Because of the steepness of the mountain and extremely low visibility, four-wheel drive Toyota Land Cruisers driven by experienced locals are the primary mode of transport in the region.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/05/Mt-Bromo/Jeep.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; style=&quot;max-height: 20em&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Posing with the Toyota Land Cruiser&lt;/p&gt;

&lt;p&gt;After watching the sunrise at 2,770m, the next highlight was visiting the actual crater of the volcano. This involved another hour-long drive followed by an hour-long trek to the top of the volcano. Because the volcano sits in the middle of a &lt;em&gt;sea of sand&lt;/em&gt;, it is only accessible on foot or horseback.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/05/Mt-Bromo/Sea-of-Sand.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;'Sea of Sand' as seen from Mt. Bromo&lt;/p&gt;

&lt;p&gt;The crater itself resembled an entrance to hell. There were thick white fumes constantly coming out of it alongside occasional puffs of yellow and black smoke. At the same time, a constant roar echoed from the crater as molten rock churned deep inside the hole in the ground. It was an extremely intimidating sight and a true exhibition of the Mother Nature’s power.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/05/Mt-Bromo/Crater.jpg&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;image-caption&quot;&gt;Mt. Bromo's Crater&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photographs used in this blog post were taken during my trip on an iPhone 5S and a Canon EOS 650D. Some of them can also be found on my &lt;a href=&quot;https://500px.com/SuyashL&quot;&gt;500px page&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 13 May 2017 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Internships in Tech</title>
        <link>http://suyashlakhotia.com/blog/2017/05/06/internships-in-tech.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2017/05/06/internships-in-tech.html</guid>
        <description>&lt;p&gt;I recently gave a talk on getting quality internships in the tech industry as part of NTU Open Source Society’s &lt;em&gt;TGIFHacks&lt;/em&gt;. My slide deck from the talk is below.&lt;/p&gt;

&lt;iframe src=&quot;https://www.icloud.com/keynote/0QuV-nAopkWycL3FctwVGFIJg?embed=true&quot; width=&quot;100%&quot; height=&quot;450px&quot; allowfullscreen=&quot;1&quot; style=&quot;margin-bottom: 30px;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;em&gt;P.S. I also created a &lt;a href=&quot;https://github.com/SuyashLakhotia/TechInterview&quot;&gt;cheat sheet to prep for technical interviews&lt;/a&gt;. Feel free to contribute to it!&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 06 May 2017 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Setting Up a Secure Ghost Blog</title>
        <link>http://suyashlakhotia.com/blog/2017/05/05/setting-up-a-secure-ghost-blog.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2017/05/05/setting-up-a-secure-ghost-blog.html</guid>
        <description>&lt;blockquote&gt;
  &lt;p&gt;UPDATE: This blog is no longer published using Ghost. I use Jekyll + GitHub Pages now.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;The following is a short guide to set up a secure &lt;a href=&quot;https://ghost.org/&quot;&gt;Ghost&lt;/a&gt; blog on a DigitalOcean droplet running Ubuntu (which is how this blog is set up).&lt;/em&gt;&lt;/p&gt;

&lt;!--excerpt--&gt;

&lt;h3 id=&quot;step-1---create-the-digitalocean-droplet&quot;&gt;Step 1 - Create the DigitalOcean Droplet&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.digitalocean.com/registrations/new&quot;&gt;Sign up&lt;/a&gt; for a DigitalOcean account if you don’t already have one.&lt;/p&gt;

&lt;p&gt;Once you’re logged in, click on the “Create Droplet” button. Choose the “One-click apps” tab when asked to choose an image and select “Ghost xx.xx.x on xx.xx”. This will create a droplet running Ubuntu with everything pre-installed for Ghost.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/05/Ghost-Blog/Create-Droplet.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Next, choose a size (I’m currently using the 1 GB, $10/month size, which is the minimum requirement for Ghost). Select a datacenter (preferably the one closest to you) and choose any additional options that you may like. Finally, pick a hostname (example: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ghost-blog&lt;/code&gt;) and click “Create”.&lt;/p&gt;

&lt;p&gt;Note down the IP address of this newly created droplet.&lt;/p&gt;

&lt;h3 id=&quot;step-2---set-up-a-domain-name&quot;&gt;Step 2 - Set Up a Domain Name&lt;/h3&gt;

&lt;p&gt;The next step is to point your domain &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;example.com&lt;/code&gt; to the droplet. &lt;em&gt;If you don’t own a domain name yet, I recommend buying one from &lt;a href=&quot;https://www.namecheap.com/&quot;&gt;Namecheap&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;SSH into your droplet using the credentials provided by DigitalOcean (check your e-mail). Once in, create a new user with sudo privileges so that you won’t have to login as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;root&lt;/code&gt; every time.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# adduser &amp;lt;username&amp;gt;
# gpasswd -a &amp;lt;username&amp;gt; sudo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Terminate your current SSH session and SSH into your droplet with this newly created user.&lt;/p&gt;

&lt;p&gt;Once logged in, change the Nginx configuration to match your domain name. Open up the configuration file using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo nano /etc/nginx/sites-available/ghost&lt;/code&gt; and modify the value for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;server_name&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;server {
    listen 80;
    server_name example.com;
    ...
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next, change the domain name in Ghost’s configuration file, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.js&lt;/code&gt;. Note that the droplet is automatically configured to run in production mode. Open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.js&lt;/code&gt; using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo nano /var/www/ghost/config.js&lt;/code&gt; and modify the value for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;url&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;production: {
    url: 'http://example.com',
    mail: {},
    ...
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Restart Ghost using:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo service ghost restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once Ghost restarts, add an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;A Record&lt;/code&gt; to your domain using your DNS manager that points to your droplet’s IP address. The blog should now be accessible at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;example.com&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;step-3---ssl--https&quot;&gt;Step 3 - SSL &amp;amp; HTTPS&lt;/h3&gt;

&lt;p&gt;Since you will be required to login to Ghost’s admin interface using an e-mail address and a password, it’s a good idea to use HTTPS instead of HTTP so that your credentials are not sent in plaintext.&lt;/p&gt;

&lt;h4 id=&quot;step-31---install-lets-encrypt-client&quot;&gt;Step 3.1 - Install Let’s Encrypt Client&lt;/h4&gt;

&lt;p&gt;One way to secure your blog is using &lt;a href=&quot;https://letsencrypt.org/&quot;&gt;Let’s Encrypt&lt;/a&gt;, which is a new Certificate Authority that provides an easy way to obtain and install free TLS/SSL certificates, thereby enabling encrypted HTTPS on web servers.&lt;/p&gt;

&lt;p&gt;The first step to using Let’s Encrypt to obtain a SSL certificate is to install &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;certbot-auto&lt;/code&gt; on the droplet. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;certbot-auto&lt;/code&gt; Let’s Encrypt client can be downloaded to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/local/sbin&lt;/code&gt; and executed from there.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ cd /usr/local/sbin
$ sudo wget https://dl.eff.org/certbot-auto
$ sudo chmod a+x /usr/local/sbin/certbot-auto
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;step-32---obtain-a-certificate&quot;&gt;Step 3.2 - Obtain a Certificate&lt;/h4&gt;

&lt;p&gt;A SSL certificate can be obtained using the Webroot plugin, which places a special file in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/.well-known&lt;/code&gt; directory within the document root that can be opened (through the web server) by the Let’s Encrypt client for validation. To ensure that the directory is accessible to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;certbot-auto&lt;/code&gt; for validation, the Nginx configuration has to be modified using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo nano /etc/nginx/sites-available/ghost&lt;/code&gt; and the following lines have to be added inside the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;server&lt;/code&gt; block:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;server {
    ...

    # certbot-auto
    location ~ /.well-known {
        allow all;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Before closing the configuration file, note down the document root, which is the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;root&lt;/code&gt; directive within the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;server&lt;/code&gt; block (default: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/share/nginx/html&lt;/code&gt;) for later.&lt;/p&gt;

&lt;p&gt;Check the configuration file for any errors and if everything is fine, restart Nginx.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo nginx -t
$ sudo service nginx restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next, the SSL certificate can be requested using:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ certbot-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;certbot-auto&lt;/code&gt; initializes (which may take some time), there will be prompts for your e-mail, T&amp;amp;C and a subscription to EFF. The e-mail address will be used for notices and lost key recovery.&lt;/p&gt;

&lt;p&gt;If everything is successful, there will be an output message that specifies the directory in which the certificate and chain have been stored as well as the expiry date of the certificate. Verify you have the following files inside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/letsencrypt/live/example.com&lt;/code&gt; (using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo ls -l&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cert.pem&lt;/code&gt;: Domain certificate&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;chain.pem&lt;/code&gt;: Let’s Encrypt’s chain certificate&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fullchain.pem&lt;/code&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cert.pem&lt;/code&gt; &amp;amp; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;chain.pem&lt;/code&gt; combined&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;privkey.pem&lt;/code&gt;: Certificate’s private key&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;step-33---configure-tlsssl-on-nginx&quot;&gt;Step 3.3 - Configure TLS/SSL on Nginx&lt;/h4&gt;

&lt;p&gt;Now that the certificates have been generated, the Nginx configuration has to be modified.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo nano /etc/nginx/sites-available/ghost
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ...

    # certbot-auto
    location ~ /.well-known {
        allow all;
    }    
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The above configuration allows Nginx to listen on port 443 with SSL enabled and tells it to use the Let’s Encrypt SSL certificate. The new server block at the end of the file redirects any HTTP requests (port 80) to the HTTPS equivalent.&lt;/p&gt;

&lt;p&gt;Test the configuration file and restart Nginx if everything is okay.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo nginx -t
$ sudo service nginx restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The Let’s Encrypt TLS/SSL certificate is now in place and can be tested by visiting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://example.com&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id=&quot;step-34---change-ghost-configuration&quot;&gt;Step 3.4 - Change Ghost Configuration&lt;/h4&gt;

&lt;p&gt;Next, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;url&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.js&lt;/code&gt; has to be changed to its HTTPS equivalent and for increased security, admin pages should be forced to use SSL.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo nano /var/www/ghost/config.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;production: {
    url: 'https://example.com',
    mail: {},
    forceAdminSSL: true,
    ...
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Restart Ghost using:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo service ghost restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;step-35---set-up-auto-renewal-for-certificate&quot;&gt;Step 3.5 - Set Up Auto Renewal for Certificate&lt;/h4&gt;

&lt;p&gt;Let’s Encrypt certificates are only valid for 90 days, however, they can be easily renewed using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;certbot-auto&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The final step is to set up a cron job that will periodically execute this automatic renewal. Since the renewal first checks for the expiration date and only executes the renewal if the certificate is less than 30 days away from expiration, it is safe to create a cron job that runs every week or every day.&lt;/p&gt;

&lt;p&gt;Edit the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;crontab&lt;/code&gt; for the root user using:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo crontab -e
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Add the following lines at the end of the file after selecting an editor:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;30 2 * * 1 /usr/local/sbin/certbot-auto renew &amp;gt;&amp;gt; /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;certbot-auto renew&lt;/code&gt; at 02:30 AM every Monday and restart Nginx at 02:35 AM. The output produced by the renewal command will be piped to a log file located at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var/log/le-renew.log&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;step-4---start-blogging&quot;&gt;Step 4 - Start Blogging!&lt;/h3&gt;

&lt;p&gt;Finally, simply visit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://example.com/ghost/&lt;/code&gt; and create an account to start blogging. Check out Ghost’s &lt;a href=&quot;https://help.ghost.org/hc/en-us/categories/203268947-Ghost-Pro-&quot;&gt;user documentation&lt;/a&gt; for questions regarding using Ghost and the &lt;a href=&quot;http://support.ghost.org/developers&quot;&gt;developer documentation&lt;/a&gt; for questions regarding the inner workings of Ghost.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;references&quot;&gt;References&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-ghost-application&lt;/li&gt;
  &lt;li&gt;https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-14-04&lt;/li&gt;
  &lt;li&gt;http://support.ghost.org/setup-ssl-self-hosted-ghost/&lt;/li&gt;
  &lt;li&gt;http://support.ghost.org/config/&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 05 May 2017 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Bootstrap Cards</title>
        <link>http://suyashlakhotia.com/blog/2017/05/04/bootstrap-cards.html</link>
        <guid isPermaLink="true">http://suyashlakhotia.com/blog/2017/05/04/bootstrap-cards.html</guid>
        <description>&lt;p&gt;&lt;strong&gt;Bootstrap Cards&lt;/strong&gt; (&lt;a href=&quot;https://github.com/SuyashLakhotia/BootstrapCards&quot;&gt;GitHub&lt;/a&gt;, &lt;a href=&quot;http://suyashlakhotia.com/BootstrapCards&quot;&gt;Demo&lt;/a&gt;) is a simple Bootstrap template I built about a year ago (and still maintain today) that implements card-based design. It’s built on HTML, JavaScript &amp;amp; Sass (compiled to CSS) and incorporates a few open-source JavaScript &amp;amp; CSS plugins/libraries for animations and icons.&lt;/p&gt;

&lt;p&gt;I created Bootstrap Cards because I wanted to learn Sass, become fluent with Bootstrap and explore the basics of web design. Through the project, I also managed to pick up Gulp and Bower, which are now irreplaceable tools I use for all my front-end projects.&lt;/p&gt;

&lt;p&gt;There are three main templates within Bootstrap Cards. The first is a template for a one-page website or home page, which I also use for my personal website.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/05/Bootstrap-Cards/Home-Page.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The other two templates are for a blog-like website. The first is a template for a blog home page with links to all the posts and the second is a template for the actual blog posts.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/05/Bootstrap-Cards/Blog-Home.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/img/2017/05/Bootstrap-Cards/Blog-Post.png&quot; alt=&quot;&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;While the template does implement its own typography, navbar and other components, the main idea behind Bootstrap Cards is the &lt;em&gt;cards&lt;/em&gt;, which was fairly simple to implement using Bootstrap’s grid and some custom CSS (below).&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- Example of Card on Home Page --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;card-wrapper card-big&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    ...
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- Example of Card on Blog Home --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;card-wrapper card-small&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    ...
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-sass highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nc&quot;&gt;.card-wrapper&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;relative&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;#fff&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;box-shadow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;5px&lt;/span&gt; &lt;span class=&quot;mh&quot;&gt;#777&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nc&quot;&gt;.card-big&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;20px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;20px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;30px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;40px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;30px&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nc&quot;&gt;.card-small&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;40px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;40px&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;@include&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;small-screens-only&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nc&quot;&gt;.card-big&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;padding-right&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10px&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;padding-left&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10px&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nc&quot;&gt;.card-small&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;25px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;20px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;30px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10px&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Thu, 04 May 2017 00:00:00 +0000</pubDate>
      </item>
    
  </channel>
</rss>
