Development Team/Almanac
How do I get additional help beyond this almanac?
- Looking to get started with the basics of sugar development? Check out Christoph Derndorfer's Activity Handbook.
- See also Sugar Code Snippets
Now, on to the actual almanac ...
Package: sugar
Package: sugar.activity
Package: sugar.datastore
Package: sugar.graphics
Package: sugar.presence
Clipboard
- Notes on using GTK's Clipboard Module in Sugar
Logging
- sugar.logger
- Notes on using Python Standard Logging in Sugar
Internationalization
Text and Graphics for Sugar Activities
MISCELLANEOUS
The tasks below are random useful techniques that have come up as I write code and documentation for this reference. They have yet to be categorized, but will be as a sufficient set of related entries are written.
How do I know when my activity is "active" or not?
You can set an event using the VISIBILITY_NOTIFY_MASK constant in order to know when your activity changes visibility. Then in the callback for this event, you simply compare the event's state to gtk-defined variables for activity visibility. See the GDK Visibility State Constants section of gtk.gdk.Constants for more information.
#Notify when the visibility state changes by calling self._visibleNotifyCb #(PUT THIS IN YOUR ACTIVITY CODE - EG. THE __init__() METHOD) self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK) self.connect("visibility-notify-event", self._visibleNotifyCb) ... #Callback method for when the activity's visibility changes def _visibleNotifyCb(self, widget, event): if (event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED): print "I am not visible" elif (event.state == gtk.gdk.VISIBILITY_UNOBSCURED): print "I am visible"
How do I get the amount of free space available on disk under the /home directory tree?
The following function uses the statvfs module. The following code demonstrates how to get the total amount of free space under /home.
#### Method: getFreespaceKb, returns the available freespace in kilobytes. def getFreespaceKb(self): stat = os.statvfs("/home") freebytes = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL] freekb = freebytes / 1024 return freekb
How do I know whether my activity is running on a physical XO?
While your activity is typically going to be run on a real XO, there might be circumstances (such as for development through sugar-jhbuild) that you will not be running on an XO machine. The easiest way to tell if you are on a physical XO is to check whether /sys/power/olpc-pm, an essential power management file for the XO, exists. [1] [2]
import os ... #Print out a boolean value that tells us whether we are on an XO or not. print os.path.exists('/sys/power/olpc-pm')
How do I know the current language setting on my XO?
The system variable 'LANG' tells you which language is currently active on the XO. The following code shows how to look at the value of this variable.
import os ... _logger.debug(os.environ['LANG'])
How do I repeatedly call a specific method after N number of seconds?
The gobject.timeout_add() function allows you to invoke a callback method after a certain amount of time. If you want to repeatedly call a method, simply keep invoking the gobject.timeout_add function in your callback itself. The code below is a simple example, where the callback function is named repeatedly_call. Note that the timing of the callbacks are approximate. To get the process going, you should make an initial call to repeatedly_call() somewhere in your code.
You can see a more substantive example of this pattern in use when we regularly update the time displayed on a pango layout object.
#This method calls itself ROUGHLY every 1 second def repeatedly_call(self): now = datetime.datetime.now() gobject.timeout_add(self.repeat_period_msec, self.repeatedly_update_time)
How do I update the current build version of code that is running on my XO?
There are several pages that give you instructions on how to install/update your current build.
- If you already have a working build installed and an internet connection, first try olpc-update.
- If that doesn't work, you can look at instructions for an upgrade that can be done via USB boot.
As the instructions on the pages linked above note, make sure to install your activities separately after you have upgraded to a specific base build.
I am developing on an XO laptop, but my keyboard and language settings are not ideal. How can I change them?
Internationalized laptops will often have settings that might slow you down while developing. To change around the language settings so you can better understand environment messages, use the sugar-control-panel.
Keyboard settings on internationalized laptops[3] can also be suboptimal, especially as characters like "-" and "/" are in unfamiliar positions. You can use the setxkbmap command in the 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).
[olpc@xo-05-29-80 ~] setxkbmap us