Actualización de Memoria – Decidir qué comprar. (parte 1/3)

Con la llegada de las nuevas memorias DDR3, decidí que finalmente era momento de actualizar la memoria de mi PC de escritorio antes de que en Uruguay se complicara el asunto de conseguir de las “viejas” memorias DDR2.

Cuando compré las partes de mi PC por Setiembre de 2007 me decidí por un motheboard Intel DG965ry, principalmente por el hecho de soportar hasta 8GB de RAM en 4 sockets dual channel. En aquellos tiempos 2GB de RAM era suficiente por lo cual no me molesté en adquirir más, sin embargo llegado el momento de actualizar decidí ir por 8GB directamente.

Saber qué comprar

Antes de comprar memoria, siempre es importante determinar cuales son los modelos compatibles con nuestro sistema, no queremos comprar una memoria que luego no podremos utilizar en nuestro equipo. El sitio web de Intel es una excelente referencia para esto si es que tenemos motherboards de este fabricante. El DG965ry soporta únicamente memorias de 240 pines a 1.8V.

Lo segundo a tener en cuenta es cuánto queremos comprar y saber si el sistema será capaz de soportarlo. Resulta que este motherboard en particular soporta un máximo de 8GB de RAM a 667MHz o (únicamente) 4GB a 800MHz, por lo cual si realmente queríamos subir a 8GB habría que ir por memorias de 667MHz. Si es mejor tener menos memoria pero más rápida o viceversa es un tema de discusión abierta y la respuesta dependerá exclusivamente del uso que se quiera dar al sistema.

Sabiendo ahora qué necesitamos, opté por adquirir memoria Kingston. Tenemos 4 sockets, por lo cual lo más razonable parecía comprar 4 dimms de 2GB, los cuales son bastante fáciles de conseguir a un precio razonable en sitios como Tranza o similares (U$S 26+IVA c/u). Unos 8GB nos quedaría alrededor de 104 dólares + shiping + IVA, algo común dado el hecho de que el mercado de la memoria está deshecho (¡gracias Vista!).

En el próximo post estaremos viendo el proceso de instalación, el cual implicará abrir el PC y remover los dimms para reemplazarlos por los nuevos.

Continúa leyendo:

Posted in Hardware, Tutoriales | Comments Off on Actualización de Memoria – Decidir qué comprar. (parte 1/3)

XO-2 podría utilizar procesadores ARM

Hacía un tiempo comentábamos sobre los planes de AMD de discontinuar la línea de procesadores Geode, los cuales son utilizados en algunos dispositivos como las computadoras XO, entregadas en el parco del Plan Ceibal.

Aparentemente OLPC, la empresa detrás de la XO, estaría planeando cambiar a procesadores ARM para la siguiente versión de los equipos: la llamada “XO-2”. Los procesadores ARM son generalmente utilizados en dispositivos móviles (como celulares, iPods, calculadoras, etc) y permitirán obtener mayor provecho de las baterías de las XO, al consumir menos poder.

Asimismo, los procesadores ARM no son basados en la arquitectura x86, por lo cual no son capaces de ejecutar las versiones más comunes de Windows -en particular XP-. Quedará pendiente ver cómo afectará esto las relaciones entre Microsoft y OLPC.

Linux, por su parte, está portado a ARM, arquitectura sobre la cual es bastante utilizado. A nivel de Ceibal-Chess nos encontramos bastante aislados de este cambio al estar trabajando siempre sobre Python. Restará recompilar gnuchess para ARM 😉

Puedes leer más sobre la arquitectura ARM aqui >>.

Posted in ceibal-chess, Hardware, XO | Comments Off on XO-2 podría utilizar procesadores ARM

Configurar IP estática en Fedora 10

Al parecer hay un bug en la forma en que Fedora 10 permite configurar una dirección IP estática a la máquina en la cual se encuentra corriendo. Tras haber dado con este hilo en el foro de linuxquestions.org, me encuentro con que se llegó a la conclusión de que la aplicación para configurar la dirección IP introujo un bug entre las versiones 8 y 10 de Fedora, el cual no permite registrar la máscara de red asignada a la placa de red.

Por suerte en Linux siempre podemos hacer todo desde consola, salteandonos la aplicación que presenta este bug. A grandes razgos, los pasos a seguir son los siguientes:

  1. Abrir una terminal y volverse root.
  2. Matar definitivamente el NetworkManager: chkconfig NetworkManager off; service NetworkManager stop
  3. Editar el archivo de configuración de la interfaz, para eth0 sería /etc/sysconfig/networking/devices/ifcfg-eth0

Finalmente, configurar las opciones para la placa. Una configuración de ejemplo sería la siguiente. Pueden encontrar las opciones necesarias para activar IPv6 en el foro.

DEVICE=eth0

HWADDR=xxxxxxxxxxxx

BOOTPROTO=none

BROADCAST=10.10.10.255

IPADDR=10.10.10.2

IPV6INIT=no

NETMASK=255.255.255.0

NETWORK=10.10.10.0

ONBOOT=yes

DNS1=200.40.30.245

DNS2=200.40.220.254

GATEWAY=10.10.10.1

TYPE=Ethernet

NM_CONTROLLED=no

USERCTL=no

PEERDNS=yes

Otros post relacionados:

Posted in Fedora, Linux, Sistemas Operativos, Software, Tutoriales, Tweaking | 8 Comments

Ceibal-Chess Beta I – Testers Needed!!

Me complace poder anunciar que con las últimas adiciones al código, estamos listos para comenzar a hacer un testeo más difundido del programa. Estamos buscando voluntarios!! 🙂 Quienes quieran darnos una mano, pueden descargarse un zip conteniendo todo lo necesario para correrlo en Windows, Linux y Mac de: http://www.algorithmia.net/ceibal-chess-beta.zip.

Ceibal-Chess está desarrollado en Python y utiliza Pygame, por lo cual ambos son necesarios para poder ejecutarlo. Quienes utilizan Windows van a tener que instalarse ambos programas: python 2.6 y pygame 1.8.1-py2.6. Una vez instalados simplemente se extraen los contenidos del zip, y dentro de la carpeta ceibal-chess, doble click en el achivo “main” (main.py).

Quienes usan Linux seguramente ya disponen de una versión de Python 2.x, por lo cual únicamente deberán instalar pygame. Este se encuentra en los repositorios de las distribuciones más polulares bajo el nombre “pygame” o “python-pygame”. Para ejecutarlo simplemente se debe descomprimir el archivo, cd al directorio ceibal-chess y ejecutarlo como python main.py

Otras plataformas pueden consultarse en el FAQ oficial.

Los requerimientos oficiales mínimos para esta versión son: CPU 500MHz, 32 MB RAM (64 recomendado) y 4 MB de disco libre (no incluye espacio requerido por los logs).

Los invitamos a descargarse el programa, probarlo y enviarnos su feedback, este es muy importante para nosotros! Como siempre, pueden encontrar mucha más info en el sitio: http://code.google.com/p/ceibal-chess, en particular les recomendamos leer el FAQ, o bien pueden preguntar por aquí 😉

Posted in ceibal-chess, Computación Gráfica, Free & Open, Programacion, Software, Sugar, XO | Comments Off on Ceibal-Chess Beta I – Testers Needed!!

Las XO se quedan sin procesador

Leo en Slashdot que AMD, fabricante de los procesadores Geode utilizados en varios dispositivos de bajo consumo -entre ellos la XO- al parecer no tiene planeado ningún remplazo para el mismo para el mediano, corto o largo plazo.

Los procesadores Geode son los utilizados por las computadoras entregadas en el marco del Plan Ceibal en nuestro país, lo cual da a pensar qué sucederá con los futuros equipos que se compren a OLPC. Puede ser que los procesadores Geode sigan siendo utilizados en la XO y no se realice ninguna actualización: Negroponte -jefe de OLPC- nunca fue fanático de aumentar las especificaciones de Hardware de los laptops, o bien puede que sea un punto más a tratar en la agenda para el diseño de la sucesora de la XO, la XO-2.

Según los analistas, en los duros tiempos de la crisis internacional, el procesador Geode no se encuentra en la lista de prioridades de los ejecutivos de AMD.

Posted in ceibal-chess, Hardware, XO | Comments Off on Las XO se quedan sin procesador

Virtual Box 2.1

Leo en LifeHacker acerca de la nueva versión de Virtual Box (2.1), que acaba se ser liberada recientemente.

Según describen en el artículo, se trata de una “actualización importante”, la cual incluye un montón de features experimentales. Entre ellas, las que más llaman la atención son:

  • Soporte para virtualización por Hardware sobre Mac OS X.
  • Soporte para virtualizar sistemas de 64 bits sobre sistemas de 32.
  • Aceleración 3D experimental sobre OpenGL.
  • Nuevo motor de NAT más performante y confiable y soporte para ping (al fin!).
  • Otras…

Vritual Box se puede descargar como un producto comercial gratuito o en su versión Open Source, con algunas features menos. Pueden descargar la versión más reciente desde virtualbox.org.

Posted in Sistemas Operativos, Software | Comments Off on Virtual Box 2.1

Configurando Fedora 10 de 64 bits

Recientemente he abordado un nuevo proyecto dentro del ámbito laboral, lo cual me ha llevado a la necesidad de configurar un sistema basado en Linux de 64 bits. Dentro del espectro de opciones manejadas por el cliente se encontraba Centos 5.0 y Fedora 10, ambas distribuciones basadas en RPM con soporte para 64 bits (aparentemente otras versiones de GNU/Linux no eran una opción).

Debo admitir que en principio tenía mis reservas con respecto a instalar un Linux de 64 bits, no por que pensara que el sistema sería inestable (Linux es de 64 bits desde 1996), sino porque me encontraba bajo la impresión que el soporte para actividades diarias (multimedia, Flash, etc.) no sería muy bueno. Me alegro al poder decir que estaba equivocado. El sistema tiene un gran desempeño y para un usuario es virtualmente es imposible darse cuenta que se está trabajando sobre 64 bits.

Para quienes esten interesados les dejo aquí un paso a paso sobre como configuré Fedora 10 para sacarle el mayor provecho.

Herramientas de Desarrollo

Fedora es una distribución que siempre apeló a los desarrolladores de Software. Configurar un ambiente de desarrollo basado en el Toolchain de GNU es realmente sencillo, simplemente abrimos una terminal y como root ejecutamos:

yum groupinstall “Development Tools” “Development Libraries”

El tamaño de descarga es de aproximadamente 120MB.

Drivers de Video de NVIDIA

NVIDIA provee drivers para Linux de 32 y 64 bits en su sitio sin embargo es conveniente instalarlos mediante el sistema de paquetes, de forma de poder tener un mejor control sobre ellos y poder actualizarlos. Fedora no incluye los drivers de NVIDIA en sus repositorios debido a que estos son privativos, por lo cual agregaremos el repositorio RPM Fusion, donde se encuentran muchos paquetes que el proyecto Fedora no quiere distribuir.

Para agregar los repositorios Free y Non-Free de RPM Fusion utilizamos el siguiente comando, siempre como root:

rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

Ahora debemos borrar el cache de yum:

yum clean all

Y ahora podemos instalar los drivers para nuestra GeForce 6 o superior (otros modelos):

yum install kmod-nvidia

Codecs de Audio, Video

Finalmente llegamos a los codecs de audio y video. Por suerte su configuración es sencilla habiendo agregado los repositorios de RPM Fusion:

yum install gstreamer-plugins-ugly gstreamer-plugins-bad gstreamer-ffmpeg

y:

yum install xine-lib-extras-freeworld

Flash Player

Tradicionalmente no dispondríamos de un reproductor de Flash para Linux de 64 bits. Afortunadamente, Adobe lanzó hace poco menos de una semana una versión beta de su Flash Player 10 para Linux de 64 bits. En el momento en que escribo esto, el reproductor beta puede descargarse de aquí: http://labs.adobe.com/downloads/flashplayer10.html

Una vez descargado el archivo tar.gz debemos instalarlo manualmente. Para ello lo primero es descomprimirlo y luego moverlo al directorio /usr/lib64/mozilla/plugins/ como root:

mv libflashplayer.so /usr/lib64/mozilla/plugins/

Es importante recordar hacer este archivo ejecutable:

chmod a+x /usr/lib64/mozilla/plugins/libflashplayer.so

Es mejor tener Firefox cerrado cuando hacemos esto. De cualquier forma debemos reiniciarlo para que los cambios tengan efecto.

Así mismo cabe destacar que Sun ha liberado una versión de 64 bits de su plugin de Java para navegadores de 64 bits. No lo he probado, pero pueden encontrar información aquí: http://www.phoronix.com/scan.php?page=news_item&px=NjkyOQ

Espero les resulte útil, y como siempre, los invitamos a dejar sus comentarios. Pueden descargar el DVD o Live CD de Fedora 10 para 64 bits desde aquí: http://fedoraproject.org/en/get-fedora-all.

Posted in Fedora, Free & Open, Linux, Sistemas Operativos, Software, Tutoriales, Tweaking | Comments Off on Configurando Fedora 10 de 64 bits

Si no puedes medirlo, no puedes mejorarlo

No hace tanto escribíamos sobre los (desastrosos) resultados de probar Ceibal-Chess sobre el Hardware real de la XO. Resultados debidos principalmente al bajo poder de cómputo de estas maquinitas en comparación con los equipos utilizados para desarrollar y probar el programa.

Equipo donde se desarrolló la mayoría del código: Core2Duo 2.1GHz vs. XO: AMD Geode a 500Mhz.

Finalmente hoy me dediqué a realizar algunas pruebas de profiling sobre el código, para intentar identificar los posibles cuellos de botella. Por profiling no me refiero a ninguna herramienta profesional más allá del clásico enfoque de combinar print’s con la función time() para ver por dónde va el código y medir el tiempo de ejecución de distintas llamadas.

Si bien se logró rastrear el principal cuello de botella al cálculo de movimientos, resultó que realizar estas mediciones arrojó unos resultados interesantes sobre posibles puntas para optimizar el programa. Principalmente llamó la atención la gran cantidad de veces que era llamada la función encargada de determinar si el rey se encontraba Jaque Mate. Detectar el Jaque Mate es la condición para determinar el fin de juego, una condición que debe testearse bastante seguido (en cada Frame) para presentar un mensaje, evitar que los jugadores puedan seguir moviendo piezas, etc.

Determinar si estamos en Jaque Mate involucra evaluar todos los posibles movimientos de las piezas del oponente (llamando a nuestra pesada get_moves()) para ver si el rey se encuentra contenido en alguno de ellos y si no tiene escape.

El abuso de esta función causaría que se dispararan un gran número de llamadas al cálculo de movimientos, lo cual consumía muchos ciclos. Este era un problema de Ceibal-Chess. De hecho, mediante las pruebas realizadas se logró detectar que la condición de Jaque Mate se revisaba incluso cuando el juego se encontraba desplegando el menú de opciones, algo completamente innecesario.

Mediante la eliminación de algunas llamadas superfluas, junto con la implementación de un sencillo cache de movimientos para la función que calcula todos los movimientos del oponente (get_all_oponent_moves()) fue suficiente para traer el desempeño del programa a un nivel aceptable sobre la XO.

Ciertamente el código requerido para solucionar el problema fué mucho más sencillo de implementar que si se hubiese tomado el enfoque de realizar la implementación del cálculo de movimientos en C++, lo cual si bien hubiese mejorado el desempeño, no hubiese la solución “natural”, y quizás no hubiese valido la pena por el nivel de complejidad que agrega al proyecto el tenerlo implementado de a partes en 2 lenguajes.

Moraleja de la historia: antes de salir a programar como locos, a veces es mejor sentarse a hacer algunas mediciones, por más que sientas que en ello “pierdes” el tiempo. Al final de cuentas, “si no puedes medirlo, no puedes mejorarlo”.

>> Sitio de Ceibal-Chess en Google Code: http://code.google.com/p/ceibal-chess

Posted in ceibal-chess, Linux, Tweaking | Comments Off on Si no puedes medirlo, no puedes mejorarlo

Testeando Ceibal-Chess sobre la XO real (veredicto: leeeento)

Aprovechando el haber conseguido una XO para traerme a casa el lunes pasado, y tras una o dos horas peleando para lograr conectarla al wifi de casa (tuve que cambiar la encriptación a WPA Personal con TKIP, nada más anda), decidí probar la versión más reciente de Ceibal-Chess sobre el Hardware real.

El proceso de empaquetado, por suerte, seguía funcionando apropiadamente, y bastó con ejecutar nuestro generador de bundles para obtener el archivo distribuible (el “instalador”) para la XO.

Probar el juego sobre el Hardware real es significativamente distinto que hacerlo sobre otros sistemas, principalmente por cuestiones del Hardware mismo: la pantalla es más pequeña, el procesador más lento y la memoria más chica.

Si bien el juego comienza siendo jugable de forma apropiada, tras unas pocas jugadas, el manejo de eventos (capturar el click para seleccionar y luego mover una pieza) se vuelve demasiado lento, ciertamente por debajo de lo aceptable.

Recuerdo que Pablo Flores habría probado una versión anterior de Ceibal-Chess sobre su XO y me comentó que la maquinita podía manejarlo bien, entonces allí me surguió la duda de qué podría haber cambiado del juego desde que él lo probara de forma que, a medida que jugamos, se vuelve más y más pesado.

Haciendo memoria, resulta que el cambio principal realizado consistió en agregar la evaluación de jugadas hipotéticas para filtrar los movimientos inválidos del juego. Las reglas del ajedrez prohíben mover una pieza que está protegiendo al Rey de ser atacado. El programa debía implementar esta funcionalidad, sin embargo, para hacerlo debemos determinar si al mover una pieza a una determinada posición, el Rey entraría en Jaque.

La forma en que esto se hace consiste primero en determinar todos los movimientos válidos de la pieza seleccionada (el peón en nuestro ejemplo), luego generar un nuevo tablero “hipotético” para cada uno de los movimientos posibles y finalmente determinar si el Rey se encuentra en Jaque en ese tablero. En caso de estarlo, el movimiento se descarta.

Para determinar si el Rey está en Jaque, se evalúan todos los posibles movimientos del adversario, determinando si el Rey se encuentra comprendido dentro de alguno de ellos. Para calcular los movimientos debemos volver a invocar nuevamente nuestra función. Veamos esto gráficamente:

Seleccionar Pieza -> Calcular Movimientos -> Generar Tableros Hipotéticos -> Determinar Jaque para cada tablero -> Calcular Movimientos.

Resulta que calcular los movimientos de una pieza es una función recursiva! Una función que además aumenta la cantidad de tableros hipotéticos generados dependiendo de la cantidad de movimientos que la pieza seleccionada puede hacer.

Cuando el juego inicia, solo los peones se pueden mover y hacia adelante 1 o 2 pasos, por lo cual el número de tableros hipotéticos generados se mantiene bajo. Pero a medida que se comienza a entablar la batalla, las piezas podrán estar en cualquier orden y seguramente generarán una cantidad mayor de tableros hipotéticos, haciendo que Calcular Movimientos ejecute muchas veces y recursivamente, consumiendo casi todo el procesador de la XO.

Claramente este problema debe ser solucionado. De momento se me han ocurrido dos alternativas: manejar un caché de movimientos, intentando realizar el cálculo de los movimientos de la pieza que seleccionamos una sola vez (igual será lento la primera), o bien, reimplementar el cálculo de movimientos en C o C++, brindando la velocidad asociada a la ejecución nativa  a esta función, pero al costo de deber volver a implementara, testearla y de deber tener mucho cuidado de no romper la portabilidad del código (actualmente Ceibal-Chess puede ejecutar en cualquier plataforma que disponga Python y Pygame). Una tercer alternativa implicaría una implementación en C o C++ con caché.

Aún me encuentro duda de cuál será el mejor enfoque, pero lo que es seguro es que debemos proveer una solución a esto antes de poder liberar la versión 1.0.

Posted in ceibal-chess | Comments Off on Testeando Ceibal-Chess sobre la XO real (veredicto: leeeento)

Diseño del Menú de Ceibal-Chess

Uno de los elementos en los que intenté hacer más énfasis durante la presentación de Ceibal-Chess fue como prácticamente todos los elementos del programa se fueron desarrollando en forma incremental e iterativa, donde partíamos realizando una implementación simple de una idea que nos parecía buena, y luego la íbamos refinando de a poco en varias iteraciones, hasta llegar a una versión que nos dejara satisfechos.

Este fue el caso para el diseño del menú del programa, el cual permite al usuario (niño) seleccionar el modo en el cual jugar, ver quién realizó la aplicación o bien, salir de ella.

Durante las primeras 3 semanas del proyecto, el desarrollo se enfocó principalmente en el ajedrez mismo: dibujado del tablero y de las piezas, implementación de las reglas del juego, interacción con el usuario e integración con la Inteligencia Artificial. En aquellos tiempos, el juego debía configurarse mediante línea de comandos o bien editando el código.

A medida que las diversas áreas del “core” comenzaron a alcanzar un determinado nivel, se comenzó a implementar una versión inicial del menú, la cual pueden ver en la siguiente figura:

From Ceibal-Chess

El menú se dibujaba completamente por código, utilizando las primitivas de pygame. En esta primer fase nos interesaba que el menú estuviera y se pudiera utilizar para configurar el juego. La parte visual tomó un segundo plano, si bien era claro que necesitábamos mejorar el aspecto.

Tras contactar a Jurema -nuestra diseñadora (¡que importante es siempre tener un diseñador!)- comenzamos a disponer de imágenes y arte que pudiéramos utilizar para mejorar el aspecto visual. En esta segunda fase simplemente se intentó mapear el arte sobre el menú, realizando las adaptaciones al código necesarias.

El resultado fue menos que óptimo, si bien mejoraba la apariencia.

From Ceibal-Chess

Como bien mencionó Jurema, las diferencias se debían principalmente a la desconexión entre el diseño y el código. El código debía realizar varias adaptaciones al arte para ajustar sus tamaños, reduciendo mucho su calidad. Se puede notar especialmente en los bordes del fondo violeta del menú, el cual era inicialmente más ancho que alto y el programa debía estirarlo verticalmente para que cubriera el tamaño que el menú tenía. Esto causaba que los bordes se vieran borroneados.

Para la siguiente versión, del menú fue importante basarnos en las omisiones de la fase anterior para corregir los desvíos. Algo tan simple como especificar el tamaño que el menú ocupa en pixels ya permite coordinar esfuerzos entre las distintas disciplinas (programación y diseño) para generar un mejor producto.

From Ceibal-Chess

Se determinó el tamaño que la imagen de fondo debía tener para evitar tener que estirarla, así como se estableció que el texto de los botones estaría centrado, no estilo viñetas. Asimismo se agregó un complemento blanco al fondo del menú, el cual mejora mucho la apariencia.

En este punto ya sabíamos que el menú nos gustaba así, y habiendo establecido su apariencia general, una cuarta iteración nos llevó a la versión actual del menú donde principalmente se agregaron detalles que “endulzan el ojo” (eyecandy). Probamos varias ideas, pero siempre respetando la evolución realizada en las fases anteriores. En este caso decidimos experimentar haciendo trasparente el fondo violeta del menú, el cual le da un mayor sentido de integración con el resto de la aplicación.

From Ceibal-Chess

En esta imagen también puede verse que se centró verticalmente el texto dentro del fondo de los botones.

Probablemente se disponga de una fase más de experimentación, buscando agregar detalles visuales al menú, pero conservando el resultado logrado a través de las distintas iteraciones.

Cabe destacar que el menú ya era funcional desde su primera versión, pero el proceso iterativo permitió producir algo que además de ser útil, fuera lindo a la vista. Este es un ejemplo de como partiendo de una versión sencilla algo que aparece para subsanar una necesidad puntual (“necesitamos un menú”), se puede ir iterando haciendo leves mejoras hasta llegar a una versión funcional y además agradable. Este siempre ha sido el espíritu detrás de este proyecto.

Recuerden que pueden bajar el último snapshot de Ceibal-Chess desde:

Posted in ceibal-chess, Computación Gráfica, Free & Open, Software, Sugar | Comments Off on Diseño del Menú de Ceibal-Chess