Dispatches from a Nomad: Recurse Week 05
The week of June 12, 2023
Welcome to Week 5 edition of Dispatches from a Nomad 🎒
In case you missed last week’s edition, you can find it HERE.
This week I’m featuring my trip down to Marseille and the Beyoncé concert. Please note that Beyoncé was so important, she got her own section and photo album below.
A (Previous) Week of Music
Early into my Paris sejour, I got an email that Boiler Room was doing a Paris takeover. I was first introduced to Boiler Room through my friend Antonio with the iconic, and now with over 10 million views, Honey Dijon set in Berlin. Ever since that stream, I was hooked on them. I love their origin story of them setting a web cam at a random club in London and live-streaming the set and how it became an overnight hit. Boiler Room provides this beautiful bridge between the real world and digital world, connecting real people in real places with many more people in many different places, all through the web. For me, I have got to see some incredible sets from around the world, and it has prompted me to be on the lookout for new and local music scenes wherever I am in the world.
So when the Paris takeover tickets were announced, I immediate bought one, no hesitation. I didn’t need the information about who was spinning or what time it started or exactly where in the city it will be, I just knew that I was going. That’s the impression Boiler Room has left on me, to just trust in the dance party that they were about to throw.
Boiler Room x La Creole
As the event got closer, Boiler Room made an announcement of their collab they had in the making. Boiler Room’s raison d’etre is to support emerging artists, to connect local dance floors to the wider world, and to tell the stories from the fringes. They partnered with a queer & trans people of color (QTPOC) party known as La Creole. I didn’t know much about this party before going but one of my friends compared it to Papi Juice, which a Brooklyn-based QTPOC party and one that I have frequented a bunch back home.
I had initially bought just one ticket to go by myself. One of the things I learned early on in solo traveling was to be comfortable with doing things alone. Yes, like in an ideal world, sure, I would love to go with someone or with a group of friends but sometimes that isn’t possible and you have to make a decision: do I skip going to this event or do I brave it on my own. I’m glad I bought it when I did because the event sold out like immediately. Now I just had to think about my Boiler Room look 😎
My friend JF happened to hit me up the day of the event and asked me what I was doing. I mentioned that I was going to Boiler Room and asked if he was interested. He also shared an interest in going so I added myself to the waitlist in case we could grab him a ticket. I missed the first call for the waitlist, which meant the ticket was no longer up for grabs. I re-added myself to the waitlist, and as luck would have it, I managed to snag one for him. We met up and went to the show, it was in Parc de la Villette, home of a bunch of different venues and also the Philharmonie de Paris.
We got there and the energy was already palpable. You could feel both the bass of music and the warmth of bodies in motion. We entered the room and front in center we saw a group of dancers voguing on the stage in front of the dj set. It was magical ✨ We witnessed some fun dance showcases, more like a cypher for dancers, and the crowd was vibing with the whole experience.
Throughout the night, they cycled through three different dj sets all featuring different music from the African Diaspora. I ended my night early at a reasonable 4am so I could get some sleep before traveling down to Marseille Saturday afternoon. JF and I managed to find some somewhat functional Velib’s and we both biked back home.
Sunday evening, we arrived at the stadium and the entranced was lined with with massive crowds, cars, and electric scooters. Everyone was gleefully moving about in their silver and sequin outfits, cowboy hats, and disco-inspired attire, everyone eventually making their way to their seats or standing areas.
Before going, Nico and I had wanted to perfect a look for the big night, but we both failed to coordinate an outfit purchase then quickly learned that most clothing shops were closed on Sunday in Marseille! We did, however, find something to wear at a thrift shop but neither of our looks were worth writing home about. Sorry Beyoncé, we failed you 😔
After we survived one of the longest waits in line for a drink to stay hydrated for what would surely be a non-stop dance fest, we made it back to our seats and sat in anticipation of the show. After the many exciting chants and cheers in this beautiful open air stadium, the weather suddenly had a change in heart. It began raining, and heavily at points. Those standing on the field but not near the stage retreated to the outskirts of the stadium where the awning began for the seated area. After about 20 minutes, there was a break and we thought that it might be done. They sent out a crew to clean the stage and they were nearly halfway done when the rain returned and washed away all their efforts. After about 5-10 minutes more rain, Beyoncé and her team must have just said it, fuck it, the show must go on, and the stadium signaled that the show was commencing.
Beyoncé emerged with the rain coming down and started the show with some ballads. But after the ballads were finished, the show kicked into gear, going full steam ahead with Renaissance! From that point on, there were nothing but high-caliber performances throughout the show! Later when the rain back after a long reprieve, Beyoncé exclaimed, “This rain ain’t stopping nothing” and the crowd erupted in joy!
The sheer dedication and talent she exhibited was truly exceptional. This made my third time seeing her live: the On the Run tour in Paris back in 2014, at
Coachella Beychella in 2018, and now down in Marseille in 2023. She’s hands down the BEST performer I have ever seen live.
After being away in Marseille for a long weekend last week, I didn’t have a chance to work on my newsletter so I delayed sending it out until the past weekend when I would finally have time to sit down to write. The first two days of the week, I was still in Marseille and took a pause on trying to do project-related work there. I did resume on the segmentation work for my project.
I began digging into the Segment Anything Model some more this week and walked through the accompanying notebook to understand how to best export the model for my web app. The export option supported is ONNX, which stands for the Open Neural Network Exchange, and it’s a library that defines a common set of operators so that regardless of what machine learning library you use (
PyTorch, etc.), your model can be serialized and saved to a standard binary format, which can then be easily reconstructed and used for inference at runtime.
For one of my last projects at Mozilla, I focused on developing a local-first machine learning paradigm for the browser. The project’s goal was to make the browser smarter but without any data leaving the browser. Most machine learning approaches require centralized data aggregation to do model training, but we wanted to go about this differently. There were only a few solutions out there that I considered such as Tensorflow Federated, but nothing that supported the JS environment I was constrained to work in.
The other constraint I was given was that we would need this all setup so that we could take models directly from the data science team and have them work without any re-write for the desktop integration. I spent some time thinking through and writing a spec for this. Then I thought, what project works to bridge the gap between the JS world and the Python world? Pyodide does! 🐍 Pyodide is a project that compiles the cPython implementation of Python to WebAssembly using Emscriptem. This all means that with this library, you could have a full Python setup enabled in the browser. The project also compiled the Scientific Python stack (NumPy, SciPy, matplotlib, and pandas) along with a host of other packages.
So my idea was to use Pyodide to bring the Python environment to the browser via webworkers, and have that run off-thread for our training and re-training purposes. We could set up a scheduling procedure for the model (re-)training at whatever interval we wanted. And for the model training, we would be using sklearn, which is supported in Pyodide, and then save the output using the ONNX format. ONNX is supported for inference at runtime in a browser context via onnx-runtime, a project that is being spearheaded at Microsoft.
This would be ideal because model development work would be isomorphic: the data scientists could stay in the Python environment to develop models, and those models could then be trained in the browser and then be saved using ONNX. Those ONNX files could then be used in our inference module using the
onnx-runtime. My team and I managed to get this implemented! But ultimately the broader project was shelved and we never got to see if this solution would truly work 🥲
ONNX x SegmentAnything
I began working through the toy example web app that the SegmentAnything team included within the library, and was able to follow along and export the ONNX model 🎉 The web app is unsurprisingly written in React and the example was straightforward to follow along.
However, after walking through the full example, I noticed that I would still need to use the SegmentAnything for one more thing: image encoding. From my understanding, the website is currently set up to use the ONNX model, which is what I would want, but the model expects that for every image you want to segment, you also provide an image embedding matrix, which contains the encoding weights of the image. This is a bit of a bummer to learn because I would like to arbitrarily pass an image to the ONNX model and get the segmentation boundaries in a performant way. This means I need to figure out if there is a way to save the image encoding procedure to disk, maybe as an ONNX file too. With that, I could first pass the image through it to get the image embedding, and together with the SAM model, I could then have a segmentation solution all web-based.
Another goal I have in mind is to rewrite this example using Svelte. It would be a good exercise and be fully relevant for my project since one of my goals is to learn and use Svelte.
Things of Note
I got to catch up with an two old friends, JR and Victor, while I was in Marseille.
I continued to work through the GCP learning path on generative AI. I completed Module 3 and 4.
I saw the new Spiderman movie: Across the Spiderverse, with my friend Lucas, and it was really GREAT! Highly recommend it :)
I had drinks with some Keith, Alex, Sylvain, and Chris, in Paris, all of whom overlapped through the open-source world or neuroscience world or both 🧠💻🍻
I had dinner with one of my old neighbors, Rayan, from when I lived in Butte aux Cailles, a cute hidden quartier in the 13th arrondissement. It’s definitely worth checking out if you’re in the city 📸
Friday evening, I went to a party hosted by a collective called Friendsome. They had invited Horse Meat Disco (HMD) to be a guest dj that night. HMD is super well-known in NYC gay scene; they have a monthly residency in Brooklyn and every party is filled to the brim with guys. And it’s all disco music too, which I love! However, this party was not one that brought all the gays to the yard. I checked it out with my friend, Jonathan, and it was a bit empty. We stayed for a little while but then decided to go check out the bars in the Marais instead. We ended up making some new connections and I had a great time. I finished the night around 6am.
Nomadic Recurse Runs of the Week
Here’s a collection of my runs for the week. Monuments featured below are Cathédrale La Major in Marseille, Garden des Tuileries back in Paris, and République:
Nomadic Weekly Roundup
Favorite Reads of the Week
- Let’s rethink social. 💡 tldr; The biggest human crisis of… | by Saumyagupta | Jun, 2023 | Medium
- Toni Morrison’s difficulty as an author and personality is a thrill.