A brief overview of the tech used to create Notessimo.

The Flash Days (2007-2014)

Past versions of Notessimo used to be in Flash, it was quite the limited platform, especially back in the V1 days (~2007). To produce sounds dynamically I had to resort to a clever trick of actually generating byte by byte a .swf (flash file format) that represented an empty flash file with only a single sound object being played and load those bytes! If I remember correctly, to play without gap, the length also had to be a multiple of 2048 and properly timed to play at the correct frame, surprisingly it worked pretty well!

Flash Logo     phpbb Logo   MySQL Logo  

V2 introduced the website (php) and forum (phpBB) along with the database (mysql) of user-generated content. V3 improve on that, still being made in Flash but the website was now using Invision Power Board.

Notessimo V1   Notessimo V2   Notessimo V3

Above from left to right: V1 (2007), V2 (2008), V3 (2014)

Revival (2020 Pandemic - Present)

I was pretty under-stimulated at my current job at the time and decided to start out a Mod Tracker player in C# as a fun side-project at home to improve my unsafe / low-level / optimization skill in C#. With the news that Flash was going to die, I felt pretty bad that soon all the (70k+) songs in the database were going to become unplayable and be forever lost. I then repurpose my library to also support the Notessimo file format with a focus on fast dynamic music synthesis usable for video games.

C# Logo       Mod Tracker

With the pandemic now forcing us all at home, what started as a simple player to preserve all the user-generated content evolved to a brand-new re-imagining of the composer for the modern age.

I settled with Unity as the framework for the composer / player; battle-tested, video games oriented, use C# and used by nearly everyone in the industry, it was a no-brainer. Although, very far from perfect sadly, but my love / hate relationship with Unity will be discussed in further details in future posts.

Unity Logo

I needed a brand-new website as well and decided to go with NextJS, wanted to see what the fuss was all about since it uses React. Loved the concept behind NextJS, everything is stored as static files that can be generated / updated on-demand, you get an html version that is served on the first request and subsequent pages only load a small json files. Makes eveything lightning fast compared to the vast majority of websites that still do server-side rendering. React on the other hand, I had a mixed reception, especially since when I started using it, everything was class-based, took a break, and came back with everything now being functional components. Not sure it was for the best though, but I jumped on the bandwagon nonetheless since I wanted to keep my web-dev skills up to date (React is the most popular web-framework at the time of writing).

NextJS Logo       React Logo       Typescript Logo

On the backend side I decided to check out Kubernetes and absolutely loved it! Never will I go back to the good-old days of SSH into a VPS, manually editing config file, upgrading linux, etc. I keep a minimum of 2 pods running for each of the services I created along with load-balancing. Currently, it is overkill since Notessimo doesn’t need multiple machines but again, it was something I wanted to try to keep my skills up to date, previously I had use ElasticBeanstalk. And even if it only uses one machine currently, I will argue that the simplicity of having just a single .yaml per service (+imposing limits) and the ability to easily move between hosting provider if I wanted to, is well worth it.

Kubernetes Logo

For the database I settled with PostgreSQL, having used MySQL in the past, I wanted to try something different this time around. For a quick rest API interface, I used PHP, not very sexy, but it gets the job done and the vast majority of the workload is simply talking to the database via manually crafted SQL requests.

PostreSQL Logo     PHP Logo  

Storage is done on an S3-like service and delivered through a CDN.

S3 Logo       Cloudfront Logo  

The community forum was moved to Discourse with its own domain and with a custom plugin that offers deep integration with Notessimo, like the ability to share song as embed similar to YouTube. It is also used as the account management / login system. I cannot recommend Discourse enough as an operator, it is extremely well made.

Discourse Logo

Putting all of that together we get the new and improved Notessimo! The app come bundled with a WebView so the website / community is always easily accessible and can talk to the Unity app.

Webview / Unity

Thanks to Unity’s cross-platform support (and WebView being now available natively on all platforms), we can have a native version of the app for iOS / Android / Windows / Mac or even on the Web with Unity’s WebGL export.

This new version is vastly more complex than previous version of Notessimo but is also easier to maintain and allow for much more features, like the instruments database (currently at over 14K+ instruments!).

Thanks for reading! Enjoy this awesome song by Antonim!