martes, 2 de diciembre de 2008

Esos pequeños detalles...

Parece que KDE 4.2 ya está casi completo, justo para salir cuando está previsto en enero. Uno de los elementos más vistos y usados, que estaba algo escaso desde 4.0 ya está acabado: el systray, o bandeja del sistema. Me extendería en explicaciones y alabanzas, pero mejor me refiero al blog del responsable, que lo expresará mejor y de primera mano:
http://aseigo.blogspot.com/2008/11/plasma-systray-42.html

Por otro lado, he encontrado un fototour de una versión más o menos reciente del trunk:
http://introducingkde4.blogspot.com/2008/11/plasma.html

domingo, 23 de noviembre de 2008

Fotografías del verano (y II)

Aquí subo las fotografías del verano que tenía pendientes, para uso y disfrute del personal.



domingo, 16 de noviembre de 2008

Hasta nunca, Xing

He decidido dar de baja para siempre mi cuenta en el portal de networking profesional Xing. ¿Por qué? Muy sencillo. Yo creé una cuenta en el portal español Neurona.com hace ya unos años, que tenía una buena comunidad activa, muchos usuarios, bastantes opciones y servicios y un soporte muy rápido y eficaz.

Hace relativamente poco anunciaron que eran comprados por Xing, y que pasaban a ser parte de esta red de perfiles profesionales. Como se montó mucho revuelo en la comunidad porque las funciones gratuitas de Xing eran escasas y las equivalentes a Neurona eran de pago se apresuraron a negar desde el equipo de Neurona que se fuera a volver de pago y afirmaron que iba a permanecer como hasta ese momento, un servicio completamente gratuito.

Por fin, el día de la asimilación de Neurona por parte de Xing llegó, y con él los numerosos errores en la migración de perfiles y pérdidas de datos, pero también lo prometido: no se perdió funcionalidad... a priori. No tardé en darme cuenta de que si teníamos toda la funcionalidad era debido a que por provenir de Neurona nos concedieron cuentas Premium durante tres meses, tiempo tras el cual si queríamos conservar la funcionalidad que siempre fue gratuita en Neurona tendríamos que pagar un suscripción. En otras palabras, nos engañaron como bellacos.

Hoy, tras dejarlo mucho tiempo abandonado, he decidido clausurar mi cuenta, remitiéndoles este texto como motivo:
El paso de Neurona a Xing fue un colosal engaño. Xing sólo compró la base de datos de usuarios y les privó de la mayor parte de la funcionalidad, pasando a ser de pago en contra de lo prometido desde el equipo de Neurona, más preocupados por la venta de la empresa que por las personas.

Me hubiera gustado haber podido avisar a mis contactos de mi decisión, pero algo tan elemental como el envío de mensajes sólo se habilita previo pago.

Ahora tengo mi perfil en LinkedIn, que ofrece de manera gratuita todo lo que necesito:
http://www.linkedin.com/in/ruben3d

Recomiendo a todos que se mantengan alejados de Xing, y empleen redes como LinkedIn.

lunes, 20 de octubre de 2008

Nuevo iGoogle

Como usuario de iGoogle que soy (antigua Página personalizada de Google) me sorprendió encontrarme de golpe y porrazo con una nueva versión, sin previo anuncio.

Aunque por lo general tiene nuevos conceptos interesantes, como la vista de canvas, que no es otra cosa que el poder expandir los gadgets para aprovechar temporalmente todo el área y extender sus funcionalidades, también han aparecido multitud de pequeños detalles que me han incomodado bastante:
  • Ya no puedo 'plegar' un gadget con un solo clic, sino que tengo que acceder a un pequeño popup y buscar la opción.
  • La posibilidad de abrir en pestaña nueva algunos gadgets ha desaparecido, como puedan ser los nuevos correos de GMail, y obliga a cargarlos por AJAX en la misma pantalla. Así, ya no puedo ir abriendo todo lo que me interesaba en otras pestañas para poder leerlo después.
  • Las pestañas de iGoogle en la parte superior se han movido al lateral izquierdo, desperdiciando mucho espacio útil para los que no usabamos las pestañas. Aunque con la nueva tendencia de los monitores a ser todos panorámicos puede parecer comprensivo, yo no tengo un monitor panorámico, y no hay ninguna opción a día de hoy para cambiarlo. Desde Google dicen que ese espacio va a ser aprovechado en el futuro. A ver si es verdad.
  • Hay pequeños fallos de visualización en algunos gadgets que antes no había.
Desde luego no son motivos suficientes para hacerme cambiar a otro portal como Netvibes, y supongo que irán mejorando, pero el tiempo lo dirá. Escribiría mis quejas en el grupo dedicado a tal efecto de Google, pero ya hay muchos usuarios descontentos que lo hacen por mí.

jueves, 16 de octubre de 2008

Fotografías del verano (I)

Tengo en Picasa las fotografías de algunos de los sitios que he estado visitando este verano, entre los que se encuentran la Riviera Maya, el entorno de Sacedón y Buendía, Faunia y Murcia. Pongo a continuación los enlaces a las galerías a modo de resumen:







martes, 14 de octubre de 2008

KDE 4 en Windows

Tras salir KDE 4.1.2 he decidido probarlo... sobre Windows. Aún me parece que está un poco verde para sustituir al KDE 3.5.9 que tengo como sistema de escritorio en Linux, así que ¿por qué no matar dos pájaros de un tiro y probar a la vez las nuevas características y la versión de Windows?

La instalación es muy sencilla, no hay más que descargar el instalador de KDE para Windows, una aplicación muy similar al instalador de Cygwin, y seguir las instrucciones en pantalla. En el sitio de KDE se detalla todo el proceso: KDE on Windows/Installation.

Una vez todo instalado se crea una estructura de directorios en el path de instalación equivalente a la que habría en un sistema Linux. Así, no hay más que entrar en /bin para encontrarse con los binarios de todas las aplicaciones ya portadas a Windows. Aunque muchas de ellas que aún no funcionan (KOffice 2 es aún muy inestable y no me funciona ningún reproductor multimedia) hay muchas que sí lo hacen.

Lo más interesante visualmente es el nuevo entorno de escritorio Plasma, que se consigue ejecutando plasma.exe, basado de Plasmoids, que hacen las veces de Widgets que ofrecen distintas funcionalidades. Se basa en que todo lo que aparece, hasta la barra de tareas y menú de aplicaciones, es un Plasmoid, que pueden ser escritos en los distintos lenguajes para los que se han desarrollado bindings y se dibujan con carácter vectorial, por lo que se puede variar sus tamaños, opacidades, rotación, etc., sin afectar su detalle y funcionamiento.

De momento corre con el gestor de ventanas del propio Windows y no existe una versión de Kwin, por lo que no detecta en la barra de tareas qué ventanas hay abiertas ni dispone de los efectos 3D tan vistosos que hay disponibles en la versión con Kwin sobre X11. No está listo aún para reemplazar al explorer.exe de Microsoft pero según parece el objetivo es alcanzar ese nivel y en esta versión ya nos podemos ir haciendo una idea de qué pinta tendrá.

Para finalizar qué mejor que unas cuantas pantallas, para que se vea todo esto:











viernes, 27 de junio de 2008

Fotografía HDR

Aprovechando la nueva cámara fotográfica que tengo he estado adentrándome un poco en el mundo de la fotografía HDR. La técnica consiste en combinar el rango dinámico de múltiples fotografías a diversas exposiciones en una sola de alto rango dinámico (High Dynamic Range ó HDR) con 32 bits por canal de color en coma flotante. Como los monitores actuales no pueden mostrar una imagen de estas características hay que procesarla de vuelta al rango normal de 8 bits por canal de color. Para este último paso no existe un solo método ni aplicación y no es trivial conseguir el efecto deseado teniendo que manipular, por lo general, un gran de parámetros del algoritmo empleado.

Según lo que he podido observar en Flickr los aficionados a este tipo de fotografías se dividen entre los que buscan amplificar el realismo y los detalles, de forma que la fotografía se asemeje más a lo que vería el propio ojo humano, y los que exageran los colores y contrastes de manera que aparece una vistosa pero irreal composición. Yo personalmente me decanto más por la primera y los resultados de mis primeras pruebas se pueden ver aquí:

lunes, 23 de junio de 2008

Introducción a Brazil r/s

En este texto voy a explicar rápidamente los parámetros básicos de renderizado de Brazil r/s, un sistema de render con iluminación global para 3D Studio MAX. La versión a la que se hace referencia es la última que había en el momento en que escribí este texto: Test 0.4.53 para 3D Studio MAX 3.1.

Opciones generales


En esta persiana se configuran diversas opciones que no tienen nada que ver con la calidad del render. En el cuadro Tools sólo puede desactivarse el VFB (la ventana donde se ve el progreso del render). El resto de opciones están deshabilitadas en la versión gratuita (diversas opciones para guardar y cargar configuraciones, mostrar el VFB y la Consola).

En el cuadro Console Options se puede activar/desactivar el mostrar la consola al lanzar un render (Auto Launch), se puede configurar para que borre su contenido al renderizar un nuevo fotograma (Clear on new frame) y se puede variar el nivel de información que proporciona (Verbose level).

En Bucketing Options se puede configurar el tamaño de la celda de render (el cuadrado que va renderizando). El tamaño no varía el tiempo de render. También se puede configurar el orden de render (arriba-abajo, izq-dcha, etc.). Si se elije Priority Map se puede renderizar siguiendo el orden de un mapa de prioridad, en el cual el blanco tiene la máxima prioridad y el negro la mínima. Con el botón R se invierte el orden de render.

El cuadro Multithreading Options sirve para controlar la administración de tareas y procesadores. En el caso de tener un equipo con varios procesadores, desde aquí se controla el número de procesadores que se utilizan. La configuración por defecto usa todos los procesadores disponibles.

Image sampling

Desde esta persiana se controla el Image sampling y el Depth of Field.

En Image Sampling Control se controla la alisación de la imagen. Desde Min Samples y Max Samples se controla cuántos Samples se están utilizando por pixel para realizar la alisación. Un mismo valor para ambos campos desactiva la alisación adaptativa y emplea el valor dado para todos los píxeles. Sin embargo, si los valores varían Min Samples controla el valor mínimo empleado para todos los píxeles y Max Samples controla el valor máximo, que se aplica según el resto de parámetros. En mis pruebas he llegado a la conclusión de que un valor mínimo de 0 y un valor máximo de 2 dan bastante buenos resultados para la mayor parte de los casos (con esta configuración se calcula sólo una vez la alisación por pixel y se refina cuatro veces cuando halla un borde de un objeto, de un grupo de suavizado, etc). Low Contrast y High Contrast controlan el contraste que ha de haber entre dos píxeles para usar el valor de Max Samples. Object Edge activa la alisación adaptativa en los bordes de los objetos. RPrim Edge refina también los bordes de las caras (conviene que esté desactivado y usarlo sólo en casos en los cuales ocurran errores de alisación entre caras). Smooth Groups hace lo mismo que los parámetros anteriores, pero entre los grupos de suavizado y, por último, Material ID activa el uso de la alisación adaptativa entre los diferendes ID de material. Show Adapt Samples se puede utilizar para visualizar para qué píxeles se está utilizando la alisación adaptativa, puesto que los tinta del color indicado (por defecto se verían píxeles amarillos, principalmente en los bordes de los objetos). Jitter Samples aleatoriza el patrón que usa Brazil para alisar, así se evita que se pueda notar de una celda de render a otra. Valores entre 0,7 y 1 son los más apropiados.

La opción más importante del Depth of Field Sampling es On (para activarlo :). Initial rate controla la calidad del efecto (mínimo 5), lo que hace es definir el número mínimo de muestras por pixel. Adapt Level controla el número de veces que se refina el patrón del DoF recursivamente (toma!). Esto viene a decir que si se aumenta el valor de Adapt Levels, Initial rate se refinará a sí mismo el número de veces indicado por Adapt Levels. Si se ve que el efecto conseguido gusta y se ha subido Adapt Levels a 4 ó 5, mejor subir en 1 Initial Rate y deja Adapt Levels a 2 ó 3. f-Stop es un concepto heredado directamente de las cámaras reales y representa la abertura del diafragma del objetivo. Cuanto más bajo sea su valor más luz entrará en el objetivo y menor será la profundidad de campo, aunque sólo se emplea aquí el efecto sobre la profundidad de campo. Focal Dist define a qué distancia de la cámara está el punto focal, es decir, dónde está enfocado. En ese punto la distorsión es nula y aumentará según un objeto esté más alejado de ese punto. Jitter funciona de manera similar al Jitter de Image Sampling. Para obtener los resultados deseados fácilmente sin realizar muchas pruebas con f-Stop y Focal Dist se puede emplear esta calculadora de profundidad de campo.

Bokeh es el efecto que se produce en fotografía cuando un objeto muy brillante está muy desenfocado y aparecen formas geométricas simples (hexágonos, etc). En el panel desplegable se puede seleccionar el tipo de Bokeh utilizado. Invert invierte la forma que se origine y Reverse at Focus la invierte sólo cuando pasa por el punto focal. Exponent controla el exponente si se selecciona el tipo Exponent en la lista desplegable.

Image/texture filtering

En Image Filter se seleccionará el filtro utilizado para la alisación de la imagen. Se puede utilizar cualquiera de los que aparecen, aunque suelo emplear el que viene por defecto (Mitchell-Netravalli). Dependiendo del tipo de filtrado, se pueden configurar el Blur, el Ringing o el Radius (también los dejo con los valores por defecto).

En el cuadro 2D Map Filtering se configura el filtrado de texturas. On lo activa (se puede desactivar para lanzar renders de prueba). Derivative Blur indica la cantidad de desenfoque que se aplicará al mapa. Blur Offset indica la cantidad amplificada de distorsión que aplica. Bump Derivative Blur y Bump Derivative Offset hacen lo mismo, pero aplicado a los mapas de bultos.

Ray server

Desde esta persiana se controla el trazado de rayos (relexión y refracción). En el cuadro Ray Tracing Depth Control podemos controlar el número de veces que se puede reflejar un rayo (por ejemplo, cuando hay un espejo frente a otro) con el campo Reflected. Con Refracted se controla el número de veces que un rayo se refracta en el interior de un objeto antes de salir, con lo que se puede controlar la calidad de la refracción. Para un efecto óptimo no hay que bajar el valor nunca por debajo de ocho (para alguna escena compleja basada en objetos complejos refractivos puede convenir subir incluso a 12). Total es el número total de reflexiones y refracciones de un rayo. Así, si establecemos Reflections y Refractions a 8 y Total a 8 se generarán ó 8 reflexiones ó 8 refracciones o una combinación de ambas que sume 8 (según autodetecte Brazil). Auto Cutoff es un porcentaje que controla cúando un rayo ya no necesita ser emitido, por aportar muy poca información. Esto evita trazar más rayos de los necesarios. Max Transparent Intersections controla el número de planos solapados con un grado de opacidad inferior a 100 que se afectan unos a otros. Es decir, cuántos planos uno tras otro transparentes (no refractivos) se usan para calcular el aspecto de los objetos tras ellos.

En el cuadro Options se pueden habilitar/deshabilitar la reflexión y/o la refracción en la escena. Esto se hace activando/desactivando Secondary Effects y, más particularmente, Raytrace Reflections y Raytrace Refractions. Glossy activa o desactiva las reflexiones y refracciones de tipo Glossy (las de los materiales cromados, por ejemplo). En la versión test gratuita no está disponible.

Desde el cuadro Secondary Effect Options se puede activar la autoreflexión de los objetos (que un objeto se pueda reflejar a si mismo) con Enable Self Reflect. Secondary Atmospherics habilita la reflexión/refracción de efectos atmosféricos, como pueda ser la niebla o la combustión (ver humo dentro de una botella, por ejemplo). Secondary Material IDs permite que se reflejen o refracten los IDs de material.

Desde Ray Tracing acceleration se puede configurar la aceleración del trazado de rayos, desde el cuadro de diálogo que aparece al hacer clic en el botón con los tres puntos suspensivos.

Luma server


Desde esta persiana se controlan todos los parámetros relacionados con la iluminación, uno de los aspectos más destacados e importantes de Brazil.

Desde el cuadro Direct Illumination se pueden activar o desactivar los tipos de luces que van a intervenir en la escena. Los parámatros de SkyLight se explican más adelante.

En el cuadro Indirect Illumination se pueden seleccionar los tipos de luces que serán usadas en la iluminación global, simulando la iluminación natural en la cual la luz es reflejada por los objetos. Allow Caustics activa la proyección de cáusticas cuando la luz atraviesa objetos refractivos o se refleja en objetos reflexivos (cuando atraviesa un vaso, por ejemplo). Volumetrics hace que la iluminación global afecte también a los efectos atmosféricos.

En el cuadro Miscellaneous se puede activar la proyección de sombras con Shadows y se pueden activar las luces por defecto del Max con Allow Default Lights. Enhance Bump Shadows activa la mejora de sombras en mapas de bultos. No está disponible en la versión gratuita.

El cuadro Sub-Surface Effects controla el Sub-Surface Scattering (efecto de translucidez avanzado en el que se simula la dispersión de la luz al atravesar materiales que no son completamente opacos), aunque tampoco está disponible en la versión gratuita.

Desde el cuadro Global Illumination se controla todo lo relacionado con la iluminación global (GI). Lock to Image Rate iguala los Samples de la GI a los de la alisación. Esto no conviene, ya que generalmente incrementa el tiempo de render innecesariamente. Min y Max controlan los Samples de la GI. Funcionan igual que en Image Sampling con la alisación. Los valores positivos indican el número de veces que se calcula el valor de cada píxel según los que hay a su alrededor, para mayor precisión. Sin embargo, un número negativo señala cada cuántos píxeles se realiza este cálculo, incrementando considerablemente la velocidad del render. A esta técnica se le denomina Undersampling y, aunque genera "nubarrones" en los objetos, se puede corregir aumentando el View Rate, que controla la calidad del resultado final. Show Samples y Contrast funcionan de manera equivalente a los campos del mismo nombre en Image Sampling. Bounces indica cuántas veces un rayo se refleja contra un objeto. Cuanto más alto sea el valor se conseguirá una iluminación más realista (sobre todo en interiores), pero el tiempo de render aumentará considerablemente. En el cuadro Indirect Energy Filters se controla la intensidad de los rayos tras cada impacto contra un objeto. El valor en Diffuse se multiplica por el valor que se genera en la ecuación que usa Brazil para calcular la intensidad del rayo rerebotado. Es usado para la componente difusa. El valor de Specular hace lo mismo, pero sirve para la componente especular y las cáusticas.

En el cuadro SkyLight se controlan los parámetros del SkyLight, que se trata de una fuente de luz que proviene de todos los puntos del fondo y viene muy bien para simular la iluminación solar indirecta (causada por disipación en la atmósfera). La opción Transparent Shadows indica a Brazil que respete la opacidad de los objetos transparentes no refractivos a la hora de proyectar su sombra. Use Environment Settings hace que se usen las opciones señaladas en el cuadro de diálogo Entorno en el menú Representar. Desde Color se puede regular la intensidad del SkyLight (1,0 por defecto), su color y seleccionar un mapa de entorno que marcará el tono de la luz (muy útil con mapas HDR, que capturan un mayor rango dinámico de luminosidad).

Por último, en el cuadro Shader Degradation se controla la aceleración de la GI. Existen dos modos: Full Shade Always y Quick Shade. En Full Shade se usan los materiales de los objetos tal y como son para el cálculo de los valores de color de los rayos al rebotar en los objetos. Sin embargo, si se selecciona Quick Shade sólo se tendrán en cuenta los colores que haya en los cuadros Ambiental, Difusa y Especular del material (con el consiguiente aumento de velocidad). Diffuse Map hace que sí se use el mapa difuso para el cálculo, pero que se use el color sólido para el resto de mapas del material. Start Depth indica a partir de qué rebote se comienza a usar Quick Shade en vez de Full Shade.

CSG server


Desde esta persiana se puede crear un plano infinito generado con una ecuación, que renderiza más rápido que cualquier plano generado con polígonos. Se puede configurar su altitud, su color y el material.


Este texto lo escribí hace ya algunos años. Dado que su contenido aún es aplicable he considerado oportuno rescatarlo de mi antigua página y volver a publicarlo aquí, para que no se pierda en el tiempo.

lunes, 16 de junio de 2008

Cámara nueva y Nacimiento del río Cuervo

Por fin me he decidido a comprar una cámara reflex para poder profundizar en mi afición a la fotografía. Tras comparar los distintos modelos disponibles en función de las características que quería me he decantado por una Canon EOS 450D. De momento estoy bastante contento con la compra, aunque el tiempo dirá. He aprovechado una visita al Nacimiento del Río Cuervo, en la provincia de Cuenca, para estrenarla. Aquí están los resultados:

martes, 3 de junio de 2008

Praga en miniatura

Navegando por dZoom he encontrado un pequeño tutorial sobre cómo hacer que fotografías cuyo motivo es una gran vista pasen a tener el aspecto de una pequeña maqueta.

Es un efecto interesante para dar una nueva visión a fotografías que de otra manera parecerían un poco monótonas, pero que no tarda en cansar si se abusa de él. Para probarlo yo mismo he manipulado tres instantáneas que tomé hace relativamente poco en un viaje a Praga, y la verdad es que queda muy curioso el resultado:

martes, 11 de marzo de 2008

Cuenca

Hace poco tiempo estuve visitando el paraje natural de la Ciudad Encantada de Cuenca, y dando una vuelta por la ciudad en sí. Aquí dejo algunas fotografías que tomé.

Cuenca

jueves, 21 de febrero de 2008

Templarios Negros

Un vídeo que me ha recordado a los tiempos en que jugaba bastante a Warhammer 40K. Quién tuviera una servoarmadura así...

martes, 19 de febrero de 2008

Windows: ¿plataforma ideal para desarrollo web?

Puesto que llevo una temporada en la que estoy realizando bastante desarrollo web no he podido evitar meditar sobre cuál es la plataforma más cómoda para ello. Teniendo en cuenta que todas las herramientas que empleo son multiplataforma (Tomcat, GWT, Eclipse, Gimp) la única diferencia que encuentro es el número de navegadores que soporta cada sistema operativo, para poder realizar las pruebas necesarias. Así estas son las combinaciones que conozco/he podido instalar:
  • En Linux disponemos de Konqueror 4, Epiphany, Opera 9 y Firefox 2 (nunca he conseguido hacer funcionar Internet Explorer 7 con Wine).
  • En Mac podemos emplear Safari 3, Opera 9 y Firefox 2.
  • En Windows está a nuestra disposición Internet Explorer 7, Firefox 2, Opera 9, Safari 3 y Konqueror 4.
A la vista de estos resultados parece que la mejor plataforma, en cuanto a disponibilidad de navegadores, es Windows pues hay versiones de los navegadores más representativos del resto de plataformas, de forma que es relativamente rápido probar características concretas en multitud de navegadores en muy poco tiempo, sin necesidad de recurrir a máquinas virtuales ni segundas máquinas.

Ahora bien, si alguien me encuentra un Howto for dummies sobre cómo ejecutar IE7 sobre Linux me libero de Windows.

jueves, 14 de febrero de 2008

PRESS PLAY ON TAPE

Desde hace años me he dedicado a coleccionar versiones originales, remixes y todo tipo de variaciones de bandas sonoras de juegos antiguos, ya fueran midi, módulos, mp3 o cualquier otro tipo de formato de audio.

Además de coleccionarlas me gusta ver a gente interpretándolas. No es lo mismo un fichero midi que un instrumento real. De esta forma, buscando en Youtube di con un vídeo de la banda PRESS PLAY ON TAPE (sí, el nombre es todo en mayúsculas) que se dedica a tocar este tipo de música. En su página hay bastantes enlaces a sus mp3 para descargar y vídeos, así como información extendida sobre ellos.

De todos me quedaría con estos dos:



miércoles, 13 de febrero de 2008

Ramdisk comprimido en Linux

Existen situaciones en las que se dispone de poco espacio de almacenamiento y, en cambio, de bastante memoria volátil. Un ejemplo de ésto es un sistema embarcado, en los que muchas veces el almacenamiento persistente está muy limitado en comparación con la cantidad de memoria volátil (no hablo de ROM, sino de algún tipo de Flash). Para estas situaciones es bastante interesante lo que voy a tratar en este pequeño texto: cómo crear un disco virtual en RAM (ramdisk) que se almacena en memoria persistente comprimido, por lo que se ahorra mucho espacio.

Entorno inicial

Todo lo que aquí voy a explicar ha sido reproducido durante la redacción del texto para asegurar su funcionamiento en un Fedora Core 3 y ha sido probado en un Debian 3.0 muy limitado. Debería funcionar de igual manera en cualquier distribución relativamente reciente.

Creación de la imagen del disco virtual

Lo primero es crear la imagen del disco virtual. ¿Qué es esto? Pues bien, se trata de un archivo cuyo contenido es un sistema de archivos completo de tamaño reducido. Puede parecer extraño, pero se verá más adelante con mayor claridad (de momento podemos imaginar que se trata de una nueva unidad de disco recién comprada). Lo primero es crearlo vacío, sin contenido. Para ello no hay más que teclear en la consola:
dd if=/dev/zero of=disco.img bs=1k count=4096

Con esta orden hemos volcado una cantidad de ceros a un nuevo archivo llamado disco.img. ¿Cuántos bytes? Pues si bs es el tamaño del bloque (1k) y count es el número de bloques (4096), hemos creado un fichero vacío de 4 MB.

Ahora hay que crear un sistema de archivos dentro del fichero. Para comprenderlo mejor es útil imaginar el archivo como un disco duro sin formato, de tamaño 4 MB. Para crear el sistema de archivos usaremos la siguiente orden:
mke2fs -m0 disco.img

Puede aparecer una pregunta indicando que no es un dispositivo real: habrá que responder que se desea continuar de todas formas. Esto creará un sistema de archivos del tipo ext2, soportado por la inmensa mayoría de kernels. El parámetro -m0 indica que no se ha de reservar espacio para el super usuario.

Montado y preparación de la imagen

De poco nos sirve la imagen si no alberga algún programa o datos en su interior. Por ello vamos a montarla antes de comprimirla y dejarla lista para ser usada sólo en memoria RAM. Para montarla hay que tener un directorio destinado a ello (en mi caso /mnt/ramdisk) y ejecutar la siguiente orden:
mount -o loop disco.img /mnt/ramdisk

Ahora hay que copiar las aplicaciones y datos que se quieran al directorio creado. Para comprobar que está bien montado se puede ejecutar el comando df. Un ejemplo de su resultado sería:
[root@MORDOR test]# df
S.ficheros Bloques de 1K Usado Dispon Uso% Montado en
/dev/mapper/VolGroup00-LogVol00
4386480 3185068 978592 77% /

/dev/hda2 101105 11613 84271 13% /boot
none 128000 0 128000 0% /dev/shm
/dev/hda1 24141872 23615776 526096 98% /mnt/win32
/root/test/disco.img 3963 29 3934 1% /mnt/ramdisk

Como se puede observar en la última línea todo ha marchado correctamente. Una vez que la imagen contenga todos los datos que queremos no hay más que desmontarla:
umount /mnt/ramdisk

Compresión de la imagen

Ahora vamos a comprimir la imagen, para lograr el objetivo de que ocupe muy poco espacio en disco. Para lograrlo ejecutaremos la siguiente orden:
gzip -9c disco.img > disco.img.gz

El nuevo archivo creado, llamado disco.img.gz, es el que habremos de distribuir si queremos que otra persona pueda usar la imagen comprimida, o cuando queramos llevarla a nuestro sistema embarcado.

Uso de la imagen del ramdisk

Con nuestra imagen lista sólo nos falta saber cómo utilizarla. El proceso que vamos a seguir es el siguiente:
  1. Descomprimir la imagen directamente en la memoria RAM.
  2. Montar el espacio de RAM con la imagen en el sistema de ficheros.
Como se puede observar en la descripción no se utiliza espacio de disco adicional, que es el objetivo principal. Para descomprimir en memoria la imagen utilizaremos gzip:
gzip -dc disco.img.gz > /dev/ram

Ahora que tenemos en la memoria la totalidad de nuestra imagen podemos montarla en el sistema de ficheros. Para ello vamos a utilizar el mismo directorio que utilizamos cuando creamos y dotamos de contenido inicialmente a la imagen:
mount /dev/ram /mnt/ramdisk

Con esto, ya se puede acceder a través del punto de montaje de la forma habitual. Su comportamiento será el esperado de cualquier sistema de ficheros normal, con posibilidad de lectura y escritura.

Consideraciones finales

Aunque con el método descrito se puede leer y escribir en el ramdisk, los cambios realizados se perderán cuando se desmonte (ya sea por acción del usuario o por apagado de la máquina). Existe la posibilidad de grabar en disco de nuevo la imagen comprimida cuando se termine de usar, pero conlleva el riesgo de que una interrupción de este proceso puede hacer perder todos los datos de la imagen. El script que presento permite grabar la imagen comprimida en otro archivo, y realizar el cambio cuando finalice. Sin embargo, choca contra el objetivo original de no gastar espacio adicional. Más convendría hacer que los datos que las aplicaciones puedan necesitar modificar se encontraran fuera de la imagen. Aún así el script es el siguiente:
umount /mnt/ramdisk gzip -9c < /dev/ram > tmp-disco.img.gz
mv tmp-disco.img.gz disco.img.gz

Para finalizar aquí hay un script que descomprime y monta la imagen una vez que ya está lista. De esta manera se hace mucho más ameno su uso, pues sólo se ha de ejecutar en el mismo directorio en donde se encuentre la imagen comprimida cada vez que se quiera utilizar.
gzip -dc disco.img.gz > /dev/ram
mount /dev/ram /mnt/ramdisk


Este texto lo escribí hace ya algunos años. Dado que su contenido aún es aplicable he considerado oportuno rescatarlo de mi antigua página y volver a publicarlo aquí, para que no se pierda en el tiempo.

domingo, 10 de febrero de 2008

Flashback

Hoy, rebuscando entre las copias de seguridad de ordenadores viejos, me he encontrado con las páginas web que he ido haciendo desde tiempos pasados. Todas las fui dejando abandonadas según mis intereses se fueron moviendo de un campo a otro hasta que al fin he llegado a este blog, que tiene menos peligro de correr la misma suerte pues en cada post lo que escribo es del tema que en ese mismo momento me apetece.


Esta ha sido la web más reciente que he tenido. Estuvo activa desde enero del 2002 hasta mediados de 2005. Versaba principalmente sobre infografía y, en los últimos tiempos, añadí una sección dedicada a temática más general relacionada con el desarrollo software (la última actualización de la parte de infografía con contenido data de mayo de 2003). A lo largo de su no muy larga historia estuvo hospedada en galeon, iespaña y en lo que se convirtió en su ubicación definitiva: el servidor web de un amigo. Hay un par de textos que me parecen interesantes y aún son aplicables que creo que volveré a postear aquí, para que no se pierdan en mis discos duros.


Aquí está la primera página que realicé y publiqué con los dos aspectos que desarrollé. Estuvo activa desde su creación en la primavera de 1999 hasta mediados de 2001. En esta página se podían encontrar trucos para juegos de ordenador, mapas para Starcraft y Warcraft II, comentarios y análisis de numerosos juegos, diversos enlaces clasificados en categorías, algunos programas que hice en Visual Basic y recursos para 3D Studio. Estuvo hospedada en Teleline desde los tiempos del primate Aurelio y aún hoy sigue disponible en Terra.

Con esto finaliza mi repaso por las páginas que he ido manteniendo. He desarrollado bastantes más con diversos fines o bien para otras personas, pero éstas son las únicas que mantuve como páginas personales. Ya me estoy acordando de cuando me quejaba de Mosaic para Windows 3.1 porque no mostraba las animaciones de los GIFs que las tenían...

sábado, 9 de febrero de 2008

Licencia Creative Commons Share Alike

He decidido publicar todo el contenido del blog bajo la licencia Share Alike de Creative Commons. En pocas palabras, cualquiera es libre de copiar, distribuir, modificar y vender cualquier contenido original de este blog, siempre y cuando el resultado esté bajo la misma licencia o una compatible y se haga referencia al autor original (en este caso yo) y a la URL de este blog.

Para más detalles y el texto legal según la jurisdicción española se pueden consultar los enlaces que aparecen junto al nuevo botón de Creative Commons que he puesto en el panel lateral, bajo la referencia a mi perfil.

viernes, 8 de febrero de 2008

GWT: Window.getClientHeight() erróneo

Desarrollando una aplicación en GWT me he encontrado con la necesidad de saber cuál es la altura del área destinada al documento para poder ajustar el tamaño vertical de un HorizontalSplitPanel. Para ello empleé, inicialmente, Window.getClientHeight().

Según su descripción es justo lo que necesito:
Gets the height of the browser window's client area excluding the scroll bar.

Cuál es mi sorpresa cuando bajo Internet Explorer 7 lo que retorna es la altura del elemento BODY, no del área destinada al documento (al menos en GWT 1.4.61). Tras una búsqueda en el grupo de GWT descubro que es un fallo reportado, y que sólo afecta cuando el navegador está en modo Strict, no en Quirks. Por desgracia en este caso particular estoy usando Strict, pues intento crear una interfaz basada al máximo en CSS con porcentajes para tamaños, sin tener que emplear JavaScript para dimensionar los elementos.

Puesto que pasar a Quirks no era una opción (todo se convertía en un horror al eliminar la definición del DTD) tuve que implementar mi propia función que retornara la altura que yo deseaba accediendo directamente a la propiedad en JavaScript, gracias a JavaScript Native Interface (JSNI). Así la función deseada resultó muy simple:
public static native int getClientHeightFixed()
/*-{
return $doc.documentElement.clientHeight;
}-*/;

Esta pequeña función me ha funcionado sin problemas tanto en IE7 como en FF2. Espero que le resulte a alguien de utilidad y le ahorre un buen rato de búsqueda por la red.

lunes, 14 de enero de 2008

GWT y Eclipse: Problemas de memoria

Acabo de empezar a implementar una aplicación web de un tamaño un tanto considerable. Para variar un poco de lo habitual y a la vez permitir un desarrollo más rápido con unos resultados bastante buenos tomamos la decisión de emplear GWT para implementar la interfaz web. La instalación y configuración no puede ser más sencilla (descomprimir y listo). La integración con Eclipse es perfecta a la par que simple (no hay que instalar ningún plugin).

Todo era bonito y el desarrollo avanzaba viento en popa hasta que de golpe dejó de funcionar el entorno por un error de falta de memoria. Se ve que el consumo es bastante elevado durante la generación de código. Por desgracia es un problema común en estas situaciones. Por fortuna tiene arreglo inmediato (tras una búsqueda en Google): no hay más que arrancar Eclipse indicándole que emplee más memoria con el parámetro -vmargs -Xmx512m. De momento 512 Mb me han bastado, y raro me parecería que necesitara más.

A pesar de este pequeño contratiempo el desarrollo con GWT es una maravilla. Lo recomiendo.

jueves, 10 de enero de 2008

blog.rubenmoreno.es

Bueno, parece que al fin me he decidido a registrar mi propio dominio: www.rubenmoreno.es.

Tengo algunas cuantas ideas sobre qué hacer, pero de momento sólo redirige al nuevo subdominio para este blog: blog.rubenmoreno.es.

Como dirían los anglosajones... stay tunned!

P.D.: Puede que haya algún problema de acceso en los primeros días mientras el dominio se propaga por todos los servidores DNS y sus cachés.

martes, 8 de enero de 2008

KDE 4.0 a la vuelta de la esquina

La siguiente versión estable de mi entorno de escritorio favorito está ya a la vuelta de la esquina. El próximo día 11 de enero se liberará oficialmente, aunque ya se haya puesto el tag en el SVN el día 4.

Hay un buen post sobre lo que podemos esperar aquí, con unas cuantas capturas e información al respecto.

Yo personalmente esperaré hasta KDE 4.1, para tener una base bien estable y todas las aplicaciones aprovechando el potencial de la nueva versión.

lunes, 7 de enero de 2008

Virtualizar Windows XP con Xen en CentOS 5.1

Hace unos días he tenido que crear una máquina virtual para ejecutar Windows XP sobre CentOS. Como esta distribución viene con Xen integrado me decidí a probarlo, en vez del más conocido VMware.

La creación de la máquina virtual es trivial, teniendo una pequeña aplicación que permite elegir los recursos asignados y el sistema operativo que va a ejecutar. Ofrece dos modelos de virtualización: paravirtualización y virtualización completa por harware.

La paravirtualización requiere que el kernel del sistema operativo hospedado (también llamado domU) esté modificado y sea consciente de la situación, para poder cooperar debidamente con el anfitrión (conocido como dom0).

La virtualización completa o por hardware requiere que el procesador tenga las instrucciones (Intel VT ó AMD-V) que permitan al dom0 virtualizar a un sistema operativo sin modificar, aunque esto sólo se da en procesadores modernos y, en ocasiones, estas extensiones están desactivadas en la BIOS por motivos de seguridad (para evitar posibles rootkits, pero pueden reactivarse en el menú de gestión).

Puesto que Windows se compra como es, y no se puede modificar el kernel, la única opción es la virtualización completa.

La instalación en principio es muy sencilla pues al crearse la máquina virtual se arranca el CD de instalación del sistema operativo. El problema llega cuando el programa de instalación realiza el primero de sus muchos reinicios del sistema: al arrancar de nuevo ya no encuentra el CD de instalación.

La solución es simple: no hay más que indicarle a la máquina virtual que emplee la unidad de CD física cono unidad propia de CD. Para ello hay que detener la ejecución de la máquina y editar su archivo de configuración. Puesto que su sintaxis es un poco oscura vamos a hacerlo con una versión exportada en XML. Para ello no hay más que teclear en la consola:
virsh dumpxml nombre_maquina > nombre_maquina.xml

Con esta orden obtenemos la configuración de una manera bastante legible. Ahora, tal y como se explica aquí, vamos a crear un nuevo dispositivo entre las etiquetas <devices> y </devices>.
<disk type='block' device='cdrom'>
    <driver name='phy'/>
    <source dev='/dev/hdc'/>
    <target dev='hdc'/>
    <readonly/>
</disk>

Habrá que modificar hdc para que refleje el dispositivo que en cada máquina representa a la unidad de disco.

Tras este paso aplicamos de nuevo la configuración en formato XML a la máquina virtual, con el comando:
virsh define nombre_maquina.xml

Una vez hecho esto no hay más que volver a arrancar la máquina y el programa de instalación encontrará el CD sin problemas, concluyendo el proceso satisfactoriamente.

¡Y ya tenemos una nueva máquina virtual con Windows XP!