Raspberry Pi, la computadora de $25

Una computadora a $25, suena a que dejaría de funcionar apenas la encienden. Pero aunque parezca increíble, es cierto!!! es real, y funciona. Y eso no es todo, además reproduce video en Alta Definición y es del tamaño de una tarjeta de crédito.

La Raspberry Pi es un computador completo en una sola tarjeta. Se les conoce como Single Board Computer (SBC) y cuentan con procesador, memoria, controladores de Entradas / Salidas. La desarrolla una fundación sin fines de lucro del Reino Unido y su principal objetivo es promover el estudio de ciencias de la computación principalmente en escolares.

Raspberry Pi tarjeta alpha

Raspberry Pi, prototipo

¿Qué clase de computadora se puede comprar con $25?

Lo primero que hay que saber es que para ponerla a funcionar vas a necesitar un teclado y un mouse usb, además de un monitor o televisor que se pueda conectar por HDMI o RCA.

Se diseñaron dos modelos, A y B. El modelo A es el que costaría $25 y cuenta con un procesador ARM11 a 700MHz, 128MB de RAM. El modelo B costaría $35 y vendría con 256MB de RAM y puerto Ethernet, el modelo A carece de conectividad directa a una red. El almacenamiento es integrado a una tarjeta SD, es decir, sin disco duro. Se alimenta con 5V por un puerto micro USB y trae precargados Debian GNU/LinuxFedoraArch Linux.

¿Qué se puede hacer con una Raspberry Pi?

Mencioné acaso que tiene un puerto HDMI y que reproduce video en Alta Definición. Mira este video que compartieron en el sitio oficial de la Raspberry.

El objetivo de los creadores es que sirva para que los jóvenes se entusiasmen con la computación y la utilicen para aprender a programar. Es claro que para esto van a necesitar más que una computadora muy barata. Requiere que el software que contenga facilite y oriente a las personas. Se me ocurre algo más al estilo de Arduino, muy fácil de usar, con ejemplos pre cargados y una comunidad que desarrolla nuevos proyectos y los comparte de manera libre.

Sin embargo un computador de este tipo puede usarse para muchas cosas. Podría configurarse para ser utilizado como Disco de Red para hogar. Siguiendo la idea del uso en casa me lo imagino como servidor de contenidos multimedia con software como el XBMC para crear tu propio Home Theater de manera económica como se muestra en el siguiente video.

La Raspberry Pi aún no está a la venta pero el 10 de enero de 2012 en el sitio oficial publicaron que inició la manufactura del producto por lo que en los próximos días estaría a la venta. Espero que sea pronto porque resulta muy interesante lo que se podría hacer con un juguete de estos.

 

Agregar clases al primer y último elemento del menú

Una de las nuevas funcionalidades de WordPress a partir de su versión 3 es la creación de menús personalizados que permiten incluir secciones de menú dentro de un tema para que los usuarios desde el panel de administración creen y editen sus propios menús.

El código generado en html incluye elementos para personalizar el diseño, la clase ‘menu-item’ para los menús de usuario generado por la función wp_nav_menu y la clase ‘page-item’ para los menús de páginas generados por wp_page_menu que se utiliza por ejemplo en el tema Twenty Eleven como menú de la página de Inicio.

En algunas ocasiones resulta útil agregar clases particulares al primero y último elemento del menú. Para esto agregamos el siguiente código al archivo functions.php de nuestro tema, el mismo modifica el html que generan las funciones de menú para incluir las clases ‘first-menu-item’ y ‘last-menu-item’ para menús de usuario; ’first-page-item’ y ‘last-page-item’ para menús de páginas.

function add_first_and_last($output) {
	if(strpos($output, 'menu-item')){
		$output = preg_replace('/class="menu-item/', 'class="first-menu-item menu-item', $output, 1);
		$output = substr_replace($output, 'class="last-menu-item menu-item', strripos($output, 'class="menu-item'), strlen('class="menu-item'));
	}
	else{
		$output = preg_replace('/<li class="/', '<li class="first-page-item ', $output, 1);
		$output = substr_replace($output, '<li class="last-page-item ', strripos($output, '<li class="'), strlen('<li class="'));
	}
		return $output;
}
add_filter('wp_nav_menu', 'add_first_and_last');
add_filter('wp_page_menu', 'add_first_and_last');

Para modificar el diseño entonces, en el css incluimos reglas como:

li.first-menu-item{
    border-left: 1px solid #bbb;
}

Y de esta misma manera con las demás clases dependiendo del diseño que queramos darle.

Personalizar themes de wordpress

Es posible crear tus propios temas de wordpress para utilizarlos en tu sitio web. Sin embargo no es necesario empezar desde cero. Uno pensaría que la forma más sencilla es tomar un tema ya existente y editarlo, pero esto tiene una serie de inconvenientes como perder las futuras mejoras que se le hagan al tema por parte de su autor original.

El sistema de temas de wordpress permite crear temas derivados llamados child themes. Estos heredan las funcionalidades de otro tema que se le conoce como parent theme. Esta es la forma apropiada de modificar un tema ya existente o utilizar el tema principal como framework para nuestro tema.

Crear el child theme

Lo esencial para que wordpress reconozca tu tema es crear una nueva carpeta en el directorio de temas que se encuentra en wp-content/themes que contenga un archivo style.css con el siguiente encabezado

/*
Theme Name: Mi tema
Template: twentyeleven
*/

El atributo template es que el que nos interesa, es acá donde le indicamos cual es el parent theme.

Hecho esto deberías ver en el dashboard de wordpress en la sección Apariencia->Temas nuestro nuevo tema.Temas disponiblesSi lo utilizamos así tal cual veremos el sitio sin ningún estilo porque nuestro style.css está vació, sin embargo, si revisamos el código generado veremos que hay una gran estructura de html válido, con muchas clases para modificar y que además utiliza las distintas funciones del tema padre, en nuestro ejemplo Twenty Eleven.

En este punto contamos con un tema en blanco completamente funcional.

Importar el estilo del parent theme

Cuando elegimos el parent de nuestro nuevo tema es porque probablemente hay cierta tendencia de diseño o porque las modificaciones que queremos hacer son menores. Resulta muy útil entonces aplicar el estilo del tema padre. Para esto agregamos una línea adicional al style.css

/*
Theme Name: Mi tema
Template: twentyeleven
*/
@import url(../twentyeleven/style.css);

El @import nos incluye el estilo. Con esto si miramos nuestro sitio utilizando el tema que hemos creado se verá igual como si utilizaramos el parent theme.

Lo que tenemos ahora es la estructura para modificar el parent theme de manera segura, sin editar los archivos originales y sin perder las futuras mejores que el parent theme reciba.

Modificar el tema con nuestros propios cambios

Muy sencillo, solo debes sobreescribir las propiedades. Lo mejor para esto es inspeccionar el código utilizando firebug (si usas firefox) o el inspect de tu navegador. Si deseas modificar los encabezados buscamos las clases del css y en nuestro style.css hacemos los cambios.

pantallazo inspeccionar htmlSi quisiéramos modificar el color del h2 tendríamos en nuestro style.css lo siguiente

/*
Theme Name: Mi tema
Template: twentyeleven
*/
@import url(../twentyeleven/style.css);

.entry-title, .entry-title a {
    color: #2222aa;
    text-decoration: none;
}

De esta forma vamos variando las propiedades del css que nos interesa. Si queremos variar elementos en el html lo que hacemos es copiar el archivo correspondiente del tema padre a la carpeta de nuestro tema y lo modificamos acá. Así podemos tener nuestra propia versión de footer.php o del header.php.

Es realmente sencillo y muy elegante de desarrollar.

Ser o no ser… máquinas virtuales

¿Qué es una máquina virtual?

Una máquina virtual es un software que emula una computadora. El concepto general para esto es la virtualización. La virtualización es el proceso de crear un recurso que no existe (virtual) mediante la abstracción de los elementos que se quieren emular sobre el recurso real. Este software que hace la abstracción se ejecuta sobre un computador (host) y administra los recursos para crear y hacer funcionar las máquinas virtuales.

Lo que se hace es hacerle “creer” a un sistema operativo, o procesos aislados, que se está ejecutando sobre una computadora (guest) que está limitada por la abstracción proporcionada para esta.

Se pueden tener por ejemplo una máquina física con 4 núcleos sobre la que se crean máquinas virtuales que tengan 1 núcleo. De esta forma el sistema operativo de la máquina virtual, el guest, identificaría un procesador de 1 núcleo aunque realmente se esté ejecutando sobre un hardware de un procesador de 4 núcleos.

Ventajas de utilizar máquinas virtuales

Las máquinas virtuales no solo sirven para distribuir recursos como los núcleos del procesador. También pueden usarse para emular arquitecturas distintas. Es posible, sobre un procesador de arquitectura x86, correr sistemas de arquitectura ARM. Por lo que se pueden utilizar para ejecutar sistemas creados para arquitecturas para las cuales no se cuenta con el hardware específico.

Poder crear servidores con distintos requerimientos de recursos se facilita con el uso de máquinas virtuales. Se puede limitar el consumo de un sistema o grupo de usuarios sobre las capacidades de procesamiento de una empresa al disponer de un sistema virtual para tal fin. Es posible contar con una máquina virtual que ejecuta los sistemas que están en producción y tener otra máquina virtual con los sistemas en desarrollo, ambos ejecutándose sobre el mismo equipo físico.

Distintos sistemas operativos pueden ejecutarse de manera “simultanea” sin interferencia alguna de uno con otro gracias al aislamiento que logra el software de virtualización.

Software disponible para utilizarlas

Existe software que varía de acuerdo al tipo de virtualización que permiten hacer. Existe la virtualización completa que aísla completamente cada máquina virtual. Además se encuentra también el sistema que virtualiza a nivel de sistema operativo que puede considerarse como una abstracción liviana.

KVM es una sistema de virtualización completa que permite crear máquinas virtuales usando la imágenes de instalación de sistemas operativos sin modificar. Se encuentra incorporado en el kernel de linux desde la versión 2.6.2. Es compatible con muchas distribuciones de linux, es posible instalar también windows y además con algunas modificaciones se ha instalado Mac OS X.

Xen es un monitor de máquinas virtuales. Es muy difundido a nivel empresarial especialmente conocido por ser el software utilizado por amazon para sus servicios EC2. Funciona por medio de paravirtualización lo que significa que el guest debe ser una versión modificada del sistema operativo lo que limita los sistemas que puedan utilizarse.

Otra opción interesante es OpenVZ. Ofrece la posibilidad de tener múltiples instancias de un sistema operativo Linux de manera aislada. Es menos flexible que las opciones anteriores pero ofrece particularidades que lo hacen interesante. OpenVZ es una versión modificada del kernel de linux. Todos las instancias están limitadas a correr la misma versión de kernel. Por tener un solo kernel ejecutándose el aprovechamiento de recursos es mayor. Los recursos de cada instancia están aislados del resto pero son asignados por el kernel, por lo que se pueden distribuir de manera uniforme pero si una instancia requiere más recursos de manera esporádica puede obtenerlos de las porciones libres que dejan las demás instancias.

Son muchas las combinaciones de infraestructura que pueden hacerse utilizando máquinas virtuales. Se ahorra espacio en racks, disminuye el consumo de electricidad y se aprovechan mejor los recursos infrautilizados de los servidores disponibles.

Ideas sobre la era post-pc

El primero de junio del 2010 en una charla de All Thing Digital, Steve Jobs habla sobre la era post-pc y menciona:

“We like to talk about the post-PC era, but when it really starts to happen, it’s uncomfortable,” [cnet]

Además indica que se acercan los días en que solo algunas personas necesitaran utilizar una PC.

En días recientes, el 18 de agosto de 2011, surge el rumor que HP valora cerrar su división de producción de PC’s y productos de consumo para concentrarse en el desarrollo de productos y servicios empresariales. [engadget] Noticia que se torna más sorprendente al considerar que en el momento es el principal fabricante de PC’s desde computadores de escritorio, laptops y amplia gama de productos tecnológicos para consumidores finales. Su principal argumento: el negocio de PC tiene un bajo margen de ganancia. [wired]

Interfaz del futuro

Imagen de http://www.flickr.com/photos/jileon/

Producir PC’s no es atractivo para los fabricantes. Las ventas han disminuido por la competencia de las tabletas. SmartPhones con mejores capacidades hacen que cada vez menos personas enciendan sus computadores de escritorio o laptops para consultar información o realizar tareas que ahora tienen al alcance, en la palma de sus manos.

Las tabletas parecen ser entonces la insignia de la era pos-PC. Estas son excelentes para consumir contenido. Cuentan con gran variedad de aplicaciones que se traduce en muchas funcionalidades. Poseen la capacidad para realizar ciertas tareas de oficina como revisar emails, analizar reportes, consultar las noticias, revisar presentaciones. Son un excelente recurso para entretenimiento por medio de juegos, películas y música.

El problema de las tabletas es que parecen retroceder en la capacidad de introducir información. Es complicado ingresar mucho texto como el de un artículo de blog. Generar contenido elaborado resulta tedioso, pienso en tareas de edición de video o modelado en 3d por citar dos ejemplos. ¿Y que hay de quienes desarrollamos software? ¿En el futuro haremos un for haciendo círculos con el dedo sobre una pantalla táctil?

Con el aumento del consumo de tabletas viene una baja de la demanda de PC’s. Es entonces preocupante pensar que al disminuir la oferta los precios de los computadores personales se incrementarían.

Se podría dar a las tabletas la capacidad de los PC. Una solución práctica es implementar accesorios que mejoren la capacidad de introducción de datos en las tabletas. Aunque entonces surge el problema de la visualización, las tabletas son pequeñas y portables y si quieres visualizar mejor muchos datos sería más conveniente una pantalla grande, o mejor aún, más de una pantalla.

Siento que falta algo en el medio, una especie de seudo-PC, algo que tenga interfaces apropiadas para tareas específicas con capacidades de procesamiento superiores.

¿Será acaso que en los próximos años estaremos desarrollando software desde un teclado inalámbrico conectado al televisor?

Se llama experiencia cuando aprendes algo de eso

Cuantas personas dicen: “yo tengo n años de experiencia haciendo esto” y afirman además que por esos años saben mejor que otros como llevar a cabo esa tarea determinada.

La experiencia es importante. Las personas con experiencia en un área determinada pueden idetificar y solucionar problemas más rápidamente porque probablemente eso ya les ha ocurrido antes. En otras palabras, aprendieron la lección.

Muchas veces he escuchado a personas rechazar sugerencias o comentarios y argumentar luego que ellos tienen más experiencia. Sin embargo, he visto a las mismas personas cometer ciertos errores para luego abordar otras tareas de la misma manera esperando que esta vez el resultado sea distinto.

“¿Cómo puede obtenerse un resultado distitnto si se hacen las cosas de la misma manera?”

Lo importante de la experiencia es aprender de ella. Si cometemos un error y no aprendemos la lección es como si no hubiésemos tenido esa experiencia.

Las personas que constatemente se refugian en sus años de experiencia pero siguen abordando los problemas de la misma manera que lo hacían cuando carecían de esa “experiencia” podrían decir más bien:

“Tengo un año de experiencia, y n años repitiéndola”

A la larga, si no mejoras la forma de hacer las cosas. Si no actualizamos nuestras herramientas para llevar a cabo el trabajo. Si cometemos los mismos errores una y otra vez sin identificar soluciones. Por más años de “experiencia” que se tenga si se carece de aprendizaje en el proceso es como si esos años transcurrieran en vano.

“Aprender la lección es el valor de la experiencia”