Cuentos Completos de Onetti

Tenía varios días leyendo el volumen con los cuentos completos de Juan Carlos Onetti. Desde el excelso prólogo de Antonio Muñoz Molina, hasta Bichicome -el último de los cuentos-, he apreciado con fervor, a veces con fanatismo, toda esta literatura. Puedo señalar, en orden, algunos cuentos favoritos: Jacob y el otro, El álbum, La cara de la desgracia. Puedo, también, encontrar reminiscencias de la Sonya de Dostoievsky en el cuento Mascarada. Tampoco pude evitar pensar en el cuento La noche que lo dejaron solo de Juan Rulfo cuando leí El obstáculo. Sin embargo, sorpresas mayores esperan cuando se leen La larga historia y La cara de la desgracia: es una demostración irrefutable de que los seres superiores existen.

Izgnanie

Izgnanie (The Banishment). De Andrei Zvyagintsev. 2007. Ya antes hablamos de El Regreso, otra obra maestra de Zvyagintsev. Izgnanie también es colosal, y quiero destacar esta escena en particular, con los niños armando un rompecabezas: la alegoría religiosa, en todo el contexto de la escena, es decididamente magistral, sublime y memorable. Es una de las escenas que más me han impactado recientemente. Y no escapa, según mi apreciación, a la influencia de Bergman. Hay otras escenas en Izgnanie que claramente demuestran los efectos del cine de Tarkovsky y Antonioni… recuerdo una escena donde el movimiento de la cámara bajo la lluvia, partiendo de la fuente (antes seca), despierta reminiscencias claras de algunas escenas de Stalker. Además, Konstantin Lavronenko se supera con su actuación (de hecho, recibió en Cannes el premio al mejor actor por este film). La actriz principal, Maria Bonnevie, también es excepcional.

Particularmente, el argumento de El Regreso me gustó más, porque encuentro Izgnanie muy “melodramáticamente rusa” :D. Sin embargo, es una película que recomiendo completamente.

Modifying the TCP Acknowledgement Mechanism

El primer libro de un amigo mío, ya disponible en Amazon.com: Modifying the TCP Acknowledgement Mechanism: An Evaluation and Application to Wired and Wireless Networks by Andrés Arcia-Moret.

El primer libro de Andrés.

Andrés es amigo, estudiante, docente, investigador, usuario de Mac, padre de familia, serio candidato a gurú universal de la computación. Doy fe de su calidad profesional y humana. Y éste, su primer libro, es un reflejo de su pasión por la informática. Enhorabuena, Andrés. La próxima vez que el avión me deje en Mérida reanudaremos nuestra charla sobre la despreocupación de los margariteños 😀

Why adding people to a late software project makes it later?

That statement is known as Brooks’s Law, and it was coined by the renowned computer scientist and software engineer Frederick P. Brooks. Concretely, the original statement found in his 1975 classic The Mythical Man-Month is “adding manpower to a late software project makes it later”. Basically, the idea is that adding more analysts, designers or programmers to a project running behind the original schedule will delay it even more.

Broadly speaking, the rationale of Brooks’s law is related to knowledge management. First, when new personnel is added to the project, some resources have to be diverted into training or informing the newcomers about the project’s status, vision and philosophy. That will delay the project. Further, when the number of people participating in a project increases, so does the number of communication paths. Thereby, more resources (including time) are required in order to distribute the information. Regarding this point, you may be interested in reading my entry on “Knowledge Sharing” in Software Design, Trials and Errors.

An E(x)tern Newbie Question

I want to know how to declare a const variable in one file and access it from other files? (C++). It’s a fairly basic question, and reveals that you have to study more C++. What you want is to define a const variable at global scope. Unlike non-const variables (which are extern by default), const variables are local to the file in which they are defined. Therefore, you cannot access them from other files unless you specify that the variable is extern. For instance, if you specify extern when defining the variable

bufferSize in file1.ccextern const int bufferSize = 512;

you can access bufferSize from any other file, say, file2.cc

extern const int bufferSize; // we are using bufferSize from file1.cc

And that’s it.

Reentrant Routine

A routine or procedure P is reentrant (or pure code) if it can be “re-entered” after it is already in execution. Basically, it means that P can be executed two or more times simultaneously, or alternatively, that P can be safely executed concurrently. There are some conditions P must follow in order to be reentrant, and we may check them in the Wikipedia entry for reentrant functions.

Some programs necessarily have to be reentrant. For instance, device drivers. A device driver has to be reentrant because another interrupt may be raised while the driver is running. This means that reentrancy allows for code sharing. For example, if a program consists of 600 KB of code and 200 KB of data, and n users are simultaneously using the program, we would require n x 600 KB of physical memory for the code if the program is not reentrant. But if the code is reentrant we can share it among the n users, saving a lot of memory.

Calculus of resonances in an uniform acoustic tube

We assume that the glottal end is closed, but the mouth is open. This is the configuration we are referring to:

The acoustic tube is uniform, and its length is L. The glottis, located at x=-L, is closed (infinite impedance) and the mouth, located at x=0, is open (impedance zero). Now, pressure variation p(x) along this uniform acoustic tube is expressed as:

$latex \frac{d^2p}{dx^2} + \left(\frac{2\pi f}{c}\right)^2p = 0 ~~(I)$

where f represents frequency in Hz, and c is the speed of sound: $latex 3.53 \times 10^4 cm/s$ at 37° C.

According to the boundary conditions (the impedances at both ends), the solution is:

$latex p(x) = P_m \sin{\frac{2\pi f}{c}x} ~~(II)$

where $latex P_m$ is the peak in sound pressure. On the other hand, we have a relation between pressure and volume velocity

$latex \frac{dp}{dx} = -\frac{j2\pi f \rho}{A}U ~~(III)$

$latex A$ is a constant representing the tube’s area. Now, volume velocity can be expressed as

$latex U(x) = jP_m \frac{A}{\rho c} \cos{\frac{2\pi f}{c}x} ~~(IV)$

where $latex \rho$ equals the average atmospheric density ($latex 1.14 \times 10^{-3} gm / cm ^ 3$ at 37°C).

As U(−L) = 0, resonances Fn of the acoustic tube are

$latex Fn = \frac{2n – 1}{4}\frac{c}{L} ~~(V)$

where n=1, 2, 3… And that’s it. We can see that the area function does not affect the location of resonances. Finally, remember that, in average, the male oral tract has a length of 16.9 cm, and the female tract has an average length of 14.1 cm.

The Nightmare before Christmas

Improbable que unos días antes de Navidad se encuentre usted inmerso en los ajustes finales de un salvapantallas (protector de pantallas/screensaver). Su salvapantallas utiliza OpenGL para el renderizado, y corre en Windows. Flujos lógicos perfectamente sincronizados, compiladores felices, arte gráfico hermoso. Prueba A superada. Prueba B superada. El problema apareció en la prueba N. En específico, que su salvapantallas funcionó perfectamente en todas las máquinas, menos en aquella laptop con gráficos Intel. En esa máquina, triste e inexplicablemente, su salvapantallas no dispone de aceleración 3D. La máquina es capaz de aceleración 3D -mil veces comprobado-, y sin embargo, su lindo salvapantallas no puede aprovechar dicha aceleración. En esa laptop, su salvapantallas se ejecuta con una lentitud intolerable, parece un aborto en software. ¿Por qué todos los otros programas corren con aceleración 3D en esa laptop, pero su salvapantallas no? ¿Por qué? ¿Razones esotéricas? Después de todo, a nivel de ejecución, un salvapantallas es simplemente un ejecutable con extensión “scr” (obviemos, por innecesarios, los detalles sobre el procesamiento de la línea de comandos, el enlace con scrnsave.lib -si elige esa vía-, y algún otro escarmiento propio de los salvapantallas). Deseo que no pierda vitales minutos de su vida prisionero de dicha pesadilla. La razón -o sinrazón- del fiasco está aquí. Si observamos con cuidado, la única diferencia entre su salvapantallas y el resto de ejecutables que sí reciben aceleración 3D es la extensión del archivo. Alguien, en alguna parte del sistema, está detectando la extensión “scr” de nuestra aplicación y le niega la aceleración 3D. Bueno, cambie la extensión. En vez de “scr”, use “sCr” o algo así. Parece tonto -y lo es- pero funciona. De nada.