T+4 Years And Counting: Turning over a new leaf

On the eve of the day I start my masters degree in Robotics, I am definitely in a better state of mind than I was when I started undergrad.

I have to start by saying that the last year was blissful. My last semester on campus had very little in the way of any academic pressure and my thesis in Singapore at the ARL was everything I wanted it to be and much, much more. It has given me cold feet about whether the sharp dip in academic workload from my third to fourth year will become a detriment to how I will be able to handle the high workload of a master’s degree. On the other hand, the break from frantically jumping from project to another has given me ample time to relax and evaluate what I want from this degree. Despite speaking with many people who are treading the same path, my goal of what a career in robotics will look like isn’t entirely clear to me. Yet, I have high hopes that this industry will be entering a golden era not long after I graduate.

I expect a lot of changes in doing a program which demands exacting knowledge of three major fields of engineering, but there is plenty in the comfort zone of computer science that I can sink my teeth into. I am excited to see what the University of Pennsylvania and its Robotics program has to offer.


One of the few pictures I have of Penn’s lovely campus

It’s quite different from how I felt when starting undergrad in 2015, when there was some negativity in the air, a sentiment which was often shared with several batchmates who felt they could’ve gone to other colleges or taken other branches had things gone their way. That said, BITS Pilani’s vision and policies awed many an impressionable fresher, me being one of them. Unfortunately, it can’t be said that anyone graduating now would look back as fondly on their alma mater now as they did back then. It’s clear that the academic utopia presented to us during the orientation was indeed too good to be true. It’s not for lack of trying on the part of faculty or administration however, but instead of a combination of pedagogy not being able to keep up with the times and the difficulty in filling academic positions with highly qualified professors in India. For whatever reason, the students and the faculty were always at odds with one another and that has been detrimental in developing a healthy campus culture. Giving credit where it’s due, college gave me the freedom to try out, succeed and fail at a number of pursuits with very little impact to future prospects. This is not a luxury I can take for granted anymore, for now the costs are far greater.

My priorities changed the most in my first year of college and I’m glad that I didn’t fixate on any goal till I had a visceral feeling that a good idea (read GSoC) could work out. I had initially fancied myself graduating with a 9+ CGPA at the end of college, but my first semester’s result made that vision a little too ambitious. Winning (yes, winning) the ACM-ICPC was another fascination I had during my first semester, but after a few months of grinding through various online archives, I realised that the pressure of competitive coding wasn’t for me. There was still magic in programming for me and I had an idea during the previous summer vacation that I felt could realistically turn into a GSoC project. But that kernel of an idea only flourished when I pulled an all nighter coding a prototype of my idea during my first Diwali vacation on campus. From there on, I wasn’t chasing an abstract idea, I was doing something far more tangible and that gave me the thrust I needed to get in touch with numerous KDE developers to put in a solid proposal and formally become a GSoC student that very year.

However, that led to hubris in my second year where I felt that any project could be conquered. I then later learning the hard way that perhaps I need to be a bit more discerning about my own capabilities after having wasted a lot of time working on projects that had little to show in the end. I think that in the most general sense, college is a good time to figure out your personality traits and to see what works and what doesn’t. Time is usually abundant and the repercussions of bad decisions are temporary. It’s hard to imagine any other time one would get a chance to explore like this. Looking back, there is plenty I will cringe about the 2016 version, or heck, even the 2018 version of me. But isn’t that what personality development is all about? I would say that cringing on a past version of yourself (while uncomfortable), is a good thing because it shows that you are able to identify undesirable traits about yourself that you couldn’t previously.

I would be remiss not to mention all the awesome people I’ve met along the way. Much of what I’ve been able to achieve in college and what has been crucial in bringing me to UPenn is because of these experiences of building strong connections with people who have gone out of their way to help me. I’m also eternally grateful to those people who told me when I was out of line or when I wasn’t thinking rationally. It’s also been great to have the privilege to travel the world during undergrad thanks to a couple of KDE conferences. My time with the ARL in Singapore was a distillation of everything I could have wanted from an internship and I feel much more prepared for master’s after my time there.

In conclusion, I am quite looking forward to my time as a master’s student and getting back on the treadmill of academic productivity. Graduate school will be another major reset of sorts, of the same kind as which happened when switching from school to undergrad. I hope that it won’t be long before I develop some perspective on what life as a graduate student is like so that I can share it here. I also look forward to getting reacquainted to life in the US and seeing all that this country has to offer. Above all, I’m looking forward to seeing what education is like when done at its highest level.

The Summer of Pokemon

This has been the first summer vacation in a while in which I’ve had absolutely nothing to do. It’s a far cry from the last three summers which had been filled with (at least in 2016 and 2018) interesting projects to do.

I have a tremendous opportunity waiting for me on the other side of this vacation – pursuing my Masters in Robotics degree at UPenn. It is remarkable that with hardly a month to go to MS, the specifics of life after graduation are still hazy. That said, if undergrad has taught me anything, perhaps things are best left unplanned. It’s not to say that I haven’t had my concerns about MS, but my initial trepidation is gradually turning into excitement.

One of the main reasons which made shift from CS to Robotics was that the greater interdisciplinary focus in Robotics would give me more options to figure out where I would really want to do. In some sense, it is giving me a second chance at postponing an important decision of which path of engineering to go down.

It’s nice to be back at home after the internship in Singapore and it’s been great to catch up with people from school and college. If anything though, this summer was the Summer of Pokemon. I was lucky to snag a used 3DS XL in near mint condition for S$45 on my last day in Singapore and it’s made playing my library of 3DS games a joy.

For the first time ever with my Pokemon game collection, I deleted my old save and replayed Pokemon Moon from the beginning till the end of the postgame. Shortly after that, I borrowed a friend’s cartridges to finish off Pokemon X and Pokemon White 2, to bring my count of completed Pokemon games to nine. Or rather 8.5 because I only vicariously played through about half of the Kanto part of SoulSilver. With this experience, I think it can be said that Pokemon is not a series to be binged. It is to be enjoyed slowly, one bit at a time. The three games which I played over the summer felt very similar and by the end, I blitzed through the last third of White 2 in a five hour marathon.

My second playthrough of Moon only supported the opinion I had after finishing my first playthrough - that the series was heading down a troubling path. Even after trying to make the game harder for myself through a Nuzlocke, it was hardly a challenge because of the change in the X-item mechanics. The story wasn’t bad, but it felt very hamfisted and I dreaded the repetitive cutscene interruptions on going to each flag on the map. Speaking of the map, Alola looks a lot larger than it really is because the beautiful but short routes do not lend themselves to the same half an hour exploration fests that Platnium used to have. Also, the less said about the performance of this game, the better. After a hundred battles the delay between turns becomes less apparent but it’s impossible to go back to Moon after experiencing how fluid Gen V was on the DS. Double battles are so poorly optimised that I couldn’t bring myself to do more than ten battles of the Battle Tree before just switching to another game.

First impressions of Pokemon X were more positive. The game’s performance was markedly better than Moon. X was also one of the more traditional Pokemon games with plot and objectives, only having Mega Evolutions thrown into the mix. Kalos reminded me a lot about Unova. X also tried to make better use of the 3DS’s superior 3D capabilities over the DS, but the implementation left much to be desired. The camera angles were always off in Lumiose city and only certain areas of the map supported the 3DS’s 3D mode which was very confusing. Unlike the O3DS, the 3DS XL doesn’t have a 3D mode indicator LED so it requires pure guesswork to figure out which parts supported the 3D effect. Meaningful NPC dialogue in this game is hilariously lacking and it’s left me wondering if the translation effort to make the worldwide release was using a briefly edited version of Google Translate. Random trainer battles felt obstructive and barring a few well produced cutscenes, netither the story nor the rivals are nothing to write home about. Another pain point were all the Battle Frontier references in X, which as we now know, never materialised and doesn’t look like it will in the near future either. My personal theory is that the Battle Frontier was intended in a third version of XY, but the game was cancelled to make way for Gen VII.

After finishing X, I had high hopes for White 2. Pokemon Black has always been my favourite Pokemon generation, although some part of that can be attributed to the fact that 14-year old me could finally relate to a Pokemon game which didn’t treat its players like small kids. It took me some time to get used to the DS era graphics, though this game made the best use of the console it was released on among all Pokemon games. It was so nice to see a new Unova after a two year absence (well, eight years for me anyway). I have to say, I did really like White 2. The handholding and cutscene spam which plagued Gen VII is much reduced and the difficulty of the game (even on Normal mode) is quite enjoyable. I suspended my Nuzlocke for a normal play after getting wiped out by Burgh’s Leavanny. It was the first time I had to actually strategise and make a suitable team for a gym leader ever since FireRed which I played back in 2005. I found a Darumaka outside Castelia who fit the bill and swept Burgh in no time. I didn’t find an EXP Share for some reason and the game was all the better for it. The regional Pokemon selection is excellent and there are plenty of great Gen V Pokemon to use. The story was not quite on the same level of the revelation the first Gen V games had, but after playing through X and Moon, this was a forgivable shortcoming for the better gameplay it had. There are a lot of subtle nods to the previous Gen V games through NPC dialogue which is miles ahead of what X has.

This little discourse on Pokemon games is years out of date, though it has been pretty interesting to play through half the series in reverse order to figure out where GameFreak started regressing on its best features to give us what looks like a rather uninspired effort for Sword & Shield. I do hope for the best, but I am not holding my breath for these games and I have no plans to invest in a Switch based on what I’ve seen so far.

Using the Logitech F310 gamepad with the DJI Tello

I really like the DJI/Ryze Tello.

It’s a great nano drone and its feature list is hard to match at its price point. The camera/video quality is very good and for a drone which solely relies on its WiFi hotspot for control and video streaming to a smartphone, the range is pretty decent as well. It’s impressively stable outdoors and the 10-15 minute battery life is adequate. As a trainer drone for new pilots, there’s very little to complain about.

However, the main thing which drew to me to buy the Tello on impulse was its marketing with an emphasis on being “programmable”. Unfortunately, I bought it without really looking into what this meant. I blindly assumed the Tello was hackable, but it turns out that the “programmable” features of the drone are limited to a few Scratch commands for writing basic scripts for movement. I wanted more control over the drone and initial impressions suggest that it has the technology to do a lot more than what the Scratch API exposes. The tiny drone has an infrared sensor for autonomous landing and uses optical flow for maintaining its position, which makes its sensor array unmatched for its price point.

The onboard Intel Myriad 2 SoC is advertised to have “14 Programmable SHAVE cores” but details on how to develop for this SoC are scarce. It’s a shame, because I would’ve really loved to see the autonomous capabilities of drone by implementing my own algorithms for it. The Tello uses this SoC for its Visual Processing Unit to keep it stable in flight, so I think it’s reasonable to speculate that this chip could be used for a larger variety of image processing applications. Moreover, the drone is clearly tuned for stability and this makes it feel sluggish despite the drone having the hardware to be much more nimble.

But I digress. I spent some time playing with different approaches to reverse engineer the Tello, and the main Python projects I found were:

Tello-Python: DJI’s official Python API for interacting with the Tello. Promising, but I found their sample apps glitchy.

TelloPy: This library is amazing. It appears to be a port of some of the reverse engineering work on the Tello conducted by the Gobot folks. The API supports everything offered in Tello-Python and much more. To top it off, I found the sample TelloPy apps far more reliable than their Tello-Python counterparts

I also suggest checking tellopilots.com for more mods and discussion about hacking the Tello.

The nice thing about TelloPy is its controller support using pygame. However, this is limited to the PS4, PS3, XBOne, and Taranis controllers in gamepad mode. My Logitech F310 wired controller wasn’t supported, so I figured out the button mappings in pygame and added it to the source of the joystick_and_video.py sample app. I’ve created a pull request for the same too. To download my fork of TelloPy, clone it from GitHub here:

git clone https://github.com/shortstheory/TelloPy/tree/F310 

After this, build and install tellopy. The one currently available on pip seems to be outdated .

cd TelloPy 

python setup.py bdist_wheel 

pip install dist/tellopy-*.dev*.whl --upgrade 

Now switch on the Tello and connect your computer to its WiFi hotspot. The Tello can be controlled using the F310 joystick using:

python tellopy.examples.joystick_and_video.py 

Press RB to takeoff and LB to land! The left stick is used for yaw and altitude control and the right stick handles roll and pitch.

Raspberry Pi Controller


It would be nice if this could work without the need of a laptop. I tested this by following the same installation steps on a Pi Zero W running Raspbian Lite and the setup works well. I added the script to the Pi’s crontab so it would start on every boot of the Pi:

sudo crontab -e 

Followed by adding:

@reboot python /home/pi/TelloPy/tellopy/examples/joystick_and_video.py 

To make the Pi Zero W automatically connect to the Tello when switched on, add the following lines to your /etc/wpa_supplicant.conf on the Pi:


The Pi Zero is small enough to be tucked in behind the controller, even with a small Li-ion battery for power. However, I imagine the range of the Pi Zero W’s Wi-Fi connection would only make it suitable for indoor flight. Fortunately, this can always be fixed by using a USB Wi-Fi dongle.

Things to be done

While the TelloPy API supports the directional flip capability of the Tello, it doesn’t map these controls to the joystick. I plan on dedicating the D-Pad for directional flips. I would also want the video streamed to the Tello to be saved directly to the Pi’s internal storage. It would also be interesting to see if I could get the Pi to handle the image processing tasks and control the Tello remotely.

Where has the magic gone?

A big change that I’ve realised during undergrad is that engineering doesn’t feel ‘magical’ anymore.


One of my favourite school projects: Wireless Electricity!

Of course, a vague term like ‘magic’ isn’t very expository, so let me start with where I’m coming from. In school I was completely besotted with every piece of technology with a screen on it. I might have spent more time caressing my Nintendo 3DS than I played on it. Hyperbole aside, I marvelled its glasses free 3D screen and it felt like its hardware had limitless potential applications if only I knew how to program for it. Of course, now that the Nintendo 3DS has been hacked, I am aware that its capabilities are far more limited than what I imagined in 2011. But at the time, the perception that smartphone class hardware could do incredible things was very exciting and it’s a big part of the reason I got into programming with a bit of electronics projects on the side.


So much was expected from this venerable console

I had the same feeling when we bought our first home laptop in 2013 (which is now lying unpowered and unused near my study table). My head was dizzy with possibilities and this was before I had an inkling of knowing anything about how to code. Cliche as it sounds, I felt a spark when I implemented a prime sieve to bring my runtime for a Project Euler question from two hours to a few seconds. This was reinforced by a delightfully geeky friends circle in school.


Arduino Temperature Display - displaying a balmy 24 degrees C

I experienced it again when I got to play with an Arduino a year later. It did blow my mind in the beginning that I could write C code to turn an LED on and off. One of my first Arduino projects during that time was to interface my UNO with a microphone to view the waveform on a screen using Processing. There was something very satisfying about practically understanding how sensors worked. In the end, I repurposed my UNO to function as a 7 LED binary display for my TMP36 ambient temperature sensor.

However, I think the turning point was during my first GSoC project after my first year of college. While learning how to develop good quality software for a terrific open source org like KDE was very inspiring in the beginning, I realised that the magic which I used to feel when programming was slowing being snuffed out the more I understood what I was doing. Once I had a robust mental model of the problem and its solution, writing code for it just felt like a perfunctory task. I was no longer fascinated by the fact that the code I was writing was arcanely converted to binary and executed on a billion transistors at its lowest level of abstraction. In the remaining three years of undergrad, I was fortunate to get the chance to work on some awesome projects, but the magic which I used to feel with doing something new is replaced with a wary feeling of knowing that I would need to figure out how to solve some pressing technical issue in the project. In that sense, I have developed a much better eye for spotting technical solutions.

Knowledge is a double-edged sword. Things were far more exciting when I was a brand-new, bright-eyed programmer, but it’s only because of the experience I have gleaned from one project that I have been able to do another. I could blame it on burnout earlier, but having had a very relaxed final year, I can’t say that’s the case anymore. It has led me to think that the exciting part was never the actual implementation (or coding in this case), but figuring out the solution instead. I am rather glad that this is how things have turned out, for I think an 18 year old version of me would’ve rather chased a failed start in GUI building/frontend web development if the coding part was what I enjoyed. All my reservations aside, I still loved the things I have worked on and the people I have met along the way. Yet, I wouldn’t mind treading some unfamiliar ground for rediscovering the magic which drew me to engineering in the first place.

The related discussion on Hacker News for this post can be found here: https://news.ycombinator.com/item?id=20222096

A Russian translation of this blog post can be found here: https://mygpstools.com/kuda-ischezla-magiya

Places to Visit in Singapore

I recently returned home from a very memorable 4.5 months in Singapore.

I’ve been to many places, met amazing people, and learned so much during my internship at the Acoustic Research Laboratory at NUS. I’ve also learned to become a bit more careful with my finances, which was all the more important given the constraints of my S$1000/month stipend. As I figured out during the course of my time in Singapore, this stipend doesn’t go very far in covering more than basic expenses. Nevertheless, there’s still plenty you can see in Singapore on a budget.

If you’re going to stay in Singapore for any longer than three days, buying an EZLink transport card is well worth the S$5 investment. EZLink cards work in all of Singapore’s modes of public transport and it’s much more efficient and cheaper than buying a ticket for every trip. CityMapper and SingaBus (iOS and Android) are your best friends when it comes to planning the best combination of buses and MRT lines islandwide. In my experience, the buses were much slower than the MRT (especially during peak traffic hours), but they are far more comfortable with ample seats and powerful aircon. It is also a good idea to check the EZLink trip transfer rules which can save you a lot of money if you plan in advance.

All the below places are either free or can be done for less than S$15 per person.

Sungei Boloh Wetlands


One of the many monitor lizards we saw that day

The Wetlands is a pretty interesting place located in North Singapore. It’s so close to Malaysia that you can easily catch a glimpse of Johor Bahru from the boardwalk. Unlike Singapore’s other parks, the Wetlands is an unfiltered experience. On a good day, you can easily expect to see several animals ambling about the forested area. We saw five monitor lizards, a number of mudskippers, schools of needle fish, an uncountable number of birds, a cobra (!), and even a wild crocodile lying just out of sight. It makes for a great day trip if the weather cooperates and the only thing you’ll need to spend here is your time.

Southern Ridges


The famous Henderson Waves Bridge

The Southern Ridges is a trail running through five parks, from Mount Faber (near VivoCity) to Labrador Nature Reserve (near the NUS campus). It’s an amazing 10km walk and I loved the views from the Henderson Waves bridge and the Canopy Walk. I really appreciated how green Singapore is from the views at Henderson Waves! As an aside, I tried making an 8km evening run from Mount Faber till Science Park, but I quickly got worn out by all the steps and elevation. Walking through the park is definitely more enjoyable.

Marina Barrage


A spectacular view from the Barrage

If you’re into ships, the Marina Barrage can offer quite a spectacular view. The Barrage is located near Marina Bay Sands/Shoppes. It feels very communal at the top of the Barrage, with several families setting up picnics and children flying kites. Unlike the Southern Ridges (which is breathtakingly beautiful, but far too strenuous for a run), this can be a part of a fantastic 10km running trail, starting from the Merlion Park to the Marina South Pier MRT Station via the Marina Barrage.

Pulau Ubin


View of Chek Jawa from the Jejawi Tower

This is one of the more exciting parts of Singapore. Pulau Ubin is an island located in the North-West part of Singapore. It’s accessible by a S$3 (March 2019) boat ride from Changi Village. Like the Sungei Boloh Wetlands, the island is geographically close to Malaysia. It’s so close that I noticed that my cellphone shifted to receiving signals from MyMaxis Malaysia instead of StarHub Singapore!


Cycling Trail at Pulau Ubin

While Pulau Ubin has had some artificial transformation, I got the feeling that NParks went to great lengths to make it easily traversable while preserving the natural beauty of the island. Speaking of traversal, the best way to get around Pulau Ubin is by mountain bike, which can be rented near the jetty for S$10-15 for the entire day. The Chek Jawa wetlands is similar to Sungei Boloh (though we didn’t see half as many wild animals when we went). The Ketam Mountain Bike Park in the west part of Pulau Ubin can be quite a challenge. The Blue Trails are moderately difficult with rough paths and small slopes, while the Black Diamond and Double Black Diamond trails are utterly brutal. Attempting the Black trails with the Reebok bike I rented was out of the question.

We spent nearly six hours cycling around Pulau Ubin. Carrying food and water is recommended, though there are plenty of vending machines dotted about the island. Sunscreen is also a must.

St. John Island


Singapore’s Skyline from the ferry

This is another island adventure, located towards the southern part of Singapore. The ferry ride to the island is wonderful and it was fun to watch the Singapore coastline go by - from the sweeping skylines of the Marina Bay Financial Centre to the HDBs in Jurong. Unlike Pulau Ubin, carrying supplies for St. John Island is imperative. There is no drinking water on the island, nor is there any food to be found. At my insistence, we went to see the Tropical Marine Science Institute’s research lab. Of interest is the bucolic Lazarus Island.


We spent half an hour skipping stones here!

The same ferry ticket also includes a stop at Kusu Island. Although Kusu looked lovely, we were far too exhausted and we had to beat a hasty retreat to Singapore after completely running through whatever little supplies we had brought with us.

MacRitchie Reservoir/TreeTop Walk


TreeTop Walk Suspension Bridge

These two places together are ideal for a very enjoyable day trip. I suggest starting from Windsor Park, hiking to the TreeTop Walk, and then walking to the MacRitchie Reservoir via the well-manicured Golf Link. The TreeTop Walk takes you between the tops of trees using a very unique suspension bridge originally constructed for ecologists to study the ecosystems of the tree canopies. The suspension bridge is one-way and is quite narrow. I went alone on a weekday and I loved having the entire bridge to myself.


MacRitchie’s Art Pavillion

MacRitchie has good running trails, boardwalks, and some much needed eating options once you finish the trail. Of note is the Leaning Tree in the middle of the boardwalk. The boardwalk was specifically redesigned in a section to accommodate this tree and this exemplifies how much Singapore cares about preserving its natural wonders!

There are many places which I also loved but didn’t make it to this list. Honorable mentions go to:

  • Gardens By the Bay
  • S.E.A. Aquarium
  • East Coast Park
  • Chinese Garden/Japanese Garden
  • Jewel (Changi Airport)
  • Woodlands Waterfront Park

I can’t recommended Singapore enough for a short-term visit or an internship. It’s a beautiful city with plenty to do, cheap and delicious food, and efficient public transport. What’s not to love?