El sistema operativo de 1K-3A: el problema son las aplicaciones

Introducción

El sistema operativo de 1K-3A será una distribución Linux, actualmente es la versión alpha de OpenQbo, distribución de la que estoy esperando una actualización mayor para poder seguir usándola. Mientras tanto, he elaborado una arquitectura deseable de sistema operativo para 1K-3A que tendría la siguiente arquitectura:

linuxos

 

Arquitectura

Tendríamos varios niveles en el sistema operativo, por un lado el kernel de linux y los drivers de dispositivos. Posteriormente el sistema ROS, del que ya he publicado algún que otro artículo en el blog y después una capa de introspección. La capa de introspección nos permite poder utilizar cualquier lenguaje para acceder a los paquetes disponibles en ROS, este es un trabajo arduo y doloroso pero que tendría la contrapartida y gran ventaja de poder utilizar cualquier lenguaje para el que exista el binding. O mejor dicho, es más fácil crear bindings (adaptaciones) de lenguajes de programación para ROS. Así no nos limitaríamos a C,C++ y Python sino además otros lenguajes soportados por el proyecto Gnome. La capa final es la nube (Cloud), es decir, la conexión permanente de nuestro robot a la nube de servicios disponibles en internet.

Anuncios

31 días con Vala: primer día, creando un proyecto con MonoDevelop

Introducción

Realmente inspirado en 31 días con Windows Phone 7, he decidido escribir mi experiencia aprendiendo en 31 días este nuevo lenguaje de programación que la comunidad de Gnome está adoptando como alternativa a Mono.

Voy a suponer que tienes ya todo instalado, para ir directamente al grano para aprender este lenguaje. Yo he utilizado una máquina virtual en VirtualBox con Ubuntu 10.10 y con MonoDevelop instalado así como todas las dependencias instaladas.

Creando un proyecto nuevo

Cuando entramos en MonoDevelop nos encontramos la ventana de Bienvenida en ella dentro de Acciones Típicas, picamos sobre Iniciar una nueva solución/archivo y nos aparecerá la ventana de plantillas de MonoDevelop. En la parte derecha de la ventana podemos seleccionar las plantillas según el lenguaje, nosotros seleccionaremos Vala presentándose 4 tipos de proyectos:

  1. Empty Vala Project: como se puede observar sin traducir, es un proyecto en lenguaje Vala vacío, en realidad es una Solución que puede incluir otros proyectos.
  2. Proyecto de consola: un proyecto para correr bajo linea de comandos de linux (por ejemplo bash), al estilo CMD de Windows.
  3. Libreria compartida: un conjunto de clases codificadas en Vala.
  4. Plan de pruebas: conjunto de pruebas unitarias para agregar a nuestra solución. Ideal para los que nos gusta el TDD.

En la imagen inferior podemos ver una captura de la ventana de Nueva Solución y las 4 opciones que se nos plantea. Dentro de la captura vemos que hemos introducido los datos que nos van a llevar a crear un Hola Mundo en un Proyecto de Consola.

Creando un Proyecto de Consola

Cuando nos encontramos, damos a Aceptar nos encontramos ante el entorno de desarrollo de MonoDevelop. En él podemos seleccionar distintas formas de plantear el desarrollo cambiando de vistas. Para cambiar de vista, nos vamos al menú Ver y dentro de este menú nos encontramos con 4 opciones:

  1. Predeterminado: nos muestra la ventana de edición lo más grande posible para que sea posible un desarrollo realmente cómodo.
  2. Solución: nos muestra además la Ventana de Solucion, esta ventana la veremos más adelante cuando hablemos de la estructura de la solución en Vala. Es la que viene seleccionada por defecto.
  3. Visual Design: sin traducir todavía, al crear una solución de consola no he observado que tenga mucha utilidad.
  4. Depurar: es la vista de depuración, nos aparecen en la parte inferior de la pantalla las ventanas necesarias para depurar un programa, además de aparecer la Ventana de Solución en la parte izquierda.

Nosotros vamos a trabajar con la Vista de Solución, para ello nos vamos al menú Ver|Solución.

Contenido de la Solución

Para detallar el contenido de la solución por defecto, nos fijamos en la Ventana de Solución que aparece en la imagen inferior.

Como podemos ver únicamente incluye un archivo con la extensión vala, al llamarse main indica que este archivo incluye la entrada única main para el proyecto de consola. Por otro lado la carpeta Packages hace la función de Referencias en los proyectos con Mono en MonoDevelop o .Net en Visual Studio. Vemos que sólo tiene una referencia que es a la librería glib-2.0, que es el núcleo alrededor del cual se construye el proyecto Gnome.

Analizando el código fuente

Echemos un vistazo al código fuente:

using GLib;

public class HelloVala:GLib.Object
{
   public static int main(string[] args)
   {
      stdout.printf("Hola Mundo \n");
      return 0;
   }
}

Hay algunas apreciaciones que quiero recalcar en este pequeño código fuente:

  1. Por un lado, que no existe herencia por defecto de la clase Object de las clases, sino que hay que escribirla siempre.
  2. Además, que la escritura en el terminal se hace en la salida estandar (stdout) en vez de en Console. Esto es una herencia de C.
  3. Se utiliza la misma sentencia using que en C# para hacer llamadas a paquetes externos.
  4. Siempre hay que poner un return lo que sea cuando se escriba un programa, ya que la función main es un método más dentro de una clase.
  5. El nombre del archivo no coincide con el nombre de la clase, esto no es obligatorio en vala, aunque si recomendable si queremos tener un código organizado.
A %d blogueros les gusta esto: