Development Team/Almanac/lang-es: Difference between revisions
No edit summary |
m moved Walter is a wanker 12/Almanac/lang-es to Development Team/Almanac/lang-es over redirect: revert |
||
| (27 intermediate revisions by 5 users not shown) | |||
| Line 7: | Line 7: | ||
{{Almanac}} | {{Almanac}} | ||
{{Almanac TOC}} | {{Almanac TOC}} | ||
== | == ¿Cómo puedo obtener ayuda adicional más allá de este almanaque? == | ||
* | * ¿Quieres comenzar con los básico del desarrollo para Sugar? Puedes visitar el [http://wiki.sugarlabs.org/images/5/51/Activity_Handbook_200805_online.pdf Activity Handbook] de OLPC Austria (''Ten en cuenta que este manual fue actualizado por última vez en mayo del 2008, las capturas de tienen el diseño pre-8.2. En términos de código en sí, las cosas deberían funcionar como están descriptas. Si encuentra algún problema por favor póngase en contacto con [[User:ChristophD|ChristophD]].'') | ||
* | * Ver también [[Development Team/Almanac/Code Snippets]] | ||
Ahora, vamos con el almanaque actual... | |||
== ¿Dónde puedo ver los cambios de la API? == | |||
Cambios de API entre los releases de OLPC pueden ser vistos aqui: [[Development Team/Almanac/API Changes|API Changes]] | |||
== | == Comenzando == | ||
=== ¿Cómo estructuro mis archivos para que sean una actividad de válido en Sugar? === | |||
Puedes encontrar información sobre la estructura de la actividad aquí: [[Development Team/Almanac/Activity Bundles|Activity Bundles]] | |||
== | === ¿Cómo puedo hacer un icono para mi actividad? === | ||
La información sobre lo que debe hacer se puede encontrar aquí: [[Development Team/Almanac/Making Icons|Making Icons]] | |||
== | == Paquete: sugar == | ||
* [[Development Team/Almanac/sugar.env|sugar.env]] | * [[Development Team/Almanac/sugar.env|sugar.env]] | ||
* [[Development Team/Almanac/sugar.profile|sugar.profile]] | * [[Development Team/Almanac/sugar.profile|sugar.profile]] | ||
| Line 30: | Line 29: | ||
* [[Development Team/Almanac/sugar.logger|sugar.logger]] | * [[Development Team/Almanac/sugar.logger|sugar.logger]] | ||
== | == Paquete: sugar.activity == | ||
* [[Development Team/Almanac/sugar.activity.activity|sugar.activity.activity]] | * [[Development Team/Almanac/sugar.activity.activity|sugar.activity.activity]] | ||
* [[Development Team/Almanac/sugar.activity.activityfactory|sugar.activity.activityfactory]] | * [[Development Team/Almanac/sugar.activity.activityfactory|sugar.activity.activityfactory]] | ||
* [[Development Team/Almanac/sugar.activity.registry|sugar.activity.registry]] | * [[Development Team/Almanac/sugar.activity.registry|sugar.activity.registry]] | ||
== | == Paquete: sugar.datastore == | ||
* [[Development Team/Almanac/sugar.datastore.datastore|sugar.datastore.datastore]] | * [[Development Team/Almanac/sugar.datastore.datastore|sugar.datastore.datastore]] | ||
== | == Paquete: sugar.graphics == | ||
* [[Development Team/Almanac/sugar.graphics.alert|sugar.graphics.alert]] | * [[Development Team/Almanac/sugar.graphics.alert|sugar.graphics.alert]] | ||
* [[Development Team/Almanac/sugar.graphics.icon|sugar.graphics.icon]] | * [[Development Team/Almanac/sugar.graphics.icon|sugar.graphics.icon]] | ||
| Line 46: | Line 45: | ||
* [[Development Team/Almanac/sugar.graphics.style|sugar.graphics.style]] | * [[Development Team/Almanac/sugar.graphics.style|sugar.graphics.style]] | ||
== | == Paquete: sugar.presence == | ||
* [[Development Team/Almanac/Sugar.presence|Sugar.presence]] | * [[Development Team/Almanac/Sugar.presence|Sugar.presence]] | ||
* [[Development Team/Almanac/Sugar.presence.activity|Sugar.presence.activity]] | * [[Development Team/Almanac/Sugar.presence.activity|Sugar.presence.activity]] | ||
| Line 53: | Line 52: | ||
== Clipboard == | == Clipboard == | ||
* | * Notas sobre el uso del [[Development Team/Almanac/GTK's Clipboard Module|módulo Clipboard de GTK ]] | ||
== Logging == | == Logging == | ||
* [[Development Team/Almanac/sugar.logger|sugar.logger]] | * [[Development Team/Almanac/sugar.logger|sugar.logger]] | ||
* | * Notas sobre el uso del [[Development Team/Almanac/Python Standard Logging|standard de Logging en Python]] | ||
== | == Internacionalización == | ||
*[[Development Team/Almanac/Internationalization|Internationalization]] | *[[Development Team/Almanac/Internationalization|Internationalization]] | ||
== | == Texto y gráficos para las actividades de Sugar == | ||
* [[Development Team/Almanac/Pango|Pango]] | * [[Development Team/Almanac/Pango|Pango]] | ||
=== | === ¿Cómo puedo crear un cuadro de texto para la edición de código? === | ||
Puedes usar gtksourceview2 | |||
<pre> | <pre> | ||
import gtk | import gtk | ||
| Line 73: | Line 72: | ||
... | ... | ||
# | # Configuramos el buffer | ||
buffer = gtksourceview2.Buffer() | buffer = gtksourceview2.Buffer() | ||
if hasattr(buffer, 'set_highlight'): # handle different API versions | if hasattr(buffer, 'set_highlight'): # handle different API versions | ||
| Line 80: | Line 79: | ||
buffer.set_highlight_syntax(True) | buffer.set_highlight_syntax(True) | ||
# | # Configuramos el tipo MIME para el buffer | ||
lang_manager = gtksourceview2.language_manager_get_default() | lang_manager = gtksourceview2.language_manager_get_default() | ||
if hasattr(lang_manager, 'list_languages'): # again, handle different APIs | if hasattr(lang_manager, 'list_languages'): # again, handle different APIs | ||
| Line 93: | Line 92: | ||
buffer.set_language(lang) | buffer.set_language(lang) | ||
# | # Establecemos el objeto para la vista, usarlo como gtk.TextView | ||
view = gtksourceview2.View(buffer) | view = gtksourceview2.View(buffer) | ||
view.set_size_request(300, 450) | view.set_size_request(300, 450) | ||
| Line 109: | Line 108: | ||
</pre> | </pre> | ||
Para agregar texto al buffer: | |||
<pre> | <pre> | ||
buffer.set_text(text) | buffer.set_text(text) | ||
</pre> | </pre> | ||
Para obtener todo el texto: | |||
<pre> | <pre> | ||
text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter()) | text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter()) | ||
</pre> | </pre> | ||
Probablemente quieras poner la view(vista) en un gtk.ScrolledWindow | |||
<pre> | <pre> | ||
sw = gtk.ScrolledWindow() | sw = gtk.ScrolledWindow() | ||
| Line 124: | Line 123: | ||
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) | sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) | ||
</pre> | </pre> | ||
y agregar el el objeto sw en vez de la view(vista). | |||
Puedes encotnrar más en el código fuete de Pippyy en jarabe.view.sourceview. | |||
== Audio | == Audio y Video == | ||
* [[Development Team/Almanac/GStreamer|GStreamer]] | * [[Development Team/Almanac/GStreamer|GStreamer]] | ||
== | == Ratón == | ||
=== | === ¿Cómo puedo cambiar el cursor del ratón por el cursor de espera en mi actividad? === | ||
En la subclase de tu actividad: | |||
<pre> | <pre> | ||
| Line 140: | Line 139: | ||
</pre> | </pre> | ||
y para volver al que está por defecto: | |||
<pre> | <pre> | ||
| Line 146: | Line 145: | ||
</pre> | </pre> | ||
=== | === ¿Cómo puedo rastrear la posición del ratón? === | ||
Existen varias razones por las que te puede interesar controlar la posición del ratón, que van desde el entretenimiento ([[http://en.wikipedia.org/wiki/Xeyes]]) a lo funcional (ocultar ciertas ventanas cuando el ratón no se ha movido por un par de segundos y volver a hacer aparecer esos elementos cuando este se mueva nuevamente). Esta es una manera en la cual se puede implementar esta funcionalidad: | |||
<pre> | <pre> | ||
| Line 181: | Line 180: | ||
</pre> | </pre> | ||
== | == Varios == | ||
Las tareas que aparecen más abajo son técnicas útiles que he encontrado mientras escribía código y documentación para esta referencia. No ha sido categorizadas aún. | |||
=== ¿Cómo se si mi actividad está "activa" o no? === | |||
Puedes configurar un evento usando la constante VISIBILITY_NOTIFY_MASK para saber cuando se cambia la visibilidad. Luego en el callback para este evento lo que debes hacer es comprar el estado del evento con las variables gtk definidas para la visibilidad de tu actividad. Puedes ver [http://www.pygtk.org/docs/pygtk/gdk-constants.html#gdk-visibility-state-constants la sección de Constantes de Estado de Visibilidad de GDK] gtk.gdk.Constants para más información. | |||
<pre> | <pre> | ||
| Line 204: | Line 202: | ||
</pre> | </pre> | ||
=== | === ¿Cómo puedo obtener la cantidad de espacio libre disponible dentro del directorio /home? === | ||
La siguiente función usa el módulo [http://docs.python.org/lib/module-statvfs.html statvfs]. El código siguiente muestra cómo obtener la cantidad total de espacio libre en /home. | |||
<pre> | <pre> | ||
#### | #### Método getFreespaceKb: devuelve el espacio disponible en kilobytes. | ||
def getFreespaceKb(self): | def getFreespaceKb(self): | ||
stat = os.statvfs("/home") | stat = os.statvfs("/home") | ||
| Line 216: | Line 214: | ||
</pre> | </pre> | ||
Ten en cuenta que asumir cosas acerca de "/home" no es una buena idea, es mejor usar os.environ['HOME']. Rainbow pondrá los archivos actuales en otros lugares, algunos en el ramdisk, otros en la flash. | |||
Ten claro que espacio libre en el sistema de archivos realmente te importa. | |||
=== ¿Cómo puedo saber si mi actividad se está ejecutando en una XO? === | |||
Sugar corre en PCs comunes, así como en XO. Aunque tu actuvidad probablemente corra en una XO real, algunas personas necesitan utilizarla en otros lados. Normalmente no deberías escribir una actividad que le importe si es una XO o no donde se está ejecutando. Si por alguna extraña razón necesitas saber, la forma más fácil es verificar si /sys/power/olpc-pm (el manejador de poder de la XO) existe. | |||
[http://lists.laptop.org/pipermail/devel/2008-June/015923.html reliably detecting if running on an XO] | |||
[[olpc:Power Management Interface]] | |||
<pre> | <pre> | ||
import os | import os | ||
... | ... | ||
# | #Devuelve un valor booleano que nos dice si estamos en una XO o no. | ||
print os.path.exists('/sys/power/olpc-pm') | print os.path.exists('/sys/power/olpc-pm') | ||
</pre> | </pre> | ||
=== | === ¿Cómo puedo saber la configuración actual del lenguage en mi XO? === | ||
La variable 'LANG' te dice que lenguaje está actualmente activo en el XO. El código siguiente muestra cómo buscar en el valor de esta variable. | |||
<pre> | <pre> | ||
| Line 238: | Line 239: | ||
</pre> | </pre> | ||
=== | === ¿Cómo llamar repetidamente a un método específico después de un número N de segundos? === | ||
La función gobject.timeout_add() te permite invocar un método después de un período de tiempo determinado. Si quieres llamar a un método en varias ocasiones, simplemente sigue llamando a la función de gobject.timeout_add desde tu función. | |||
El código de abajo es un ejemplo simple en donde la función que implementa el timeout se llama repeatedly_call. Nota que la sincronización entre las llamadas son aproximadas. Para que esto funcione debes llamar a repeatedly_call() desde alguna parte de tu código. | |||
Puedes ver un mejor ejemplo de este patrón en uso [[olpc:Pango#How_do_I_dynamically_set_the_text_in_a_pango_layout.3F | aquí]]. | |||
<pre> | <pre> | ||
# | #Este método se llama a sí mismo aproximadamente cada 1 segundo | ||
def repeatedly_call(self): | def repeatedly_call(self): | ||
now = datetime.datetime.now() | now = datetime.datetime.now() | ||
| Line 251: | Line 253: | ||
</pre> | </pre> | ||
=== ¿Cómo puedo actualizar la build que se ejecuta en mi XO? === | |||
Hay varias páginas que te dan instrucciones sobre cómo instalar / actualizar la build actual. | |||
* | * Si usted ya tiene una build instalada y una conexión a Internet, primero pruebe usar [[OLPC: OLPC-update]]. | ||
* | * Si eso no funciona, puedes mirar las instrucciones para una [[OLPC: Activated upgrade]] que se puede hacer a través de un USB] | ||
Como mencionan las instrucciones en las páginas más arriba, asegurate de instalar tus actividades por separado luego de que actualices a una build específica. | |||
=== Estoy desarrollando en una XO pero mi teclado y la configuración de idioma no son ideales. ¿Cómo puedo cambiarlos? === | |||
Las laptops intenacionalizadas tienen configuraciones que te pueden retrazar mientras estás desarrollando. Para cambiar las configuraciones de idioma usa el [[olpc:Sugar Control Panel]] | |||
Keyboard settings on internationalized laptops<ref>[[olpc:Keyboard layouts#OLPC keyboard layouts]]</ref> can also be suboptimal, especially as characters like "-" and "/" are in unfamiliar positions. You can use the <tt>setxkbmap</tt> command in the [[olpc:Terminal Activity]] to reset the type of keyboard input used and then attach a standard U.S. keyboard that will allow you to type normally. The command below sets the keyboard to the US mapping (it will reset to the default internationalized mapping upon restart). | Keyboard settings on internationalized laptops<ref>[[olpc:Keyboard layouts#OLPC keyboard layouts]]</ref> can also be suboptimal, especially as characters like "-" and "/" are in unfamiliar positions. You can use the <tt>setxkbmap</tt> command in the [[olpc:Terminal Activity]] to reset the type of keyboard input used and then attach a standard U.S. keyboard that will allow you to type normally. The command below sets the keyboard to the US mapping (it will reset to the default internationalized mapping upon restart). | ||
| Line 336: | Line 336: | ||
</pre> | </pre> | ||
=== | === ¿Qué paquetes están disponibles dentro de Sugar para el desarrollo de juegos? === | ||
Si tu actividad requiere herramientas para desarrollar juegos robustos y límpios deberías utilizar [http://www.pygame.org/ pygame]. Puedes importar el paquete para usarlo con cualqueir actividad de la siguiente forma: | |||
<pre> | <pre> | ||
| Line 411: | Line 411: | ||
</pre> | </pre> | ||
=== | === ¿Cómo elimino un botón específico de la barra de herramientas? === | ||
Aquí hay un ejemplo de como borrar el botón de compartir: | |||
<pre> | <pre> | ||
| Line 422: | Line 422: | ||
== Notes == | == Notes == | ||
[[Category:Documentation]] | [[Category:Documentation]] | ||
[[Category:Development Team]] | [[Category:Development Team]] | ||