OLPC笔记本电脑的应用程序开发

在你开始前

本教程描述了使用QEMU对每台笔记本电脑一个孩子(OLPC)XO笔记本计算机的仿真。 这意味着您将在PC上(运行Linux®或Microsoft®Windows®操作系统)模拟完整的XO笔记本电脑,以开发Python 活动(即基于OLPC Sugar接口的程序)在Python编程语言上。 与现有的大多数出色设备一样,XO笔记本电脑的核心是Linux操作系统。

关于本教程

本教程显示了如何为XO笔记本电脑开发Python活动。 从这个角度,您将了解Sugar(XO用户界面或UI)以及活动开发背后的详细信息。 您还将了解Python编程,用于Python的Sugar应用程序接口(API)以及使用QEMU进行平台仿真。

目标

在本教程中,您将了解XO便携式计算机以及如何使用Sugar UI编写Python活动。 在此过程中,您将了解有关XO笔记本电脑,其架构,内部结构和使用的更多信息。

先决条件

本教程是为希望了解有关XO笔记本电脑和Sugar UI的Linux开发人员编写的。 它假定您熟悉Linux外壳并基本了解Python语言。

系统要求

本教程提供了动手学习XO笔记本电脑和Sugar活动的方法。 假定Linux计算机具有至少1.1GB的可用空间。

OLPC和XO笔记本电脑

对于XO便携式计算机和OLPC的新手,本节简要概述。

那是什么

XO-1是一台便携式计算机,旨在廉价地制造并分发给全球发展中国家的儿童。 这款笔记本电脑的目标是为原本不具备此功能的孩子们带来技术和信息访问。 笔记本电脑包括无线网络,使孩子们可以在项目上相互本地协作。

笔记本电脑最初是由麻省理工学院(MIT)媒体实验室的教师在非营利组织“每个孩子一个笔记本电脑”下提出的。 该组织包括尼古拉斯·尼葛洛庞帝(Nicholas Negroponte)等知名人物,以及早期的Seymour Papert(人工智能领域的先驱),他们的想法和研究对该项目至关重要。

该项目并非没有受到批评。 作为一种技术,笔记本电脑是新颖的,但有人想知道在某些发展中国家花在笔记本电脑上的钱是否会在其他地方花费更好。 例如,XO-1的某些目标国家缺少教育的基本要素(例如学校或图书馆)。 请参阅相关主题的更多细节。

XO-1笔记本电脑

XO-1笔记本电脑的设计很有趣,因为它包含两个相互竞争的要求。 首先,XO-1笔记本电脑必须便宜(售价140美元),而且功能也很丰富。 该设计包括一个433MHz的AMD Geode处理器,128MB的RAM,1GB的NAND闪存(而不是硬盘),一个7 1/2英寸的双模LCD,无线网络甚至一台摄像机。 笔记本电脑还设计为可在非传统环境中使用,因此非常耐用且坚固(参见图1)。

图1. XO-1笔记本电脑
XO-1笔记本电脑

无线网络基于802.11b / g和802.11s芯片,该芯片支持标准网络和网状网络。 这使笔记本电脑可以在对等网络中相互之间自主路由数据包(无需单独的路由器)。 即使CPU断电,网状网络也可以工作。

软件

尽管XO-1便携式计算机背后的想法很有趣,并且其物理和硬件设计使其新颖,但最有趣的是软件。 XO-1便携式计算机由GNU / Linux(基于Fedora项目的最低版本)提供支持。 基本输入/输出系统(BIOS)是开放固件,它是用Forth的变体编写的。 名为Sugar的图形用户界面(GUI)基于X窗口系统并用Python编写。 到目前为止,这是最有趣的元素,因为它使XO-1成为直接的开发环境。 (Python是一种解释性语言。)不需要编译器,任何人都可以开发Sugar 活动 (即Sugar GUI中的应用程序)。 换句话说,XO-1便携式计算机上的所有软件都是开源的,因此是免费且可修改的。

Python的这种用法很有趣,因为作为XO-1笔记本电脑的核心,它将Python暴露给全世界数以百万计的孩子。 Python是作为一种学习编程的语言而创建的,因此这是一个理想的决定,并且有可能创建新的Python爱好者群体。

XO笔记本电脑仿真

本节提供有关下载和安装QEMU平台仿真器和XO-1便携式计算机映像的说明。

QEMU介绍

QEMU是一个平台虚拟化应用程序,它允许您模拟整个计算机(处理器和关联的外围设备),以虚拟化其上的另一个操作系统。 这样,您可以在Windows上模拟Linux,在Linux上模拟Windows或在运行QEMU的另一个操作系统上模拟任何其他操作系统。 您甚至可以针对与主机不同的体系结构仿真操作系统。 例如,您可以在x86主机上模拟Arm Linux系统。

系统仿真由平台仿真器(QEMU),可选的加速器(KQEMU)和包含内核和根文件系统的根映像(主机操作系统中的文件)组成。 有关QEMU及其内部操作的更多详细信息,请参阅参考资料

下载并安装QEMU

安装QEMU和加速器就像使用GNU / Linux一样简单。 清单1提供了QEMU的下载,构建和安装说明。

清单1.下载,构建和安装QEMU
$ wget http://fabrice.bellard.free.fr/qemu/qemu-0.9.0.tar.gz
$ tar xfvz qemu-0.9.0.tar.gz
$ cd qemu-0.9.0
$ ./configure
$ make
$ make install
$

QEMU加速器是可选步骤,但我建议使用它,因为它可以提高性能。 清单2提供了QEMU加速器的下载,构建和安装说明。

清单2.下载,构建和安装QEMU加速器
$ wget http://fabrice.bellard.free.fr/qemu/kqemu-1.3.0pre11.tar.gz
$ tar xvfz kqemu-1.3.0pre11.tar.gz
$ cd kqemu-1.3.0pre11
$ ./configure
$ make
$ make install
$ insmod kqemu.ko

注意:在清单2的末尾,安装了QEMU加速器内核模块。

获取XO内核和文件系统映像

准备工作的最后一步是下载并准备用于XO-1笔记本电脑的QEMU映像。 清单3显示了如何检索此图像并在使用之前提取它。 图像很大(183MB),因此下载时间可能很长。 另外,下载的图像会扩展到近1GB,因此请确保您有足够的可用空间。

清单3.下载并提取OLPC映像
$ wget http://olpc.download.redhat.com/olpc/streams/development/LATEST-STABLE-BUILD/
  devel_ext3/olpc-redhat-stream-development-devel_ext3.img.bz2
$ bunzip2 olpc-redhat-stream-development-devel_ext3.img.bz2

启动XO-1笔记本电脑

下载并提取OLPC映像后,就可以进行测试了。 使用两个选项启动QEMU,这两个选项指定可用的内存量(256MB)和用于仿真的硬盘( 上面下载的图像):

$ qemu -m 256 -hda olpc-redhat-stream-development-devel_ext3.img

然后,您应该可以从GNU GRUB(GRand Unified Boot loader)看到标准的Linux引导。 最后是启动窗口,该窗口要求您提供用户名(请参见图2)。 提供名称后,可以选择更改配色方案。 最后,您将获得XO-1笔记本电脑的主屏幕,将在下一部分中进行探讨。

图2. XO-1笔记本电脑的首次登录
XO-1的首次登录。

如果要退出QEMU并将鼠标上下文返回到主机操作系统,请按Ctrl-Alt。 要返回到XO-1,请在Sugar框内单击,鼠标上下文将返回QEMU。

导航糖

现在您已登录并准备开始,请浏览OLPC Sugar UI。

家庭模式和相框

Sugar中的主窗口称为Home模式 (见图3)。 该窗口基本上是桌面,用于告诉您有关环境,活动等的信息。 窗口中心是XO图标,它代表您和您的笔记本电脑。 如果您可以无线看到其他用户,您也会看到它们。 要关闭笔记本电脑,请将鼠标光标放在X图标上,然后单击关闭选项。

图3. XO-1笔记本电脑的家庭模式
XO-1笔记本电脑的家庭模式

笔记本电脑周围的环向您显示当前正在运行的活动。 您可以单击此处的任何图标以返回正在运行的活动。 要返回到Home模式,请将鼠标移到窗口的一角。 这样做会使框架返回查看。 请注意,框架左上方的四个圆圈的“缩放”图标:最后一个代表最近访问的活动。 单击此图标可将您带回到该活动(占据整个窗口)。 倒数第二个图标(中间带有一个点的图标)表示“主页”窗口。 单击此图标可将您带回到“家庭”模式。 下一个图标(带有三个点的图标)向您显示组,它们是本地朋友及其正在运行的活动。 最后,第一个图标(带有许多点的图标)代表整个社区。 此图标显示所有用户及其共享的活动。

开始活动

框架的底部是您可以运行的活动的集合。 活动是应用程序; 如图3所示,XO-1笔记本电脑支持多种活动。 Sugar配备了Web浏览器,计算器,绘画程序,新闻阅读器和其他程序,您可以与其他用户共享这些程序以在项目上进行协作。 要启动活动,请单击框架下部的该活动的图标。 在图4中,我开始了Write活动并添加了一些文本。

图4. Sugar中的一个正在运行的活动
糖上的跑步活动

控制键

使用鼠标导航非常简单,但是Sugar允许使用控制键在应用程序和模式之间进行更快的转换。 表1列出了几个重要的控制序列,您可以使用它们轻松地在模式之间进行切换。

表1.在模式之间切换的控制序列
控制键 行动
F1 切换到邻居视图
F2 切换至群组检视
F3 切换到家庭模式
F4 切换到上一个活动

开发者控制台

由于Sugar是基于Linux操作系统构建的,因此开发工作需要访问shell。 您可以通过按Alt- =来访问外壳程序,这将显示一个登录提示。 在这里,键入root以调用友好的Bash提示符。 您还可以通过开发人员控制台访问外壳,如图5所示。该控制台包括五个选项卡,用于访问资源面板,日志查看器,状态面板(用于无线连接的XO-1便携式计算机)和终端(Bash外壳) ), 分别。

图5.开发者控制台
开发者控制台

每当您想返回Sugar时,请按Ctrl-Alt-F3组合键 。 该外壳保持活动状态,因此您可以方便地在Sugar和Bash之间来回切换。

其他快捷方式包括Alt-F,用于打开和关闭框架(即窗口周围的边框)。 您可以通过按Alt-C退出当前活动,并通过按Ctrl-Alt-Backspace终止Sugar GUI。

扩展XO笔记本电脑

为XO-1便携式计算机下载文件系统映像意味着您可以将内核和根文件系统结合在一起。 文件系统包含所有必要的应用程序和OLPC组件,以为XO-1便携式计算机供电。 但这并不意味着您不能扩展该软件。 文件系统中的一个常驻软件包YUM (黄狗已更新,已修改)是一种软件包管理系统,它可以简化软件包的下载,安装和配置。

使用YUM,您可以下载和安装新软件包,以及更新系统上的所有现有软件包。 例如,清单4显示了如何更新自上次更新以来已更改的软件包。

清单4.使用YUM安装新更新
-bash-3.2# yum -y update
Loading "installonlyn" plugin
Setting up Update Process
olpc_development          100% |==========================| 1.1 kB    00:00
primary.xml.gz            100% |==========================| 2.9 MB    00:17
olpc_devel: ################################################### 11448/11448
olpc_devel_kernel_repo    100% |==========================|  951 B    00:00
olpc_devel: ################################################### 23/23
No Packages marked for Update/Obsoletion
-bash-3.2#

使用Python

本节简要介绍Python编程。 如果您已经熟悉Python,则可以跳过本节,并查阅Sugar API

什么是Python?

选择Python作为XO-1笔记本电脑的核心也就不足为奇了。 最重要的是,Python是一种开放源代码语言,这意味着您可以查看源代码,对其进行修改和改进。 Python是一种非常简洁的语言,非常简单,并且包含一个大型的API库,以简化对复杂应用程序进行编程的任务。

Python还是一种解释型语言,这意味着无需编写步骤即可很容易地对活动进行原型制作。 您可以编译Python以提高速度,也可以使用以较低级语言编程的库来提高性能。

尽管Python最初是作为一种新语言开发的,可以帮助用户学习编程(当今的BASIC),但是它的简单性和强大功能受到了初学者和高级开发人员的赞赏。

Python(简短)示例

清单5提供了一个简单的Python程序,介绍了该语言及其用法。 Python程序首先打开一个文件(程序本身的名称)进行读取。 此打开文件的句柄存储在infile变量中(其类型取决于分配的类型)。 接下来,使用迭代器开始一个简单的for循环。 (请注意,使用了in关键字,它创建了一个迭代器。)此for循环只是说:“对于文件中的每一行,执行。”

循环的内部显示为缩进(这是Python建立块的方式)。 此for循环的块是发出刚刚读取的行。 print语句发出显示的信息,后跟逗号(,)表示您不希望在末尾发出\ n字符(因为它已包含在行字符串中)。

清单5.文件输入和迭代
infile = file('pythprog.py', 'r')
for line in infile:
        print 'Read: ', line,

迭代器是Python的重要组成部分,也是该语言如此简单易读的主要原因之一。

Python编程范例

除了简单之外,Python作为一种多范式语言还支持各种样式的应用程序开发。 以下是一些示例,可帮助您探索“ 多范式”的含义。

命令式编程

Python支持命令式编程,该命令式编程侧重于要执行的语句序列。 清单6中显示了一个命令式程序。在此示例中,您将创建一个函数(使用def或define语句)。 之后,您可以使用filename参数调用此新函数。

清单6.一个简单的命令式程序
def print_file(filename):
        infile = file(filename, 'r')
        for line in infile:
                print 'Read: ', line,

print_file("pythprog.py")
面向对象编程

您还可以在面向对象的范例中进行编程,该范例着重于在类的实例中对数据进行操作的类和方法。 如清单7所示,该类包含两个方法。 第一个方法是__init__() ,它是该类的构造函数。 第二种方法是执行文件打印的方法。 在定义该类后,将显示该类的使用和方法的调用。

清单7.一个简单的面向对象程序
class PrintFile():

        def __init__(self, filename):
                self.filename = filename

        def printit(self):
                infile = file(self.filename, 'r')
                for line in infile:
                        print 'Read: ', line,

myPF = PrintFile("pythprog.py")
myPF.printit()
函数式程序设计和混合范例程序设计

Python还支持函数式编程和混合范式编程,例如,它们使您可以在面向对象的应用程序中使用函数式语言概念。

Sugar接口

本节向您介绍Sugar的体系结构以及在Sugar中构建图形活动所必需的元素。

糖架构

Sugar是核心库和小部件的集合,这些核心库和小部件实现了GUI及其用于活动开发的接口。 图6显示了Sugar体系结构的局部视图。

图6. Sugar体系结构的局部视图
Sugar体系结构的局部视图

从图6可以看到,该体系结构包含以下元素:

  • Activity类:(针对活动的)基础是Activity类。 (该类将在下一节“ 新活动的结构”中详细讨论)。 此类是Sugar中活动的基本接口。
  • 剪贴板:剪贴板提供了剪贴板服务的接口(dbus上的简化API),用于从剪贴板添加,检索或删除对象。
  • 记录器:记录器模块为您的活动提供一个界面,用于发出日志(文本)信息以及设置过滤选项。
  • 数据存储:数据存储包允许您的活动以简单方便的方式存储和检索信息,以用于当前执行活动。
  • Env: Module env为Sugar环境提供了文件路径功能的集合。
  • 图形:图形包为图形及其控件提供了各种类。
  • 状态:状态包提供了与其他笔记本电脑进行活动协作的方式。 它扩展了用于本地网络状态和信息共享的多种服务。
  • Profile类:最后, profile类提供了一种存储用户特定的选项和设置的方法。

活动课

Activity类是所有用户开发的活动( GtkWindows的子类)的基类,并且是您的活动挂接到Sugar的方式。 Activity类为Sugar提供了一种在鼠标事件请求时启动您的活动的方法。

除了提供一种从Sugar桌面调用活动的方法之外,活动类还提供了其他一些有用的功能。 例如,活动可以请求共享,使其可用于与网络上的其他用户进行协作。 共享方法标识活动是公开可见还是仅应邀请共享。 Activity实际上从其他类(例如Window ContainerWidgetObjectGInterface继承了数百种方法。

PyGTK

Sugar UI基于Python GIMP工具包(PyGTK)。 GTK是一种多平台API,其中包括用于开发图形应用程序的一整套库。

PyGTK是GTK +工具箱的Python接口,基于三个库:

  • GLib: GLib是低级库,是GTK +的核心。 它提供了用于运行时功能的接口(例如线程,动态加载和对象系统)。
  • Pango: Pango库包含用于文本布局和渲染的API。
  • ATK: ATK库定义了一组用于可访问性的接口(包括诸如放大镜,屏幕阅读器之类的工具,以及对替代输入设备的支持)。

在下一节中,您将使用PyGTK,事件和回调来开发简单的图形活动。

新活动的结构

在本部分中,您将开发一个新活动并探索与Sugar集成的过程。

基本架构

开发Sugar活动(基于PyGTK)所需要的范例与您惯常的范例稍有不同。 PyGTK是一个事件驱动的工具包,这意味着您安装了感兴趣事件的回调,然后将控件释放给Sugar。

诸如鼠标移动,按钮按下,窗口焦点丢失或获得焦点或单击鼠标按钮之类的事件都在窗口内发生。 当这些事件发生时,它们影响的“小部件”发出一个信号。 例如,鼠标单击可能发生在窗口内,或者单击可能是在按钮上执行的。 与这两个事件关联的窗口小部件不同,并且它们可能导致不同的动作。 因此,每个小部件都可以为其所支持的各种事件支持自己的一组回调。

对于要为其提供某种反馈的每个小部件,创建一个回调函数,然后将该回调与该小部件的事件相关联。 此过程构成了图形活动中控制的基础。

在本活动中,您将绘制一个彩色矩形,然后在用户按下鼠标左键的窗口中的每个点绘制一个较小的彩色矩形。

__init__方法

让我们开始讨论活动的构造函数(除了基本的类定义之外)。 清单8提供了类和__init__ method() 。 (我很快会介绍这些回调。)首先,您必须导入在此活动中使用的模块。 接下来,声明您的类,该类将Activity类用作其基类。 回想一下, Activity类是您连接到Sugar基础结构的钩子。

清单8.类和__init__构造函数方法(ExampleActivity.py)。
import pygtk
pygtk.require('2.0')
import gtk, sys, random, time
	
from sugar.activity import activity

class ExampleActivity(activity.Activity):

	def __init__(self, handle):
		activity.Activity.__init__(self, handle)
		
		self.set_title("Simple Graphical Activity")
		
		# Show the toolbox elements
		toolbox = activity.ActivityToolbox(self)
		self.set_toolbox(toolbox)
		toolbox.show()
		
		# Register the event callbacks
		self.connect("expose_event", self.area_expose_cb)
		self.connect("key_press_event", self.keypress_cb)
		self.connect("button_press_event", self.button_press_cb)
		self.show()
		
		# Seed the random number generator
		random.seed(time.time())
		
		self.area = self.window
		self.gc = self.area.new_gc()
		
		# Allocate a color dictionary
		self.colors = {}
		self.colormap = self.gc.get_colormap()
		self.colors[0] = self.colormap.alloc_color('green')
		self.colors[1] = self.colormap.alloc_color('blue')
		self.colors[2] = self.colormap.alloc_color('black')
		self.colors[3] = self.colormap.alloc_color('red')

		# Register for events
		self.area.set_events(
			gtk.gdk.EXPOSURE_MASK      |
			gtk.gdk.KEY_PRESS_MASK     |
			gtk.gdk.LEAVE_NOTIFY_MASK  |
			gtk.gdk.BUTTON_PRESS_MASK )

__init__()方法是构造函数,并在为此类创建一个实例时调用(即,当Sugar用户单击其图标时)。 首先从调用活动构造函数开始(允许它进行初始化)。 接下来,您提供一个简单的标题。 将创建一个工具箱,活动开始后,该工具箱将显示在窗口顶部。 该工具箱提供了退出按钮和其他工具。

接下来,注册您感兴趣的事件的回调。另一种考虑方式是,您正在为感兴趣的信号(类似于X)创建信号处理程序。 如图所示, connect()方法将特定事件绑定到回调。 可能由于多种原因(例如,窗口被暴露)而发生expose_event ,但是结果应该是重新绘制窗口。 key_press_event表示窗口处于焦点状态时按下了键盘上的某个键。 最后, button_press_event指示在窗口中按下了鼠标按钮。 每个事件都与自己的回调关联。

注意,通过调用random模块的seed()方法,可以看到随机数生成器。 您将窗口保存在名为area的实例变量中,然后通过调用new_gc()创建新的图形上下文。

下一步是创建一个颜色字典( colors )。 字典是Python中的哈希,它允许您创建一个数组以将值与其他值相关联。 您可以在此处将其用作数组,但是索引也可以是另一种类型。

最后,通过调用set_events()启用事件的接收。 此方法表示一个位掩码,并告诉PyGTK在您的上下文中发生这些信号时发送这些信号。

事件回调

清单9显示了回调(以及在窗口中绘制的方法)。

清单9.事件回调和draw_box方法(ExampleActivity.py第2部分)
def draw_box(self, x, y):
		self.gc.set_foreground( self.colors[random.randint(1,3)] )
		self.area.draw_rectangle(self.gc, True, x, y, 50, 50)

	def area_expose_cb(self, area, event):
		self.gc_set_foreground(self.colors[0])
		self.area.draw_rectangle(self.gc, True, 200, 200, 400, 400)

		return True

	def keypress_cb(self, widget, event):
		sys.exit()

	def button_press_cb(self, widget, event):
		if event.button == 1:
			self.draw_box(event.x, event.y)

		return True

第一个回调draw_box用于绘制一个新框(根据用户请求)。 该方法采用self (代表此类的实例),然后绘制xy位置。 用字典中的随机颜色设置前景色(使用字典的键作为随机索引)。 draw_rectangle()方法用于绘制填充的矩形,提供图形上下文,位置和大小。

area_expose_cb回调用于重绘窗口。 如果暴露了窗口(例如,焦点返回到窗口),则会发生此回调。 设置前景色(使用颜色词典的第一个索引,因此使用绿色),然后绘制一个大矩形。

在当前窗口中按下某个键时,将调用keypress_cb回调。 对于此事件,只需退出活动。

最后,当在窗口中按下鼠标按钮时,将button_press_cb回调。 回调检查是否已按下左按钮; 如果是这样,它将调用draw_box()方法在窗口中光标的当前位置绘制一个新框。

安装新活动

本节探讨如何将Sugar活动集成到桌面中。 它将您在上一节中开发的简单图形活动集成到Sugar中,以从本地模式执行。

进入外壳

第一步是进入Linux shell,这可以通过按Alt-Ctrl-F1从家庭模式轻松完成。 以root身份登录,不需要密码。 从这里更改为olpc用户,如清单10所示。

清单10.进入用户olpc的shell
-bash-3.2# su - olpc
[olpc@xo-12-34-56 ~]$ pwd
/home/olpc
[olpc@xo-12-34-56 ~]$

此时,您位于/ home / olpc目录中,该目录就在您想要的位置。 在此处创建一个新目录(将其命名为ExampleActivity ),并将目录更改为该目录:

[olpc@xo-12-34-56 ~]$ mkdir ExampleActivity
[olpc@xo-12-34-56 ~]$ cd ExampleActivity
[olpc@xo-12-34-56 ExampleActivity]$

活动目录

在此目录(/ home / olpc / ExampleActivity)中,放置(即键入)名为ExampleActivity.py的源文件(清单8和清单9的串联)。 您还将希望清单11中所示的文件在同一目录中。 这是Sugar的特殊文件,其中捆绑了活动以供使用。

清单11. setup.py
#!/usr/bin/env python
from sugar.activity import bundlebuilder
if __name__ == "__main__":
	bundlebuilder.start("ExampleActivity")

创建此文件后,请确保它是可执行文件。 为此,请键入:

[olpc@xo-12-34-56 ExampleActivity]$ chmod +x setup.py
[olpc@xo-12-34-56 ExampleActivity]$

创建支持文件

仅需要几个支持文件,您就完成了。 在ExampleActivity子目录中,创建一个名为activity的新目录,然后将目录更改为该目录:

[olpc@xo-12-34-56 ExampleActivity]$ mkdir activity
[olpc@xo-12-34-56 ExampleActivity]$ cd activity
[olpc@xo-12-34-56 activity]$

这里需要两个附加的支持文件,分别表示用于Sugar中活动的图标和一个表示活动的信息文件。 清单12中提供了图标文件(可伸缩矢量图形[SVG]文件),清单13中显示了信息文件。

清单12.活动的SVG图标文件(ExampleActivity.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 fill_color "#FFFFFF">
  <!ENTITY stroke_color "#000000">
]>
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
  <rect x="1" y="1" width="48" height="48"
  style="fill:&fill_color;;stroke:&stroke_color;;stroke_width:2"//>
</svg>
清单13.活动信息文件(activity.info)
[Activity]
name = ExampleActivity
service_name = org.laptop.ExampleActivity
class = ExampleActivity.ExampleActivity
icon = ExampleActivity
activity_version = 1
show_launcher = yes

最后,返回到/ home / olpc / ExampleActivity目录,然后创建一个名为MANIFEST的文件,该文件将包含一行:

ExampleActivity.py

该文件表示组成程序包的源文件。 目录结构现在应该与清单14中定义的文件一起出现。

清单14. ExampleActivity包的结构和文件
/home/olpc/ExampleActivity/
/home/olpc/ExampleActivity/ExampleActivity.py
/home/olpc/ExampleActivity/MANIFEST
/home/olpc/ExampleActivity/setup.py
/home/olpc/ExampleActivity/activity/
/home/olpc/ExampleActivity/activity/ExampleActivity.svg
/home/olpc/ExampleActivity/activity/activity.info

安装新的捆绑包

在开始安装之前,请注意,您可能必须提供符号SUGAR_PATH 。 如果键入echo $SUGAR_PATH并出现空白行,请键入以下内容:

[olpc@xo-12-34-56 ExampleActivity]$ export SUGAR_PATH=/share/sugar
[olpc@xo-12-34-56 ExampleActivity]$

现在,在包的根目录中使用cd命令(即cd /home/olpc/ExampleActivity ),然后键入:

[olpc@xo-12-34-56 ExampleActivity]$ python setup.py dev

这样做会创建一个从“活动”子目录(在/ home / olpc中)到您的软件包目录的符号链接。 您现在可以从Sugar测试您的新活动。

测试活动

要测试活动,请首先返回Sugar的家庭模式。 为此,请按Ctrl-Alt-F3组合键 。 接下来,重新启动Sugar以使活动可见。 要重新启动Sugar,请按Ctrl-Alt-Backspace 。 终端窗口重新出现几秒钟,然后Sugar重新启动。 在家庭模式底部的框架中,将出现一个新图标(作为一个空框)。 将鼠标光标放在该图标上可以显示活动名称( ExampleActivity )。 单击图标,然后出现新活动(占用整个屏幕)。 在绿色方块中左键单击几次后,将出现图7所示的窗口。

图7.完成的简单活动
完成简单活动

分发您的捆绑包

如果您想将活动分发给他人使用,则需要执行其他步骤。 在ExampleActivity子目录中,键入以下命令以创建捆绑包(其中包含该活动的所有必需文件):

[olpc@xo-12-34-56 ExampleActivity]$ python setup.py dist

结果是一个名为ExampleActivity-1.xo的文件,该文件可以分发给其他人。 其他用户可以将该文件迁移到他们的笔记本电脑上,并使用sugar-install-bundle命令sugar-install-bundle 。 例如:

[olpc@xo-12-34-56 ExampleActivity]$ sugar-install-bundle ExampleActivity-1.xo

摘要

XO-1笔记本电脑已进入批量生产,因此该产品已成为现实。 在撰写本文时,OLPC基金会以399美元的价格出售了XO-1笔记本电脑(购买了两台笔记本电脑:一台用于您自己,一台用于发展中国家的儿童)。 Linux内核和用户空间软件继续开发,并且在过去六个月中发展良好。 该软件框架非常稳定,并且API足够牢固,可用于与该项目没有密切关系的开发人员。

您还将找到为Sugar开发的大量应用程序,包括开发工具( 有关更多详细信息,请参阅参考资料)。 除Python以外的语言的绑定也已出现,因此不久您将能够使用JavaScript和其他语言开发应用程序。 看看XO-1笔记本电脑在世人手中后的发展,将会很有趣。 在Linux和Python的引领下,这可能是一场编程革命。


翻译自: https://www.ibm.com/developerworks/linux/tutorials/l-sugarpy/index.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值