Difference between revisions of "Activity Team/FAQ"

From Sugar Labs
Jump to navigation Jump to search
 
(26 intermediate revisions by 9 users not shown)
Line 12: Line 12:
 
=== Activity Development questions ===
 
=== Activity Development questions ===
  
==== What Sugar Labs author resources should I be aware of? ====
+
==== How can I create a Sugar Activity? ====
  
:For new Activities:
+
:Documentation is available from [[Activity Team/Resources]].
::Create a Gitorious project repository at http://git.sugarlabs.org/ and start hacking on your code! :-)
 
::Request a trac component for your activity at http://dev.sugarlabs.org/
 
::Open a trac ticket to request addition to Pootle our translation system (if your strings are mature)
 
::Add your Activity to http://wiki.sugarlabs.org/go/Sugar_on_a_Stick/Roadmap if you want to be on the SoaS distro
 
:If your Activity is migrating over from the OLPC infrastructure:
 
::See [[Activity_Team/How_to_migrate_from_OLPC|How to migrate from OLPC]].
 
:When releasing an existing Activity:
 
::If you have one, update your wiki page at http://wiki.sugarlabs.org/go/Activities/<actvity-name>
 
::Upload your new .xo bundle, screenshots, notes to http://activities.sugarlabs.org/
 
::Upload .bz2 source to shell.sugarlabs.org /upload/sugar/sources/honey (e.g., scp to download.sugarlabs.org:/srv/upload/sources ...)
 
::Edit http://wiki.sugarlabs.org/go/Development_Team/Source_Code and make sure it's pointing to your latest .bz2
 
  
 
==== Where do I find information about implementing X in Sugar? ====
 
==== Where do I find information about implementing X in Sugar? ====
Line 40: Line 29:
  
 
==== How do I get my activity in the hands of students? ====
 
==== How do I get my activity in the hands of students? ====
:The absolute best way to get your activity out into the world is to attend an [OLPC:Deployment_meetings OLPC deployment meeting] and suggest it to the deployment representatives.  They can test your activity and offer feedback, and will ultimately decide whether it ships.
+
:The absolute best way to get your activity out into the world is to attend a deployment meeting and suggest it to the deployment representatives.  They can test your activity and offer feedback, and will ultimately decide whether it ships within their deployment.
  
:Another good way is to post and promote your activity on [http://activities.sugarlabs.org/ activities.sugarlabs.org].  This will get your activity into the hands of the G1G1 community and can be a stepping stone to getting included in the [[Sugar on a Stick]] distribution and in OLPC deployments.
+
:Another good way is to post and promote your activity on [http://activities.sugarlabs.org/ activities.sugarlabs.org].
  
==== Help! I suddenly can't push to Gitorious! ====
+
==== How do I adopt an orphaned Activity, or become an Activity co-maintainer ====
:The [http://osuosl.org/ OSUOSL] which hosts Gitorious has an aggressive IP blacklist policy. If you once were able to push but now cannot, send an email to support@osuosl.org requesting that your IP be removed from the blacklist.
+
:If you want to take on a maintainer-ship role for an Activity, try making contact and emailing the current maintainer first, they may be busy with other projects, or genuinely missing in action. If you get no response, ask the Activity Team on the [http://lists.sugarlabs.org/listinfo/sugar-devel Sugar developers mail list], they will try to make a decision within seven days and make contact the Infrastructure Team to change ownership for resources like the [http://bugs.sugarlabs.org bug tracker], [http://git.sugarlabs.org git repository], [http://activities.sugarlabs.org ASLO].
  
 
==== Is there a Commits mailing list? ====
 
==== Is there a Commits mailing list? ====
:Instead of a commits list, we use the RSS feed at http://git.sugarlabs.org/events.atom.  This tracks the activity (commits, branches, comments, merge requests) of all projects hosted on Gitorious.
+
:No.
  
 
==== How do I get a trac component associated with my project? ====
 
==== How do I get a trac component associated with my project? ====
 
:File a [http://bugs.sugarlabs.org ticket] with the request. Please assign the ticket to the trac component, mark it as a task and don't forget to mention the name of your project and the default owner for the tickets.
 
:File a [http://bugs.sugarlabs.org ticket] with the request. Please assign the ticket to the trac component, mark it as a task and don't forget to mention the name of your project and the default owner for the tickets.
 +
 +
:Or use GitHub issues feature.
  
 
==== How do I analyze my activity's memory usage? ====
 
==== How do I analyze my activity's memory usage? ====
 
:Please refer to these pages for assistance in understanding the memory usage patterns of activities and the shell and for detecting leaks: http://wiki.laptop.org/go/MemoryUsageAnalysis and http://wiki.laptop.org/go/Memory_leak_testing
 
:Please refer to these pages for assistance in understanding the memory usage patterns of activities and the shell and for detecting leaks: http://wiki.laptop.org/go/MemoryUsageAnalysis and http://wiki.laptop.org/go/Memory_leak_testing
  
==== How does one package an activity? ====
+
==== How does one bundle an activity? ====
 
:Save the [http://git.sugarlabs.org/projects/hello-world/repos/mainline/blobs/master/setup.py setup.py] file in the top directory of your activity development tree. To make an activity bundle, run the following code:
 
:Save the [http://git.sugarlabs.org/projects/hello-world/repos/mainline/blobs/master/setup.py setup.py] file in the top directory of your activity development tree. To make an activity bundle, run the following code:
:<code>python setup.py dist_xo</code>
+
:{{Code|python setup.py dist_xo}}
 
:An output bundle will be saved in the ''dist/'' subdirectory. See also [[Development Team/Almanac/Activity Bundles|Activity bundles specification]].
 
:An output bundle will be saved in the ''dist/'' subdirectory. See also [[Development Team/Almanac/Activity Bundles|Activity bundles specification]].
  
Line 64: Line 55:
  
 
:You can go into the Sugar Control Panel; it is listed on the about-computer panel (which accesses jarabe.config.version).  
 
:You can go into the Sugar Control Panel; it is listed on the about-computer panel (which accesses jarabe.config.version).  
 
+
<ol style="list-style-type:none">
From the Terminal, you can type:
+
<li>From the Terminal, you can type:
rpm -q sugar
+
<pre>
or you can:
+
rpm -q sugar
grep version jarabe/config.py
+
</pre></li>
or:
+
<li>or you can:</li>
python -c "from jarabe import config; print config.version"
+
<li>
 +
<pre>
 +
grep version jarabe/config.py
 +
</pre></li>
 +
<li>or:</li>
 +
<li>
 +
<pre>
 +
python -c "from jarabe import config; print config.version"
 +
</pre></li>
 +
</ol>
  
 
==== How do I know if my activity is running on an OLPC XO laptop? ====
 
==== How do I know if my activity is running on an OLPC XO laptop? ====
  
 
:You can test for the existence of '/etc/olpc-release':
 
:You can test for the existence of '/etc/olpc-release':
 +
<ol style="list-style-type:none">
 +
<li>
 +
<pre>
 +
if os.path.exists('/etc/olpc-release'):
 +
    ...
 +
</pre></li>
 +
</ol>
  
if os.path.exists('/etc/olpc-release'):
+
:Or, check the in /sys/class/dmi/id for the 'product_name' and 'product_version':
    ...
+
<ol style="list-style-type:none">
 +
<li>
 +
<pre>
 +
def get_hardware():
 +
    """ Determine whether we are using XO-1, XO-1.5, or "unknown" hardware """
 +
    if _get_dmi('product_name') != 'XO':
 +
        return 'unknown'
 +
    version = _get_dmi('product_version')
 +
    if version == '1':
 +
        return 'XO1'
 +
    elif version == '1.5':
 +
        return 'XO1.5'
 +
    else:
 +
        return 'unknown'
 +
 
 +
 
 +
def _get_dmi(node):
 +
    path = os.path.join('/sys/class/dmi/id', node)
 +
    try:
 +
        return open(path).readline().strip()
 +
    except:
 +
        return None
 +
</pre></li>
 +
</ol>
 +
 
 +
:Some activities have a hw.py file that explains further and supports later models.
  
 
==== How do I tell Sugar that my activity does not write any data to the Journal? ====
 
==== How do I tell Sugar that my activity does not write any data to the Journal? ====
  
One of my activities is a game that does not produce any document in the journal. How do I inform Sugar?
+
:One of my activities is a game that does not produce any document in the journal. How do I inform Sugar?
 +
 
 +
:You cannot do this; there was a way to do it, but it was removed.
 +
 
 +
==== How do I run Sugar in a way that matches the proportions of the OLPC XO? ====
 +
 
 +
:Running the emulator with {{Code|sugar-runner --resolution 832x624}} or, on older versions, {{Code|sugar-emulator -i 832x624}} will give a close match to the XO screen proportions, i.e., the toolbar will be a close match.
 +
 
 +
==== How do I use debugging output and how do I set the debug level? ====
 +
 
 +
You need to import logging:
 +
import logging
 +
_logger = logging.getLogger('your-activity-name')
 +
 
 +
and then insert logging statements in your code:
 +
_logger.debug('some debugging output')
 +
_logger.error('some error output')
 +
 
 +
See http://docs.python.org/library/logging.html for more details.
 +
 
 +
To set the level of the debugging output that appears in your log file, edit:
 +
 
 +
~/.sugar/debug
 +
 
 +
Typically, you will want to uncomment this line:
 +
 
 +
#export SUGAR_LOGGER_LEVEL=debug
 +
 
 +
by removing the leading #
 +
 
 +
export SUGAR_LOGGER_LEVEL=debug
 +
 
 +
==== How do I use the Gtk+ Inspector? ====
 +
 
 +
For Gtk+ 3.0 activities, an interactive inspector is available.
 +
 
 +
On Debian or Ubuntu distributions, install the libgtk-3-dev package;
 +
 
 +
sudo apt install libgtk-3-dev
 +
 
 +
Set the GTK_DEBUG environment variable to ''interactive'' before running an activity, like this;
 +
 
 +
cd Activities/HelloWorld.activity
 +
GTK_DEBUG=interactive sugar-activity .
 +
 
 +
Or, request the feature from your activity, like this;
 +
 
 +
self.canvas.get_toplevel().set_interactive_debugging(True)
  
Pass to Activity.__init__ create_jobject=False e.g.
+
Because Sugar Gtk+ activities are full screen, use Alt+Tab or Alt+Shift+Tab to switch between the inspector and the activity.
  
class MyActivity(activity.Activity):
+
It can help with debugging to set the ''name'' property of widgets using program-specific names, so that the widget tree shown by the inspector can be related to the widget tree in the source code.
    def __init__(self, handle):
 
        activity.Activity.__init__(self, handle, create_jobject=False)
 
  
(But keep in mind http://bugs.sugarlabs.org/ticket/1714)
+
See also
 +
* https://developer.gnome.org/gtk3/stable/gtk-running.html
 +
* https://wiki.gnome.org/Projects/GTK+/Inspector

Latest revision as of 21:11, 16 January 2018

Team Home   ·   Join   ·   Contacts   ·   Resources   ·   FAQ   ·   Roadmap   ·   To Do   ·   Meetings

Post questions here for the Activity Team.

About the Activity Team

Who is on the Activity Team?

See Activity Team/Contacts for a list of team members.

How can I get in contact with you?

Feel free to write messages on our talk pages, or just drop in on one of our meetings.

Activity Development questions

How can I create a Sugar Activity?

Documentation is available from Activity Team/Resources.

Where do I find information about implementing X in Sugar?

Check Activity Team/Resources for a comprehensive list of developer documentation, tutorials and support channels.

How do I get my activity to install an external dependency?

You don't! Activity bundles are supposed to be self-contained, and not depend on anything else other than the standard Sugar platform. If you need additional dependancies, you will need to include them within your activity bundle. If your additional dependancies are binary, please be aware Sugar can be run on different machine architectures.

I have a question about Git, or Gitorious.

See Activity Team/Git FAQ for a specific FAQ about Git and Gitorious.

How do I upload my new activity to the Activities Library?

The best guide is Activity Team/How_to_migrate_from_OLPC, since that's where activities are coming from. As the infrastructure stabilizes and we get more new activities, we will post a new page.

How do I get my activity in the hands of students?

The absolute best way to get your activity out into the world is to attend a deployment meeting and suggest it to the deployment representatives. They can test your activity and offer feedback, and will ultimately decide whether it ships within their deployment.
Another good way is to post and promote your activity on activities.sugarlabs.org.

How do I adopt an orphaned Activity, or become an Activity co-maintainer

If you want to take on a maintainer-ship role for an Activity, try making contact and emailing the current maintainer first, they may be busy with other projects, or genuinely missing in action. If you get no response, ask the Activity Team on the Sugar developers mail list, they will try to make a decision within seven days and make contact the Infrastructure Team to change ownership for resources like the bug tracker, git repository, ASLO.

Is there a Commits mailing list?

No.

How do I get a trac component associated with my project?

File a ticket with the request. Please assign the ticket to the trac component, mark it as a task and don't forget to mention the name of your project and the default owner for the tickets.
Or use GitHub issues feature.

How do I analyze my activity's memory usage?

Please refer to these pages for assistance in understanding the memory usage patterns of activities and the shell and for detecting leaks: http://wiki.laptop.org/go/MemoryUsageAnalysis and http://wiki.laptop.org/go/Memory_leak_testing

How does one bundle an activity?

Save the setup.py file in the top directory of your activity development tree. To make an activity bundle, run the following code:
python setup.py dist_xo
An output bundle will be saved in the dist/ subdirectory. See also Activity bundles specification.

How can I find out what version of Sugar I am running?

You can go into the Sugar Control Panel; it is listed on the about-computer panel (which accesses jarabe.config.version).
  1. From the Terminal, you can type:
    rpm -q sugar
    
  2. or you can:
  3. grep version jarabe/config.py
    
  4. or:
  5. python -c "from jarabe import config; print config.version"
    

How do I know if my activity is running on an OLPC XO laptop?

You can test for the existence of '/etc/olpc-release':
  1. if os.path.exists('/etc/olpc-release'):
         ...
    
Or, check the in /sys/class/dmi/id for the 'product_name' and 'product_version':
  1. def get_hardware():
        """ Determine whether we are using XO-1, XO-1.5, or "unknown" hardware """
        if _get_dmi('product_name') != 'XO':
            return 'unknown'
        version = _get_dmi('product_version')
        if version == '1':
            return 'XO1'
        elif version == '1.5':
            return 'XO1.5'
        else:
            return 'unknown'
    
    
    def _get_dmi(node):
        path = os.path.join('/sys/class/dmi/id', node)
        try:
            return open(path).readline().strip()
        except:
            return None
    
Some activities have a hw.py file that explains further and supports later models.

How do I tell Sugar that my activity does not write any data to the Journal?

One of my activities is a game that does not produce any document in the journal. How do I inform Sugar?
You cannot do this; there was a way to do it, but it was removed.

How do I run Sugar in a way that matches the proportions of the OLPC XO?

Running the emulator with sugar-runner --resolution 832x624 or, on older versions, sugar-emulator -i 832x624 will give a close match to the XO screen proportions, i.e., the toolbar will be a close match.

How do I use debugging output and how do I set the debug level?

You need to import logging:

import logging
_logger = logging.getLogger('your-activity-name')

and then insert logging statements in your code:

_logger.debug('some debugging output')
_logger.error('some error output')

See http://docs.python.org/library/logging.html for more details.

To set the level of the debugging output that appears in your log file, edit:

~/.sugar/debug

Typically, you will want to uncomment this line:

#export SUGAR_LOGGER_LEVEL=debug

by removing the leading #

export SUGAR_LOGGER_LEVEL=debug

How do I use the Gtk+ Inspector?

For Gtk+ 3.0 activities, an interactive inspector is available.

On Debian or Ubuntu distributions, install the libgtk-3-dev package;

sudo apt install libgtk-3-dev

Set the GTK_DEBUG environment variable to interactive before running an activity, like this;

cd Activities/HelloWorld.activity
GTK_DEBUG=interactive sugar-activity .

Or, request the feature from your activity, like this;

self.canvas.get_toplevel().set_interactive_debugging(True)

Because Sugar Gtk+ activities are full screen, use Alt+Tab or Alt+Shift+Tab to switch between the inspector and the activity.

It can help with debugging to set the name property of widgets using program-specific names, so that the widget tree shown by the inspector can be related to the widget tree in the source code.

See also