Completed Learn TypeScript Course on Codecademy

Back in December, I completed the C# course on Codecademy. This was mainly in order to be able to broaden the scope of my contribution to the project I was involved with at Unity and take a step outside the Python bubble I had for so long limited myself to. This was shortly before I went on paternity leave. On returning from my leave, however, I found that a lot had changed. Most relevant to this post, the team had decided to move away from the Unity-oriented C# implementation of the product to one in TypeScript.

I, for one, had never programmed before in TypeScript but this was not going to deter me from giving it a shot. Having had a positive experience in learning C# on Codecademy, I was pleased to see that they had a course on TypeScript as well and signed up for it immediately. What was different this time was that I wasn’t learning TypeScript solely from the course. I already had a team implementing a product with this language, and this served as a very valuable means to get hands-on experience with it while I got myself familiar with the fundamentals and features of the language through the course. I noticed quite a few similarities to Python (focus on scripting, pyenv versus nvm for managing language versions and packages, similarity between npm / npx commands and the python command), and this helped me hit the ground running. What unexpectedly helped me a lot was my use of mypy in making my Python code type-safe over the past year or so thanks to my colleague Matti’s insistence. I felt totally at home in adding and manipulating the types of variables in TypeScript, which is something that would’ve taken me a while to get used to otherwise. Anyway, now I’m actively contributing to our new codebase thanks to the kind feedback and review of my colleagues and it feels good to be getting better at a new way of expressing myself in code :-).

Over the past three years, I have (and might I add, serendipitously) ended up programming in Standard ML, Racket (both as part of an excellent series of courses on functional programming offered on Coursera), C# and now TypeScript. It’s hard to measure how better a programmer this has made me, but it has certainly broadened my perspective to what one can do across programming languages and how it’s only a matter of getting used to some basic (often superficial) differences in how one reads and writes code before being able to apply what one has learnt or used in a previous language. The theoretical concepts, of course, are very similar. It’s just that some languages make it easier to do certain things than others. And this was one of the things that was emphasised in the Coursera courses on Programming Languages. Over the past year I have worked with some excellent programmers at Unity, some of whom have been academically involved with Programming Languages, and I bet any wisdom I have to offer in this little post would only scratch the surface of what they might have to say on the subject. Anyway, I really look forward to see where things go from here for me!

Oh, and of course, I did get a shiny new certificate of completion from Codecademy!

Completed Learn C# Course on Codecademy

It’s been just over a year since I started working at Unity, and it might come as a surprise to some that I haven’t coded in C# during all this time. Why? Because Unity is written in C# and so is much of what is created using Unity. To be fair, I was able to get on with my work using just Python given that it was mostly research and prototyping. I did try learning to code in C# through some Unity tutorials back in December 2020, but those turned out to be more advanced than I could handle and didn’t cover the absolute basics well enough (at least what I had come across) so I shelved that effort then.

Fast-forward to a year later in December 2021, and I found myself having to go on a month long leave to be in India while my wife and I expect our first child. Other than taking care of her and catching up with my parents who I hadn’t visited since around two years owing to the pandemic, I had quite a bit of free time on my hands. So I decided to take up the task of learning C# once again. This time, I came across Codecademy, where I found introductory courses for different programming languages including C#. And I’m talking real beginner stuff – how to declare variables, conditionals, loops, etc. This was great because, although I could understand these basics well enough without a course, it seemed to gracefully lead on to more advanced concepts such as classes, interfaces, inheritance, LINQ, etc.

So I got started with the course. Codecademy provides one with a browser-based editor and terminal to write and compile one’s code for convenience. I actually found it annoying because it was quite sluggish, didn’t have auto-completion and gave me no idea of how I would write the code on my own machine having set up everything I need to run C# code locally. So I took some time to research how this is done – installing the Mono Compiler and the necessary Dotnet libraries for Linux to write and compile C# and Dotnet projects respectively. Not just that, it took a while to then install the necessary Omnisharp libraries in order to make auto-completion work in my editor of choice – Vim! I’ll try to write a more detailed post on this sometime later, but no promises – the baby is here now ;-).

Once all that was done, I was ready to go! I got done with the course in about a month, at my own steady pace. Repetition was the key – I made sure to write every piece of code myself in my local machine although a lot of it was the same, such as imports, base class and main function declarations and so on. That really helped with developing fluency and also getting a sense of what is needed and not needed in different scenarios. The course, I must say, is very well-designed. The first few chapters were bordering boring for me because I was already familiar with much of what was there, having programmed in C / C++ in the long past but once I got to the chapter on Classes and Objects, things started to get more interesting! What helped was that over the past year, I maintained some discipline in writing typed Python code with the help of MyPy and also using abstract classes via the ABC Python module. C# being strongly typed, the practice of using types in Python obviously helped. But working with abstract classes in Python certainly made it easier to understand interfaces and inheritance in C# better! Same when it came to references, because I did read up quite a bit on mutability in Python. And finally, the section on LINQ was a lot of fun, and bore resemblance to the kind of step-by-step data-processing code I wrote about a year ago in PySpark.

So, now that I’m done with this course, I have this shiny certificate acknowledging my effort!

No alternative text description for this image

Next, my plan is to head over to CodeWars and get started with a few Katas to further consolidate what I have learned so far! And perhaps think of an idea that would help me better understand how to organise my C# code into a larger project. Still a long, exciting way to go!

Hello, Unity!

I’m very pleased to announce that, starting today, I will be a Senior Machine Learning Developer at Unity Labs in Copenhagen. Its parent company – Unity Technologies, is well-known for having produced one of the most widely used gaming engines – Unity. I’m super-excited about this change of focus in my work from music to gaming, and really look forward to getting started!

At Unity Labs, I will be creating Machine Learning solutions in technology for use by Game Designers. This is about all I know for now, and hope that I can share more updates as time passes.

Goodbye, Moodagent!

Today I handed in my resignation at Moodagent. It’s been a great year and some months working in this fast and ambitious company! I will associate this experience most with the great friends I’ve made here, my focus on data preparation, Apache Spark, Collaborative Filtering and a feeling that I’ve really improved my programming abilities thanks to some excellent Coursera courses (this one, and this one) I completed while working here.

It’s time to move on to new pastures! An update to follow soon.

Attending the 20th International Society for Music Information Retrieval Conference (ISMIR 2019)

It’s just been confirmed that four of us from Moodagent – Reinier de Valk, Pierre Lafitte, Tomas Gajarsky and I, will be attending ISMIR 2019 in Delft (The Netherlands). This year, two of my colleagues from Moodagent will be presenting their work at ISMIR:

  1. Reinier will be presenting his paper, titled “JosquIntab: A Dataset for Content-based Computational Analysis of Music in Lute Tablature” in the main conference.
  2. Tomas will be presenting his paper, titled “Reinforcement Learning Recommender System for Modelling Listening Sessions” in the Late-breaking session of the conference.

Do stop by at these posters to learn more about these interesting topics!

Hello, Moodagent!

It’s been about four months since I wrote here about leaving Jukedeck. So after a nice long break, I’m very pleased to share that I’ll be joining Danish music streaming startup Moodagent on the 17th of July, 2019. While the streaming service itself is new and hasn’t been launched yet, the company Moodagent A/S that owns it has been around for nearly two decades having built several products around their core technology for analysing musical content. You may have even come across their first music app on your Nokia phone back in the day! You can read all about them on Wikipedia, and find out more about the Moodagent streaming service on their website. I hear they’ll be launching it very soon!

I’ll be working in the Machine Learning team of the company as Senior Research Scientist on the design and development of their content organisation and music recommendation systems. I really look forward to the new beginning in Copenhagen and to learning a lot of new things from working on an area that’s still quite new to me. And also travelling around beautiful Europe!

Getting Started with Python Pandas

I finally decided to get myself familiar with pandas while working on a recent side-project related to recommender systems. When I got started with it, I was still stubborn that I could achieve most things I needed to do in relation to data pre-processing with Python modules like tools like glob, json, numpy and scipy. True as that may be, I found myself spending way too much time writing routines to process the data itself and not getting anywhere close to working on the actual project. This was very reminiscent of the time a few years ago when I got immersed in writing code to manually compute gradients for various neural network architectures while getting nowhere in developing a music prediction model before finally deciding to make my life easier with theano! And so, this seemed like the perfect time to get started with learning pandas.

In the past I’ve found that, especially when it comes to learning useful features of new modules in Python, a hands-on and practical approach is much better than reviewing documentation and learning various features of a module without much of an application context, so I started looking around for such tutorial introductions to pandas. In the process I came across two invaluable resources that I thought I’d highlight here in this blog post. These really aren’t much, but gave me a surprisingly thorough (and quick) start to employ pandas in my own project.

Kaggle Learn

Kaggle Learn has a bunch of very well-organised and basic introductory Micro-courses on various Data Science topics from Machine Learning, to Data IO and Visualisation. I get started with the Pandas Micro-course which proved to be the ideal starting point for someone like me that had never used the module previously. This can be followed up with some of the other micro-courses, such as the one on data visualisation or embeddings which help one understand various concepts better through application. In fact, it’s what I’m planning to do as well!

Pandas Exercises on GitHub

So the Pandas Micro-course was a great starting point, but still left me wanting more practice on the topic as I still didn’t feel totally fluent. It was then that I stumbled upon a fantastic compilation of Pandas exercises on GitHub by Guilherme Samora. So I cloned the repository, loaded these exercises up on Jupyter Notebook and got down to solving them one after another! This really did help with getting more fluent with the rich set of tools that Pandas has to offer.

By the time I was done with Guilherme’s exercises (only a couple of days after starting with the Kaggle micro-course), I felt ready to apply my newly acquired pandas skills to my own project, and to discover more about the module through it. There certainly were plenty more resources that a quick Google search returned, but none appealed as much to me at a first glance, as the two I finally went with.

I’m sure I have only scratched the surface when it comes to useful pandas learning resources, and I’m very curious to hear about those that others have found useful, and why, so that I can look them up as well! So do feel free to share them in the comments below.

A New Blog Series on the Music Tech Community – India Website

As some of you might already know, I have been volunteering with a few of my peers in India to promote awareness about Music Technology in the country through the Music Tech Community – India initiative. Upon my suggestion, during the past months we had agreed upon and planned to begin a new blog post series that would contain interviews with individuals engaged with Music Technology in India, or elsewhere but who are from India. We hope that readers of this blog post series will have much to learn from the experiences of these individuals and that this will help them gain valuable insights into the field and inspire them to shape their own careers in the future.

I’m very pleased to announce today that we just published the first post in this series on the website! It is an interview with an active member of the community and a researcher applying Information Retrieval techniques to Indian classical music – Ajay Srinivasamurthy. During the weeks that preceded the publication of the post, we got in touch with Ajay who kindly offered to take part in this initiative. You can read what Ajay had to say during the interview in the blog post.

I believe this is a great start, and I look forward to more of such interesting chats in the future!

Goodbye, Jukedeck!

This is just a quick post to let everyone know that I have decided to leave Jukedeck. It’s been a unique and fascinating journey the past three or so years with a flexible and forward-thinking company, and a stimulating work environment. I couldn’t have asked for a more apt transition into employment after my PhD than the one that led me to Jukedeck and I’m really grateful for all that I have learned here, the people I’ve had the opportunity to work with and everything the company has done for me during this period. This also means that I’m no longer going to be living or working in the UK, and my wife Nina and I have some new and exciting plans for the future that I’m really looking forward to.

There have also been some interesting developments in regards to where I’ll be going and what I’ll be doing next now that my tenure at Jukedeck has come to an end. I’ll post updates here on my blog as and when things take shape in the coming months.

Oral Presentation at the 19th International Society for Music Information Retrieval Conference

A few months following the acceptance of our paper at ISMIR 2018, I attended the conference in Paris with several of my colleagues from Jukedeck. We had a fairly large presence there dwarfed (as far as I can tell) only by a larger one from Spotify. The conference was organised very well and everything went-off smoothly. It was great to be back in the beautiful city after my last visit nearly 8 years ago!

I was particularly pleased by the new format for presenting accepted papers at this ISMIR wherein each paper was given both oral and poster presentation slots thus removing the traditional distinction between papers that exists in conferences. In the case of our paper on StructureNet, I made the oral presentation and my colleagues and co-authors – Gabriele and Marco – made the poster presentation. Fortunately, this year ISMIR was streamed live and the videos were later stored on YouTube so I’m able to share the video of my presentation with you. It’s only a 4-minute presentation so do check it out! And it appeared to me each time I passed our poster by that it received a lot of attention, and this was of course great! I, with help from members of my team, also prepared a blog post on StructureNet which was published recently on Jukedeck R & D Team’s Medium page. I urge you to give it a read if you’re curious what the paper is all about. Here’s a picture of the Jukedeck team at ISMIR:

The Jukedeck Team at ISMIR 2018 – (from left-to-right) Ben, Reinier, Gabriele, Matt, me, Katerina and Marco.

I also signed up to play in this year’s ISMIR jam session organised by Uri Nieto from Pandora! If I remember correctly, it’s something that started in 2014 and has been getting more popular by the year. As anticipated, the jam session was a success and a lot of fun, with music ranging from AI-composed folk tunes to Jazz, Blues, Rock and Heavy Metal. I played two songs with my fellow attendees – Blackest Eyes by Porcupine Tree and Plush by Stone Temple Pilots. My friend Juanjo shared a recording of the first song with me in which I played bass.

As always, ISMIR this year provided a great opportunity to make new acquaintances, and meet old friends and colleagues. As it turns out quite a few of my friends from the Music Informatics Research Group (MIRG) at City, University of London showed up this time and it was great to catch up with them.

The MIRG at ISMIR 2018: (from left-to-right, back-to-front) Shahar, me, Daniel, Tillman, Andreas, Radha and Reinier.

And to top it all off, my master thesis supervisor Hendrik Purwins managed to make it to the conference on the last day giving me the opportunity to get this one selfie with Tillman (my PhD thesis supervisor) and him.

Tillman, me and Hendrik at the conference venue.