Presenting Mediasoup Horizontal

January 2, 2022

Although Mafalda SFU is mainly focused on vertical scaling of Mediasoup and the WebRTC stack, the main problem I've found companies are facing is about how to easily implement Medisoup horizontal scaling. I've been working on a solution for this problem for a while now because since Mafalda is build on top of Mediasoup, it's also needed to help it to provide transparent vertical and horizontal scaling, so let's see how it works.

Read More

Manifest of a perfectionist

December 7, 2021

I'm a bit obsesive with code and architecture quality, and having them done like they could be put down on a textbook, or at least about they being used by others as reference of how things can be done right. I've always feel a bit frustrated that newcomers get and perpetuate bad habits, just because they learned them that way on the first place by thinking that was the way to do the things... Later, if things are working, people don't give a sh*t on thinking about if there's a better way to do it, both to improve their work quality or processes, or for learning and improve themselves, they just move on... So it's better to do things right from the beginning, since later they are more difficult to fix, or simply you forget to do it. And at the end, just by doing things right on a first aproach, you get used to it and does them that way by default :-)

Read More

WebRTC horizontal scaling

September 26, 2021

When aproaching the horizontal scaling of WebRTC servers, we have two main aproachs: decentralized P2P, and using a central server. Each one has its own drawbacks and advantages, and I had difficulties to identify what aproach was the best, since I usually have a personal preference for pure P2P architectures, but they are not the most simple nor always the more efficient ones. So when deciding how to aproach Mafalda horizontal scaling, I needed to consider the pros and cons of each use case I would need, and here we have my conclusions.

Read More

Abstract classes in Javascript

July 8, 2021

Javascript don't have the concept of abstract classes, but it's fairly easy to implement: don't allow to instanciate them :-) Just check if the constructor of the instance we are creating is the own class instead of one of its childrens, and don't throw an error if it is:

Read More

How to build WebRTC for Android in Ubuntu 21.04

April 23, 2021

Google used to provide prebuild Android images of libWebRTC library, and in fact, it's (still) the recomended way to use them on its own documentation. But starting on WebRTC M80 release (January 2020), they decided to deprecate the binary mobile libraries, and the reasons were that the builds were intended just only for development purposses, and users were already using building themselves with their own customizations, or using third party libraries that embeded them (where have been left developers that just want to build a WebRTC enabled mobile app?), and they just only provided another build in August 2020 (1.0.32006) to fill some important security holes, in case someone (everybody?) was still using the binary mobile libraries.

Read More

Types of WebRTC networks

December 30, 2020

When it comes to WebRTC architectures, there is no silver bullet. Depending on each use case, the optimal architecture may vary from project to another. For this reason, I am going to explain the main network architectures that are usually applied in projects based on WebRTC (and mainly applied to the streaming video), and what are the pros and cons of each one of them.

Read More

Tipos de redes WebRTC

December 30, 2020

Respecto a arquitecturas WebRTC, no hay una bala de plata. Dependendiendo de cual sea el caso de uso, la arquitectura óptima puede variar de un proyecto a otro. Por este motivo, voy a explicar las principales arquitecturas de red que suelen aplicarse en proyectos basados en WebRTC (y principalmente aplicadas al streaming de video), y cuales son los pros y contras de cada uno de ellos.

Read More

How to move Javascript functions out of its closure to save memory

December 6, 2020

Long time ago I talked about a pattern I use (a lot!) abusing the functional methods of Javascript to earn some memory and CPU usage. I promised to create a blog post, and almost 4 months after (too much energy draining work...), here is it.

[^1]: I would need to check if this is still true with modern Javascript engines [^2]: In fact, this is the root cause of the infamous

Read More

How to paint over a video with HTML

November 1, 2020

I recently got to work on a project where I need to capture a camera, sendback some drawed feedback, exchange commands and chat messages (and voice comments), and record everything. I've always been interested on using non-mainstream features of the Web Platform, and after taking a look of the current state of the art, I've found a way to implement this particular use case using ONLY open and readily available web standards.

Read More

How to simulate Chrome is running in a TTY

April 25, 2020

I've always loved terminals and retro-computing. I find they were a technology that didn't got fully their full potential due to graphical interfaces (it's strange I say this since my first computer was a Macintosh LC II at a time where everybody else had at most a PC with Windows 3.11...). That's the main reason I added support for Unicode BPM plain in Linux kernel for NodeOS, specially to have available the Braille patters used by blessed-contrib to draw graphical diagrams in the terminal. That's the reason why when I discovered BOOTSTRA.386 project, a Bootstrap theme that mimics a text-mode interface in a website similar to old BBSs (fathers of web forums, and grandfathers of current online walls), I got enthusiastic about the idea of making it compatible with real terminal web browsers like Links, w3m or Lynx.

Read More

What's `re-start`?

April 15, 2020

React Native is a framework derived from React that allow to program mobile native apps using Javascript. It's only focused on Android and iOS, but its popularity has lead to other implementations of its API for other platforms like Windows, macOS or also web. Thing is, although they share the same APIs and source code is (almost) compatible between them, they are not integrated so it would surface difficulties to add a new platform to an existing code, or forcing to have several different projects that could lead to duplicated efforts or diverge the features of them.

Read More

Freelancer calculator

March 30, 2020

At the same time I work as employee, sometimes I get offers for freelance projects. It's difficult to find a balanced rate between both schemes, so using Google Spreadsheet I've done a calculator to adjust them. The calculator is focused for Spain taxes (one of the reasons texts are in spanish), but should be easy to addapt to other normatives.

Read More

OS lifecycle

March 19, 2020

projectlint is a projects-wide linter and style checker I've been working on during the last weeks. As part of its set of rules, one of them ensures that the current version of the operating system where the code is running is maintained and updated. But, is there a npm package with info about the operating systems lifecycles? Nope... enter OS lifecycle.

Read More

Confirm deletion in RESTful APIs

March 1, 2020

When designing web services, it's normal to include an option to delete an user's account. Since this is an important action (the user and its data will dissapear from the platform), usually this is done by asking him to confirm the operation, with several endpoints one for each operation step. Navigating between different pages is so 2010-style, and there's no direct mapping at this point between REST APIs and CRUD operations, that I've been thinking in a REST compatible alternative: use a token.

Read More

How to have a blog on Github

February 5, 2020

Since I was a child I never liked to write. I was more a thinker, a tinker and a doer, and found really tedious to start writing ideas that I could already do, explain or show. In fact, I hated the idea of receiving a diary as a present for making my first Communion (somewhat typical here at Spain, and luckily didn't happen to me) because I found boring to write about things that already have happened while I would be creating new ones. The same reason why I'm not too much into blogs (both writing and reading) because I pay too much attention to what I say and how I do it, and get to be really slow to get fully polished my final text (I mostly did my bachelor thesis code in 6 months... and later spended other 14 months more just for writting the project memory. It's ironic that the times I got to write something, people got surprised that I have a somewhat good style... and more ironic that having written so much (open) source code, probably in lines number I could be able to make both Dan Brown and J.K. Rowling to fall on their knees :-P Unluckily, they have got more revenues for their jobs than me, good for them :-)

Read More