aprendizajes is a generative art project that pays a tribute to the process of learning in a broad sense. It is published on the generative art platform Fx Hash, the official link is https://www.fxhash.xyz/generative/5343

2021 has been a year of profound change in certain ways, in multiple scales, for many people both at a personal and collective level. From the large-scale changes in our societies due to the Covid-19 pandemic, to smaller scale changes and adjustments we need to do derived from the larger changes, we all have had to put to test the human race innate ability to adapt.

To adapt is to learn. Ever since we are born, most of our time on this planet involves facing something new in some way or another. Learn to walk, to talk, to eat on your own. Acquire technical knowledge, soft skills, learn that other humans have their own views, learn that no one has a single source of truth. Learn a new language because other people, as equally important and respectable as you are, speak not your mother tongue. Learn to relate to other beings, to express your feelings and understand others. Learn to think on your own.

The act of learning comes hand in hand with the need to be wrong. Just as there is no joy in life without any frictions whatsoever (I wrote some words related to this topic here and here), there is no chance of learning more and progressing without the friction of being wrong. Mistakes open doors that are difficult to locate otherwise, and oftentimes would remain invisible. Not just mistakes: merely trying out something different is obviously challenging since there are no instructions, no set procedure, no previous experience. Life itself is an act of trying out something new, yet many of us remain wary of the unknown, just because it is unknown. However, embracing the mistake, the possibility of not being wrong as an experience to learn from, is essential. Inspecting what didn't work as expected, reflecting on it, being able to act on it and change.

These past 12 months have been a constant journey of discovery for me. I have had to adjust expectations from life, my ways of working, the object of my work, plus several other things I have had to adjust to at the personal scale of things. I started a career as full-time artist in this time, and have been learning about every aspect of it throughout. Aprendizajes is a tribute rooted in my own explorations of this subject matter: art. More specifically, is an account of a particular generative system that I started coding more than a year ago. One of the ways I approach a new subject is finding a particular motivation to learn the subject. To improve my creative coding skills, I chose to replicate the style of Suprematist painters, taking as an example a number of works by Kazimir Malevich, widely known Russian painter from the early 1900s, while recovering an idea I had based on the geometrical line-based work of Eusebio Sempere, a Spanish painter who explored that particular aesthetic on the 1960s-70s. I can't say that I have achieved great heights with this particular system, certainly not what these artists achieved with their works, but I feel it's time to sum it up somehow and celebrate this year of learning by releasing this project in this form.

Generative art is also an excellent tool towards learning. The artist creates the set of rules, conditions, the playground, the elements / ingredients that exist in the space of the potential body of work, but it is then the consecutive execution, and constant iteration based on the results, what decidedly shapes the outcome. It is the large body of outputs what helps the artists learn more about what they have built. One wishes we could have the chance sometimes to also execute many times in life to learn about the possible variance in the outcome and choose wisely. Have many different jobs, get to know many people, live in different cities. Being open to change, at least, as a proxy to a wide variety of influences that help one understand a bit better that this world is wide and beautiful, as are the people who inhabit it, no matter their differences.

Learning is to me one of the key activities that any being can do. We'll see how we tackle education of our future synthetic beings, infused with advanced AIs that exhibit behaviour and intention (whenever that comes to happen). On the meantime, we still have too many humans that have little access to education. To learning tools. This project would like to add its little grain of salt to the enormous task of improving that by donating 25% of the primary proceedings to Save the Children. The organization has been chosen for its track record and for accepting direct donations with Tezos. I believe NGOs (and public administrations alike) have a great opportunity to improve transparency by leveraging the blockchain, as they operate in typically trust-compromised scenarios. Being able to donate directly on the blockchain, straight from the wallet that receives the proceedings of the sale, seems important to me to improve the flow of some funds that may have an impact on children's living conditions and education.

an output from the system with the debug view on; artwork by Marcelo Soria-Rodríguez

About the artwork

It exhibits the following set of characteristics:

  • An artwork may have a debug mode enabled. Debugging is the practice of looking for errors in the code, of understanding better the flow of execution of the code/artwork. I typically use visual aids in my code at certain points to gain perspective, as part of my debugging efforts. Some pieces will have those aids activated (and can be deactivated, if the viewer wants to see the work with/without), some other pieces will not have this mode available.
  • Artworks have a varying degree of degradation. Every process of learning reaches a point where the entity that learns needs to rest. As we grow tired, we do things worse and need to take a break. The works reflect this too: some of them will exhibit a degradation in the way lines are drawn that grows as more elements are painted. Some works will remain with a precision within reasonable limits, not showing a great disorder in the way they are drawn.
  • These works are made up of rectangles made of lines that are made up of segments. The algorithm may select a certain range of different line widths (weights) to perform the drawing.
  • The algorithm may also choose among different densities to draw the rectangles.
  • An artwork may employ up to 4 palettes.
  • It may be grayscale.
  • There are 6 different backgrounds.

Whenever the artwork is repainted (e.g., when the resolution is changed, or the user triggers a repaint by pressing 'r' - see below), it retains the main elements (colors, rectangles, etc.), but the way each individual line that composes each rectangle may change. Nothing is permanent in life, and this is another learning, hence I chose to let the work change slightly in these occasions. In any case, whenever the work is reset completely (reloading the page of the artwork) it will yield always the exact same rendering of it.

About the artwork: user manual

Yes, it's an artwork with a user manual. Welcome to this age. What can you do with it? There's a range of options:

  • Save the current image: press 's' to download the current resolution image as a png file. You can change the resolution, see next section.
  • In case you have an artwork with the debug mode activated: you can press 'q' to enable/disable it.
  • Repaint the image: press 'r' and it will draw the same rectangles, same colours, but will reinvent the way the lines are painted (they may be longer / shorter). It lets the user play a bit with the work, while the work is the same. When you reload the work, it will draw it like the first time.

Control the resolution of the artwork

If you wish to save a high definition image you can do so by using the following options. Please take note that if you end up specifying an image resolution that your computer cannot handle (either the graphics card or the general available memory for the browser), you could experience some symptoms which are explained after the list of the commands:

  • Press 'd' followed by any number from '1' to '9': it will add that amount to the pixel density. So if you had, let's say, a value of 2 for the pixel density (which is the default value for many devices), and you press 'd' followed by '9', you would end up with a pixel density of 11, which is almost 6 times as large as the original image (it is equivalent to multiplying by 2 two times and then multiplying by 1.5). If you had an image that was, say, 1000 pixels high, you would now have an image almost 6000 pixels high. You can keep adding: if you press 'd' + '9' + '5', you will end up with a pretty large image (adding 14 to the original pixel density).
  • Press 'd' followed by '+': it will increase the resolution by adding 0.5 to the pixel density. Fine tune of the pixel density.
  • Press 'd'  followed by '-': it will decrease the resolution by subtracting 0.5 to the pixel density. Fine tune of the pixel density.
  • Press 'd' followed by '0' (zero): it resets the pixel density to the original value. So the image size will be back to what it was based on your device's default pixel density values.

If you happen to push resolution too much, you will get a black image. That means you have pushed past the maximum texture size that your graphics card can handle (apologies for that). Nothing to worry about: press 'd' + '0' to reset, or 'd' + '-' to subtract 0.5 from the pixel density. For example, a 2016 MacBook Pro, which has an integrated Intel GPU on the i5 processor, can go up to roughly pixel density 6 from a starting point of a maximized browser window (in this case, adding 4 to the default 2). That yields an image above 7000 pixels wide, which is pretty good for a print of roughly 60-70cm wide.

Control the image tuning

Noise is an integral part of my work. It contributes a great deal to add a texture that brings it close to where I would like it to be. Somehow, the dirty, noisy look makes me think of real life, its frictions, its imperfections. Things that are not present in a purely digital artwork: pixels are perfect, displays are fabulous, there is no texture to a pixel per se in the same way that there is a texture to a canvas, to the paint, to the brush hair that leaves its mark on the paint. Hence, to me adding a layer of "dirt" is critical. The work has a default setting, but depending on the screen, the printing device (should you choose to print your own copies), etc., the image may benefit from some adjustment. You can do that directly on the artwork. It is actually encouraged to play around with the controls, adjusting to extreme values contrast / brightness / gamma / blur etc. It is part of a process of exploring different possibilities, of learning. To do so, here's a short menu of controls. The functioning is the same: you press a key to activate one control, and then press + / - to adjust its intensity. Pressing +/- repeatedly will modify the last typed command until any other key besides + or - is pressed.

  • Press 'b' followed by either '+' or '-' to increase / decrease the amount of "dirt/glow" (it's basically a simple blur).
  • Press 'g' followed by either '+' or '-' to increase / decrease the contrast via gamma adjusting (if you don't know what gamma is, just think of it as some way to adjust contrast).
  • Press 'x' followed by either '+' or '-' to increase / decrease the contrast via a brightness/contrast adjust (again, just think of it as a different way to adjust contrast).
  • Press 'z' followed by either '+' or '-' to increase / decrease the brightness via a brightness/contrast adjust (again, just think of it as a different way to adjust contrast).
  • Press 'n' followed by either '+' or '-' to increase / decrease the amount of noise/grain.
  • Press 'a' to toggle between applying all these settings or not, except for the noise. Noise cannot be canceled by the global switch: friction is inherent to our lives, we cannot switch it off. You can tone it down, though, with its dedicated control.

If you hear your system fans blowing at full speed, it may be that the drawing is too heavy for the hardware. Keep in mind that the noise layer is added continuously: if you look at the artwork, you'll see the noise moving. This uses CPU + GPU. If you'd rather stop / freeze the image, then press 'l' to stop all CPU/ GPU use, and 'l' again to resume. While the artwork is "frozen", the previous commands to tune the image will not work.

Some more technical caveats: some people brought to my attention that other previous works didn't work as expected on certain mobile devices (iPhones, apparently) because of the shader used (it's used for all the image tuning controls and noise). It might still happen that you experience problems in your mobile device with the live view. The piece does work on laptops and desktops. And some mobiles (e.g., iPhone SE 2020, and several recent Android devices).