A blog for ffddcchh

About

I'm a composer and a programmer, head over to my other website where I share my art stuff: fdch.github.io

This is a blog where I post various thoughts, things I've learnt, and random ideas. I'm I started writing it in plain html right on the github editor, so please mind the typos here and there (and the ugglyness) now I'm using my own custom pseudo markdown syntax and parser.

Find me on Github as fdch.


Berlin, day 31

Berlin, day 31

August is ending and we were lucky to get the last bit of sun for the next six months or so. But, we are now on our third temp place. We landed on the most expensive Airbnb you can imagine, during the first 3 days. It costed more than half of our first months stay 💸 We stayed on a dear friend’s house 💕in Friedrichshain for the best part of August, and now moved to a lovely couple’s flat in Schöneberg 🥰. Elektra and Panchita are really happy here, though :) 🐈🐈‍⬛

Nothing is certain about finding a place to live in Berlin. We’ve sent so many applications there’s no point in counting; let alone the many, many messages on several apps.

Finding a place in Berlin is way more difficult than advertised.

Here’s what not to do, from our experience:

  • Do not limit the search by speaking English, speak in German (of course, we can’t )
  • Do not attempt to find a cat friendly place (as ou can imagine, we have two)
  • Do not look for places without having a Schufa, that German credit score (we haven’t one)
  • Do not be freelancers, a steady job goes a long way (we are freelancers)
  • Do not be a couple, singles might get better chances, say, on a WG (we are a couple)
  • Do not need Anmeldung (we need it for our Schufa, but most importantly, for our Visa)
  • Do not have fast approaching visa expiration date (we have one, because we need Anmeldung to get it together)

So, how can one possibly find a place given this situation: in order to be considered for a place, you need a Schufa, but to get a Schufa you need Anmeldung, but to get Anmeldung you need a place, but to need a place you need a Schufa?

Anyhow, as a dear friend of mine said:

there is a place for everybody in Berlin

We can only hope so.

side note: if you know of someone leaving their place here in Berlin, let me know :)

I mean, there is even a game

on sleeplessness and imperialism

on sleeplessness and imperialism

It was a hard night, even all the way down in Argentina, learning once again that countries invade other countries freely. Learning that leaders could justify their actions with ease. Learning that peace justifies war, and freedom provides the basis of any invasion.

I could not sleep last night. My phone glared at me with news apps, index finger refreshing every minute, body moving to one side, to the other; not blinking.

I remember studying about appeasement in WWII as if it were something of the past. And even as I grew older and lived throughout many of the still ongoing wars I could not comprehend them as something of our own time. I am 33 years old, and I’ve been an artist (and academic) life all my life: no point of me joining an army. My body is weak, my mind is too sarcastic, my thoughts are too deep. I have been “against the system”, like, forever, trying to “change it from within”, etc. Moreover, I’ve lived in Argentina most of my life. The closest war to me was in 1982, Malvinas (Falklands), to which most of my father’s generation died; my dad almost went, because his military training ended a few weeks before Argentina went to war.

I was always told: the fresh 18 year-olds who did not know how to carry a gun went straight to war, while my dad returned home from a completed military training. My dad’s awesome, probably better than yours 🤣, but he’s definitely not better than a British Brigadier… 😅. In any case, I’ve always had mixed thoughts on his not going. Had he gone, which he probably should have, those young, under-equipped, undertrained, and frightened soldiers would not have been sent to war. But, I would not be telling this story otherwise. So, there’s that, and I’m glad he saved himself.

I always read about wars, war-zones, as something far away, not here, not now. Nothing to worry about, I kept thinking. It all changed after a cousin of mine went to live to Israel, joined the army, and went to the frontlines. Actually, before he did, I went to Israel to try convince him not to. He had already enlisted. Basically, I was trying to convince him to bail and go to jail. What an idiotic move that was. It was like talking to a wall.

well, not quite a wall… walls do not talk back at you, walls do not bully you. Walls don’t frighten you. Walls are walls, and some can be taken down, no matter how hard you bang yourself against them. What I saw was not a wall, it was my cousin, my own family, a face so close to my own that I saw myself, and my own self was shattering itself into pieces. I saw broken glass, I saw a war zone, the aftermath of an invasion, a young mind filled with prefabricated ideas as ancient as the Bible; I tried to say things I was not allowed to; I panicked, I thought I would never get away from that place, and I fled. Things were never the same after that.

Having lived that horrible experience is not enough for me to understand the catastrophic consequences of war. Trauma is unique. What I can understand, to some extent, is fear and despair, hopelessness and frustration. I can also understand how selfish it can be to survive in this world, but it makes it easier to know that you don’t need to deal with trauma on your own. I hope the Ukrainian people undergoing violence today know they are not alone.

My great grandmother was from Kiev. I never met her. My grandmother told me how she used to have chickens in the backyard, and twisted their necks like breaking a loaf of bread for dinner. The chickens kept running for a while with their severed heads. I’m a vegetarian.
I’ve heard slightly the same (covid) life-changing story many times, but I still tell it.

I’ve heard slightly the same (covid) life-changing story many times, but I still tell it.

It was September 2019, I’d just started a postdoc in OSU, life was taking a significant turn from my time in Berlin writing my dissertation. My mom had started our Spanish citizenship papers for my sister and I, so we were all bound to Madrid in October to notarize and set the wheels in motion. Luckily, both my mom and sister had everything in order. It was one of my documents that was missing (my US personal criminal records, which btw, are just a pain to get) and I could not set my wheels in motion just then. So, I would soon have to return to that dull office of that even duller notary. Little did I know what was going to come of the silly, short, but life-changing trip.

I have to say here that the Madrid part of the trip was cool, but it had a catch: a one week “layover” in Buenos Aires. So, I would go to Madrid, then to BA, and finally back to Ohio after a week…

find yourself a concert

As a postdoc 🤖 working in Immersive Audio 🔊 I often present my music live, performing with my custom made computer music instruments and my ps4 controller 🎮. Since I had to travel to Madrid, I decided to look for an opportunity to perform my music over there. As a postdoc at OSU, I needed to justify our-of-office time, so I figured a concert would do it. Figured wrong.

the concert was with amazing composer and performer Pedro Fraguela

Find yourself a conference

The Office of International Affairs affairs office needed more for me to justify our-of-office time. After all, Postdocs have only two weeks a year of such. Anyhow, I looked for a concert AND a nice music conference to present my work. Finally, I wrapped up a nice email to the OIA and was good to go.

Don’t listen to your mom.

The conference was called “JIEM-ESPACIOS SONOROS 2020”, my lecture “[clone fd_dacout]: real-time massively multichannel spatialization in Pure Data”

Ok so this is rather bad advice, generally speaking. But, if it was for her I should have bought a face mask in late February (2020!, way before it was cool), stayed home, and skipped Madrid. If I had done so, I would have probably not gone to Madrid. And consequently, I would have not come to Argentina to visit my family. My life would be completely different. So yeah, I probably should have bought a mask, but I did not listen to her, and was quick to dismiss her advice on this new “virus”… Nonetheless, I was lucky to travel despite her advice, because I am now a Spanish citizen living in Argentina for the past two years. Hah! So in the end I never bought a mask, she just gave me one. So, listen (partly) to your mom, and wear masks! 😷

fall in love

Here’s the thing: I did not mention the most important part; the most crucial element of all; the one thing that pulled me into a mindset where everything is possible; the drive that made me invencible: I was in love 🥰. The details of this story I will not disclose here, but I just had to mention that I was in love and she was in Argentina. Therefore, we had agreed to meet in Buenos Aires upon my arrival, spend a week together and then decide what was to happen of our relationship. We both had a common goal, the same city tattooed in our hearts, so things would be possible. There was a slim possibility for the two of us to meet, for our paths to cross, so we were giving it a shot. And we did, and still do, two years later. We have a cat now, and we named her Elektra. So yes, fall in love.

sync up with a cloud

I would not be writing this blog if it was not for her.

I took my carry-on, filled it with pairs of T-shirts, underwear, socks, and I forget what else. Clothes good for a week’s time. When I realized I would be needing some data, I decided (luckily) to backup all there was to backup on a cloud. I do have an unlimited storage, don’t ask why or how, so things were easy in that respect. It just took a couple days of uploading stuff on the University network. The entire month before to my trip to Madrid I spent it practically living at the office. Two offices, actually, plus the one at home. I wrote my paper and programmed some stuff on one shared office, one that had still my name until a few weeks ago. On another office, the Sonic Arts Lab, I mastered some of my music tracks that would be released later that year and wrote some new music. And at home I would write techno music and songs for the woman I was in love with. (Yes, that is true). So, I was working all day getting ready for a concert and a conference, getting in sync with a cloud, and getting some artistic things done I hadn’t had the time yet.

I was also learning music production. That is, I always wrote music and even composed electronic music, or rather what is known as electroacoustic music. That is somehow different from what is known as electronic music for clubs, like dance music or techno. So, I was used to audio programs, and more than used to music concepts (after all, I do have a license to compose 🥸), but I had never tried making techno music. I was learning how to do that. I was liking it. I still do and I would like to share that someday.

get on a plane ✈️

So, I was good to go. Off I went in March 2nd, from the John Glenn Columbus International Airport to La Guardia in New York. I got there about 6pm, but I was bound to Madrid later that day, from JFK! As soon as I landed I hopped on a bus 🚌 and went across town to catch the E train. I had an hour to get to my gate in time, and that included the bus, the train, customs, and migration! Any bump on the road meant an imminent delay, which in turn meant no Madrid. I did not stress out though, I was in a great mood. Everything was going smoothly. I even got there early! I had plenty of time to catch up on some emails. traveling. I also began thinking there’s at least 1 centigrade more in the world because of all the fuel ⛽️ I’d been using…

I slept the whole six hours but, in Spanish time zone, I woke up a few hours later that day, fresh as a rabbit. I went through Zurich, and I love that airport. It’s like the future, but real and you can buy stuff. It’s classier than the Oslo airport, and it feels smaller, but somehow less cozy. Anyhow, I saw some signs of preventive measures, not quite emphasized, but they called my attention. No one around was wearing any mask, and hand sanitizers were not readily available. I mean, it’s Zurich so they had some, so it was not a strange sight; often I’d see those in restrooms. Anyhow, I pushed my cart with a single carry-on (I was bored, I had to do something), jumping on one foot every now and then, towards my gate.

The flight to Madrid was like I remembered the meetings with my advisor: short and to the point, with a tiny bit of jet-lag. But, I managed to get to Madrid once again. It was my third time there, and I knew the drill, how to get from the Airport to the city, so I went almost in autopilot, like a ghost. All I had to do was get to my Airbnb and drop my bags. I booked a room downtown, as down as downtown could be 🏙. The host showed me in and it was quite a maze to get to my room: three doors, a staircase, across an inner backyard, small stairs, two more doors, and there it was, a room with a bath and a kitchen. I took a bath and dozed off for a while.

I had been flying for such a long time that it felt like I was returning to my plane instead of I’ll leave the rest of this trip off the books, but both the concert and the conference went great. My table had two other speakers, and someone asked questions, which was nice. The concert got a full house, and we were all very happy about it. We hung out afterwards and I made some friends I will always remember.

pretend nothing is happening …like most people are doing, I guess… 🤷🏽‍♂️

March 6th was the day I had my ticket out. For some reason I had to wait for hours on end on Puerta del Sol. There, I saw multiple groups of people wearing face masks. I felt they were overreacting to the situation, despite what I had heard on the night of the concert. One of the venue’s owners worked at the local hospital, and she mentioned several people had been hospitalized by a new highly contagious virus. Moreover, a friend had been quarantined coming in from the U.K., which was odd. A big ANYHOW , came after these thoughts, and I went on waiting for my turn to leave. I felt overwhelmed, I remember, uncomfortable, and I did not feel like jumping on a plane at all, but I had to. I suffered throughout the whole trip to the Airport, feeling numb, idiotic, and anxious. Angst, to put it mildly, or rather, confused. I was angry, but also tired of a very intense week. I did not get any sleep, not without aids, and that was building up inside.

I just had to keep going. I had a 12 hour trip ahead of me, I would catch up on my jet-lag later, I thought, one more week and I’m back on my bed.

When I arrived in Ezeiza, I came just as another flight was coming in from Italy. Those passengers were in front of me, and they were being told to fill out a form on which some declaration had to be made regarding some health situation. I got a glimpse of around 50 people trying to write with borrowed pens on feeble pieces of paper, making weird poses as the ink dried out, helping each other out, no physical distance. I remember walking right by them, using the same migration automaton machines they’d just used, as if contagion wasn’t a thing. I just walked out of the Airport, got on a taxi cab, rang my sisters’ doorbell, and hugged and kissed my family. All of this felt so normal that it is strange to describe it as an incredibly dangerous thing to do. It is only in hindsight, after two years of this never-ending pandemic, that I can question the responsibility of my actions. ANYHOW, I had my two year old niece up in my arms, all my troubles faded away.

listen to your friends

Great time with the fams, met with meine Liebe, all was in order. I’ll skip over 5 days.

Everything was in order, all but one ☝️ thing: the president gave a speech where he expressed deep concerns about a worldwide virus. A few people in Argentina were already dying because of it, and cases were being reported of a weird flu coming in from overseas. The cases, however, were a handful, but the whole country became alert. No measures were stipulated just then.

My ticket back to NYC was on the 18th, so I was worried. My family was worried: traveling during that time meant exposing yourself to the possibility of the virus. No lockdowns yet, though, just generalized concerns. It was March 12, so I had three more days to mull about changing my ticket or not. I asked my mentor and people at the OIA at OSU, expressed my concerns, but nobody really knew anything. Cases in the US were rising, but that was as far as everyone knew.

So I kept my ticket for the 15th and decided I would cross that bridge when I got there. That turned out to be a bad idea, because on the 15th I felt unbelievably uncomfortable going to a very touristic Japanese park rather than the airport. I called a dear friend of mine in NYC. (I was for about an hour on data roaming, which cost me quite a lot, but I had no idea my wifi was off 👽🤷🏽‍♂️). Anyway, she gave me the best advice I could find: do not travel, stay in Argentina until things are sorted out. So I did, I lost my ticket, booked another Airbnb and stayed another week. Meine Liebe and I stared at those Koi as they wandered aimlessly around the green, opaque pond. The sun burnt my neck. Was I making the right choice? My friend in NY was not the only one with that advice, though. I met with another dear friend of mine who biked to that park, and she gave me the support I needed right then, as she usually does with every aspect, but right then it made me feel I was making the best choice. And that was that, and I always owe her for that.

adapt

A few days later, I had already booked another week on an airbnb to stay further in BA, the president announces mandatory lockdown. That was the 18th. On that day, there was a major collision in some planet orbit or something, Mercury was retrograde, I will never know, but it was a hard day. I had to make another choice: do we stay in BA or go back to my hometown, Cordoba, to wait the lockdown out. Hard choices. Economically, it made sense to go to Cordoba, so that is what we did. So, we took the last bus to Córdoba, last one in several months to come, and bailed. In the following weeks, with only a carry-on and a laptop, I relocated, shifted to online lessons (I did not mention this, but I was teaching, and the week off campus was Spring break!), and changed my research focus from immersion to networked audio. During this first time, the pandemic was being felt differently all over the world and nobody had any clue as to what was going to happen. So, I could not plan anything. Nobody could. I kept my room in Ohio until the end of the lease, just in case I needed to get back after WHO got rid of the pandemic. That did not happen, but still, the uncertainty, and coping with the “open possibility of” became tiresome.

I was living in meine Liebes with her brother back then, and six months into our relationship we were needing a place for ourselves. We were ready to move to Ohio anytime, though, so we were waiting until lockdowns and travel restrictions were lifted. That did not happen. So, in July I called and asked to stay here in Cordoba for the rest of my Postdoc. I was lucky to have such great mentors and colleagues at OSU that were extremely comprehensive under such circumstances. I was living in uncertainty and they made things very easy for me to secure my work from home, and such a long way that was. I will always be grateful for that.

It was September 2020, by the end of it we were sharing a lease, adopted a cat, and I began teaching the Sonic Arts Ensemble, and later Audio Analysis and Machine Learning in python. Things were flowing.

epilogue

I have heard many people tell the same covid story, that story in which they were doing something until the pandemic hit, after which their lives were relocated, reshaped, reborn. It feels good not to bear that story alone, so I tell that story and find myself in resonance with others.

Thanks for reading this far. I hope this story resonates with you, too.
the main title of the self explanatory post about a custom made markup language

the main title of the self explanatory post about a custom made markup language

Every time you start a new line and place some text, you start a paragraph like this one.

If the line is preceded by | , then it becomes an indented block, like this one.

You can add ordered or unordered lists, like in markdown, minus the sub items. Here is an ordered list, starting with numbers followed by a dot:

  1. First
  2. Second
  3. Third

And here is an unordered list, starting with the star character * :

  • some element
  • Another element
  • Yet another one

This is a subtitle

To write a subtitle, all you need is to start the line with subtitle: and begin your subtitle. Only subtitles are allowed, ie. no subsubtitles.

writing code

Code blocks or inline code snippets work just like in markdown. For inline code, you surround it with a backtick \` , and for code blocks you place an opening and closing set of triple \` in new lines.

images

Optionally, on code blocks you can specify the code language on the opening tag, but I have yet to include a code styler with neat syntax highlighting.

To include images, you can use the image: url | caption | title tag. You must include any url. After the url, you can include an optional caption, and an optional title, separating those with the | character. Here’s an example:

The Skating Minister
This is Wikipedia’s picture of the day: The Reverend Robert Walker Skating on Duddingston Loch, better known as The Skating Minister (1790s), by Henry Raeburn

plain HTML input

Some Markdown interpreters allow for HTML input. However, these tend to be limited to a subset of the language. For this reason, and because I am using such fancy tags as details and summary , I included HTML elements within the parsing. There is no validation, though, so if it goes wrong, it’s up to the ElementTree.fromstring() method to figure out. I’m not accountable for such sorcery.

Actually, the script will fail and there’s just no way to catch that now... that is, besides checking the Github workflow log for errors.

In any case, here’s an example of a small article:

<article>
<header>
<h3>my title</h3>
</header>
<p>A paragraph</p>
<details>
<summary>more</summary>
Here’s that hidden details I like so much… hah</details</details>
</article>

The above looks like this:

my title

A paragraph

moreHere’s that hidden details I like so much… hah

comments!

Markdown has no comments but I included a comment feature, following JS and C (inline) comments. Thus, lines beginning with // are converted to HTML comments.

PS: There's a comment in this section of the post, go to the html file to see it rendered, or to the .txt file to read it.

meta description tags

One cool thing about this is that you can include meta tags with simple syntax. These are:

title

Anything after title: becomes the main title of the post. If this title is missing, the first subtitle is taken as title.

description

Anything after description: is the post’s meta description, which should be less than 200 characters. If this description is missing, the first paragraph is taken as such.

keywords

A list of comma-separated key words relevant to this post comes after keywords: .

time

A timestamp in the form of YYYY-MM-DD HH:MM:SS and an optional written-out version,separated by a | comes after time: .

For example: time: 2022-01-25 10:15:12 | Cloudy ☁️ Wednesday morning

A custom markup language explained, or how to reinvent the wheel.

A custom markup language explained, or how to reinvent the wheel.

So, I made a text parserbut I did not really explain how it works. Here’s my attempt.

It all started with a need to write posts directly on my phone. Doing so in HTML proved to be quite cumbersome. Every element had to be opened, filled with text and/or attributes, and then closed. It became, besides a nuisance, quite error prone. My phone’s error correction and auto capitalization made HTML tags look really funny, and they broke most of the time. Therefore, I needed some way to input text and have the HTML elements properly set.

Post Factory: Enter Google Sheets… and a lot of copy-pasting

I’m not sure why, but I tend to use Sheets for everything. That’s a bug or a feature, your call; I just overdo it sometimes. In several occasions, Sheets is the way to go; most often the case is quite the opposite. Anyhow, I came up with a plausible solution:

  1. A column of HTML elements: “p”
  2. B column of input text: “My paragraph…”
  3. C column that would grab the tag from A and fill it with text from B into a nicely formatted HTML element, alla:
<p>My paragraph…</p>
Voilà! I did not stop there, though.

The last cell

The Sheet grew with separate tabs for meta tags, and finally, for the complete HTML file. The last cell grabbed the text from all other cells and outputted an <html> root element with the content of the entire post. Thus, I had a created template factory for blog posts, entirely with Google Sheets and string concatenation. Fancy stuff.

…well, not so fancy.

copy pasting hell

This involved copying and pasting so much text, so many times, across apps on my phone, that it was unsustainable. After four or five posts I was done with it. I wanted a better way.

Formatting problems

Another problem was the formatting. The resultant markup was a single line of a text file. Completely impractical for editing.

To solve this, I added some new lines within the cell text parsing (in Sheets that is called CHAR(10) or CHAR(13)), only to find that these reconfigured how Sheets formatted the cells: it introduced nasty surrounding quotes! Ugh, what a pain for the unhappy copy-paster.

A new hope: 🐍

I thought of a new way to make posts. I would use Markdown, a hip, simple, and modern text markup language with many available editors for iOS. With minimal code, text is very nicely set on the page and many languages have parsing libraries for it.

Python has many markdown libs, so I could make a python script that parses a .md file into an .html file and place it inside the posts directory before the update_posts.py scripts updates the landing page. I was getting excited by the minute

I did not want to use pip in the github workflow 🤷🏽‍♂️

In order to get any markdown library into my python version on the ubuntu shell up accessed by the Github Actions workflow, I needed to run pip install markdown or similar before running the process. Or, better yet, I needed to make a virtual environment for python and activate it before running python. Ugh, I did not want to do any of that.

If my experience with Pure Data has anything to add here, it would be that vanilla is usually the way to go.

Therefore, I just went ahead and decided to parse the text myself using only the standard (vanilla) python. That is, only using what comes with python version >= 3.9. Why not?!

I started writing a post with made-up tags and I would sort it out later.

I have no other way of making up a parser like this. I am not a pure-bred programmer, and I am not a language expert, so I cannot start thinking in terms of meta-language descriptors, or formal grammar, etc. Besides, this was a simple markup. And, I needed to KISS (keep it simple, stupid) 🙃 So, I started making it up as I went.

Funny thing, while writing this post I realized that I did not include hyperlinks. HYPERLINKS! The Internet gods forgive me 🤦🏻‍♂️. I hope to include them before writing this post. If that worked, I should be able to understand what hyperlinks are, finally 🤓.

The result

Hereis a self explanatory post about it.

Hope it’s useful for someone (besides me) 😋
I made a text parser to make easier posts 😇

I made a text parser to make easier posts 😇

It's similar to markdown, but slightly different.

This is my first subtitle

And this is a block quote text, pretty cool , eh?
TestingSome stuff...

This is a paragraph. Continuing on the same line

my favorite title
This is the caption of the image

this is a subtitle

  • this is an unordered list
  • with items
  • many items: the last one has a link

some paragraph and then, a blockquote

telling you some stuff

yet another title

You can even set your own html tags

This is a paragraph coming straignt from html stuff

// this is a js comment
() => window.alert("ok, this is cool");
  1. this is an ordered list
  2. The second one being a link click here
  3. and, yes, I said three
final notes, thank you for reading. 😁

The text first node , first code's tail second node second node's tail. Also, we can have a third code element with another tail...

I started a database 💽 of everything I do 👽 (Part 1)

I started a database 💽 of everything I do 👽 (Part 1)

This is one of those things that you end up regretting. I don't recommend it but it was fun.

It all began with a doctor's appointment and an early stage hypertension diagnosis.

Probably, all those ibuprofen I took over the years, or simply genetics, some sort of mild covid aftermath (though I never tested positive). Who knows. Anyhow, doctor said: exercise, and do not eat salt. Cool, I can do that: started swimming. Then, I just needed to avoid salt (and get a blood pressure monitor). Actually, I need to avoid any food with sodium in it. The problem is that they (ie, food corps) add sodium to pretty much anything: bottled water has sodium, store bought bread has sodium, etc.

There's a whole alter universe of reduced sodium out there.

But, living in Argentina did not make cutting down sodium easy. That is, it is already very hard to be a vegetarian in this so notorious a country for its meat intake and machismo, let alone expect any easy-to-read tag that says: yo, you can it this, there's no sodium in it, all is good 👍🏼. Reducing sodium proved herein to be a harder task. That aside, food does taste a lot better here than in the US, IMHO.

Hypertension is not only triggered by salt intake. Multiple factors weigh in on the overall tension curve, which is always oscillating. Stress 😓 is one of those factors: having better resources to handling stress definitely helps with high blood pressure. Exercise 🏊‍♂️ weighs in as a tension regulator, somehow, that is why it is recommended to do so. Anyway, with sodium, we have now three parameters to monitor 🎚 the context of our blood pressure habits. There are endless parameters, however, endless variables on this infinite database contingency that we call life. And I'm only talking about my own life, that is, everything I do in a day.

Do I keep track of how many breaths I take? Sting, I don't! 🐒 Do I know how many milliliters of water I have drank? I might be able to approach that number 🤔 How many popcorns you ate during the film? Well…🍿 Or, how much you sweat? Got me 🤷🏽‍♂️. In other words, the organicity of our body is uncountable, it is malleable, and it is embedded within an inseparable contextual nature that extends universally from the quantum realm to the nearest black hole, and most likely, beyond. 🪐

I began databasing myself

My life depends on the 🌞 and the 🌙, there is just no way around that. But, I still have hypertension, and I still want to find out the extent to which the things I do and the things I digest have an effect on my blood pressure or not. Hence, I decided to put all of those elements into a database, that is, I began databasing myself.

The project started as a simple logging Google Form, that changed into a more elaborate one. It's kinda cool because the first weeks have some data structure that changes into a different one, all in the same Google Sheet. A nightmare to parse, but it is historically relevant.

Anyway, the database grew at a pace of 15-30 entries a day, and it just kept piling up as you might expect. Some routine like days were simpler; others were trickier. But, I managed to log pretty much anything. It became an obsession. And I like obsessions. To the point that I thought to myself: there might be other obsessive people like me who would find an all encompassing logger app helpful, sure. That's an idea. But, I liked it to myself. It was just a Google Form and Sheet, felt simple enough.

…and then, I stopped

Three months later, I had a huge pile of data. I have not parsed it yet; haven't drawn any conclusions. I just did that 🙉🐭 database, and then, in the beginning of the year 2022, I stopped updating it. It's been over a month since my last update. I miss it. There was something raw in doing such an extreme and detailed thought work on bodily stuff. I want to parse those numbers and draw conclusions but I need to wait. For some reason, I needed to stop and think. But, I do miss punching in those numbers.

I wrote this post, perhaps to think better, but I did not get to any conclusion as of now and I doubt I will. I guess an apology is in order, towards you, reader. I embarked us on my journey to databasing, only to take us to where you already knew you were. My blood pressure is still high. I still exercise. I eat less salt 🧂🚫. One thing I can say, though, is that food tastes better after going salt-free for more than two months: the tongue feels different because the taste buds go that extra mile to extract flavor out from food to my brain.

To be continued…
Adding Github Actions to this blog

Adding Github Actions to this blog

I went ahead and relaxed a bit with my blog restrictions. In particular, the No JavaScriptone. We like JS. However, I was not going to do the whole JSON databasing shebang, fetching, caching, etc…, like I did before.

I wanted something simpler. I'd heard about Github actions, but always wanted to try. So here's what I did.

Tinker with a workflow

I added a posts subdirectory in which I place every post I make for this blog. From that directory, I want Github Actions to pick up all posts and stack them up into the main index file, in reversed chronological order. Every time a new post is added, I need the index file to be updated. Therefore, this needs to happen on every push. It boils down to:

  1. Create a directory for your posts
  2. Create a function that updates the index file with the new posts
  3. Execute the update function on every new post

The first point speaks for itself: put new posts in their own html files and in one subdirectory. Now, for point 2, the functioncan be written in quite any language. I chose to do this on python, because why not delve into the rawness of that html.parser.

Anyway, after a few hours and a few classes later, the update_posts.py function was finished. It boiled down to three steps:

  1. Grab the index file and clear the section that will include all posts
  2. For every post, grab it and run a pre-formatter, and sort them in reverse chronological order
  3. Stack the posts up on the posts section of the index file

The trick here was to: identify the posts sections in the index file, wrap the individual posts in their own main tag so parsing is easy, and add a time tag on each post with the timestamp for sorting.

So, that was it with step 2. It took a while to get the parsing right, but html is such a powerful and robust way to structure text that it makes things easy; and, Python and strings do work quite nicely together.

Finally, the gist was setting up a workflow with a yaml file. Here is the gist:

name: Auto-update posts
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Setting up python
        uses: actions/setup-python@v2
        with:
          python-version: 3.9.7
      - name: Updating posts
        run: |
          python update_posts.py
      - run: |
          git config user.name github-actions
          git config user.email github-actions@github.com
          git add .
          git commit -m 'Auto-Update posts'
          git push

The basic steps in the gist above are:

  1. Set up python
  2. Run update_posts.py
  3. Make and push a commit to github
And voilà, every-time a new post is added to the posts directory this action gets fired up.

So, that was it for blog systems: completely replaced by a script and a set of instructions, and of course, git and the Github Actions backend 😅
Testing network limits with collaborative music 🌿🎼🎹

Testing network limits with collaborative music 🌿🎼🎹

The pandemic year 😷 was hard on all of us. Lockdowns and travel restrictions have not only affected our own music classes and artistic research, but also profoundly changed music performance all over the world. The problem was that musicians could not meet in the same room to play music with each other. But, one thing was clear: music needed to be made. So, musical performance had to be moved to the network. The result of this was proliferation of software for networked music.

While networked performance —somewhen called telematic performance— has been around for at least 10 years, it was not until very recently that the audio dev community turned its attention to facilitating new tools for performers to play music together over home Internet connections. I like to think of this move to the network as a media replacement: from air (the preferred medium of musical sound) to electronic (networked music performance media) 🗣 ➡️ 🎤↗️🌎🌍🌏↘️ 🎧 ➡️ 👂

Networks became a new performative space. We have a new opportunity to rethink music and music performance research. For example, we can think of an explosion of networked music performance, with its counterpart being an implosion of sound into the electronic medium. The limits of what we can do in the midst of this huge bang of networked media need to be explored.

1002: A Case Study 📚 🤖

Together with Federico Ragessi, we created 1002

1002is a case study of a collaborative networked performance created using a custom software called CollidePd. The work is meant to be streamed live on a web page that turns the listener into a performer. On this website, performers connect remotely from mobile devices 🤳or computers 💻 , controlling sounds 🔊 from the same music piece they are listening to. In this way, 1002is an invitation to anonymouscollaboration in real time with remote performers, without any required musical training 🤯.

The sonic research of this performance is based on the sonification of the musical gesture mediated by the mobile device, emphasizing the participatory movement of the performers.

The tech

The platform is based on a client-server architecture, with a server written in node.js hosted in heroku and two types of clients, one for web written in javascript and another, local, written in node.js.

Here's a diagram

A diagram for the client-server architecture in CollidePd

The local clients are two, each receiving and sonifying with Pure Data or Supercollider as sound engines the data stream from up to 1000 web clients. In this way, web participants choose whether or not to play the same work they are listening to, making this a collaborative and anonymous performance.

Note that these two local clients are optional. The real activity happens online.

The visuals

On the web page there is a visualization of the movement made with the mobile device using yet a separate client that grabs all data from players.

To be continued… (I'm tired and I'll go to sleep 😴)
I reverse engineered 🥷 an analog synth 🎛 into an open source VST 💾

I reverse engineered 🥷 an analog synth 🎛 into an open source VST 💾

TL;DR: I made a VST, you can get it here. Note: I'm not making any money from this, it is only intended for educational purposes.

The Encounter

The evening concert was coming to an end in the countryside of a town called Unquillo, not far from Córdoba, Argentina. The last band, Contrafacto, was an underground, independent, electronic music group that had a very large table completely covered with analog instruments and cables. When they started it was difficult to differentiate between sounds, who was making what, and which instrument was making which sound. Complete dislocation between gesture and sound. But then, I heard it: The Apollo. It sounds like this, and looks like the pic below:

The Apollo 1 by Guido Salaya

Did not know what it was first, but I was blown away. I waited until the end of the concert, went up and congratulated the group, and asked about the synthesizer. It was hard to hide my bewilderment; my eyes kept looking at it as if it were some treasure from a paradise lost, a forbidden fruit. I had to have it. It had to be mine.

The Revelation

A few days went by and I just forgot about Apollo. I continued with my work on pdpy, I forget what I did, and I watched a few movies. So, I'm in the middle of the movie 🎥, Gosling is turning and flipping around trying not to pass out while stabilizing a ship, which will be the Eagle upon it's moon landing, and it hit me: I will buy the synth. Spinning out of control, I duck-duck-go'ed Apollo synthonly to find that it was discontinued. I became frustrated for a second, just enough to glance at the screen while Gosling was making the weirdest face😵‍💫: I will make it with Pure Data. I felt alive.

The Research

The Apollo 1is made by Guido Salaya, an Argentinean independent electronic engineer who designs really incredible analog synthesizers. From his website, it reads:

GS Apollo I is an analog monophonic synthesizer featuring subtractive synthesis.

Here's a video of Ernesto Romeogiving it a spin. Luckily, subtractive synthesis is something I'd done in the past. However, I was decided to make it into a VST using Pure Data, so I had to make it suitable for Camomile. From then on, this became a learning project where I tackled with VST parameters and the internal logic Pierre Guillot, Camomile's awesome coder, had intended. His docs were really helpful with that 👌🏼.

In addition to learning how to Camomile, I had to get some information about how the Apollo 1 was built. That is, I needed some diagrams of the electric circuitry involved in it. For this, I looked into the online manual of the Apollo: GS APOLLO I MANUAL DEL USUARIO Descargar en PDFNow, I was ready to start patching.

The Patch

Apollo1 is an open source Pure Data patch that can run inside a DAW using the Camomile audio plugin by Pierre Guillot. It is a copy of the Apollo 1 Analog Synthesizer by Guido Salaya (GS Music). It is intended for educational purposes.

The Apollo VST

The DSP design was quite straightforward, keeping it as simple as possible. The ADSR logic comes from Pd's doc, no extra magic there. The rest is just joining the dots. The main filter was adapted from one made by Cyrille Henri in 2016, and it was based on algorythm by Vesa Valimaki and Antti Huovilaine.

Do check CHNRY's work: http://www.chnry.net/ch/, he's quite amazing.

The VST

Making the VST was quite easy because I was using Camomile, which isthe VST that loads the Pd patch I made. The audio core of Camomile comes from the embedded version of Pd called libpd. Look into that library if you're interested in knowing how it works. So, making the VST meant changing the patch to which the compiled Camomile VST is pointing. Thus, all I had to do is grab the Camomile releases and replace the patch (and some other stuff, too, read the docs for that).

That's that; no magic. Actually, it was quite magical 🧙‍♂️🎹🎛
How did I start to program?

How did I start to program?

Trying to recall my first program proves way harder a task than I could anticipate. Partly, because my memory has been giving me headaches as it gets more and more difficult to remember stuff that happened long ago 😣

about 15 years, though, I'm not that old.

Added to this tendency towards oblivion, I did not know I was programming at first. I began writing basic HTML, single-page websites. No styling, just layout, and a few basic PHP snippets of code that I managed to copy-paste from one or two tutorials I did not read through. What is more, those HTML pages were copies of other websites I hackedaway by copy-pasting the source. That was it for my self-taught introduction to programming:

Skim a tutorial and copy some code to get yours working.
And I did not know it as code, it was just a set of instructions. That could not be Programming.

Needless to say, making websites was something I started doing on my own time, usually at night, while getting to know the endless depths of that web word wide. That abyss, and insomnia, I'm not sure which came first, channelled through a need to understand hypertext, or at least how to use it. The browser was my entry point to programming.

Those websites, though, were mostly for myself and the people very close to me. As I grew more confident, I remember a thrill and excitement when saying, in meetings: I can do the website if we need one;feelings that usually came along with a frightening thought that people will find out I knew nothing of web development. And that was the word, development, that I was so scared of: Noo, I am not a developer. No way. I just know some HTML…I had no idea what being a developer was. I still don't.

By then, I realized CSS was something you needed in order to wash out that horrible HTML. But, it was strange opening those curly braces, and it was even stranger to do this on a different file (with a different extension, 😱).

I was certainly in uncharted territories. No way I could keep track of things, let alone center a div.

Trial and error, tinkering, tweaking values, searching for answers in incoherent blobs of instructions, not getting it. 😙 Those were the times, the good old times. I did not know what a console was. Ah, those mysterious endless hours of incomprehensible magic, sorceries of the source. Then, in a fog of incalculable depth, I stumbled across some scripture, or some piece of text instructions that went into a script tag that made things on the screen do other things, move around, change. Websites became alive, dynamic, interactive. Ah, such wonders of the script. I panicked. Stopped doing websites because I was not doing them right. I needed to learn JavaScript but I did not know how. Dale

At that point, it was when I realized that different languages serve different purposes. HTML was meant to structure text on a page; CSS, to stylize the elements of that structure; JavaScript, to make magic 🤔. I also realized that all my knowledge of these languages depended on browsers. That is to say, the power of those languages was limited to what the browser could do.

When I began to realize that I needed to work outside the browser, I delved into Pure Data, a graphical programming environment for music and the arts. Pd is written in C and it changed my life. I could draw connections between objects (ie., I patched stuff) that would result in combinations of notes, generation of a sound, automated control of an audio or visual effect, and much more. I was handed so much potential for multimedia, interaction, and expression that working with Pd became my favorite thing in the world. I was no longer HTML-ing in the depths of night, though I most often patched heavily into daybreak. I was patching during the day, while waiting, on the subway, bus, airports, bars. Basically, every moment of the day was a chance to learn more.

I did this patching thing for a year or two, until suddenly my advisor showed me not how to patch an object, but how to make an object. He called them externals. I did not quite get what he could possibly mean. I realized then that I was taking software for granted. All my life, I did not know you could make stuff. So, he opened up a text editor, wrote some stuff in the C language, and inputted some words on a terminal console. The result was astonishing: a new object, the one he'd just created, was there, ready to be connected to other objects. What is an object? I had no idea. I just used them. And now I would make them. My advisor lent me a copy of The C Programming Language, and I went home in awe.

The C Programming Language. I read the ANSI-C version, though, waaay fancier 😉.

From then on, I never looked at Pd, JavaScript, or any other programming language the same as before. I could learn anything, from Python to C#, from awk to C++, from bash to React. And that did not stop there, no. Any software was easy to grasp, any operating system.

In sum, I cannot remember exactly when I started to program, but I do remember an obsession that grew hand in hand with my fascination of the Internet, computers, and code.

Making a blog with your 📱

Making a blog with your 📱

Today, I decided to make a blog with my phone and a Github account. Here are the steps that I took to achieve this.

Step 1: Design a super cool front end 😎

This is absolutely necessary so as to get all your ideas in order, and to Make things exactly as you want them rather quickly.

Here is the result:

Designing a cool front end in pen and paper

Step 2: Make a new repository on Github

Using the web interface: Add a Readme if you want to.

You also need to enable Github Pages on it. Head to https://pages.github.com/to know how to do so.

Step 3: Simplify

Scratch out everything you don't need

In my case, once the design was layed out, I went ahead and scratched out Everything that I thought unnecessary. Hence, there was a lot of stuff like: Don't use (json, JavaScript, markdown, etc) and a ✅ for plain HTML.

Step 4: Create an index.html file (the one you are reading now)

This file is the only page you live edit, while readers view it (🤦🏽)

This is not that bad, and it is quite thrilling. On one hand, my mistakes are exposed immediately, and reading a messy blog is not nice. However, this makes me think really hard about content and layout. I must have a very clear idea 💡 about what to write and how to write it first, so then I can type it out and place the cumbersome html tags to display it in a readable way... ok, this is questionable, sue me

One thing I found out about is the details and summary HTML tags, which made collapsing and unfolding possible, and only using html! Fabulous. 🤷🏽‍♂️

Isn't it cool 🙁?😒

Step 5: Create an style.css file

At his point your blog looks amazing, well done 👍🏼

For the style, I went with a colorblind safe palette🎨, used in dark mode, And I might change the feel eventually. For now, I just wanted something quickly to get it out there.

Step 6: Make a first post

And here it is. Well, the second one ☝️, the first One is just a blab about what this blog is. This one is cooler, it has a picture and all.

I really liked the picture trick there. I just 📸, upload one to Github as a file. Then I copy the path, Come here, and paste it in the src field of the img tag and voilà, I'm the New York Post

This is a lighthouse in Córdoba, Argentina, a landlocked city. A useless lighthouse.
That's it! I now have a blog.
What's fun is that there is: No js ☹️, no php 🥲, no frameworks 😅; It took less than 2 hs to get it running and write this post 🤩. Now it's just a matter of continuing it... 🙃