Activity tutorial

From OLPC
Revision as of 04:53, 19 May 2011 by JZA (talk | contribs) (Traduccion de las ligas originales a titulos hispanos pero siguen estas paginas en ingles)
Jump to navigation Jump to search
  english | 日本語 | 한국어 | português | español HowTo [ID# 256207]  +/-  


<< Tutorials

Este tutorial explica paso a paso como crear la Actividad Hola Mundo en un conjunto. Puedes descargar un paquete completo .xo, aunque el paquete no sera exactamente identico al que esta a continuación.

Este tutorial asume que has leido el Manual del Desarrollador, has instalado un ambiente de desarrollo de Sugar y deseas desarrollar en PyGTK (el estandar de desarrollo para actividades en OLPC).

Comenzando

  • Crea una estructura de directorios:
mkdir -p HelloWorldActivity.activity/activity
  • Escribe el archivo activity.info, para describir el conjunto dentro del sub-directorio de una actividad (e.g. HelloWorldActivity.activity/activity/activity.info). La especificación del Activity Bundles explica en detalle el significado de cada campo.
    • Nota: en la compilación joyride-1525, sugar no pudo localizar el icono cuando intente esto asi que elimine la extension '.svg' de la linea 'icon = activity-helloworld.svg'.
 File: activity.info
 [Activity]
 name = HelloWorld
 bundle_id = org.laptop.HelloWorldActivity
 class = HelloWorldActivity.HelloWorldActivity
 icon = activity-helloworld
 activity_version = 1
 host_version = 1
 show_launcher = yes
  • Diseña un icono para la actividad siguiendo las instrucciones en creando iconos para Sugar y ponlo en el subdirectorio de la actividad. El nombre del archivo debe ser igual al nombre del archivo de icono especificado en el archivo de información (e.g. activity-helloworld.svg). El contenido del archivo SVG se vera así:
 File: activity-helloworld.svg
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
   <!ENTITY stroke_color "#666666">
   <!ENTITY fill_color "#FFFFFF">
 ]>
 <svg xmlns="http://www.w3.org/2000/svg" width="55" height="55">
   <rect x="5" y="5" width="45" height="45"
   style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.5"/>
 </svg>
  • Escribe el script setup.py en el directorio raíz (e.g. HelloWorldActivity.activity/setup.py), el cual en muchas ocaciones se vera de esta forma:
 File: setup.py
 #!/usr/bin/env python
 from sugar.activity import bundlebuilder
 bundlebuilder.start()

Una versión avanzada, la cual soporta la creacion de actividades sin Sugar previamente instalado, se vera de esta forma:

 File: setup.py
 #!/usr/bin/env python
 try:
 	from sugar.activity import bundlebuilder
 	bundlebuilder.start()
 except ImportError:
 	import os
 	os.system("find ./ | sed 's,^./,HelloWorldActivity.activity/,g' > MANIFEST")
 	os.system('rm HelloWorldActivity.xo')
 	os.chdir('..')
 	os.system('zip -r HelloWorldActivity.xo HelloWorldActivity.activity')
 	os.system('mv HelloWorldActivity.xo ./HelloWorldActivity.activity')
 	os.chdir('HelloWorldActivity.activity')
  • Programa tu actividad en Code Python. El nombre que especificaste en .info el archivo como "class" es el nombre de las clases el cual corre tu codigo. Para las el archivo de activity.info, especificaremos un modulo de raiz llamado HelloWorldActivity.HelloWorldActivity (por favor not aque el uso de mayusculas en nombres de modulos es considerado un mal estilo en python, nombra como quieras la actividad con un estilo estandar).
 File: HelloWorldActivity.py
 from sugar.activity import activity
 import logging
 
 import sys, os
 import gtk
 
 class HelloWorldActivity(activity.Activity):
     def hello(self, widget, data=None):
         logging.info('Hello World')
 
     def __init__(self, handle):
         print "running activity init", handle
         activity.Activity.__init__(self, handle)
         print "activity running"
 
         # Creates the Toolbox. It contains the Activity Toolbar, which is the
         # bar that appears on every Sugar window and contains essential
         # functionalities, such as the 'Collaborate' and 'Close' buttons.
         toolbox = activity.ActivityToolbox(self)
         self.set_toolbox(toolbox)
         toolbox.show()
 
         # Creates a new button with the label "Hello World".
         self.button = gtk.Button("Hello World")
     
         # When the button receives the "clicked" signal, it will call the
         # function hello() passing it None as its argument.  The hello()
         # function is defined above.
         self.button.connect("clicked", self.hello, None)
     
         # Set the button to be our canvas. The canvas is the main section of
         # every Sugar Window. It fills all the area below the toolbox.
         self.set_canvas(self.button)
     
         # The final step is to display this newly created widget.
         self.button.show()
     
         print "AT END OF THE CLASS"

El archivo anterior es llamado HelloWorldActivity.py

  • Crea un archivo MANIFEST (e.g. HelloWorldActivity.activity/MANIFEST), conteniendo una lista de los archivos (relativos al directorio en donde se encuentra el MANIFEST) para incluir el paquete. (Nota: Asegurate no dejar lineas en blanco al final del archivo.) Este script hace eso en linux (correrlo desde el directorio de HellowWorldActivity.activity):
cd HelloWorldActivity.activity
find . -type f | sed 's,^./,,g' > MANIFEST
  • La estructura de tu directorio ahora debe verse como esto:
HelloWorldActivity.activity/
HelloWorldActivity.activity/setup.py
HelloWorldActivity.activity/activity
HelloWorldActivity.activity/activity/activity.info
HelloWorldActivity.activity/activity/activity-helloworld.svg
HelloWorldActivity.activity/HelloWorldActivity.py
HelloWorldActivity.activity/MANIFEST
  • Asegurate que todo los archivos de python tienen los permisos requeridos para su uso.
chmod a+x setup.py
chmod a+x HelloWorldActivity.py
  • Configura tu conjunto para desarrollar (debe ser usuario olpc cuando hagas esto) para convertirte en usuario olpc, escribe: su - olpc

Si el sistema te pide una contraseña, intenta usar: su

python setup.py dev

Esto crea un vinculo entre el folder de actividades en ~/Activities, asi que Sugar puede encontrar tu actividad.

  • Restart Sugar using Ctrl-Alt-Erase and your activity will appear in the interface! (NOTE: By default, the Home view shows only the favorite activities. You should press Ctrl+2 or go the right-upper corner and change to the List View)
  • Run your activity, and if there are errors use the Log viewer activity to see what went wrong.

Ejecutando

Si ejecutas ahora Sugar el icono de la actividad sear visible en el marco. (Deberás reiniciar sugar para que coja los cambios si aun lo instalaste. Haz clic en ctrl-alt-erase.)

Tambien podras editar el codigo en tu conjunto de directorios de manera directa. Nota que la primera vez que lanzas la Actividad, dejara procesos activos aun si cierras la ventana, deberas matar el sugar-activity-factory para que recargue cuando hagas clic de nuevo.

Distribución

Crea un paquete .xo para distribuir el conjunto. (Un archivo .xo es esencialmente un archvio zip creado a base del MANIFEST con metadatos extras, de forma similar a un archivo JAR. También tiene una forma de localización, y en el futuro esperamos que sea posible firmar los paquetes tambien.) El nombre de conjunto es automaticamente generado desde los valores 'name' y 'activity_version' encontrados en el archivo activity.info, separado por un guión, con una extensión .xo.

 ./setup.py dist_xo

Para instalar la xo en una laptop puedes usar el script de instalación.

 sugar-install-bundle HelloWorld-1.xo

Resolucion de problemas

Puedes encontrar logs de aplicaciones en /home/olpc/.sugar/default/logs. Si el ejemplo falla al compilar, sugar mostratara el icono en el circulo pero permanecerá por siempre en "Iniciando..." cuando te elevas sobre el puntero sobre este. Deberás reiniciar sugar con <ctrl-alt-erase> para poder eliminar el icono. Puedes encontrar la causa del problema en el log llamado el "service-name" en tu archivo activity.info, en este caso "org.laptop.HelloWorldActivity".

Ver tambien