Desarrollo Orientado a Pruebas con Vala

Introducción

El uso de TDD lo estoy llevando al extremo del frikismo, hoy toca Vala otro lenguaje de programación para Gnome añadido a la gran lista que posee este entorno de ventanas. Ubuntu 10.10 da problemas a la hora de utilizar MonoDevelop y Vala, esto también lo he tenido que solucionar.

Resolviendo entuertos

Faltan librerías a la hora de agregar las referencias

  • He tenido que copiar las librerias que había en /usr/share/vala-0.10/vapi a /usr/share/vala/vapi de esta manera aparecen a la hora de agregar las librerias en MonoDevelop. He utilizado el comando: sudo cp /usr/share/vala0.10/vapi/* /usr/share/vala/vapi
  • He tenido que añadir las referencias a mano, en el archivo de proyecto, porque MonoDevelop no detecta que una solución se compone de varios proyectos, en este caso uno de Test y otro de interfaz de usuarios. He agregado la siguiente línea: <ProjectPackage file=”/home/pablo/Projects/codekitchen/codekitchenTests/codekitchenTests.mdproj” name=”codekitchen” IsProject=”true” />

Intentando averiguar como funciona esto

En la web del proyecto podemos ver 2 ejemplos del funcionamiento de los test en Vala, nada ilustrativos, pero lo que podemos sacar en conclusión es lo siguiente:

  • La clase que ejecuta las pruebas hereda de GLib.Object
  • Los test se ejecutan dentro de main
  • Los test son métodos que no devuelven ningún resultado y que no reciben ningún parámetro.
  • Estos métodos incluyen una sentencia assert
  • Los métodos se deben publicar en una ruta específica con el método add_func(ruta,nombremetodo).
  • Los resultados saltan al ejecutar el proyecto.
  • Entre las llamadas init y run se introducen los test con add_func.

El primer enlace que viene en el siguiente apartado es aclaratorio

Enlaces sobre Desarrollo Orientado a Pruebas en Vala

  1. http://asabil.wordpress.com/2009/01/23/vala-and-unit-testing/
  2. https://code.google.com/p/vala-win32/downloads/

HackFest en @emergya (I)

Introducción

Otra pasito andado gracias esta vez a este HackFest de @emergya, una de las dudas que tenía a la hora de construir 1K-3A bajo Linux era cómo se detectaba el hardware, un poco ya sabía de mis experiencias anteriores intentando hacer distribuciones Linux en mi época de becario de la UHU pero parecía no funcionar.

La retrospectiva de @juanjeojeda de cómo era y cómo va a ser (es) la detección de Hardware fue bastante ilustradora, está pendiente un post sobre esta parte, y la explicación del funcionamiento de Gudev ha sido decisiva para saber como implementarla en aplicaciones de alto nivel.

Documentación

Toda la documentación que se nos ha dado está en el siguiente enlace:

http://www.delicious.com/tag/udev_course

La agenda fue la siguiente:

16:30 – 17:15 – Explicación la migración de Hal a gudev (Juanje)

17:15 – 18:30 – Explicación de Udev y Gudev (Félix)

18:30 – 19:00 – Ejercicios práticos con udev y gudev (Félix)
* Creación de reglas udev
* Monitorización y detección de eventos hardware
directamente con gudev
* Juntar lo anterior para hacer un sistema tipo
udisks, upower, etc.

19:00 – 19:30 – Estado del arte del hardware en el escritorio y el
papel de Hermes (Juanje)

Agradecimientos

Agradecer a @davidjguru que me ayudara a encontrar dónde era el HackFest. Y a toda la gente de @emergya por esta iniciativa.

1K-3A: calculando los costes

Introducción

Para el que me lea por primera vez, estoy construyendo un 1K-3A, un robot basado en R2-D2 pero con licencia GPL. Este post va dedicado a los cálculos de los costes en materiales.

Los costes en materiales

Para poder hacer las piezas inicialmente necesito tener la impresora en 3D y la fresadora, en el post anterior ya comenté que iba a optar por usar hardware libre para su realización, y lo principal es hacer la impresora 3D .

Tras bajarme los planos y mirar el listado de piezas, directamente a MakerBot voy a comprarles las siguientes:

  1. Automated Build Platform – coste 160 $
  2. Plastruder MK5 Complete Kit – coste 185 $

 

Taller de Less en Mecus y el ratito de después

Ayer tuve la oportunidad de acudir a Mecus a participar en un Taller de Programación de Less impartido por Pedro Carrillo. He de reconocer gratamente que me encantó la experiencia debido sobre todo al intercambio de información y pareceres sobre el desarrollo en distintos sistemas operativos.

Allí nos encontramos con varias máquinas, unas con Windows, otras con Mac OS X e incluso alguna con Ubuntu instalado.

Tras exponer un resumen teórico sobre qué era Less nos dispusimos a programar un ejemplo, yo en principio opté por desarrollarlo bajo MonoDevelop 2.4.1, pero fue imposible debido a sus contínuos cuelgues, posteriormente use Visual Studio 2010 Professional con @Penyaskito y aquí es donde las cosas empezaron a funcionar, por un lado por usar Visual Studio que no se colgaba y por otro por la maestría de Peñaskito que solucionó un problema de base en la programación de Less.

El siguiente sistema operativo que hizo funcionar bien el ejemplo fue Ubuntu y el resultado con Mac OS X a mi ida no fue esperanzador (aunque en el macbook blanco de Pedro Carrillo si funcionaba).

El código resultante es el siguiente:

<%@ Page Language="C#" AutoEventWireup="true" 
CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link rel="stylesheet/less" type="text/css" href="Less/Style.less"/>
    <script src="Scripts/less-1.0.35.min.js" type="text/javascript"></script>

</head>
<body> 
    <form id="form1" runat="server">
    <div id="penyaskitoMira">
        lalalalalalalalalalaalala
    </div>
    </form>
</body>
</html>

Por lo visto es importante poner la línea que incluye el archivo less que el de carga del script, de esta manera Less sabe que tiene un archivo que procesar. Es decir, primero esta:

 <link rel="stylesheet/less" type="text/css" href="Less/Style.less"/>

Y luego esta:

<script src="Scripts/less-1.0.35.min.js" type="text/javascript"></script>

El contenido del archivo less es este:

@color:#FF00FF;
@borde:#FFFFFF;
#penyaskitoMira
{
	background:@color;
	border:@borde - @color;
}

Para aprender sobre Less es muy recomendable seguir la presentación de Pedro Carrillo al respecto, pero aquí voy a explicar un poco. Si observamos el código de Less posee 2 palabras que comienzan por @ que son:

  • @color
  • @borde

El uso de la @ (arroba) delante de una palabra la convierte en una variable, así podemos decir que Less es un extensión de CSS que permite el uso de variables.

La asignación son los dos puntos : y para usar cadenas hay que utilizar las comillas dobles “.

Por otro lado y ya para finalizar el post dar las gracias a la organización del taller y a las dos empresas que han puesto su esfuerzo en realizarlo que son Mecus y Kitiplá.

CNC e Impresora 3D: para construir el R2D2 debo primero hacer las máquinas que lo construyan

Introducción

En este artículo planteo como he planeado construir el R2D2 que utilizaré para mi boda, el objetivo es compartir el proceso y recibir feedback de una comunidad que no se si existe en mi cercana Sevilla (capital).

Cómo empezó todo

Empecé hace ya 3 años a hacer pruebas con Robotics Studio de concepto para tener un prototipo, además aproveché para dar charlas en la Universidad de Sevilla sobre robótica, tanto en la Facultad de Informática como en la Facultad de Ingenieros. Tras estas charlas contacté con la comunidad, por un lado con Esibot y por otro con el recién creado grupo de Robótica del Club .Net, que se creo tras una de mis charlas.

El proceso

El proceso es bastante sencillo, he diseñado el siguiente plan para ir consiguiendo crear mi R2D2 (modelo en realidad 1K-3A):

  • Redimensionar los planos para las nuevas especificaciones del dome: para quien no lo sepa el dome es la cúpula superior de R2D2, yo he utilizado una ensaladera de IKEA que tiene ese toque de aluminio. Los planos están disponibles en www.astromech.net
  • Construir la CNC según las planos disponibles en http://wiki.makerbot.com/cupcake: una máquina CNC es una máquina de control numérico por ordenador que permite realidad cortes de manera exacta en distintos materiales.
  • Construir la impresora 3D para crear las piezas más detalladas en plástico. También de la misma gente de MakerBot.
  • Crear el driver para Linux de estas dos máquinas que parece que solo funcionan con puerto paralelo y yo tengo puertos USB en el portátil.
  • Hacer todas las piezas e ir ensamblando.
  • Optimizar el sistema de servomotores y placas.
  • Reconocimiento visual.
  • Conectar a base de conocimiento.
  • WebServices.

Software

Mi intención es hace dos versiones del robot,  por un lado una basada en .Net y otra basada en Linux. Ya dispongo de dos placas para ir realizando experimentos una placa Arduino y otra Netduino. La lista de tareas son las siguientes:

  • Realizar driver para Linux USB de CNC.
  • Realizar driver para Linux de Impresora 3D.
  • Realizar versión Linux: ROS.
  • Realizar versión para .Net: Microsoft Robotics Studio.

Cosas ya hechas

Ya tengo un modelo en 3D para Robotics Studio con el que estoy realizando cálculos y pruebas.

Plazo: 1.5 años

A %d blogueros les gusta esto: