miércoles, 7 de octubre de 2015

Memoria y Materialización

Gran parte de mi día a día es ocupado por un trabajo totalmente aburrido en una empresa de software. Bueno; "empresa de software" que en realidad se parece más a una consultora. Si bien se trata de una labor que no requiere mucha imaginación o creatividad, y con pocos objetivos de progreso a largo plazo (hacia un estado de mayor felicidad), de vez en cuando uno aprende técnicas de programación que hacen a un tipo curioso irse por las ramas... ¡de la metafísica! Increíble o incluso hilarante que parezca para muchos desarrolladores de software, esos momentos de mi vida existen, y yo los valoro mucho.

Fenómenos y realidad


Esta es otra entrada que tiene que ver con los fenómenos. Los fenómenos son las manifestaciones, todo lo que se puede experimentar. O por qué no, las experiencias en sí, o las apariencias. Desde un punto de vista científico, un fenómeno es algo que se puede medir.

Supongo que la mayoría de nosotros tenemos una inclinación por intuir que existen cosas reales y otras irreales. O quizá, sentimos a algunas cosas "más reales" que otras (bueno; todo aquello que es sensible debe ser real, ¿o no? Lo recíproco puede no ser verdadero). Pero, ¿qué hace que ciertas cosas se sientan más reales que otras? En este momento, en el que estoy escribiendo este artículo, siento al teclado muy real; es porque puedo tocarlo. Lo mismo con la pantalla, la cual tengo frente a mis ojos. Son la una de la mañana de un miércoles, es obviamente de noche. Acabo de darle play a una lista de reproducción de Bossa Nova (adoro esta música); la música es tan real como cualquier elemento de la habitación. Acabo de fumar un cigarrillo.

¿Qué tal el sueño que tuve anoche? Hacer un viaje en el tiempo a un año 2067 retrofuturista decadente y luego escapar de vuelta al pasado ascendiendo por la entrada de una alcantarilla... bueno, no me parece tan real en este momento (¿será porque no lo recuerdo en detalle?), pero sí lo era anoche, mientras lo soñaba, mientras lo vivía.

Cachés


Hace unos días, cuando me hice la pregunta, recordé que ya me la había hecho hace unos años atrás. Pero ayudó haber estado trabajando con memorias caché unas horas antes; esa conjunción fue inspiradora. Pero, antes de seguir con la explicación, debo dar una mínima idea de lo que es una caché. Sin entrar en detalles, una caché es un tipo de memoria de acceso rápido y de tamaño reducido, que almacena datos temporales (volátiles). Se utiliza en diversos tipos de dispositivos o software que requieran leer con facilidad datos que, en un principio, no son sencillos de construir u obtener. Su pequeño tamaño es compensado con velocidad de acceso. El uso de una memoria caché no suele ser imprescindible para el acceso a la información, sino más bien una técnica de utilidad.

Una analogía podría llegar a dilucidarlo (creo que la estoy tomando prestada de cierta bibliografía de sistemas operativos): en mi facultad tenemos una biblioteca, y adyacente a ella su sala de lectura. Uno entra a la biblioteca, se dirige hacia la computadora, busca los libros A, B y C en el índice para luego ir hacia lugares específicos del almacén de libros y recogerlos. Este proceso toma algo de tiempo; quién haya vivido una vida de estudiante podría saberlo. Una vez que tiene los libros A, B y C que necesita, se dirige hacia la sala de lectura con ellos. Se sienta en alguno de los escritorios y coloca los libros sobre la mesa. Toma el cuaderno que lleva en su mochila y comienza a escribir sus notas. Al principio, podría llegar a hacerlo sin consultar ninguno de los tres libros. Pero, seguramente, llegará un momento en que deba hacer una consulta al libro A. Por suerte, uno no necesita volver al almacén en busca del libro A (lo que sería una tarea tediosa) ya que lo tiene al alcance de la mano. Lo mismo ocurre con los libros B y C: seguramente los necesitará pronto, y por eso los tiene sobre la mesa.

En definitiva, este escritorio es un buen ejemplo de caché. Notar que es pequeño y no puede albergar muchos libros, pero sí permite tenerlos a mano. También funciona como depósito temporal ya que una vez que el estudiante lo abandona, debe retornar los libros a la biblioteca (si es educado, claro).

Una rutina para calcular factoriales


Suponga que quiero escribir un programa de ordenador que le permita a un usuario calcular factoriales. El factorial de un número natural n es el producto de todos los números naturales entre 1 y n, ambos incluidos. Se denota con n!. Por ejemplo, 4! = 1×2×3×4 = 24.

Ahora, suponga que el usuario desea usar mi programa para calcular los factoriales 5! y 10!, en ese orden. Yo, como programador, sería un poco ingenuo si escribiera un programa que primero calcule 1×2×3×4×5, y luego 1×2×3×4×5×6×7×8×9×10. ¿Por qué? Pues porque no hay necesidad de multiplicar los números desde 1 hasta 5 la segunda vez, ya que la máquina los multiplica la primera vez para obtener 5!. En vez de repetir los cálculos, podría indicar a la computadora que guarde el resultado 5! en su memoria, que es 120, para luego computar 120×6×7×8×9×10. Esto reduce la cantidad de operaciones a 5 productos en vez de 9.

Esta técnica se denomina "programación dinámica". En algunas ocasiones se vuelve práctica la combinación de esta técnica y el uso de memorias caché para almacenar resultados de cálculos complejos. 

Materialización de factoriales 


Hemos de notar en el ejemplo anterior que si bien guardar 5! en la caché no es necesario para calcular 10!, sí es muy práctico. Lo mismo podría hacerse con cualquier n! para reducir cálculos de factoriales más grandes. Pero para ello es necesario un espacio donde materializar esos valores. Ese espacio es la memoria.

Dicho de otra manera, el resultado 120 almacenado en la memoria es de alguna forma más concreto que la receta (implícita y abstracta) que se utiliza para definir 5!, la cual es 1×2×3×4×5. En definitiva: podemos pensar que los factoriales se manifiestan (o materializan) cuando se guardan en la memoria, porque luego de ser memorizados pasan a formar parte de un espacio muy palpable, que es la memoria misma.

Materializar Mandelbrot


Puede ser una buena idea retornar (¡una vez más!) a los fractales, pero esta vez para analizar programas capaces de calcularlos... o medirlos... o como queramos pensarlo, ya que después de todo es más o menos lo mismo. Los conjuntos que más me interesan son el de Mandelbrot, el de Julia, o similares, en cuyos gráficos abundan formas similares a las que se encuentran en la naturaleza, como árboles, ríos, plantas, insectos, etc.


Las implementaciones de representación gráfica de estos conjuntos (por lo menos las más populares) pueden llegar a requerir una cantidad importante de cálculos, incluso al momento de colorear un solo píxel. Estos algoritmos toman algunos datos de entrada, como coordenadas, y a partir de ellos dibujan alguna sección en particular. En general, los programas de computadora que funcionan de esta manera disponen de herramientas para hacer zoom hacia dentro y hacia afuera, o moverse en diferentes direcciones. Esto permite al usuario explorar diferentes partes del fractal a diversas escalas.

Pensemos un poco en una posible implementación. Un programador podría utilizar una caché para almacenar los colores de los últimos píxeles visitados por el usuario. La finalidad práctica sería que los colores de los píxeles recientes no fueran recalculados cada vez que el usuario decidiera hacer un pequeño zoom o movimiento. Pero, además, si pensamos en el cacheo como materialización, entonces podemos concluir que memorizar el color de un píxel es lo mismo que hacerlo manifiesto. Observamos un fractal cuando lo calculamos, y lo hacemos "tangible" cuando lo memorizamos.

Los Fenómenos como Materialización de las Ideas


Permitámonos soñar que observar la naturaleza o el mundo físico (o el universo en un estado de vigilia) no es diferente a realizar un cálculo complejo. No me refiero justamente a que el cerebro requiera de cálculos complejos para interpretar la realidad; podemos dar eso por sentado. En vez de eso, sugiero "soñar", ya que pido que pensemos que todo lo que medimos en el mundo físico es el resultado de hacer cálculos y almacenar datos en nuestra memoria; que medir el mundo y memorizarlo es materializarlo.

¿Qué tal si no hubiera mucha "estructura" allá afuera? ¿Qué tal si el mundo fuera simplemente una receta de ideas ejecutada por los sujetos? ¿Algún concepto nos impide ver al mundo de esa forma? ¿Sería esa receta pequeña, extensa, o ininteligible? Podríamos tener una receta parecida a la órbita de un fractal. Podría incluso ser comprensible pero caótica también. Los sujetos serían meras implementaciones de materialización de ideas en el espacio y el tiempo.


De hecho, Immanuel Kant afirma en su Crítica de la Razón pura que "todo lo intuido en el espacio y el tiempo, y con ello todos los objetos de nuestra experiencia posible, no es más que fenómenos, esto es, meras representaciones, que del modo en que se representan, como sustancia extensa o series de alteraciones, no tienen existencia propia e independiente aparte de nuestro pensamiento". Además, para Kant existe un nivel de conocimiento, la sensibilidad, que se encarga de ordenar en el espacio y el tiempo (los cuales son parte de este mismo nivel de sensibilidad) las impresiones que tiene el sujeto. Entonces, ¿qué tal pensar en el espacio-tiempo como la caché de nuestra realidad lúcida, o como gran parte de ella? Nuestra realidad lúcida es construida a partir de una fórmula para luego ser plasmada en el espacio-tiempo.

En el artículo Del porqué de la existencia comparo la galaxia de Andrómeda con el conjunto de Mandelbrot, y remarco la pobre excusa de recurrir a una variable espacial para determinar la existencia de las cosas. Por alguna razón decidimos creer que un objeto es "más real" que otro. Quizá ese juicio tenga que ver más con nuestra cultura (¿occidental?) que con nuestra naturaleza humana. O quizá tenga que ver una mente habituada a la vigilia. Sea como sea, valdrá la pena dejar de programar un poco y tomarse unas horas del trabajo para analizarlo.

Especulaciones y Nada Más


Me gusta especular, y como me siento libre de hacerlo, voy a hacerlo. Si el espacio-tiempo es caché, entonces puede que sea pequeño en comparación al mundo potencialmente mensurable. Quizá nunca haya existido y nunca existirá un unicornio en nuestra verdad lúcida. Sin embargo, los fenómenos están al alcance de la mano. Son volátiles, a diferencia de la receta, la cual es inmutable y trascendental. Las cosas que vemos están ahí porque es conveniente tenerlas ahí, pero no fundamental. Materializar es una ardua tarea. La sensibilidad es (muy) útil, pero prescindible.



Más info:http://www.wordreference.com/es/en/frames.aspx?es=materializar
https://es.wikipedia.org/wiki/Fen%C3%B3meno
https://es.wikipedia.org/wiki/Cach%C3%A9_%28inform%C3%A1tica%29
https://es.wikipedia.org/wiki/Programaci%C3%B3n_din%C3%A1mica
https://es.wikipedia.org/wiki/Factorial
https://es.wikipedia.org/wiki/Conjunto_de_Mandelbrot
https://es.wikipedia.org/wiki/Conjunto_de_Julia
http://www-reynal.ensea.fr/docs/iq/PrinciplesOfQuantumComputation1.pdf (Introduction to Classical Computation, deterministic chaos)
https://es.wikipedia.org/wiki/Idealismo
https://es.wikipedia.org/wiki/Idealismo_trascendental
https://es.wikipedia.org/wiki/Cr%C3%ADtica_de_la_raz%C3%B3n_pura
https://es.wikipedia.org/wiki/Immanuel_Kant
https://en.wikipedia.org/wiki/Orbit_(dynamics)
https://es.wikipedia.org/wiki/Galaxia_de_Andr%C3%B3meda

Mi música!

Algo de mi música (y con amigos). Lo seleccionado desde 2004 hasta 2010. ;)

Buscá...

Buscá y encontrá lo que quieras en alguno de mis espacios (La Mezcolanza, C^2 ó mi canal en Youtube) o en alguno de los sitios amigos.

Posts recientes

Contate algo...