<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pmv2</id>
	<title>Sugar Labs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pmv2"/>
	<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/go/Special:Contributions/Pmv2"/>
	<updated>2026-05-31T00:30:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:DanKrejsa&amp;diff=49176</id>
		<title>User:DanKrejsa</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:DanKrejsa&amp;diff=49176"/>
		<updated>2010-03-01T18:23:48Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:DanKrejsa to Walter is a wanker 9:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Projects==&lt;br /&gt;
&lt;br /&gt;
* [[Spock]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Bert&amp;diff=49174</id>
		<title>User:Bert</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Bert&amp;diff=49174"/>
		<updated>2010-03-01T18:22:50Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Bert to Walter is a wanker 8:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;email: bert at freudenbergs.de&lt;br /&gt;
&lt;br /&gt;
irc: bertf at FreeNode (#sugar, #olpc-de)&lt;br /&gt;
&lt;br /&gt;
Bert Freudenberg is a freelancing Software Engineer based in Magdeburg, Germany. From 2006-2008 he was contracted to port the Squeak Etoys learning environment to Sugar. Bert still voluntarily maintains the Sugar version of Etoys.&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User_talk:Garycmartin&amp;diff=49172</id>
		<title>User talk:Garycmartin</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User_talk:Garycmartin&amp;diff=49172"/>
		<updated>2010-03-01T18:22:32Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User talk:Garycmartin to Talk:Walter is a wanker 7:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fascinating! Great work, very helpful.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
&lt;br /&gt;
[[User:Gregorio|Gregorio]] 13:26, 24 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Thanks Gregorio, glad you like the SOMs (now moved to a [[Sugar Labs/SOM|community page]]) --[[User:garycmartin|garycmartin]] 18:15, 14 Jul 2008 (BST)&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Garycmartin&amp;diff=49170</id>
		<title>User:Garycmartin</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Garycmartin&amp;diff=49170"/>
		<updated>2010-03-01T18:22:32Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Garycmartin to Walter is a wanker 7:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Gary C. Martin ==&lt;br /&gt;
&lt;br /&gt;
Gary C. Martin (gary at garycmartin dot com) is a freelance software developer based in Edinburgh/UK, with a focus on design, UI/HCI, analytics, and information visualisation. His external homepage is over at http://www.garycmartin.com/.&lt;br /&gt;
&lt;br /&gt;
===Todo===&lt;br /&gt;
&lt;br /&gt;
* Back port old toolbar support for [[Activities/Write|Write]]&lt;br /&gt;
* New toolbar support for [[Activities/Physics|Physics]]&lt;br /&gt;
* Test and use Wade&#039;s SugarGames (replacement for un-maintained OlpcGames pygame wrapper)&lt;br /&gt;
* Misc Activity maintenance/development (Clock, Labyrinth, Maze, Physics, Write, Calculate, Moon)&lt;br /&gt;
* ...lots more&lt;br /&gt;
&lt;br /&gt;
===Ongoing===&lt;br /&gt;
&lt;br /&gt;
* Weekly [[Sugar Labs/SOM#It.27s_An_Education_Project_Mailing_List|Self Organising Map]] (SOM) generation for the IAEP mailing list&lt;br /&gt;
* [[Design_Team|Design Team]] member&lt;br /&gt;
* [[Activity_Team|Activity Team]] co-co-ordinator&lt;br /&gt;
* Sugar testing, feedback, and trac reports (access to an XO-B4, two XO-1s and various virtual machine environments in Mac OS X)&lt;br /&gt;
&lt;br /&gt;
===Done===&lt;br /&gt;
&lt;br /&gt;
* SVG toolbar icons for [http://wiki.laptop.org/go/Calculate Calculate], and other misc SVG work (Image Viewer, some Sugar UI elements)&lt;br /&gt;
* [[Marketing_Team/BoothBanners|Banners and Poster]] work for the Marketing Team&lt;br /&gt;
* Adopted [http://git.sugarlabs.org/projects/clock Clock] (by Pierre Métras) an Activity for learning to tell the time&lt;br /&gt;
* Sugar port of [[Activities/Labyrinth|Labyrinth]] Activity for creating mind-maps (with much help from tomeu and alsroot)&lt;br /&gt;
* Work on [http://git.sugarlabs.org/projects/physics Physics] to help polish, and tidy up the UI. See its [[Activities/Physics|wiki page]] for more details.&lt;br /&gt;
* Various [[Education Team/Evaluation_Studies|SOMs]] for educational related papers people post (I&#039;ll try to map texts linked/posted there)&lt;br /&gt;
* Some more [http://wiki.laptop.org/go/Academic_Papers research paper SOMs] over on wiki.laptop.org&lt;br /&gt;
* Icon set for the Sugar [[Sugar_Labs/Getting Involved|Getting Involved]] page&lt;br /&gt;
* Monthly [[Sugar Labs/SOM#Sugar_Mailing_List| Self Organising Map]] (SOM) generation for the Sugar-devel mailing list&lt;br /&gt;
* [[Activities/Moon|Moon]] Activity showing Moon phase and eclipse visualisation&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User_talk:Alsroot/trash/Object_Bundles&amp;diff=49168</id>
		<title>User talk:Alsroot/trash/Object Bundles</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User_talk:Alsroot/trash/Object_Bundles&amp;diff=49168"/>
		<updated>2010-03-01T18:21:28Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User talk:Alsroot/trash/Object Bundles to Talk:Walter is a wanker 6/trash/Object Bundles:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What about metadata properties with binary values such as the previews? [[User:Tomeu|Tomeu]] 08:50, 27 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Any field in METADATA file can have _file suffix, in that case content of this field(substring w/o _file suffix) will be fetched from file inside of the bundle; so in case of preview, METADATA could have field &amp;quot;preview_file=&amp;lt;file-inside-of-the-bundle&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Already considered having each property in its own file like we have in the current DS layout: [[Development_Team/Datastore_Rewrite]]? [[User:Tomeu|Tomeu]] 09:04, 27 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
dunno, for hand made bundles(like libraries) I guess its not very useful, for system made bundles(while uploading Journal objects for example) there is no critical difference between all-metedata-items-as-files and METADATA-and-some-fields-from-files&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User_talk:Alsroot&amp;diff=49166</id>
		<title>User talk:Alsroot</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User_talk:Alsroot&amp;diff=49166"/>
		<updated>2010-03-01T18:21:27Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User talk:Alsroot to Talk:Walter is a wanker 6:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello alsroot!  I love the new pages you are making.  A small request:  if you can find a way to compress your edits into a smaller #, perhaps with frequent use of the &#039;preview&#039; button when you&#039;re the only one editing a page, that makes it easier for [[special:recentchanges|RC]]-geeks like me to follow what&#039;s happening on the wiki!   Rock on,  [[User:Sj|+sj]]  [[User Talk:Sj|&amp;lt;font color=&amp;quot;#ff6996&amp;quot;&amp;gt;+&amp;lt;/font&amp;gt;]] 15:34, 26 December 2009 (UTC)&lt;br /&gt;
* yeah, useful idea, maybe that&#039;s because I&#039;m used to all time saving while writing code :)&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Unified_Objects&amp;diff=49164</id>
		<title>User:Alsroot/trash/Unified Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Unified_Objects&amp;diff=49164"/>
		<updated>2010-03-01T18:21:27Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Alsroot/trash/Unified Objects to Walter is a wanker 6/trash/Unified Objects:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Preamble ==&lt;br /&gt;
&lt;br /&gt;
Major ideas of this proposal.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE&#039;&#039;&lt;br /&gt;
# This sections talks not about bundles(activity or content) but about Activities and Content themselves.&lt;br /&gt;
# Proposal differentiate Journal(as &amp;quot;storage&amp;quot;) and Journal View(as view on &amp;quot;storage&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== Activities as Journal Objects ====&lt;br /&gt;
&lt;br /&gt;
Separation all objects to verbs and nouns can be failed in some cases - and moreover its failed when sugar is used for purposes that it was designed for - Create, Reuse, Share.&lt;br /&gt;
&lt;br /&gt;
This CRS scheme works(more or less at present) for content since we have Journal to store objects, but what about Activities?&lt;br /&gt;
&lt;br /&gt;
We should encourage people CRS theirs activities as well. Only one but - current sugar cannot work with many versions installed. At the same time this multi versioning is cornerstone of CRS activities since we have(should have) many versions of one particular activity installed on the same box. And these versions could include &amp;quot;home made&amp;quot; activities not only &amp;quot;official&amp;quot; ones. User should have possibility to treat all these versions(of one activity) effectively to CRS them.&lt;br /&gt;
&lt;br /&gt;
==== Journal Objects is a 1st class Objects as well ====&lt;br /&gt;
&lt;br /&gt;
[[Unified Bundles]] shows that Content(.xol) are the same level Objects as Activities. We could also extrapolate this idea to regular Journal Objects - it should mean user could have access to Activities, Content and Journal Objects from the same place.&lt;br /&gt;
&lt;br /&gt;
==== More relevant View(s) of Journal ====&lt;br /&gt;
&lt;br /&gt;
Having all these Objects user should have more powerful View to threat them. See [http://wiki.laptop.org/go/Journal%2C_reloaded Journal reloaded] and [[Design_Team/Designs/Journal#01|Journal mockups]] for proposals. Moreover  we could emulate &amp;quot;classical&amp;quot; Home and Journal Views.&lt;br /&gt;
&lt;br /&gt;
==== Summarising ====&lt;br /&gt;
&lt;br /&gt;
Instead of having:&lt;br /&gt;
* Activity bundles(.xo in Journal)&lt;br /&gt;
* Content bundles(.xol in Journal)&lt;br /&gt;
* Activities(from Home View and placed to /usr or ~/Activities)&lt;br /&gt;
* Content(in meaning of [[Unified Bundles]])&lt;br /&gt;
* Journal Objects(from old Journal View)&lt;br /&gt;
&lt;br /&gt;
We could have only Objects in Journal(in terms of &amp;quot;storage&amp;quot; not Journal View). And operate these Objects in one unified way - Create(or copy existed) in Journal, Reuse(Change) them in Journal and Share Journal Objects.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
* [[Features/Object Bundles]]&lt;br /&gt;
* [[Features/Activity Objects]]&lt;br /&gt;
* [[Features/Unified Browser for Objects]]&lt;br /&gt;
* [[Features/Object Collections]]&lt;br /&gt;
* [[Features/Peer to Peer Objects Sharing]]&lt;br /&gt;
* [[Activities/Library]]&lt;br /&gt;
&lt;br /&gt;
==Pro==&lt;br /&gt;
&lt;br /&gt;
With this scheme accepted user will have unified interface to all&lt;br /&gt;
objects(and theirs versions) - content(generated by activities or&lt;br /&gt;
downloaded from the internet) and activities(downloaded, transfered from&lt;br /&gt;
friends and home made).&lt;br /&gt;
&lt;br /&gt;
We could treat ASLO(Activity Library) as a Objects Library and encourage&lt;br /&gt;
people share theirs objects(not only activities) via&lt;br /&gt;
activities.sugarlabs.org(objects.sugarlabs.org? or library.sugarlabs.org?)&lt;br /&gt;
&lt;br /&gt;
==Contra==&lt;br /&gt;
&lt;br /&gt;
Well, it couldn&#039;t solve multi versions issue for activities out of the box,&lt;br /&gt;
but I&#039;m strongly for having *only one* storage for content versions and&lt;br /&gt;
activities versions(since we could treat current activity as a source(noun)&lt;br /&gt;
to produce new activity).&lt;br /&gt;
&lt;br /&gt;
==Going further==&lt;br /&gt;
&lt;br /&gt;
==== Sugar integration with http://activities.sugarlabs.org/ ====&lt;br /&gt;
* upload to ASLO all kinds of Objects not only Activities&lt;br /&gt;
* common Tags&lt;br /&gt;
* common Objects(links to ASLO objects in Tags View)&lt;br /&gt;
* easy way to post objects to ASLO&lt;br /&gt;
* Objects updater which uses Activity Library as a source of updates&lt;br /&gt;
&lt;br /&gt;
==== System activities could be stored in Journal as well ====&lt;br /&gt;
* main purpose - we should encourage user to change all activities(including system ones)&lt;br /&gt;
* physically these .xo could be stored in /usr/share but user should have access to them from the Journal(Tags View)&lt;br /&gt;
* basic system activities could be installed by default while first creating of .sugar instance&lt;br /&gt;
&lt;br /&gt;
==== Sugar Infection ====&lt;br /&gt;
Auto migration of activities before joining to session which uses another version of activity&lt;br /&gt;
&lt;br /&gt;
==== Sets of Objects ====&lt;br /&gt;
To support [http://dev.sugarlabs.org/ticket/540 meta bundles]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Thumbs_View_in_Journal&amp;diff=49162</id>
		<title>User:Alsroot/trash/Thumbs View in Journal</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Thumbs_View_in_Journal&amp;diff=49162"/>
		<updated>2010-03-01T18:21:27Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Alsroot/trash/Thumbs View in Journal to Walter is a wanker 6/trash/Thumbs View in Journal:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Activities/Thumbs View in Journal]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Object_Bundles&amp;diff=49160</id>
		<title>User:Alsroot/trash/Object Bundles</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Object_Bundles&amp;diff=49160"/>
		<updated>2010-03-01T18:21:26Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Alsroot/trash/Object Bundles to Walter is a wanker 6/trash/Object Bundles:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{GoogleTrans-en}}{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- All fields on this form are required to be accepted.&lt;br /&gt;
 We also request that you maintain the same order of sections so that all of the feature pages are uniform.  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The actual name of your feature page should look something like: Features/Your Feature Name.  This keeps all features in the same namespace --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* package Journal objects to bundles to preserve sugar related metadata&lt;br /&gt;
* support composite Journal objects e.g. in case of library bundles instead of having .xol in Journal and unpacked files in ~/Library, all library files will be represented by one Journal entry, could be opened in Browse(&#039;&#039;[Metadata]/mime_type&#039;&#039; should be text/html for that purpose) and could be transformed back to .xo on demand(e.g. for uploading library in Browse&#039;s pick-file field).&lt;br /&gt;
* Object Bundles exist only out of sugar (after uploading to the Journal .xo will be removed)&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
&lt;br /&gt;
* Name: [[User:alsroot| Aleksey Lim]]&lt;br /&gt;
* Email: [[Special:Emailuser/alsroot|send an email]]&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
&lt;br /&gt;
* Targeted release:&lt;br /&gt;
* Last updated: Mon Jul 27 05:31:42 UTC 2009&lt;br /&gt;
* Percentage of completion: 75%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
&lt;br /&gt;
This feature is a first approach to unified format for all types of bundles(in 0.86 it will support only Journal entries and new library bundles).&lt;br /&gt;
&lt;br /&gt;
Object bundle should have &#039;&#039;METADATA&#039;&#039; file in the top directory of .xo bundle.&lt;br /&gt;
&lt;br /&gt;
=== METADATA file ===&lt;br /&gt;
&lt;br /&gt;
This file is in [http://docs.python.org/library/configparser.html INI] format which describes how to setup bundle.&lt;br /&gt;
&lt;br /&gt;
Object bundle can be installed to Journal in two forms.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Each file from bundle as separate Journal entry&#039;&#039;&#039;&amp;lt;br&amp;gt;files from bundle will be unpacked and installed as separate Journal entries, bundle itself will be removed(similar to .xoj)&amp;lt;br&amp;gt;final Journal entries can have &#039;&#039;activity&#039;&#039; field, so they are regular Journal entries that imported to Journal(w/o &#039;&#039;activity&#039;&#039; field) or created by activities(with &#039;&#039;activity&#039;&#039; field)&amp;lt;br&amp;gt;&#039;&#039;METADATA&#039;&#039; should contain &#039;&#039;[Entry]&#039;&#039; sections for each Journal entry&amp;lt;br&amp;gt;if bundle has more then one entry, sections should be parted by different suffixes e.g. &#039;&#039;[Entry2]&#039;&#039;, &#039;&#039;[Entry.additional]&#039;&#039; etc.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Composite Journal entry&#039;&#039;&#039;&amp;lt;br&amp;gt;bundle will be installed as a composite object i.e. as a directory of packaged to the bundle files that are represented by one Journal entry&amp;lt;br&amp;gt;final Journal entry can&#039;t have &#039;&#039;activity&#039;&#039; field&amp;lt;br&amp;gt;&#039;&#039;METADATA&#039;&#039; should contain only one &#039;&#039;[Bundle]&#039;&#039; section&lt;br /&gt;
&lt;br /&gt;
METADATA file can have one or several sections(depends on installation method) that describe metadata fields of final entry(ies) in Journal.&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellpadding=3 style=&amp;quot;border: 1px solid white; border-collapse: collapse; background: #e3e4e5;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background:#787878; color: white;&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Flags&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;entry&#039;&#039;&lt;br /&gt;
| mandatory&lt;br /&gt;
| if bundle is composite, &#039;&#039;entry&#039;&#039; defines access point to composite object (e.g. index.html for library bundles);&amp;lt;br&amp;gt;otherwise it defines file which will be installed to Journal&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;mime_type&#039;&#039;&lt;br /&gt;
| mandatory&lt;br /&gt;
| define metadata for final Journal entry&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;uid&#039;&#039;&lt;br /&gt;
| ignored&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;*&#039;&#039;&lt;br /&gt;
| optional&lt;br /&gt;
| any [[Features/Plain_Query_Format#System_terms|system]], [[Features/Plain_Query_Format#Users_predefined_terms|users predefined]] and arbitrary Datastore field&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Any field in &#039;&#039;METADATA&#039;&#039; file can have &#039;&#039;_file&#039;&#039; suffix, in that case content of this field(substring w/o &#039;&#039;_file&#039;&#039; suffix) will be fetched from file inside of the bundle.&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
&lt;br /&gt;
This feature is a first approach to unified format for all types of bundles.&lt;br /&gt;
&lt;br /&gt;
Current implementation is similar to [http://wiki.laptop.org/go/Journal_entry_bundles .xoj] bundles except that:&lt;br /&gt;
* it uses INI format instead of json(to make it more user-editing friendly)&lt;br /&gt;
* any field&#039;s value could fetched from file inside of the bundle&lt;br /&gt;
* supports multi-object bundles&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
* deprecate .xol bundles&lt;br /&gt;
* deprecate [http://wiki.laptop.org/go/Journal_entry_bundles .xoj] bundles&lt;br /&gt;
* provide unified format for metadata file in .xo bundles which should support&lt;br /&gt;
** activities, former .xo bundles (0.88)&lt;br /&gt;
** libraries, former .xol bundles (0.86)&lt;br /&gt;
** journal entries, former .xoj bundles (0.86)&lt;br /&gt;
* make Browse upload object bundles when the server says so&lt;br /&gt;
* in an ideal implementation, composite feature should come from Datastore, but since DS has been extensively hacked in 0.86-0.88 cycles, for the first time, it could be a part of shell code&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
&lt;br /&gt;
* [http://git.sugarlabs.org/projects/sugar/repos/objectbundle sugar]&lt;br /&gt;
* [http://git.sugarlabs.org/projects/sugar-toolkit/repos/objectbundle sugar-toolkit]&lt;br /&gt;
* [http://git.sugarlabs.org/projects/browse/repos/objectbundle Browse]&lt;br /&gt;
&lt;br /&gt;
Example of PHP code which could be used on server side to unpack object bundles to get metadata (like title, description, preview etc.)&lt;br /&gt;
&lt;br /&gt;
 require_once(&#039;Archive/Zip.php&#039;);&lt;br /&gt;
 &lt;br /&gt;
 function rmtree($dir) {&lt;br /&gt;
    $dir = &amp;quot;$dir&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    if ($dh = opendir($dir)) {&lt;br /&gt;
        while (FALSE !== ($item = readdir($dh))) {&lt;br /&gt;
            if ($item != &#039;.&#039; &amp;amp;&amp;amp; $item != &#039;..&#039;) {&lt;br /&gt;
                $subdir = $dir . &#039;/&#039; . &amp;quot;$item&amp;quot;;&lt;br /&gt;
                if (is_dir($subdir))&lt;br /&gt;
                    rmtree($subdir);&lt;br /&gt;
                else&lt;br /&gt;
                    unlink($subdir);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        closedir($dh);&lt;br /&gt;
        rmdir($dir);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function unbundle($bundle) {&lt;br /&gt;
    $zip = new Archive_Zip($bundle);&lt;br /&gt;
 &lt;br /&gt;
    $tmpdir = tempnam(&#039;/tmp&#039;, &#039;sugar&#039;);&lt;br /&gt;
    if (file_exists($tmpdir))&lt;br /&gt;
        unlink($tmpdir);&lt;br /&gt;
    if (!mkdir($tmpdir)) {&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    $out = $zip-&amp;gt;extract(array(&#039;add_path&#039; =&amp;gt; $tmpdir, &#039;by_name&#039; =&amp;gt; array(&#039;METADATA&#039;)));&lt;br /&gt;
    if (empty($out)) {&lt;br /&gt;
        rmtree($tmpdir);&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    $metadata = parse_ini_file($out[0][&#039;filename&#039;], true);&lt;br /&gt;
    if (!$metadata) {&lt;br /&gt;
        rmtree($tmpdir);&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    $result = array();&lt;br /&gt;
 &lt;br /&gt;
    foreach ($metadata as $section =&amp;gt; $items) {&lt;br /&gt;
        if (!(substr($section, 0, 5) == &#039;Entry&#039; || $section == &#039;Bundle&#039;))&lt;br /&gt;
            continue;&lt;br /&gt;
        foreach ($items as $name =&amp;gt; $value) {&lt;br /&gt;
            if (substr($name, -5) == &#039;_file&#039;) {&lt;br /&gt;
                $name = substr($name, 0, -5);&lt;br /&gt;
 &lt;br /&gt;
                $out = $zip-&amp;gt;extract(array(&#039;add_path&#039; =&amp;gt; $tmpdir, &#039;by_name&#039; =&amp;gt; array($value)));&lt;br /&gt;
                if (empty($out)) {&lt;br /&gt;
                    rmtree($tmpdir);&lt;br /&gt;
                    return null;&lt;br /&gt;
                }&lt;br /&gt;
 &lt;br /&gt;
                $value = file_get_contents($tmpdir.&#039;/&#039;.$value);&lt;br /&gt;
            }&lt;br /&gt;
            $result[$name] = $value;&lt;br /&gt;
        }&lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    rmtree($tmpdir);&lt;br /&gt;
    return $result;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // example usage of unbundle() function&lt;br /&gt;
 &lt;br /&gt;
 $bundle = &#039;foo.xo&#039;;&lt;br /&gt;
 $metadata = unbundle($bundle);&lt;br /&gt;
 &lt;br /&gt;
 if (!$metadata)&lt;br /&gt;
    echo &#039;Can not open &#039;.$bundle.&amp;quot;\n&amp;quot;;&lt;br /&gt;
 else&lt;br /&gt;
    foreach ($metadata as $name =&amp;gt; $value)&lt;br /&gt;
        echo $name.&#039;=&#039;.$value.&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
&lt;br /&gt;
How to test non-composite objects:&lt;br /&gt;
# Create a new TurtleArt activity&lt;br /&gt;
# Upload the new entry to the SL wiki using Browse&lt;br /&gt;
# Use Browse to download the entry back to Journal&lt;br /&gt;
# Resume it from Journal&lt;br /&gt;
&lt;br /&gt;
How to test composite object (unfortunately [http://dev.sugarlabs.org/ticket/1101 #1101] prevents uploading bundles with library to wiki):&lt;br /&gt;
# Download any .xol bundle&lt;br /&gt;
# Activate it(it should be opened in Browse)&lt;br /&gt;
# Upload Journal entry with library to SL wiki using Browse&lt;br /&gt;
# Download .xo with library and open it&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
&lt;br /&gt;
We could have HTTP servers(see [[Features/Server Objects Sharing]]) that request .xo files, in that case Browse will provide object bundle for chosen(in ObjectChooser) Journal entry otherwise Browse will upload raw Journal entries.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
Fructose dependencies.&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
&lt;br /&gt;
None necessary, revert to previous release behaviour.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mail-archive.com/sugar-devel@lists.sugarlabs.org/msg06874.html Email thread]&lt;br /&gt;
* [[Unified Bundles]]&lt;br /&gt;
* [[User:Alsroot/trash/Unified Objects | Unified Objects]]&lt;br /&gt;
* [http://wiki.laptop.org/go/Journal_entry_bundles Journal entry bundles]&lt;br /&gt;
* [http://wiki.laptop.org/go/Bundle_concepts Bundle concepts]&lt;br /&gt;
* [http://wiki.laptop.org/go/Manifest_Specification#Contents_Manifests MANIFEST specification]&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&#039;&#039;The Sugar Release Notes inform end-users about what is new in the release. An Example is [[0.84/Notes]]. The release notes also help users know how to deal with platform changes such as ABIs/APIs, configuration or data file formats, or upgrade concerns.  If there are any such changes involved in this feature, indicate them here.  You can also link to upstream documentation if it satisfies this need.  This information forms the basis of the release notes edited by the release team and shipped with the release.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
* See [[{{TALKPAGENAME}}|discussion tab for this feature]] &amp;lt;!-- This adds a link to the &amp;quot;discussion&amp;quot; tab associated with your page.  This provides the ability to have ongoing comments or conversation without bogging down the main feature page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Frame_Panels&amp;diff=49156</id>
		<title>User:Alsroot/trash/Frame Panels</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Frame_Panels&amp;diff=49156"/>
		<updated>2010-03-01T18:21:25Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Alsroot/trash/Frame Panels to Walter is a wanker 6/trash/Frame Panels:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{GoogleTrans-en}}{{TOCright}}&lt;br /&gt;
[[Category:Feature|Unified Browser for Objects]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- All fields on this form are required to be accepted.&lt;br /&gt;
 We also request that you maintain the same order of sections so that all of the feature pages are uniform.  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The actual name of your feature page should look something like: Features/Your Feature Name.  This keeps all features in the same namespace --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
Treat frame as a containers(upper, left, right and bottom) for predefined or custom components i.e. having GNOME panels analog in sugar.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
&lt;br /&gt;
* Name: [[User:alsroot| Aleksey Lim]]&lt;br /&gt;
* Email: [[Special:Emailuser/alsroot|send an email]]&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.88&lt;br /&gt;
* Last updated: Thu Jul  9 00:36:45 UTC 2009&lt;br /&gt;
* Percentage of completion: 0%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
&lt;br /&gt;
The major reason is to let activities like FileShare or Chat special UI representation in shell&#039;s interface. It could be also useful if user wants fast access to some activities like Journal replacements.&lt;br /&gt;
&lt;br /&gt;
Any of four panels could be stuck i.e. let user see its components all time.&lt;br /&gt;
&lt;br /&gt;
=== Predefined components ===&lt;br /&gt;
&lt;br /&gt;
* rings switch&lt;br /&gt;
* activities list&lt;br /&gt;
* clipboard&lt;br /&gt;
* users list&lt;br /&gt;
* sources list&lt;br /&gt;
* network component&lt;br /&gt;
* notification area&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
&lt;br /&gt;
* let users more freedom to organize sugar shell how they want&lt;br /&gt;
* provide to activity developers a way to integrate theirs activities to shell UI(useful for activities that work in background and requires some kind all-time-present indicator in UI)&lt;br /&gt;
* having stable API for panel components, activity developers have more freedom and aren&#039;t stuck to core releases e.g. Network activity/component(analog of NM widget in GNOME) could support several sugar releases and previous release sugar users will benefit from last Network component.&lt;br /&gt;
* previous sugar release users will benefit from last updates of predefined components as well&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
* affects Journal code in sugar package&lt;br /&gt;
&lt;br /&gt;
== UI Design ==&lt;br /&gt;
&lt;br /&gt;
* all of four frame panels could be stuck&lt;br /&gt;
* manage components, way to add-new/remove/move components&lt;br /&gt;
* components could have shell level key shortcuts&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In progress..&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
&lt;br /&gt;
* sugar frame as a regular GNOME panels&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
Existed glucose dependencies.&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
&lt;br /&gt;
None necessary, revert to previous release behaviour.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Design Team/Proposals/Journal]]&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In progress..&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
* See [[{{TALKPAGENAME}}|discussion tab for this feature]] &amp;lt;!-- This adds a link to the &amp;quot;discussion&amp;quot; tab associated with your page.  This provides the ability to have ongoing comments or conversation without bogging down the main feature page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Activity_as_a_regular_Journal_Object&amp;diff=49154</id>
		<title>User:Alsroot/trash/Activity as a regular Journal Object</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Activity_as_a_regular_Journal_Object&amp;diff=49154"/>
		<updated>2010-03-01T18:21:25Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Alsroot/trash/Activity as a regular Journal Object to Walter is a wanker 6/trash/Activity as a regular Journal Object:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{GoogleTrans-en}}{{TOCright}}&lt;br /&gt;
[[Category:Feature|Activity as a regular Journal Object]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
Use Journal objects to represent activities.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
&lt;br /&gt;
* Name: [[User:alsroot| Aleksey Lim]]&lt;br /&gt;
* Email: [[Special:Emailuser/alsroot|send an email]]&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
&lt;br /&gt;
* Targeted release: 0.88&lt;br /&gt;
* Last updated: Fri Nov 27 21:28:31 UTC 2009&lt;br /&gt;
* Percentage of completion: 0%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
&lt;br /&gt;
The major reason for this feature is eliminating confusion when:&lt;br /&gt;
* theres are activities(in Home view) and activity bundles(in Journal)&lt;br /&gt;
* user can remove bundle from Journal and activity will be preserved(and vise versa)&lt;br /&gt;
* activities could not have bundles in journal(were deleted or its a system wide activity), so user can&#039;t copy activity(e.g. to share it via USB stick) using regular shell workflow(Journal) and should be aware of stuff like Terminal&lt;br /&gt;
&lt;br /&gt;
Feature declares:&lt;br /&gt;
* every activity which is accessible in sugar has Journal entry&lt;br /&gt;
** for activity came from bundles, entry will have .xo&#039;s metadata(timestamp, title etc)&lt;br /&gt;
** for system wide activities, based of /usr directory properties&lt;br /&gt;
* there is strong linkage between activity in Home view and journal entry, removing activity in one place, removes it from another&lt;br /&gt;
** in fact, Home view could be treated as a predefined set(with query terms to show only activities) of Journal entries which is viewed in Home [[Features/Journal Plugins|plugin]]&lt;br /&gt;
* reflect on system wide activities update, Journal entry&#039;s metadata will be changed with keeping only one object per activity&lt;br /&gt;
* reflect on uploading to Journal new .xo version of existed activity, could be:&lt;br /&gt;
** follow the same forkflow like with system activities, remove previous .xo from Journal or even do not store uploaded .xo at all, on upload, unzip it to ~/Activities and follow system activities way(entry which represent activity)&lt;br /&gt;
** storing in Journal several versions of the same activity(including system) and on clicking on particular version in Journal, if it its not installed, ask user to upgrade/downgrade activity(to ~/Activities directory) and then start&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
&lt;br /&gt;
* feature eliminates confusion, e.g. in case of removing activities, when there are activities(in Home view) and .xo bundles in the Journal(that could be absent - .xo deleted, system activity)&lt;br /&gt;
* let users, that are not experienced in command line applications, copy existed activity(even system) just by draging Journal(or Home) entry to USB source&lt;br /&gt;
* since all activities have Journal representation, keep useful information in entry fields(time of installing activity, additional info in description etc.)&lt;br /&gt;
* so, it simplifies situation - user all time has in mind that he is working with the same object(activity) but from different views(Home or Journal)&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
* sugar&lt;br /&gt;
&lt;br /&gt;
== UI Design ==&lt;br /&gt;
&lt;br /&gt;
Nothing.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
&#039;&#039;This does not need to be a full-fledged document.  Describe the dimensions of tests that this feature is expected to pass when it is done.  If it needs to be tested with different hardware or software configurations, indicate them.  The more specific you can be, the better the community testing can be.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Remember that you are writing this how to for interested testers to use to check out your feature - documenting what you do for testing is OK, but it&#039;s much better to document what *I* can do to test your feature.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A good &amp;quot;how to test&amp;quot; should answer these four questions:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;What special hardware / data / etc. is needed (if any)?&lt;br /&gt;
* &#039;&#039;How do I prepare my system to test this feature? What packages need to be installed, config files edited, etc.?&lt;br /&gt;
* &#039;&#039;What specific actions do I perform to check that the feature is working like it&#039;s supposed to?&lt;br /&gt;
* &#039;&#039;What are the expected results of those actions?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
&lt;br /&gt;
* there is strong linkage between activities in Home view and Journal entries, in fact Home view is just a predefined view [[Features/Journal Plugins|plugin]] to browse activity Journal objects&lt;br /&gt;
* user can operate with system activities or activities woth removed .xo bundles(in existed workflow) from Journal, e.g. copy them to USB stick&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
Glucose dependencies.&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
&lt;br /&gt;
None necessary, revert to previous release behaviour.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Alsroot/trash/Unified Objects | Unified Objects#Activities_as_Journal_Objects|Unified Objects]]&lt;br /&gt;
* [[Features/Object Bundles]]&lt;br /&gt;
* Email threads&lt;br /&gt;
** [http://www.mail-archive.com/sugar-devel@lists.sugarlabs.org/msg10708.html Activity as a regular Journal Object request for inclusion to 0.88]&lt;br /&gt;
** [http://www.mail-archive.com/sugar-devel@lists.sugarlabs.org/msg07572.html multiple activity versions installed simultaneously]&lt;br /&gt;
** [http://www.mail-archive.com/sugar-devel@lists.sugarlabs.org/msg06944.html Activity as regular objects proposal]&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
&#039;&#039;The Sugar Release Notes inform end-users about what is new in the release. An Example is [[0.84/Notes]]. The release notes also help users know how to deal with platform changes such as ABIs/APIs, configuration or data file formats, or upgrade concerns.  If there are any such changes involved in this feature, indicate them here.  You can also link to upstream documentation if it satisfies this need.  This information forms the basis of the release notes edited by the release team and shipped with the release.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
* See [[{{TALKPAGENAME}}|discussion tab for this feature]] &amp;lt;!-- This adds a link to the &amp;quot;discussion&amp;quot; tab associated with your page.  This provides the ability to have ongoing comments or conversation without bogging down the main feature page --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Activity_Objects&amp;diff=49152</id>
		<title>User:Alsroot/trash/Activity Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Alsroot/trash/Activity_Objects&amp;diff=49152"/>
		<updated>2010-03-01T18:21:24Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Alsroot/trash/Activity Objects to Walter is a wanker 6/trash/Activity Objects:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[User:Alsroot/Features/Activity as a regular Journal Object]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Alsroot/test&amp;diff=49150</id>
		<title>User:Alsroot/test</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Alsroot/test&amp;diff=49150"/>
		<updated>2010-03-01T18:21:24Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Alsroot/test to Walter is a wanker 6/test:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
| __NOTOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This page lists known Sugar activities which are in development or have started&lt;br /&gt;
development.&amp;lt;br&amp;gt;&#039;&#039;&#039;See&#039;&#039;&#039; [[#Legend|status legend]] at the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
 NOTE: if you know that project is orphaned/unmaintained, please mark it by &#039;&#039;&#039;orphaned&#039;&#039;&#039;/&#039;&#039;&#039;unmaintained&#039;&#039;&#039; tags&lt;br /&gt;
       if you are (co)maintainer/contributor, please add youself to contacts column(link to user page is preferable)&lt;br /&gt;
&lt;br /&gt;
==Activities==&lt;br /&gt;
&lt;br /&gt;
Other activity lists which need to be merged into this page:&lt;br /&gt;
* http://wiki.laptop.org/go/Activity_queries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; valign=&amp;quot;top&amp;quot; border=1 cellpadding=3 style=&amp;quot;border: 1px solid white; border-collapse: collapse; background: #e3e4e5;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background:#787878; color: white;&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! URL&lt;br /&gt;
! Description&lt;br /&gt;
! Contacts&lt;br /&gt;
! Status&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
==== ====&lt;br /&gt;
|[http://dev.laptop.org/git?p=activities/3dpong 3dpong]&lt;br /&gt;
|3D pong game&lt;br /&gt;
|Wade Brainerd&lt;br /&gt;
|Dead&lt;br /&gt;
|Renamed to bounce, see below.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
==== ====&lt;br /&gt;
|[http://dev.laptop.org/git?p=activities/MIDI-file-player MIDI-file-player]&lt;br /&gt;
|performs MIDI files&lt;br /&gt;
|Greg Thompson&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
==== ====&lt;br /&gt;
|[http://dev.laptop.org/git?p=activities/assimilate assimilate]&lt;br /&gt;
|A flashcards based activity&lt;br /&gt;
|Urko Fernandez&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
==== ====&lt;br /&gt;
|[http://dev.laptop.org/git?p=projects/analyze-activity Analyze]&lt;br /&gt;
|Analyze is an Activity that displays your XO&#039;s networking,&lt;br /&gt;
|Eduardo Silva&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
==== ====&lt;br /&gt;
|[http://wiki.laptop.org/go/Ruler Ruler]&lt;br /&gt;
|Screen-based measuring device.&lt;br /&gt;
|Mitchell Charity&lt;br /&gt;
|&lt;br /&gt;
|No source tarball; Hardware specific in that the scale of the ruler is hardcoded to the XO resolution and screen size.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
==== ====&lt;br /&gt;
|[http://wiki.laptop.org/go/Scratch Scratch]&lt;br /&gt;
|Visual programming environment.&lt;br /&gt;
|&lt;br /&gt;
|State unknown.&lt;br /&gt;
|No source tarball; Hardware specific in that the scale of the ruler is hardcoded to the XO resolution and screen size.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
===Turtle Art issues===&lt;br /&gt;
&lt;br /&gt;
When we fold in Turtle Art with Sensors, we&#039;ll have to make sure that proper python math packages are loaded (previously, we were using numeric):&lt;br /&gt;
&lt;br /&gt;
 from numpy.oldnumeric import *&lt;br /&gt;
 from numpy.fft import *&lt;br /&gt;
&lt;br /&gt;
:Turtle Art with Sensors has been folded into Turtle Art as per Version 25. However, the pitch sensor doesn&#039;t work because there is no real_fft in numpy.fft. --[[User:Walter|Walter]] 20:29, 30 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
===Block Party===&lt;br /&gt;
&lt;br /&gt;
Was this activity superceded or just overlooked? [[User:Tony37| Tony]]&lt;br /&gt;
&lt;br /&gt;
==Legend==&lt;br /&gt;
* &#039;&#039;&#039;Migrated&#039;&#039;&#039; The activity Git repository has moved to git.sugarlabs.org.&lt;br /&gt;
* &#039;&#039;&#039;works&#039;&#039;&#039; The activity was tested and is known to work.&lt;br /&gt;
* &#039;&#039;&#039;polished&#039;&#039;&#039; This activity is in good shape, that is to say it is in active use or should be.&lt;br /&gt;
* &#039;&#039;&#039;unfinished&#039;&#039;&#039; This activity has been started but is not quite ready to be seen by users.&lt;br /&gt;
* &#039;&#039;&#039;dead&#039;&#039;&#039; The activity is not likely to reach a usable state and we are ignoring it.&lt;br /&gt;
* &#039;&#039;&#039;cool&#039;&#039;&#039; Someone thinks this activity has good potential and would be worth checking out by the Activity Team.&lt;br /&gt;
* &#039;&#039;&#039;deprecated&#039;&#039;&#039; Activity should be replaced by a different one.&lt;br /&gt;
* &#039;&#039;&#039;xoonly&#039;&#039;&#039; activity works only on XO due to software/hardware preferences (XO screen resolution, etc.)&lt;br /&gt;
* &#039;&#039;&#039;unpackage&#039;&#039;&#039; various packaging related issues&lt;br /&gt;
* &#039;&#039;&#039;orphaned&#039;&#039;&#039; author is not interested in project, feel free to take it in your hands&lt;br /&gt;
* &#039;&#039;&#039;unmaintained&#039;&#039;&#039; there is lack of human resources to maintain, feel free to be a co-maintainer&lt;br /&gt;
* Add more tags here.&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Alsroot/Features/Activity_as_a_regular_Journal_Object&amp;diff=49148</id>
		<title>User:Alsroot/Features/Activity as a regular Journal Object</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Alsroot/Features/Activity_as_a_regular_Journal_Object&amp;diff=49148"/>
		<updated>2010-03-01T18:21:24Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Alsroot/Features/Activity as a regular Journal Object to Walter is a wanker 6/Features/Activity as a regular Journal Object:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Features/Activity as a regular Journal Object]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Alsroot/Collab_mockup&amp;diff=49146</id>
		<title>User:Alsroot/Collab mockup</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Alsroot/Collab_mockup&amp;diff=49146"/>
		<updated>2010-03-01T18:21:23Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Alsroot/Collab mockup to Walter is a wanker 6/Collab mockup:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Collab mockup]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Alsroot&amp;diff=49144</id>
		<title>User:Alsroot</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Alsroot&amp;diff=49144"/>
		<updated>2010-03-01T18:21:23Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Alsroot to Walter is a wanker 6:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hi==&lt;br /&gt;
My name is Aleksey Lim, I am a volunteer for SugarLabs.&lt;br /&gt;
&lt;br /&gt;
==Roadmap==&lt;br /&gt;
* support ALTLinux packages&lt;br /&gt;
** full-functional Sugar environment (fructose, useful honey activities, jabber connections, etc.)  &lt;br /&gt;
** Russian localization&lt;br /&gt;
** support Sugar in School and Terminal(LTSP) branches of ALTLinux &lt;br /&gt;
* support Gentoo sugar ebuilds&lt;br /&gt;
&lt;br /&gt;
==Todo==&lt;br /&gt;
&lt;br /&gt;
Life in sugar! - support full time being online in sugar&lt;br /&gt;
* Collab mode for Library activity which should be sugar client for library.sugarlabs.org&lt;br /&gt;
* bot to organize chat rooms, so there will be persistent Chat instances where people can chat&lt;br /&gt;
* check notification system in shell if it works well in &amp;quot;all time being in sugar&amp;quot; workflow&lt;br /&gt;
* create [[Collab_mockup|Collab]] activity&lt;br /&gt;
* bot to have persistent Collab instance &lt;br /&gt;
&lt;br /&gt;
=== Done ===&lt;br /&gt;
&lt;br /&gt;
* package GCompris-9 for ASLO and for regular 0install usage&lt;br /&gt;
* package http://www.geogebra.org&lt;br /&gt;
&lt;br /&gt;
=== Postponed ===&lt;br /&gt;
&lt;br /&gt;
* put [[Community/Distributions/Saccharin|Saccharin]] distribution to usable state&lt;br /&gt;
* rewrite Record from scratch to use simple gst scheme and subwindows less UI&lt;br /&gt;
&lt;br /&gt;
=== Going further ===&lt;br /&gt;
&lt;br /&gt;
* standalone mode for activities thus more close merge sugar with other education software e.g. ASLO could be not just portal of sugar activities but portal of education software(non-sugar users could run particular activity w/o need to install sugar)&lt;br /&gt;
&lt;br /&gt;
==Contacts==&lt;br /&gt;
* [[Special:Emailuser/alsroot|Email me]]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
* [[Deployment Team/jhconvert|Tool to generate sugar packages]]&lt;br /&gt;
* [[Community/Distributions/Gentoo|Sugar on Gentoo overlay]]&lt;br /&gt;
* [[Community/Distributions/ALTLinux|Sugar on ALT Linux]]&lt;br /&gt;
* http://www.gentoo.org/&lt;br /&gt;
* http://en.altlinux.org/&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User_talk:Dfarning&amp;diff=49142</id>
		<title>User talk:Dfarning</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User_talk:Dfarning&amp;diff=49142"/>
		<updated>2010-03-01T18:21:03Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User talk:Dfarning to Talk:Walter is a wanker 5:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please refresh.&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Dfarning/translations&amp;diff=49140</id>
		<title>User:Dfarning/translations</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Dfarning/translations&amp;diff=49140"/>
		<updated>2010-03-01T18:21:03Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Dfarning/translations to Walter is a wanker 5/translations:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Translations/List | source=User:Dfarning | origlang=en | translated={{{translated}}} | es }}&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Dfarning&amp;diff=49138</id>
		<title>User:Dfarning</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Dfarning&amp;diff=49138"/>
		<updated>2010-03-01T18:21:02Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Dfarning to Walter is a wanker 5:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==David Farning==&lt;br /&gt;
I am a new contributor to Sugar Labs.&lt;br /&gt;
&lt;br /&gt;
====Interests====&lt;br /&gt;
* Community Building&lt;br /&gt;
&lt;br /&gt;
====TODO====&lt;br /&gt;
* Fix or remove link &amp;quot;About Sugar Labs&amp;quot; in the bottom CC/MediaWiki bar&lt;br /&gt;
* Start the BugSquad&lt;br /&gt;
*  Write api documentation tutorial&lt;br /&gt;
* Work on Wiki infrastructure&lt;br /&gt;
* Clean up wiki translation infrastructure&lt;br /&gt;
:#ifexist broken in current implementation ([[User:Dfarning|dfarning]] 18:08, 2 July 2008 (UTC))&lt;br /&gt;
&lt;br /&gt;
====Inprogress====&lt;br /&gt;
&lt;br /&gt;
*Establish relationship with educational spins&lt;br /&gt;
**Skolelinux&lt;br /&gt;
**Edubuntu&lt;br /&gt;
**Fedora edu  &lt;br /&gt;
&lt;br /&gt;
*Outreach to educational communities.&lt;br /&gt;
*Outreach to embedded communities.&lt;br /&gt;
&lt;br /&gt;
*Create activities.sugarlabs.org based  on addons.mozilla.org.&lt;br /&gt;
**Initial a.m.o patchset is pending review by Mozilla&lt;br /&gt;
&lt;br /&gt;
====email====&lt;br /&gt;
dfarning@gmail.com&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User_talk:Sj&amp;diff=49136</id>
		<title>User talk:Sj</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User_talk:Sj&amp;diff=49136"/>
		<updated>2010-03-01T18:20:27Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User talk:Sj to Talk:Walter is a wanker 4:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please leave messages here, or on [http://wiki.laptop.org/go/User_talk:Sj the olpcwiki].&lt;br /&gt;
&lt;br /&gt;
== Wiki barn-raising ==&lt;br /&gt;
&lt;br /&gt;
I think it would be very helpful to harmonize certain functional elements between the Sugar Labs wiki and the OLPC wiki so that usage of certain devel-specialized wiki-text elements transfers easily from one to the other. I&#039;m making a first pass at templates (and some categories) via facilitated copy-paste (see [[User:Cjl/Sandbox]]).  Thanks for the pointer to PyWikibot-building, which I&#039;ll study, but probably not master usefully anytime soon.  &lt;br /&gt;
&lt;br /&gt;
A more experienced Wikipedian (&#039;&#039;hint, hint&#039;&#039;) should tackle plugins and extensions as listed on [http://wiki.laptop.org/go/Wiki OLPC Wiki], especially &#039;&#039;&#039;traclink&#039;&#039;&#039;, &#039;&#039;&#039;iframe&#039;&#039;&#039;, do you know anyone that could handle that?  [[User:Cjl|Cjl]] 18:16, 18 May 2008 (UTC)&lt;br /&gt;
: moved to [[Wiki Team]] on advice of Dfarning...&lt;br /&gt;
:: Thanks!  [[User:Sj|+sj]]  [[User Talk:Sj|&amp;lt;font color=&amp;quot;#ff6996&amp;quot;&amp;gt;+&amp;lt;/font&amp;gt;]] 16:03, 2 April 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== re- Arduino ==&lt;br /&gt;
&lt;br /&gt;
Thanks and glad to have you here!. [[User:RafaelOrtiz|RafaelOrtiz]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Sj&amp;diff=49134</id>
		<title>User:Sj</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Sj&amp;diff=49134"/>
		<updated>2010-03-01T18:20:26Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Sj to Walter is a wanker 4:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
sj is Samuel Klein : [http://wiki.laptop.org/go/User:Sj @olpc] [http://en.wikipedia.org/wiki/User:Sj @en:wp]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:On openness and solving problems in education: &#039;&#039;Openness will be our greatest and most lasting strength.  If we shy away from it now it will never return.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User_talk:Cjl/Sandbox&amp;diff=49132</id>
		<title>User talk:Cjl/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User_talk:Cjl/Sandbox&amp;diff=49132"/>
		<updated>2010-03-01T18:20:08Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User talk:Cjl/Sandbox to Talk:Walter is a wanker 3/Sandbox:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;a gentle introduction... nice --[[User:Walter|Walter]] 01:06, 5 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== COVER IMAGE ==&lt;br /&gt;
&lt;br /&gt;
=== C is for collaboration ===&lt;br /&gt;
&lt;br /&gt;
Collaboration is a first-order Sugar experience: the interface always shows the presence of other learners who are available for collaboration all the time, not just when connected to the Internet. Students and teachers dialog with each other, support each other, critique each other, and share ideas. In designing your activity, you should consider how the collaboration might enhance the experience. Collaboration can range from sharing objects to real-time multi-pointer interaction. Pick the degree of collaboration that best meets your activity&#039;s learning (and entertainment) goals.&lt;br /&gt;
&lt;br /&gt;
=== V is for &amp;quot;view source&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Sugar accommodates a wide variety of users with different levels of skill in terms of reading and language and different levels of experience with computing. Sugar is easy to approach, yet it does not put an upper bound on personal expression. The learner is able to peel away layers and go deeper and deeper, with no restrictions. This allows the direct appropriation of ideas in whatever realm the learner is exploring: music, browsing, reading, writing, programming, or graphics. The source code of every activity is viewable through the system-wide view-source mechanism (Fn-space on an OLPC-XO-1; Alt-Shift-V on all computers). Think about other ways in which you can encourage the user to modify your activity. Look at TamTam, TurtleArt, Memorize, and Browse for inspirations.&lt;br /&gt;
&lt;br /&gt;
=== R is for reflection ===&lt;br /&gt;
&lt;br /&gt;
The Sugar “Journal” records each learner&#039;s actions: what they create and how they create it. It serves as a place for reflection and assessment of progress—the basis of a portfolio. Think about what object and meta-data your activity stores in the Journal. How can those data help the learner reflect upon their work.&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User_talk:Cjl/Random_musings&amp;diff=49130</id>
		<title>User talk:Cjl/Random musings</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User_talk:Cjl/Random_musings&amp;diff=49130"/>
		<updated>2010-03-01T18:20:08Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User talk:Cjl/Random musings to Talk:Walter is a wanker 3/Random musings:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Love it (DoI spoof) - I&#039;ve often wanted to make a mad-libs-style Declaration of Independence, as I&#039;ve already, on two separate occasions, done this type of surgery on it and found it very amenable to it (there is nothing new...).&lt;br /&gt;
[[User:MartinDengler|MartinDengler]] 12:26, 2 June 2008 (UTC)&lt;br /&gt;
:I think it is a testament to the brilliance of it&#039;s (original) author that it is so adaptable and that it&#039;s voice is still potent, I can only lament that of late, the U.S. Constitution does not seem to have held it&#039;s own in quite the same manner. *sigh* [[User:Cjl|Cjl]] 03:04, 4 June 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User_talk:Cjl&amp;diff=49128</id>
		<title>User talk:Cjl</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User_talk:Cjl&amp;diff=49128"/>
		<updated>2010-03-01T18:20:07Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User talk:Cjl to Talk:Walter is a wanker 3:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== wiki template transfer fu ==&lt;br /&gt;
&lt;br /&gt;
alas, not off the top of my head. It seems like the thing that&#039;s easily scriptable, but I wasn&#039;t able to find any such scripts/bots/fu via the Goog in a quick search. Maybe folks on #mediawiki would know? [[User:Mchua|Mchua]] 06:03, 16 May 2008 (UTC)&lt;br /&gt;
: [http://sourceforge.net/projects/pywikipediabot/ Pywikipediabot] has been a core part of a whole slate of use cases and libraries, some of them specific to bulk transfer of pages.  search for &amp;quot;pywikipediabot&amp;quot; and &amp;quot;clone&amp;quot; to find some relevant implementations.  [[User:Sj|+sj]]  [[User Talk:Sj|&amp;lt;font color=&amp;quot;#ff6996&amp;quot;&amp;gt;+&amp;lt;/font&amp;gt;]] 06:11, 18 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== extensions and plugins ==&lt;br /&gt;
&lt;br /&gt;
I won&#039;t have time for two weeks or so, but would be glad to help organizing a barnraising for this wiki, and to package and pass on the little extensions I&#039;ve written for the olpcwiki.  Do you want to start a project page on olpcwiki about it to organize people&#039;s thoughts?  There are actually other barnraisings to start too -- Uruguay has its own wiki, for instance -- so perhaps a http://wiki.laptop.org/go/Barnraisings page is in order. [[User:Sj|+sj]]  [[User Talk:Sj|&amp;lt;font color=&amp;quot;#ff6996&amp;quot;&amp;gt;+&amp;lt;/font&amp;gt;]] 22:39, 18 May 2008 (UTC)&lt;br /&gt;
: This was a good idea; on dfarning&#039;s suggestion, I&#039;ve moved your comment to [[Wiki Team]] (despite my aversion to CamelCase -- where&#039;s the style guide page for debating such madness?  :)&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Cjl/test&amp;diff=49126</id>
		<title>User:Cjl/test</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Cjl/test&amp;diff=49126"/>
		<updated>2010-03-01T18:20:07Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Cjl/test to Walter is a wanker 3/test:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Done adding GoogleTrans-en to relevant pages in Main Space, need to get to other namespaces still, but this is a start.&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Cjl/Sandbox3&amp;diff=49124</id>
		<title>User:Cjl/Sandbox3</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Cjl/Sandbox3&amp;diff=49124"/>
		<updated>2010-03-01T18:20:07Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Cjl/Sandbox3 to Walter is a wanker 3/Sandbox3:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Cjl/Sandbox2&amp;diff=49122</id>
		<title>User:Cjl/Sandbox2</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Cjl/Sandbox2&amp;diff=49122"/>
		<updated>2010-03-01T18:20:07Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Cjl/Sandbox2 to Walter is a wanker 3/Sandbox2:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pootle_Roles_and_Permissions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Translation_Team/Coordinator | Pootle Coordinator]] ==&lt;br /&gt;
&lt;br /&gt;
These volunteers support the efforts of the Translation Team by handling a variety of administrative tasks on the Pootle server infrastructure that require elevated privileges on the Pootle instance and hosting server.  &lt;br /&gt;
&lt;br /&gt;
* Adding a language&lt;br /&gt;
* Setting language parameters&lt;br /&gt;
* Adding the first language administrator(s)&lt;br /&gt;
* Adding a new software project&lt;br /&gt;
* Performing language administrator functions as needed&lt;br /&gt;
* Addresses Trac tickets with component = localization&lt;br /&gt;
&lt;br /&gt;
Suggested qualifications:&lt;br /&gt;
&lt;br /&gt;
== Language Administrator ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
see [[Translation_Team/Administration_QuickStart | Administration_QuickStart  ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Suggested qualifications:&lt;br /&gt;
&lt;br /&gt;
== Localizer / Translator ==&lt;br /&gt;
&lt;br /&gt;
Suggested qualifications:&lt;br /&gt;
&lt;br /&gt;
* Bi-lingual language skills.  It is not necesary that one of those languages be English.  It is possible ot convert the user interface strings of Pootle to a language other than English.  Using parts of the Translate Toolkit ([http://translate.sourceforge.net/wiki/toolkit/poswap poswap]) and off-line translation tools like [http://translate.sourceforge.net/wiki/virtaal/index Virtaal], it is possible to swap out the msgid strings to a language other than English for translation (assuming the other language is largely completely translated) and then change the msgid strings back to English for submission to Pootle.  For instance, poswapping msgid strings to Spanish and then translating from Spanish to Aymara. &lt;br /&gt;
&lt;br /&gt;
== Activity Developer ==&lt;br /&gt;
&lt;br /&gt;
Activity developers have an important role to play in preparing the software to be localized (internationalization or i18n).&lt;br /&gt;
&lt;br /&gt;
Suggested qualifications:&lt;br /&gt;
* some familiarity with [http://www.gnu.org/software/gettext/manual/gettext.html GNU gettext].&lt;br /&gt;
* some familiarity with the Sugar Labs git repository.&lt;br /&gt;
* some awareness of how Pootle interacts with the git repository. &lt;br /&gt;
: For instance:&lt;br /&gt;
:* The git tree needs to be set up in a standard form so that Pootle can easily be configured to commit PO files.&lt;br /&gt;
:*[[Translation_Team/i18n_Best_Practices#Do_not_touch_anything_inside_your_po_directory]] means the developer should not directly push PO files to the /po directory in the git repository as it can cause errors to be generated by Pootle.  Developers submitting localization of their own Activities should still work through the Pootle interface to submit string localizations of PO files.&lt;br /&gt;
:* As stated below, developers will need make user:pootle a committer on their Activity&#039;s git repository.&lt;br /&gt;
&lt;br /&gt;
== User:Pootle (in Sugar Labs git software repository) ==&lt;br /&gt;
&lt;br /&gt;
This is a special purpose user identity in git that acts as the committer of PO file changes to the software repository when a language administrator commits PO files from the Pootle server.  Activity developers need to add user:pootle as a committer to their project in git so tha translated PO files can be committed by language admins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pootle privilege levels&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Cjl/Sandbox&amp;diff=49120</id>
		<title>User:Cjl/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Cjl/Sandbox&amp;diff=49120"/>
		<updated>2010-03-01T18:20:07Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Cjl/Sandbox to Walter is a wanker 3/Sandbox:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==I.M.A.G.E.==&lt;br /&gt;
&lt;br /&gt;
If you are taking the time to write a Sugar activity or &amp;quot;sugarizing&amp;quot; some open-source software to run  in the Sugar environment, you will want to take some extra time to give it the best IMAGE you can.  The I.M.A.G.E. rubric does not represent the only factors that you should take into account when writing your activity, the [http://wiki.laptop.org/go/OLPC_Human_Interface_Guidelines| Human Interace Guidelines] represent a more complete discussion of design considerations.  IMAGE represents a few important factors that too often are overlooked that sometimes presents barriers to the wider use of a Sugar activity and therefore deserve to be pointed out specific attention. &lt;br /&gt;
&lt;br /&gt;
===I is for Internationalization (I18n)===&lt;br /&gt;
&lt;br /&gt;
Writing an activity is good, writing an activity that has been internationalized so that the user interface strings can be readily extracted using GNU gettext tools and deposited into the main Pootle server (probably in the Honey project) as a POT file for the Sugar / OLPC localization community to translate will allow your work to reach the widest possible audience around the world.&lt;br /&gt;
&lt;br /&gt;
===M is for Manual===&lt;br /&gt;
&lt;br /&gt;
Ideally activites should be self-explanatory, but that is not always going to be the case.  It can be very helpful to develop some user documentation in the form of a user manual.  The preferred means of doing this is the FLOSS Manuals toolset which allows for mixing and matching of chapters and has tools for allowing translationof those chapters.&lt;br /&gt;
&lt;br /&gt;
===A is for Activity testing===&lt;br /&gt;
&lt;br /&gt;
Activity authors generally want feedback from testers on many different platforms and environments.  The best way to get your activity tested thoroughly is to provide some initial testing scripts that cover the primary or essential functions of the activity.  At present the best way to do this is to use the Semantic MediaWiki templates on the OLPC wiki that are being developed by the [[http://wiki.laptop.org/go/Community_Testing| Community Activity Testing] group. Drafting your own testing scripts is the best way to get useful feedback from as many testers as possible as Sugar evolves through multiple releases over time.  Writing these testing scripts while your activity is in early phases of the development process and the various key features are fresh in your mind will be much easier than trying to produce them later.&lt;br /&gt;
&lt;br /&gt;
===G is for Generalization===&lt;br /&gt;
&lt;br /&gt;
Many early activities were developed with the constraints of running on XO hardware in mind, some taking that too far and actually hard-coded features like screen resolution.  With the development of Sugar packages in upstream distros and Sugar on a Stick, Sugar is now running on a far wider variety of hardware.&lt;br /&gt;
&lt;br /&gt;
Note:  Developing activities that take advantage of the unique features of the XO laptop is encouraged where it makes sense to do so.  XO laptop users (hundreds of thousands of children in deployments) represent the largest single group of Sugar users and probably will for some time. &lt;br /&gt;
&lt;br /&gt;
===E is for Educational content===&lt;br /&gt;
&lt;br /&gt;
Porting a first-person shooter like [http://wiki.laptop.org/go/Doom| Doom] to run in Sugar may be a fun trick, but it has realtively little redeeming social value.  Sugar is meant to be focused on learning, so writing an activity that has a strong learning element by itself is good, writing one that integrates with some additional learning content or lesson plan materials that can be packaged with it may be even better.&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Cjl/Random_musings&amp;diff=49118</id>
		<title>User:Cjl/Random musings</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Cjl/Random_musings&amp;diff=49118"/>
		<updated>2010-03-01T18:20:06Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Cjl/Random musings to Walter is a wanker 3/Random musings:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Preamble==&lt;br /&gt;
&lt;br /&gt;
When your &amp;lt;strike&amp;gt;so-called&amp;lt;/strike&amp;gt; leadership begins to throw around emotionally and politically charged words like &amp;quot;terrorist&amp;quot; and &amp;quot;fundamentalist&amp;quot; and you realize that they are referring to &#039;&#039;&#039;you&#039;&#039;&#039;, it might just be time to sit down, sharpen your quill pen and write yourself a manifesto.  If you are in Boston, you might also celebrate with a [http://en.wikipedia.org/wiki/Boston_tea_party tea party,] but not all acts of defiance need to be destructive, in fact many can be constructive or even Constructionist.&lt;br /&gt;
&lt;br /&gt;
A manifesto is not an easy document to craft, particularly when you have important business to take care of, like building tools to educate the world&#039;s children, so it might be a good idea to look around and see if there is any content in the public domain that you can easily modify, under the applicable copyright laws, as a starting point.  There is a useful list of them on [http://en.wikipedia.org/wiki/Manifesto Wikipedia] and even more are listed [http://www.manifestos.net/titles/ here.]  Among all of the manifestos listed on those sites, one has taken on meaning that transcends the boundaries of it&#039;s homeland and speaks deeply to many, especially those within it&#039;s homeland who still see it as a statement of hope in dark times.&lt;br /&gt;
&lt;br /&gt;
And so with apologies to the author, please consider this rough first draft of a &amp;quot;Sugar Manifesto&amp;quot;.  Out of respect for the original, no words have been removed, although those not applicable are in &amp;lt;strike&amp;gt;strikeout&amp;lt;/strike&amp;gt;, insertions appear in &#039;&#039;italics&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Sugar Manifesto==&lt;br /&gt;
&lt;br /&gt;
When in the Course of human events it becomes necessary for one &#039;&#039;group of&#039;&#039; people to dissolve the &amp;lt;strike&amp;gt;political&amp;lt;/strike&amp;gt; &#039;&#039;institutional&#039;&#039; bands which have connected them with another and to assume among the &amp;lt;strike&amp;gt;powers&amp;lt;/strike&amp;gt; &#039;&#039;friends&#039;&#039; of the earth &#039;&#039;and all of its children&#039;&#039;, the separate and equal station to which the Laws of Nature and of Nature&#039;s God &#039;&#039;as well as applicable copyright law&#039;&#039; entitle them, a decent respect to the opinions of mankind requires that they should declare the causes which impel them to the separation.&lt;br /&gt;
&lt;br /&gt;
We hold these truths to be self-evident, that all men are created equal&#039;&#039;, but that sadly, not all children are granted equal opportunity to learn&#039;&#039;, that they &amp;lt;strike&amp;gt;are&amp;lt;/strike&amp;gt; &#039;&#039;should be&#039;&#039; endowed by their &amp;lt;strike&amp;gt;Creator&amp;lt;/strike&amp;gt; &#039;&#039;Teachers&#039;&#039; with certain unalienable Rights, that among these are &#039;&#039;a&#039;&#039; Life&#039;&#039;time love of learning&#039;&#039;, Liberty &#039;&#039;(particularly the liberty to understand and even modify the source code of their learning tools)&#039;&#039; and the pursuit of Happiness &#039;&#039;and Knowledge on their own terms&#039;&#039;. — That to secure these rights, &amp;lt;strike&amp;gt;Governments&amp;lt;/strike&amp;gt; &#039;&#039;software projects&#039;&#039; are instituted among Men &#039;&#039;and Women, but especially coders&#039;&#039;, deriving their just powers from the consent of the &amp;lt;strike&amp;gt;governed&amp;lt;/strike&amp;gt; &#039;&#039;participants&#039;&#039;, — That whenever any &amp;lt;strike&amp;gt;Form of Government&amp;lt;/strike&amp;gt; &#039;&#039;institution&#039;&#039; becomes destructive of these ends &#039;&#039;or simply loses its path and moral compass&#039;&#039;, it is the Right of the People &#039;&#039;actually providing much of the effort&#039;&#039; to &amp;lt;strike&amp;gt;alter or to abolish&amp;lt;/strike&amp;gt; &#039;&#039;leave&#039;&#039; it &#039;&#039;with heartfelt regret&#039;&#039;, and to institute &#039;&#039;a&#039;&#039; new &amp;lt;strike&amp;gt;Government&amp;lt;/strike&amp;gt;&#039;&#039;project&#039;&#039;, laying its foundation on such principles and organizing its powers in such form, as to them shall seem most likely to effect their Safety &#039;&#039;to produce open-source tools&#039;&#039; and Happiness. Prudence, indeed, will dictate that &amp;lt;strike&amp;gt;Governments&amp;lt;/strike&amp;gt; &#039;&#039;institutions&#039;&#039; long established should not be changed for light and transient causes; and accordingly all experience hath shewn that mankind are more disposed to suffer, while evils are sufferable than to right themselves by abolishing the forms to which they are accustomed. But when a long train of abuses and usurpations, pursuing invariably the same Object evinces a design to reduce them under absolute Despotism, it is their right, it is their duty, to throw off such &amp;lt;strike&amp;gt;Government&amp;lt;/strike&amp;gt; &#039;&#039;leadership&#039;&#039;, and to provide new Guards for their future security. — Such has been the patient sufferance of these &amp;lt;strike&amp;gt;Colonies&amp;lt;/strike&amp;gt; &#039;&#039;coders&#039;&#039;; and such is now the necessity which constrains them to alter their former Systems of &amp;lt;strike&amp;gt;Government&amp;lt;/strike&amp;gt; &#039;&#039;collaboration&#039;&#039;. The history of the present &amp;lt;strike&amp;gt;King of Great Britain&amp;lt;/strike&amp;gt; &#039;&#039;Chairman&#039;&#039; is a history of repeated injuries and usurpations, all having in direct object the establishment of an absolute Tyranny over &amp;lt;strike&amp;gt;these States&amp;lt;/strike&amp;gt; &#039;&#039;the movement to bring the benefits of Constructionist learning theories and advanced learning technology to the children of the world&#039;&#039;. To prove this, let Facts be submitted to a candid world.&lt;br /&gt;
&lt;br /&gt;
List of grievances left as an exercise to the reader, for the original listing see [http://www.ushistory.org/declaration/document/index.htm here].&lt;br /&gt;
&lt;br /&gt;
==Postscript==&lt;br /&gt;
&lt;br /&gt;
The intent of this wordplay is to be amusing and clever; however, it may well fail at being either of those, it is NOT intended to be inflammatory.  I personally have the deepest respect for &amp;lt;u&amp;gt;&amp;lt;b&amp;gt;ALL&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt; OLPC contributors (I&#039;m trying to be one myself) and I find certain recent events to be an unfortunate distraction from the important business at hand; however necessary they may have been.  I harbor a deep and abiding hope that all parties can agree to disagree on certain means-to-ends and to cooperate wherever possible on the important task of improving the lives of children throughout the world.&lt;br /&gt;
&lt;br /&gt;
[[Sugar_Labs]] contains a more serious treatment of this topic, but I was moved to draft this in response to the flurry of edits on [[Sugar Labs/Announcing Sugar Labs]].&lt;br /&gt;
&lt;br /&gt;
[[User:Cjl|Cjl]] 20:50, 15 May 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Cjl&amp;diff=49116</id>
		<title>User:Cjl</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Cjl&amp;diff=49116"/>
		<updated>2010-03-01T18:20:06Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Cjl to Walter is a wanker 3:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Chris Leonard, PhD==&lt;br /&gt;
You might also know me from [http://wiki.laptop.org/go/User:Cjl as User:Cjl] on the OLPC wiki or IRC channels, my &amp;quot;day job&amp;quot; is as a biomedical researcher who happens to also run an IT shop at a small pharmaceutical company with some very specialized requirements for blending IT and science. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Other stuff==&lt;br /&gt;
*[[User:Cjl/Random musings]] &lt;br /&gt;
*[[User:Cjl/Sandbox]]&lt;br /&gt;
*[[User:Cjl/Sandbox2]]&lt;br /&gt;
*[[User:Cjl/Sandbox3]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User_talk:Walter&amp;diff=49114</id>
		<title>User talk:Walter</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User_talk:Walter&amp;diff=49114"/>
		<updated>2010-03-01T18:19:44Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User talk:Walter to Talk:Walter is a wanker 2:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First to type on your user:talk page, what an honor.  When it all seems like too much, as I&#039;m sure it must, I&#039;ve left something [[User:Cjl/Random_musings| here]] that I hope you might find amusing.  [[User:Cjl|Cjl]] 20:56, 15 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thought on translations ==&lt;br /&gt;
&lt;br /&gt;
Before you spend a lot of time on translations via the translations template, consider the potential of the &#039;&#039;GoogleTrans-xx&#039;&#039; templates I&#039;m starting to develop/deploy on OLPC wiki.  Note, it will require the same plugin/extension magic-dust currently installed on the OLPC wiki to be sprinkled here before they will work.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;GoogleTrans-en&#039;&#039; for starting from English page [http://wiki.laptop.org/go/The_OLPC_Wiki#Machine_Translations (example)].  Click on Spanish and continue browsing rest of wiki in espanol inside Google frame.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;GoogleTrans-es&#039;&#039; for starting from Spanish page [http://wiki.laptop.org/go/Lambayeque (example)].  Click English and see that page and any linked lang-es page in English.&lt;br /&gt;
&lt;br /&gt;
* 20-odd other variations possible&lt;br /&gt;
&lt;br /&gt;
The idea is that you want to lower language barrier, but you don&#039;t want your most valuable trilingual (1 lang-en, 2 lang-xx, 3 wiki/Python/C/Linux/Sugar/etc.) assets spending a lot of time on keeping up with rapidly evolving edits.  By the time a page becomes stable, it&#039;s probably too late to get meaningful input from a mono or bi-lingual non-lang-en audience (like teachers, local coders, etc.).&lt;br /&gt;
&lt;br /&gt;
For wiki pages, I think that any translation &#039;&#039;&#039;now&#039;&#039;&#039; is better than a great translation &#039;&#039;&#039;later&#039;&#039;&#039;.  Allows you to lower language barrier immediately (in a usually good enough manner) and reserve human translation effort for Pootle and tech-phrasing sensitive pages. Try the provided links to OLPC wiki and let me know what you think.  [[User:Cjl|Cjl]] 19:39, 20 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I was playing with it on the OLPC site earlier today. I agree, it is a decent compromise that is resource-efficient. --[[User:Walter|Walter]] 21:23, 20 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Current events date convention ==&lt;br /&gt;
&lt;br /&gt;
Walter,  I&#039;m not sure I get the link-naming convention you are using on [[Sugar Labs/Current Events/Archive]].  The text there that says &amp;quot;2008-06-16&amp;quot; links to [[SugarLabs:Current_events/Archive/2006-06-24]].  Is one start of week and the other end of week?  You and I have reverted each other on this (maybe even twice), and that just seems like a silly misunderstanding to have. In the spirit of [http://en.wikipedia.org/wiki/Wikipedia:BRD WP:BRD], I may just be missing the convention you are using and I&#039;d like to I understand it.  [[User:Cjl|Cjl]] 18:14, 24 June 2008 (UTC)&lt;br /&gt;
:I need to move all the pages to the correct date. I accidentally started naming them based on the date I moved them into the archive instead of the date I created them. --[[User:Walter|Walter]] 21:31, 24 June 2008 (UTC)&lt;br /&gt;
::I was assuming the date of publication on IAEP was the operative date and I had crossed-checked against the archives there to do the last rename/relinking I did yesterday, which you reverted today.  No point in operating at cross-purposes, so much to do to move forward without tripping over each other. [[User:Cjl|Cjl]] 21:36, 24 June 2008 (UTC)&lt;br /&gt;
:::I must be tired (I was up all night flying over the Atlantic and in meetings all day today--hence the late posting). I thought I was exposing the publication dates in IAEP even though the pages in the wiki. I defer to you. --[[User:Walter|Walter]] 21:41, 24 June 2008 (UTC)&lt;br /&gt;
::I&#039;ll take another pass at it, carefully checking against the IAEP archive pages again.  I do much of my wiki editing from 22:00 - 03:00 local time, so I&#039;m just as susceptible to error as the next guy :-)  [[User:Cjl|Cjl]] 21:49, 24 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== transactions discussion ==&lt;br /&gt;
&lt;br /&gt;
Moved to [[Sugar_Labs/Governance/Transactions]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/sandbox/Neighborhood&amp;diff=49112</id>
		<title>User:Walter/sandbox/Neighborhood</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/sandbox/Neighborhood&amp;diff=49112"/>
		<updated>2010-03-01T18:19:43Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/sandbox/Neighborhood to Walter is a wanker 2/sandbox/Neighborhood:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neighborhood view==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:View-buttons-neighborhood.png]]&lt;br /&gt;
|-&lt;br /&gt;
|The Neighborhood view is accessed by clicking on the Neighborhood icon on the Frame or by pressing the F1 key ([[OLPC#Keyboard shortcuts|&amp;lt;font color=&amp;quot;#6ebe46&amp;quot;&amp;gt;OLPC-XO-1-specific hint&amp;lt;/font&amp;gt;]]). &lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Neighborhood-view-menu.png | thumb | left| 523px ]]&lt;br /&gt;
|-&lt;br /&gt;
|The Neighborhood view is used for connecting to the Internet and collaborating with others.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
;1. Search menu: The search field can be used to find people, activities, or access points.&lt;br /&gt;
;2. Shared activities: Activities that are being shared appear as icons in the Neighborhood view. By clicking on the icon, you can join the activity.&lt;br /&gt;
;3. XO icon: Other Sugar users appear in the Neighborhood view. By hovering over an XO icon, you can discover the nickname of that person and can invite them to be a friend or join you in a collaboration.&lt;br /&gt;
;4. Mesh portal: A mesh portal is used to connect to a school server or other computers on a mesh (802.11s) network.&lt;br /&gt;
;5. Access point: WiFi hotspots (Internet access points) are displayed as circles in the Neighborhood view. If you hover over a circle, the name of the access point (ESSID) is displayed. You connect to a hotspot clicking once in the circle; the interior of the circle will blink while it is trying to connect. Once you are connected, the outside of the circle will turn white. You may be prompted to enter a key, if it is required by your access point. To disconnect, simply choose that option from the menu when you hover over the circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:General public]]&lt;br /&gt;
[[Category:Getting started]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/sandbox/Home&amp;diff=49110</id>
		<title>User:Walter/sandbox/Home</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/sandbox/Home&amp;diff=49110"/>
		<updated>2010-03-01T18:19:43Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/sandbox/Home to Walter is a wanker 2/sandbox/Home:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Home view==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:View-buttons-home.png]]&lt;br /&gt;
|-&lt;br /&gt;
|The Home view is accessed by clicking on the Home icon on the Frame or by pressing the F3 key ([[OLPC#Keyboard shortcuts|&amp;lt;font color=&amp;quot;#6ebe46&amp;quot;&amp;gt;OLPC-XO-1-specific hint&amp;lt;/font&amp;gt;]]). &lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Home-view-menu.png | thumb | left| 596px ]]&lt;br /&gt;
|-&lt;br /&gt;
|The Home view is used for launching activities and accessing the Journal.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
;1. Search menu: The search field can be used to find activities and documents.&lt;br /&gt;
;2. View modes: There are multiple versions of the Home view: a ring, a [[#List view | list]], and a random view.&lt;br /&gt;
;3. Activity icon: Clicking on an activity icon will launch that activity (causing it to appear on the Frame). Only activities that have been &amp;quot;starred&amp;quot; will appear in this view. (Please see the [[#List view]] below for more details.)&lt;br /&gt;
;4. XO icon: Hovering over the XO in the center of the Home view brings up a [[#XO menu | menu]] and access to the [[#Sugar control panel | Sugar control panel]].&lt;br /&gt;
;5. Active-activity icon: The icon of the currently active activity appears under the XO icon.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===List view===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:List-view-menu.png | thumb | left | 591px ]]&lt;br /&gt;
|-&lt;br /&gt;
|The list view is used for managing activities.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
;1. Activity entry: Each entry in the list has: a star (for marking those activities that will appear in the other Home views); an icon; a title; a version number; and an install date.&lt;br /&gt;
;2. Scroll bar: The activity list may extend beyond the screen. A scroll bar is used to move through the list.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Freeform view===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Freeformview.png | thumb | left | 600px ]]&lt;br /&gt;
|-&lt;br /&gt;
| The “freeform” Home view (shown as a mock-up) functions the same as the “ring” Home view, but the icons are arrayed randomly instead of in a circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===XO menu===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:XO-menu.png | thumb | left | 266px]]&lt;br /&gt;
|-&lt;br /&gt;
|The hover menu that appears over the XO icon is used for accessing the [[#Sugar control panel|Sugar control panel]] and to shutdown or restart the computer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sugar control panel===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Sugar-control-panel.png | thumb | left | 600px]]&lt;br /&gt;
|-&lt;br /&gt;
|The control panel is used to set a variety of Sugar settings, including the default Jabber server, the XO icon colors, etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:General public]]&lt;br /&gt;
[[Category:Getting started]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/sandbox/Frame&amp;diff=49108</id>
		<title>User:Walter/sandbox/Frame</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/sandbox/Frame&amp;diff=49108"/>
		<updated>2010-03-01T18:19:43Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/sandbox/Frame to Walter is a wanker 2/sandbox/Frame:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==The Frame==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|The Frame is accessed by moving the cursor into any corner or by typing Alt-Shift-F ([[OLPC#Keyboard shortcuts|&amp;lt;font color=&amp;quot;#6ebe46&amp;quot;&amp;gt;OLPC-XO-1-specific hint&amp;lt;/font&amp;gt;]]). &lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Frame.png | thumb | left| 594px ]]&lt;br /&gt;
|-&lt;br /&gt;
|The Frame, which is accessible from any view, contains peripheral information that is used across all views, incoming invitations and notifications, a clipboard, and buddies, and open activities.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
;1. Clipboard: The left-hand edge of the Frame serves as a clipboard. Objects such as images and text can be dragged to and from the clipboard from and to activities.&lt;br /&gt;
;2. Zoom menu: The View zoom menu is on the upper-left edge of the Frame.&lt;br /&gt;
;3. Open activity list: The list of currently open activities appear on the top edge of the frame; the active activity is highlighted. (The Journal is always present here.)&lt;br /&gt;
;4. Active buddy list: People with whom you are currently collaborating appear on the right edge of the Frame.&lt;br /&gt;
;5. System status: Battery, speaker, and network status are accessed from the lower edge of the Frame.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:General public]]&lt;br /&gt;
[[Category:Getting started]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/sandbox/Connecting&amp;diff=49106</id>
		<title>User:Walter/sandbox/Connecting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/sandbox/Connecting&amp;diff=49106"/>
		<updated>2010-03-01T18:19:43Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/sandbox/Connecting to Walter is a wanker 2/sandbox/Connecting:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Connected ==&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to connect to the Internet:&lt;br /&gt;
* wireless access point (WiFi hotspot);&lt;br /&gt;
* “School Server” mesh network;&lt;br /&gt;
* “simple” mesh network, which lets you collaborate directly with other Sugar users;&lt;br /&gt;
* wired network—may require an external adapter ([[OLPC#USB Ethernet adapters|&amp;lt;font color=&amp;quot;#6ebe46&amp;quot;&amp;gt;OLPC-XO-1-specific hint&amp;lt;/font&amp;gt;]]).&lt;br /&gt;
You make your connection from the Neighborhood view. Your current connection status is shown on the Frame.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Go to the Neighborhood view====&lt;br /&gt;
&amp;lt;font color=&amp;quot;#aaaaaa&amp;quot;&amp;gt;previous&amp;lt;/font&amp;gt; | [[#Step 2: Choose an access point | next]]&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Neighborhood-view.png | thumb | left | 600px]]&lt;br /&gt;
|-&lt;br /&gt;
|Go to the Neighborhood view to connect to an access point.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Hint:&#039;&#039;&#039; The Neighborhood view is accessed by clicking on the [[:Image:Neighborhood key.png | Neighborhood icon]] on the Frame [[Image:Neighborhood key.png]] or by pressing the F1 key ([[OLPC#Keyboard shortcuts|&amp;lt;font color=&amp;quot;#6ebe46&amp;quot;&amp;gt;OLPC-XO-1-specific hint&amp;lt;/font&amp;gt;]]).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Step 2: Choose an access point====&lt;br /&gt;
[[#Step 1: Go to the Neighborhood view | previous]] | [[#Step 3: Activate a connection | next]]&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Neighborhood-view-selecting-AP.png | thumb | left | 600px]]&lt;br /&gt;
|-&lt;br /&gt;
|Networks (access points) are represented by circles on the Neighborhood view. Networks can be identified by hovering over the circles: an access point is identified by its name (ESSID); a mesh-portal point—represented by a series of concentric circles—is identified by its channel number (1, 6, or 11). You can also search for an access point by name in the search bar at the top of the page. &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Signal strength is indicated by the fill-level of the circle. The color of the circle is based upon the name of the access point. Networks that are locked are identified by a badge. Access points that have been previously used (favorites) are identified by a star.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Step 3: Activate a connection====&lt;br /&gt;
[[#Step 2: Choose an access point | previous]] | [[#Step 4: Checking the connection | next]]&lt;br /&gt;
&lt;br /&gt;
To activate a network connection, click once inside the circle that corresponds to your chosen access point (or click on the ✔ Connect option in the hover menu). ([[OLPC#Click|&amp;lt;font color=&amp;quot;#6ebe46&amp;quot;&amp;gt;OLPC-XO-1-specific hint&amp;lt;/font&amp;gt;]])&lt;br /&gt;
&lt;br /&gt;
While the connection is being established, the inside of the circle will blink. Once the connection is established, the outside of the circle will turn white. If for some reason the connection failed, the circle will stop blinking. Sometimes it is necessary to try several times before the connection is established.&lt;br /&gt;
&lt;br /&gt;
If the access point requires a key, you will be prompted. Note that different types of access points require different types of keys: be sure to select the correct type from the pull-down menu that is presented. Some access points (such as the Apple Extreme®) will only work with a hexadecimal value. If you have a password or passphrase, go to Hex Converter to get the hex key. Also, with the Apple Extreme you need to set “shared key”. Most other access points prefer the “open key” setting when using WEP.&lt;br /&gt;
&lt;br /&gt;
====Step 4: Checking the connection====&lt;br /&gt;
[[#Step 3: Activate a connection | previous]] | [[#Additional hints | next]]&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Neighborhood-view-with-hover-menu.png | thumb | left | 600px]]&lt;br /&gt;
|-&lt;br /&gt;
|The connection status is detailed in a hover menu.&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Neighborhood-view-with-frame-showing-connection-with-hover-menu.png | thumb | left | 600px]]&lt;br /&gt;
|-&lt;br /&gt;
|You can check the status of your connection from the Frame (from any view). By hovering over the circle icon, you will find details about your connection status in a hover menu.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Additional hints====&lt;br /&gt;
[[#Step 4: Checking the connection | previous]] | [[#Getting Connected | top of page]]&lt;br /&gt;
{| width=600&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:Neighborhood_key.png]] || valign=&amp;quot;top&amp;quot; | You make your connection from the Neighborhood view.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:Frame-detail-status.png | thumb | 200px]] || valign=&amp;quot;top&amp;quot; | Your current connection status is shown on the Frame.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:AP-level.png]] || valign=&amp;quot;top&amp;quot; | Access points are represented by circles. The fill level indicates signal strength.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:AP-lock.png]] || valign=&amp;quot;top&amp;quot; | Access points that require keys have a “locked” badge. The color of the circle is calculated from the ESSID of the access point. The name of the access point is displayed when you hover over it.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:AP-blink.gif]] || valign=&amp;quot;top&amp;quot; | You connect by “clicking” in the center of the circle. The center of the circle will blink while the laptop is trying to connect.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:AP-white.png]] || valign=&amp;quot;top&amp;quot; | Once you are connected, the rim of the circle turns white. If the attempt to connect fails, the circle will stop blinking, but the rim will not turn white. Try again—it sometimes takes 2–3 tries to connect.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | || valign=&amp;quot;top&amp;quot; | To disconnect, select “Disconnect” from the hover menu that appears in either of the network status menus (See [[#Step 4: Checking the connection | Step 4]] above).&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:Mesh-icon.png]] || valign=&amp;quot;top&amp;quot; | Mesh portals are represented by a series of concentric circles.  The color of a mesh portal is the same as your XO color.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | || If your computer is “mesh enabled” and you don&#039;t specify a network, you will automatically be joined to a simple mesh network, enabling you to collaborate with others in the mesh, but not necessarily to access the Internet.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:Wireless-key-required.png]] || valign=&amp;quot;top&amp;quot; | You will be prompted if the access point requires a key. ([[OLPC#Connect|&amp;lt;font color=&amp;quot;#6ebe46&amp;quot;&amp;gt;OLPC-XO-1-specific hint&amp;lt;/font&amp;gt;]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I copied this content to [http://en.flossmanuals.net/bin/view/Testing/TestChapter FM] ([[User:Dfarning|dfarning]] 02:55, 10 July 2008 (UTC)) &lt;br /&gt;
&lt;br /&gt;
[[Category:General public]]&lt;br /&gt;
[[Category:Getting started]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/sandbox&amp;diff=49104</id>
		<title>User:Walter/sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/sandbox&amp;diff=49104"/>
		<updated>2010-03-01T18:19:43Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/sandbox to Walter is a wanker 2/sandbox:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki-based Getting Started Guide (based on Joyride 2037)&lt;br /&gt;
&lt;br /&gt;
* [[User:Walter/sandbox/Connecting | Getting Connected]]&lt;br /&gt;
* [[User:Walter/sandbox/Home | Home View]]&lt;br /&gt;
* [[User:Walter/sandbox/Neighborhood | Neighborhood View]]&lt;br /&gt;
* [[User:Walter/sandbox/Frame | The Frame]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; These pages are largely obsolesced by the [http://flossmanuals.net/Sugar Sugar FLOSS Manual] and the 8.2 Help activity, whose content is available online at http://www.laptop.org/manual/&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/favoritesview.py&amp;diff=49102</id>
		<title>User:Walter/favoritesview.py</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/favoritesview.py&amp;diff=49102"/>
		<updated>2010-03-01T18:19:43Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/favoritesview.py to Walter is a wanker 2/favoritesview.py:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==/usr/share/sugar/shell/view/home/favoritesview.py==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Copyright (C) 2006-2007 Red Hat, Inc.&lt;br /&gt;
# Copyright (C) 2008 One Laptop Per Child&lt;br /&gt;
#&lt;br /&gt;
# This program is free software; you can redistribute it and/or modify&lt;br /&gt;
# it under the terms of the GNU General Public License as published by&lt;br /&gt;
# the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
# (at your option) any later version.&lt;br /&gt;
#&lt;br /&gt;
# This program is distributed in the hope that it will be useful,&lt;br /&gt;
# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
# GNU General Public License for more details.&lt;br /&gt;
#&lt;br /&gt;
# You should have received a copy of the GNU General Public License&lt;br /&gt;
# along with this program; if not, write to the Free Software&lt;br /&gt;
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA&lt;br /&gt;
&lt;br /&gt;
import logging&lt;br /&gt;
from gettext import gettext as _&lt;br /&gt;
&lt;br /&gt;
import gobject&lt;br /&gt;
import gtk&lt;br /&gt;
import hippo&lt;br /&gt;
&lt;br /&gt;
from sugar.graphics import style&lt;br /&gt;
from sugar.graphics.palette import Palette&lt;br /&gt;
from sugar.graphics.icon import Icon, CanvasIcon&lt;br /&gt;
from sugar.graphics.menuitem import MenuItem&lt;br /&gt;
from sugar.graphics.alert import Alert&lt;br /&gt;
from sugar.profile import get_profile&lt;br /&gt;
from sugar import activity&lt;br /&gt;
&lt;br /&gt;
import view.Shell&lt;br /&gt;
from view.palettes import JournalPalette&lt;br /&gt;
from view.palettes import CurrentActivityPalette, ActivityPalette&lt;br /&gt;
from view.home.MyIcon import MyIcon&lt;br /&gt;
from view.home import favoriteslayout&lt;br /&gt;
from model import shellmodel&lt;br /&gt;
from model.shellmodel import ShellModel&lt;br /&gt;
from hardware import schoolserver&lt;br /&gt;
from hardware.schoolserver import RegisterError&lt;br /&gt;
from controlpanel.gui import ControlPanel&lt;br /&gt;
from session import get_session_manager&lt;br /&gt;
&lt;br /&gt;
_logger = logging.getLogger(&#039;FavoritesView&#039;)&lt;br /&gt;
&lt;br /&gt;
_ICON_DND_TARGET = (&#039;activity-icon&#039;, gtk.TARGET_SAME_WIDGET, 0)&lt;br /&gt;
&lt;br /&gt;
# enumerate the various layout types we will display in the dropdown palette.&lt;br /&gt;
# add a constant for your layout here, and add it to the _LAYOUT_MAP to get&lt;br /&gt;
# it to appear in the palette.&lt;br /&gt;
RING_LAYOUT, BOX_LAYOUT, TRIANGLE_LAYOUT, SUNFLOWER_LAYOUT, MY_LAYOUT, RANDOM_LAYOUT = \&lt;br /&gt;
             xrange(6)&lt;br /&gt;
&lt;br /&gt;
_LAYOUT_MAP = {RING_LAYOUT: favoriteslayout.RingLayout,&lt;br /&gt;
               BOX_LAYOUT: favoriteslayout.BoxLayout,&lt;br /&gt;
               TRIANGLE_LAYOUT: favoriteslayout.TriangleLayout,&lt;br /&gt;
               SUNFLOWER_LAYOUT: favoriteslayout.SunflowerLayout,&lt;br /&gt;
               MY_LAYOUT: favoriteslayout.MyLayout,&lt;br /&gt;
               RANDOM_LAYOUT: favoriteslayout.RandomLayout}&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Map numeric layout identifiers to uninstantiated subclasses of&lt;br /&gt;
`FavoritesLayout` which implement the layouts.  Additional information&lt;br /&gt;
about the layout can be accessed with fields of the class.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class FavoritesView(hippo.Canvas):&lt;br /&gt;
    __gtype_name__ = &#039;SugarFavoritesView&#039;&lt;br /&gt;
&lt;br /&gt;
    __gsignals__ = {&lt;br /&gt;
        &#039;erase-activated&#039; : (gobject.SIGNAL_RUN_FIRST,&lt;br /&gt;
                             gobject.TYPE_NONE, ([str])),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, **kwargs):&lt;br /&gt;
        gobject.GObject.__init__(self, **kwargs)&lt;br /&gt;
&lt;br /&gt;
        # DND stuff&lt;br /&gt;
        self._pressed_button = None&lt;br /&gt;
        self._press_start_x = None&lt;br /&gt;
        self._press_start_y = None&lt;br /&gt;
        self._last_clicked_icon = None&lt;br /&gt;
&lt;br /&gt;
        self._box = hippo.CanvasBox()&lt;br /&gt;
        self._box.props.background_color = style.COLOR_WHITE.get_int()&lt;br /&gt;
        self.set_root(self._box)&lt;br /&gt;
&lt;br /&gt;
        self._my_icon = None&lt;br /&gt;
        self._current_activity = None&lt;br /&gt;
        self._layout = None&lt;br /&gt;
        self._alert = None&lt;br /&gt;
&lt;br /&gt;
        registry = activity.get_registry()&lt;br /&gt;
        registry.connect(&#039;activity-added&#039;, self.__activity_added_cb)&lt;br /&gt;
        registry.connect(&#039;activity-removed&#039;, self.__activity_removed_cb)&lt;br /&gt;
        registry.connect(&#039;activity-changed&#039;, self.__activity_changed_cb)&lt;br /&gt;
&lt;br /&gt;
        # More DND stuff&lt;br /&gt;
        self.add_events(gtk.gdk.BUTTON_PRESS_MASK |&lt;br /&gt;
                        gtk.gdk.POINTER_MOTION_HINT_MASK)&lt;br /&gt;
        self.connect(&#039;motion-notify-event&#039;, self.__motion_notify_event_cb)&lt;br /&gt;
        self.connect(&#039;button-press-event&#039;, self.__button_press_event_cb)&lt;br /&gt;
        self.connect(&#039;drag-begin&#039;, self.__drag_begin_cb)&lt;br /&gt;
        self.connect(&#039;drag-motion&#039;, self.__drag_motion_cb)&lt;br /&gt;
        self.connect(&#039;drag-drop&#039;, self.__drag_drop_cb)&lt;br /&gt;
        self.connect(&#039;drag-data-received&#039;, self.__drag_data_received_cb)&lt;br /&gt;
&lt;br /&gt;
    def _add_activity(self, activity_info):&lt;br /&gt;
        icon = ActivityIcon(activity_info)&lt;br /&gt;
        icon.connect(&#039;erase-activated&#039;, self.__erase_activated_cb)&lt;br /&gt;
        icon.props.size = style.STANDARD_ICON_SIZE&lt;br /&gt;
        self._layout.append(icon)&lt;br /&gt;
&lt;br /&gt;
    def __erase_activated_cb(self, activity_icon, bundle_id):&lt;br /&gt;
        self.emit(&#039;erase-activated&#039;, bundle_id)&lt;br /&gt;
&lt;br /&gt;
    def _get_activities_cb(self, activity_list):&lt;br /&gt;
        for info in activity_list:&lt;br /&gt;
            if info.favorite and info.bundle_id != &amp;quot;org.laptop.JournalActivity&amp;quot;:&lt;br /&gt;
                self._add_activity(info)&lt;br /&gt;
&lt;br /&gt;
    def __activity_added_cb(self, activity_registry, activity_info):&lt;br /&gt;
        if activity_info.favorite and \&lt;br /&gt;
                activity_info.bundle_id != &amp;quot;org.laptop.JournalActivity&amp;quot;:&lt;br /&gt;
            self._add_activity(activity_info)&lt;br /&gt;
&lt;br /&gt;
    def _find_activity_icon(self, bundle_id, version):&lt;br /&gt;
        for icon in self._box.get_children():&lt;br /&gt;
            if isinstance(icon, ActivityIcon) and \&lt;br /&gt;
                    icon.bundle_id == bundle_id and icon.version == version:&lt;br /&gt;
                return icon&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    def __activity_removed_cb(self, activity_registry, activity_info):&lt;br /&gt;
        icon = self._find_activity_icon(activity_info.bundle_id,&lt;br /&gt;
                activity_info.version)&lt;br /&gt;
        if icon is not None:&lt;br /&gt;
            self._layout.remove(icon)&lt;br /&gt;
&lt;br /&gt;
    def __activity_changed_cb(self, activity_registry, activity_info):&lt;br /&gt;
        if activity_info.bundle_id == &#039;org.laptop.JournalActivity&#039;:&lt;br /&gt;
            return&lt;br /&gt;
        icon = self._find_activity_icon(activity_info.bundle_id,&lt;br /&gt;
                activity_info.version)&lt;br /&gt;
        if icon is not None:&lt;br /&gt;
            self._box.remove(icon)&lt;br /&gt;
        if activity_info.favorite:&lt;br /&gt;
            self._add_activity(activity_info)&lt;br /&gt;
&lt;br /&gt;
    def do_size_allocate(self, allocation):&lt;br /&gt;
        width = allocation.width        &lt;br /&gt;
        height = allocation.height&lt;br /&gt;
&lt;br /&gt;
        min_w_, my_icon_width = self._my_icon.get_width_request()&lt;br /&gt;
        min_h_, my_icon_height = self._my_icon.get_height_request(my_icon_width)&lt;br /&gt;
        x = (width - my_icon_width) / 2&lt;br /&gt;
        y = (height - my_icon_height - style.GRID_CELL_SIZE) / 2&lt;br /&gt;
        self._layout.move_icon(self._my_icon, x, y, locked=True)&lt;br /&gt;
&lt;br /&gt;
        min_w_, icon_width = self._current_activity.get_width_request()&lt;br /&gt;
        min_h_, icon_height = \&lt;br /&gt;
                self._current_activity.get_height_request(icon_width)&lt;br /&gt;
        x = (width - icon_width) / 2&lt;br /&gt;
        y = (height - my_icon_height - style.GRID_CELL_SIZE) / 2 + \&lt;br /&gt;
                my_icon_height + style.DEFAULT_PADDING&lt;br /&gt;
        self._layout.move_icon(self._current_activity, x, y, locked=True)&lt;br /&gt;
&lt;br /&gt;
        hippo.Canvas.do_size_allocate(self, allocation)&lt;br /&gt;
&lt;br /&gt;
    def enable_xo_palette(self):&lt;br /&gt;
        self._my_icon.enable_palette()&lt;br /&gt;
        if self._my_icon.register_menu is not None:&lt;br /&gt;
            self._my_icon.register_menu.connect(&#039;activate&#039;, &lt;br /&gt;
                                                self.__register_activate_cb)&lt;br /&gt;
&lt;br /&gt;
    # TODO: Dnd methods. This should be merged somehow inside hippo-canvas.&lt;br /&gt;
    def __button_press_event_cb(self, widget, event):&lt;br /&gt;
        if event.button == 1 and event.type == gtk.gdk.BUTTON_PRESS:&lt;br /&gt;
            self._last_clicked_icon = self._get_icon_at_coords(event.x, event.y)&lt;br /&gt;
            if self._last_clicked_icon is not None:&lt;br /&gt;
                self._pressed_button = event.button&lt;br /&gt;
                self._press_start_x = event.x&lt;br /&gt;
                self._press_start_y = event.y&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    def _get_icon_at_coords(self, x, y):&lt;br /&gt;
        for icon in self._box.get_children():&lt;br /&gt;
            icon_x, icon_y = icon.get_context().translate_to_widget(icon)&lt;br /&gt;
            icon_width, icon_height = icon.get_allocation()&lt;br /&gt;
&lt;br /&gt;
            if (x &amp;gt;= icon_x ) and (x &amp;lt;= icon_x + icon_width) and \&lt;br /&gt;
                    (y &amp;gt;= icon_y ) and (y &amp;lt;= icon_y + icon_height) and \&lt;br /&gt;
                    isinstance(icon, ActivityIcon):&lt;br /&gt;
                return icon&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    def __motion_notify_event_cb(self, widget, event):&lt;br /&gt;
        if not self._pressed_button:&lt;br /&gt;
            return False&lt;br /&gt;
        &lt;br /&gt;
        # if the mouse button is not pressed, no drag should occurr&lt;br /&gt;
        if not event.state &amp;amp; gtk.gdk.BUTTON1_MASK:&lt;br /&gt;
            self._pressed_button = None&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
        if event.is_hint:&lt;br /&gt;
            x, y, state_ = event.window.get_pointer()&lt;br /&gt;
        else:&lt;br /&gt;
            x = event.x&lt;br /&gt;
            y = event.y&lt;br /&gt;
&lt;br /&gt;
        if widget.drag_check_threshold(int(self._press_start_x),&lt;br /&gt;
                                       int(self._press_start_y),&lt;br /&gt;
                                       int(x),&lt;br /&gt;
                                       int(y)):&lt;br /&gt;
            context_ = widget.drag_begin([_ICON_DND_TARGET],&lt;br /&gt;
                                         gtk.gdk.ACTION_MOVE,&lt;br /&gt;
                                         1,&lt;br /&gt;
                                         event)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    def __drag_begin_cb(self, widget, context):&lt;br /&gt;
        icon_file_name = self._last_clicked_icon.props.file_name&lt;br /&gt;
        # TODO: we should get the pixbuf from the widget, so it has colors, etc&lt;br /&gt;
        pixbuf = gtk.gdk.pixbuf_new_from_file(icon_file_name)&lt;br /&gt;
        &lt;br /&gt;
        hot_spot = style.zoom(10)&lt;br /&gt;
        context.set_icon_pixbuf(pixbuf, hot_spot, hot_spot)&lt;br /&gt;
&lt;br /&gt;
    def __drag_motion_cb(self, widget, context, x, y, time):&lt;br /&gt;
        if self._last_clicked_icon is not None:&lt;br /&gt;
            context.drag_status(context.suggested_action, time)&lt;br /&gt;
            return True&lt;br /&gt;
        else:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    def __drag_drop_cb(self, widget, context, x, y, time):&lt;br /&gt;
        if self._last_clicked_icon is not None:&lt;br /&gt;
            self.drag_get_data(context, _ICON_DND_TARGET[0])&lt;br /&gt;
&lt;br /&gt;
            self._layout.move_icon(self._last_clicked_icon, x, y)&lt;br /&gt;
&lt;br /&gt;
            self._pressed_button = None&lt;br /&gt;
            self._press_start_x = None&lt;br /&gt;
            self._press_start_y = None&lt;br /&gt;
            self._last_clicked_icon = None&lt;br /&gt;
&lt;br /&gt;
            return True&lt;br /&gt;
        else:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    def __drag_data_received_cb(self, widget, context, x, y, selection_data,&lt;br /&gt;
                                info, time):&lt;br /&gt;
        context.drop_finish(success=True, time=time)&lt;br /&gt;
&lt;br /&gt;
    def _set_layout(self, layout):&lt;br /&gt;
        if layout not in _LAYOUT_MAP:&lt;br /&gt;
            raise ValueError(&#039;Unknown favorites layout: %r&#039; % layout)&lt;br /&gt;
        if type(self._layout) != _LAYOUT_MAP[layout]:&lt;br /&gt;
            self._box.clear()&lt;br /&gt;
            self._layout = _LAYOUT_MAP[layout]()&lt;br /&gt;
            self._box.set_layout(self._layout)&lt;br /&gt;
&lt;br /&gt;
            self._my_icon = _MyIcon(style.XLARGE_ICON_SIZE)&lt;br /&gt;
            self._layout.append(self._my_icon, locked=True)&lt;br /&gt;
&lt;br /&gt;
            self._current_activity = CurrentActivityIcon()&lt;br /&gt;
            self._layout.append(self._current_activity, locked=True)&lt;br /&gt;
&lt;br /&gt;
            registry = activity.get_registry()&lt;br /&gt;
            registry.get_activities_async(reply_handler=self._get_activities_cb)&lt;br /&gt;
&lt;br /&gt;
            if self._layout.allow_dnd():&lt;br /&gt;
                self.drag_source_set(0, [], 0)&lt;br /&gt;
                self.drag_dest_set(0, [], 0)&lt;br /&gt;
            else:&lt;br /&gt;
                self.drag_source_unset()&lt;br /&gt;
                self.drag_dest_unset()&lt;br /&gt;
&lt;br /&gt;
    layout = property(None, _set_layout)&lt;br /&gt;
&lt;br /&gt;
    def add_alert(self, alert):&lt;br /&gt;
        if self._alert is not None:&lt;br /&gt;
            self.remove_alert()&lt;br /&gt;
        alert.set_size_request(gtk.gdk.screen_width(), -1)&lt;br /&gt;
        self._alert = hippo.CanvasWidget(widget=alert)&lt;br /&gt;
        self._box.append(self._alert, hippo.PACK_FIXED)&lt;br /&gt;
&lt;br /&gt;
    def remove_alert(self):&lt;br /&gt;
        self._box.remove(self._alert)&lt;br /&gt;
        self._alert = None&lt;br /&gt;
&lt;br /&gt;
    def __register_activate_cb(self, menuitem):&lt;br /&gt;
        alert = Alert()&lt;br /&gt;
        try:&lt;br /&gt;
            schoolserver.register_laptop()&lt;br /&gt;
        except RegisterError, e:&lt;br /&gt;
            alert.props.title = _(&#039;Registration Failed&#039;)&lt;br /&gt;
            alert.props.msg = _(&#039;%s&#039;) % e&lt;br /&gt;
        else:    &lt;br /&gt;
            alert.props.title = _(&#039;Registration Successful&#039;)&lt;br /&gt;
            alert.props.msg = _(&#039;You are now registered with your school server.&#039;) &lt;br /&gt;
            palette = self._my_icon.get_palette()&lt;br /&gt;
            palette.menu.remove(menuitem)&lt;br /&gt;
&lt;br /&gt;
        ok_icon = Icon(icon_name=&#039;dialog-ok&#039;)&lt;br /&gt;
        alert.add_button(gtk.RESPONSE_OK, _(&#039;Ok&#039;), ok_icon)&lt;br /&gt;
&lt;br /&gt;
        self.add_alert(alert)&lt;br /&gt;
        alert.connect(&#039;response&#039;, self.__register_alert_response_cb)            &lt;br /&gt;
            &lt;br /&gt;
    def __register_alert_response_cb(self, alert, response_id):&lt;br /&gt;
        self.remove_alert()&lt;br /&gt;
&lt;br /&gt;
class ActivityIcon(CanvasIcon):&lt;br /&gt;
    __gtype_name__ = &#039;SugarFavoriteActivityIcon&#039;&lt;br /&gt;
&lt;br /&gt;
    __gsignals__ = {&lt;br /&gt;
        &#039;erase-activated&#039; : (gobject.SIGNAL_RUN_FIRST,&lt;br /&gt;
                             gobject.TYPE_NONE, ([str])),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, activity_info):&lt;br /&gt;
        CanvasIcon.__init__(self, cache=True, file_name=activity_info.icon)&lt;br /&gt;
        self._activity_info = activity_info&lt;br /&gt;
        self._uncolor()&lt;br /&gt;
        self.connect(&#039;hovering-changed&#039;, self.__hovering_changed_event_cb)&lt;br /&gt;
        self.connect(&#039;button-release-event&#039;, self.__button_release_event_cb)&lt;br /&gt;
&lt;br /&gt;
    def create_palette(self):&lt;br /&gt;
        palette = ActivityPalette(self._activity_info)&lt;br /&gt;
        palette.connect(&#039;erase-activated&#039;, self.__erase_activated_cb)&lt;br /&gt;
        return palette&lt;br /&gt;
&lt;br /&gt;
    def __erase_activated_cb(self, palette):&lt;br /&gt;
        self.emit(&#039;erase-activated&#039;, self._activity_info.bundle_id)&lt;br /&gt;
&lt;br /&gt;
    def _color(self):&lt;br /&gt;
        self.props.xo_color = get_profile().color&lt;br /&gt;
&lt;br /&gt;
    def _uncolor(self):&lt;br /&gt;
        self.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg()&lt;br /&gt;
        self.props.fill_color = style.COLOR_TRANSPARENT.get_svg()&lt;br /&gt;
&lt;br /&gt;
    def __hovering_changed_event_cb(self, icon, hovering):&lt;br /&gt;
        if hovering:&lt;br /&gt;
            self._color()&lt;br /&gt;
        else:&lt;br /&gt;
            self._uncolor()&lt;br /&gt;
&lt;br /&gt;
    def __button_release_event_cb(self, icon, event):&lt;br /&gt;
        self.palette.popdown(immediate=True)&lt;br /&gt;
        self._uncolor()&lt;br /&gt;
        view.Shell.get_instance().start_activity(self._activity_info.bundle_id)&lt;br /&gt;
&lt;br /&gt;
    def get_bundle_id(self):&lt;br /&gt;
        return self._activity_info.bundle_id&lt;br /&gt;
    bundle_id = property(get_bundle_id, None)&lt;br /&gt;
&lt;br /&gt;
    def get_version(self):&lt;br /&gt;
        return self._activity_info.version&lt;br /&gt;
    version = property(get_version, None)&lt;br /&gt;
&lt;br /&gt;
    def _get_installation_time(self):&lt;br /&gt;
        return self._activity_info.installation_time&lt;br /&gt;
    installation_time = property(_get_installation_time, None)&lt;br /&gt;
&lt;br /&gt;
    def _get_fixed_position(self):&lt;br /&gt;
        return self._activity_info.position&lt;br /&gt;
    fixed_position = property(_get_fixed_position, None)&lt;br /&gt;
&lt;br /&gt;
class CurrentActivityIcon(CanvasIcon, hippo.CanvasItem):&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        CanvasIcon.__init__(self, cache=True)&lt;br /&gt;
        self._home_model = shellmodel.get_instance().get_home()&lt;br /&gt;
&lt;br /&gt;
        if self._home_model.get_active_activity() is not None:&lt;br /&gt;
            self._update(self._home_model.get_active_activity())&lt;br /&gt;
&lt;br /&gt;
        self._home_model.connect(&#039;active-activity-changed&#039;,&lt;br /&gt;
                                 self.__active_activity_changed_cb)&lt;br /&gt;
&lt;br /&gt;
        self.connect(&#039;button-release-event&#039;, self.__button_release_event_cb)&lt;br /&gt;
&lt;br /&gt;
    def __button_release_event_cb(self, icon, event):&lt;br /&gt;
        self._home_model.get_active_activity().get_window().activate(1)&lt;br /&gt;
&lt;br /&gt;
    def _update(self, home_activity):&lt;br /&gt;
        self.props.file_name = home_activity.get_icon_path()&lt;br /&gt;
        self.props.xo_color = home_activity.get_icon_color()&lt;br /&gt;
        self.props.size = style.STANDARD_ICON_SIZE&lt;br /&gt;
&lt;br /&gt;
        if self.palette is not None:&lt;br /&gt;
            self.palette.destroy()&lt;br /&gt;
            self.palette = None&lt;br /&gt;
&lt;br /&gt;
        if home_activity.is_journal():&lt;br /&gt;
            palette = JournalPalette(home_activity)&lt;br /&gt;
        else:&lt;br /&gt;
            palette = CurrentActivityPalette(home_activity)&lt;br /&gt;
        self.set_palette(palette)&lt;br /&gt;
&lt;br /&gt;
    def __active_activity_changed_cb(self, home_model, home_activity):&lt;br /&gt;
        self._update(home_activity)&lt;br /&gt;
&lt;br /&gt;
class _MyIcon(MyIcon):&lt;br /&gt;
    def __init__(self, scale):&lt;br /&gt;
        MyIcon.__init__(self, scale)&lt;br /&gt;
&lt;br /&gt;
        self._power_manager = None&lt;br /&gt;
        self._profile = get_profile()&lt;br /&gt;
        self.register_menu = None&lt;br /&gt;
&lt;br /&gt;
    def enable_palette(self):&lt;br /&gt;
        palette_icon = Icon(icon_name=&#039;computer-xo&#039;, &lt;br /&gt;
                            icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR,&lt;br /&gt;
                            xo_color=self._profile.color)&lt;br /&gt;
        palette = Palette(self._profile.nick_name,&lt;br /&gt;
                          #secondary_text=&#039;Sample secondary label&#039;,&lt;br /&gt;
                          icon=palette_icon)&lt;br /&gt;
&lt;br /&gt;
        item = MenuItem(_(&#039;Control Panel&#039;), &#039;preferences-system&#039;)&lt;br /&gt;
        item.connect(&#039;activate&#039;, self.__controlpanel_activate_cb)&lt;br /&gt;
        palette.menu.append(item)&lt;br /&gt;
        item.show()&lt;br /&gt;
&lt;br /&gt;
        item = MenuItem(_(&#039;Restart&#039;), &#039;system-restart&#039;)&lt;br /&gt;
        item.connect(&#039;activate&#039;, self._reboot_activate_cb)&lt;br /&gt;
        palette.menu.append(item)&lt;br /&gt;
        item.show()&lt;br /&gt;
&lt;br /&gt;
        item = MenuItem(_(&#039;Shutdown&#039;), &#039;system-shutdown&#039;)&lt;br /&gt;
        item.connect(&#039;activate&#039;, self._shutdown_activate_cb)&lt;br /&gt;
        palette.menu.append(item)&lt;br /&gt;
        item.show()&lt;br /&gt;
&lt;br /&gt;
        if not self._profile.is_registered():&lt;br /&gt;
            self.register_menu = MenuItem(_(&#039;Register&#039;), &#039;media-record&#039;)&lt;br /&gt;
            palette.menu.append(self.register_menu)&lt;br /&gt;
            self.register_menu.show()&lt;br /&gt;
 &lt;br /&gt;
        self.set_palette(palette)&lt;br /&gt;
&lt;br /&gt;
    def _reboot_activate_cb(self, menuitem):&lt;br /&gt;
        session_manager = get_session_manager()&lt;br /&gt;
        session_manager.reboot()&lt;br /&gt;
&lt;br /&gt;
    def _shutdown_activate_cb(self, menuitem):&lt;br /&gt;
        session_manager = get_session_manager()&lt;br /&gt;
        session_manager.shutdown()&lt;br /&gt;
        &lt;br /&gt;
    def get_toplevel(self):&lt;br /&gt;
        return hippo.get_canvas_for_item(self).get_toplevel()&lt;br /&gt;
&lt;br /&gt;
    def __controlpanel_activate_cb(self, menuitem):&lt;br /&gt;
        panel = ControlPanel()&lt;br /&gt;
        panel.set_transient_for(self.get_toplevel())&lt;br /&gt;
        panel.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/favoriteslayout.py&amp;diff=49100</id>
		<title>User:Walter/favoriteslayout.py</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/favoriteslayout.py&amp;diff=49100"/>
		<updated>2010-03-01T18:19:43Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/favoriteslayout.py to Walter is a wanker 2/favoriteslayout.py:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==/usr/share/sugar/shell/view/home/favoriteslayout.py==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Copyright (C) 2008 One Laptop Per Child&lt;br /&gt;
#&lt;br /&gt;
# This program is free software; you can redistribute it and/or modify&lt;br /&gt;
# it under the terms of the GNU General Public License as published by&lt;br /&gt;
# the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
# (at your option) any later version.&lt;br /&gt;
#&lt;br /&gt;
# This program is distributed in the hope that it will be useful,&lt;br /&gt;
# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
# GNU General Public License for more details.&lt;br /&gt;
#&lt;br /&gt;
# You should have received a copy of the GNU General Public License&lt;br /&gt;
# along with this program; if not, write to the Free Software&lt;br /&gt;
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA&lt;br /&gt;
&lt;br /&gt;
import logging&lt;br /&gt;
import math&lt;br /&gt;
import hashlib&lt;br /&gt;
from gettext import gettext as _&lt;br /&gt;
&lt;br /&gt;
import gobject&lt;br /&gt;
import gtk&lt;br /&gt;
import hippo&lt;br /&gt;
&lt;br /&gt;
from sugar.graphics import style&lt;br /&gt;
from sugar import activity&lt;br /&gt;
&lt;br /&gt;
from view.home.grid import Grid&lt;br /&gt;
&lt;br /&gt;
_logger = logging.getLogger(&#039;FavoritesLayout&#039;)&lt;br /&gt;
&lt;br /&gt;
_CELL_SIZE = 4&lt;br /&gt;
_BASE_SCALE = 1000&lt;br /&gt;
&lt;br /&gt;
class FavoritesLayout(gobject.GObject, hippo.CanvasLayout):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Base class of the different layout types.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    __gtype_name__ = &#039;FavoritesLayout&#039;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        gobject.GObject.__init__(self)&lt;br /&gt;
        self.box = None&lt;br /&gt;
        self.fixed_positions = {}&lt;br /&gt;
&lt;br /&gt;
    def do_set_box(self, box):&lt;br /&gt;
        self.box = box&lt;br /&gt;
&lt;br /&gt;
    def do_get_height_request(self, for_width):&lt;br /&gt;
        return 0, gtk.gdk.screen_height() - style.GRID_CELL_SIZE&lt;br /&gt;
&lt;br /&gt;
    def do_get_width_request(self):&lt;br /&gt;
        return 0, gtk.gdk.screen_width()&lt;br /&gt;
&lt;br /&gt;
    def compare_activities(self, icon_a, icon_b):&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
    def append(self, icon, locked=False):&lt;br /&gt;
        self.box.insert_sorted(icon, 0, self.compare_activities)&lt;br /&gt;
        if hasattr(icon, &#039;fixed_position&#039;):&lt;br /&gt;
            relative_x, relative_y = icon.fixed_position&lt;br /&gt;
            if relative_x &amp;gt;= 0 and relative_y &amp;gt;= 0:&lt;br /&gt;
                min_width_, width = self.box.get_width_request()&lt;br /&gt;
                min_height_, height = self.box.get_height_request(width)&lt;br /&gt;
                self.fixed_positions[icon] = \&lt;br /&gt;
                        (int(relative_x * _BASE_SCALE / float(width)),&lt;br /&gt;
                         int(relative_y * _BASE_SCALE / float(height)))&lt;br /&gt;
&lt;br /&gt;
    def remove(self, icon):&lt;br /&gt;
        if icon in self.fixed_positions:&lt;br /&gt;
            del self.fixed_positions[icon]&lt;br /&gt;
        self.box.remove(icon)&lt;br /&gt;
&lt;br /&gt;
    def move_icon(self, icon, x, y, locked=False):&lt;br /&gt;
        if icon not in self.box.get_children():&lt;br /&gt;
            raise ValueError(&#039;Child not in box.&#039;)&lt;br /&gt;
&lt;br /&gt;
        if hasattr(icon, &#039;get_bundle_id&#039;) and hasattr(icon, &#039;get_version&#039;):&lt;br /&gt;
            min_width_, width = self.box.get_width_request()&lt;br /&gt;
            min_height_, height = self.box.get_height_request(width)&lt;br /&gt;
            registry = activity.get_registry()&lt;br /&gt;
            registry.set_activity_position(&lt;br /&gt;
                    icon.get_bundle_id(), icon.get_version(),&lt;br /&gt;
                    x * width / float(_BASE_SCALE),&lt;br /&gt;
                    y * height / float(_BASE_SCALE))&lt;br /&gt;
            self.fixed_positions[icon] = (x, y)&lt;br /&gt;
&lt;br /&gt;
    def do_allocate(self, x, y, width, height, req_width, req_height,&lt;br /&gt;
                    origin_changed):&lt;br /&gt;
        raise NotImplementedError()&lt;br /&gt;
&lt;br /&gt;
    def allow_dnd(self):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
class RandomLayout(FavoritesLayout):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Lay out icons randomly; try to nudge them around to resolve overlaps.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    __gtype_name__ = &#039;RandomLayout&#039;&lt;br /&gt;
&lt;br /&gt;
    icon_name = &#039;view-freeform&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Name of icon used in home view dropdown palette.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    profile_key = &#039;random-layout&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;String used in profile to represent this view.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        FavoritesLayout.__init__(self)&lt;br /&gt;
&lt;br /&gt;
        min_width_, width = self.do_get_width_request()&lt;br /&gt;
        min_height_, height = self.do_get_height_request(width)&lt;br /&gt;
&lt;br /&gt;
        self._grid = Grid(width / _CELL_SIZE, height / _CELL_SIZE)&lt;br /&gt;
        self._grid.connect(&#039;child-changed&#039;, self.__grid_child_changed_cb)&lt;br /&gt;
&lt;br /&gt;
    def __grid_child_changed_cb(self, grid, child):&lt;br /&gt;
        child.emit_request_changed()&lt;br /&gt;
&lt;br /&gt;
    def append(self, icon, locked=False):&lt;br /&gt;
        FavoritesLayout.append(self, icon, locked)&lt;br /&gt;
&lt;br /&gt;
        min_width_, child_width = icon.get_width_request()&lt;br /&gt;
        min_height_, child_height = icon.get_height_request(child_width)&lt;br /&gt;
        min_width_, width = self.box.get_width_request()&lt;br /&gt;
        min_height_, height = self.box.get_height_request(width)&lt;br /&gt;
&lt;br /&gt;
        if icon in self.fixed_positions:&lt;br /&gt;
            x, y = self.fixed_positions[icon]&lt;br /&gt;
            x = min(x, width - child_width)&lt;br /&gt;
            y = min(y, height - child_height)&lt;br /&gt;
        elif hasattr(icon, &#039;get_bundle_id&#039;):&lt;br /&gt;
            name_hash = hashlib.md5(icon.get_bundle_id())&lt;br /&gt;
            x = int(name_hash.hexdigest()[:5], 16) % (width - child_width)&lt;br /&gt;
            y = int(name_hash.hexdigest()[-5:], 16) % (height - child_height)&lt;br /&gt;
        else:&lt;br /&gt;
            x = None&lt;br /&gt;
            y = None&lt;br /&gt;
&lt;br /&gt;
        if x is None or y is None:&lt;br /&gt;
            self._grid.add(icon,&lt;br /&gt;
                           child_width / _CELL_SIZE, child_height / _CELL_SIZE)&lt;br /&gt;
        else:&lt;br /&gt;
            self._grid.add(icon,&lt;br /&gt;
                           child_width / _CELL_SIZE, child_height / _CELL_SIZE,&lt;br /&gt;
                           x / _CELL_SIZE, y / _CELL_SIZE)&lt;br /&gt;
&lt;br /&gt;
    def remove(self, icon):&lt;br /&gt;
        self._grid.remove(icon)&lt;br /&gt;
        FavoritesLayout.remove(self, icon)&lt;br /&gt;
&lt;br /&gt;
    def move_icon(self, icon, x, y, locked=False):&lt;br /&gt;
        self._grid.move(icon, x / _CELL_SIZE, y / _CELL_SIZE, locked)&lt;br /&gt;
        FavoritesLayout.move_icon(self, icon, x, y, locked)&lt;br /&gt;
&lt;br /&gt;
    def do_allocate(self, x, y, width, height, req_width, req_height,&lt;br /&gt;
                    origin_changed):&lt;br /&gt;
        for child in self.box.get_layout_children():&lt;br /&gt;
            # We need to always get requests to not confuse hippo&lt;br /&gt;
            min_w_, child_width = child.get_width_request()&lt;br /&gt;
            min_h_, child_height = child.get_height_request(child_width)&lt;br /&gt;
&lt;br /&gt;
            rect = self._grid.get_child_rect(child.item)&lt;br /&gt;
            child.allocate(rect.x * _CELL_SIZE,&lt;br /&gt;
                           rect.y * _CELL_SIZE,&lt;br /&gt;
                           child_width,&lt;br /&gt;
                           child_height,&lt;br /&gt;
                           origin_changed)&lt;br /&gt;
&lt;br /&gt;
    def allow_dnd(self):&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
_MINIMUM_RADIUS = style.XLARGE_ICON_SIZE / 2 + style.DEFAULT_SPACING + \&lt;br /&gt;
        style.STANDARD_ICON_SIZE * 2&lt;br /&gt;
_MAXIMUM_RADIUS = (gtk.gdk.screen_height() - style.GRID_CELL_SIZE) / 2 - \&lt;br /&gt;
        style.STANDARD_ICON_SIZE - style.DEFAULT_SPACING&lt;br /&gt;
&lt;br /&gt;
class RingLayout(FavoritesLayout):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Lay out icons in a ring around the XO man.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    __gtype_name__ = &#039;RingLayout&#039;&lt;br /&gt;
    icon_name = &#039;view-radial&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Name of icon used in home view dropdown palette.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    profile_key = &#039;ring-layout&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;String used in profile to represent this view.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        FavoritesLayout.__init__(self)&lt;br /&gt;
        self._locked_children = {}&lt;br /&gt;
&lt;br /&gt;
    def append(self, icon, locked=False):&lt;br /&gt;
        FavoritesLayout.append(self, icon, locked)&lt;br /&gt;
        if locked:&lt;br /&gt;
            child = self.box.find_box_child(icon)&lt;br /&gt;
            self._locked_children[child] = (0, 0)&lt;br /&gt;
&lt;br /&gt;
    def remove(self, icon):&lt;br /&gt;
        child = self.box.find_box_child(icon)&lt;br /&gt;
        if child in self._locked_children:&lt;br /&gt;
            del self._locked_children[child]&lt;br /&gt;
        FavoritesLayout.remove(self, icon)&lt;br /&gt;
&lt;br /&gt;
    def move_icon(self, icon, x, y, locked=False):&lt;br /&gt;
        FavoritesLayout.move_icon(self, icon, x, y, locked)&lt;br /&gt;
        if locked:&lt;br /&gt;
            child = self.box.find_box_child(icon)&lt;br /&gt;
            self._locked_children[child] = (x, y)&lt;br /&gt;
&lt;br /&gt;
    def _calculate_radius_and_icon_size(self, children_count):&lt;br /&gt;
        # what&#039;s the radius required without downscaling?&lt;br /&gt;
        distance = style.STANDARD_ICON_SIZE + style.DEFAULT_SPACING&lt;br /&gt;
        icon_size = style.STANDARD_ICON_SIZE&lt;br /&gt;
        # circumference is 2*pi*r; we want this to be at least&lt;br /&gt;
        # &#039;children_count * distance&#039;&lt;br /&gt;
        radius = children_count * distance / (2 * math.pi)&lt;br /&gt;
        # limit computed radius to reasonable bounds.&lt;br /&gt;
        radius = max(radius, _MINIMUM_RADIUS)&lt;br /&gt;
        radius = min(radius, _MAXIMUM_RADIUS)&lt;br /&gt;
        # recompute icon size from limited radius&lt;br /&gt;
        if children_count &amp;gt; 0:&lt;br /&gt;
            icon_size = (2 * math.pi * radius / children_count) \&lt;br /&gt;
                        - style.DEFAULT_SPACING&lt;br /&gt;
        # limit adjusted icon size.&lt;br /&gt;
        icon_size = max(icon_size, style.SMALL_ICON_SIZE)&lt;br /&gt;
        icon_size = min(icon_size, style.MEDIUM_ICON_SIZE)&lt;br /&gt;
        return radius, icon_size&lt;br /&gt;
&lt;br /&gt;
    def _calculate_position(self, radius, icon_size, index, children_count,&lt;br /&gt;
                            sin=math.sin, cos=math.cos):&lt;br /&gt;
        width, height = self.box.get_allocation()&lt;br /&gt;
        angle = index * (2 * math.pi / children_count) - math.pi / 2&lt;br /&gt;
        x = radius * cos(angle) + (width - icon_size) / 2&lt;br /&gt;
        y = radius * sin(angle) + (height - icon_size -&lt;br /&gt;
                                   (style.GRID_CELL_SIZE/2) ) / 2&lt;br /&gt;
        return x, y&lt;br /&gt;
&lt;br /&gt;
    def _get_children_in_ring(self):&lt;br /&gt;
        children_in_ring = [child for child in self.box.get_layout_children() \&lt;br /&gt;
                if child not in self._locked_children]&lt;br /&gt;
        return children_in_ring&lt;br /&gt;
&lt;br /&gt;
    def _update_icon_sizes(self):&lt;br /&gt;
        # XXX: THIS METHOD IS NEVER CALLED&lt;br /&gt;
        children_in_ring = self._get_children_in_ring()&lt;br /&gt;
        radius_, icon_size = \&lt;br /&gt;
                self._calculate_radius_and_icon_size(len(children_in_ring))&lt;br /&gt;
&lt;br /&gt;
        for child in children_in_ring:&lt;br /&gt;
            child.item.props.size = icon_size&lt;br /&gt;
&lt;br /&gt;
    def do_allocate(self, x, y, width, height, req_width, req_height,&lt;br /&gt;
                    origin_changed):&lt;br /&gt;
        children_in_ring = self._get_children_in_ring()&lt;br /&gt;
        if children_in_ring:&lt;br /&gt;
            radius, icon_size = \&lt;br /&gt;
                    self._calculate_radius_and_icon_size(len(children_in_ring))&lt;br /&gt;
&lt;br /&gt;
            for n in range(len(children_in_ring)):&lt;br /&gt;
                child = children_in_ring[n]&lt;br /&gt;
&lt;br /&gt;
                x, y = self._calculate_position(radius, icon_size, n,&lt;br /&gt;
                                                len(children_in_ring))&lt;br /&gt;
&lt;br /&gt;
                # We need to always get requests to not confuse hippo&lt;br /&gt;
                min_w_, child_width = child.get_width_request()&lt;br /&gt;
                min_h_, child_height = child.get_height_request(child_width)&lt;br /&gt;
&lt;br /&gt;
                child.allocate(int(x), int(y), child_width, child_height,&lt;br /&gt;
                               origin_changed)&lt;br /&gt;
                child.item.props.size = icon_size&lt;br /&gt;
&lt;br /&gt;
        for child in self._locked_children.keys():&lt;br /&gt;
            x, y = self._locked_children[child]&lt;br /&gt;
&lt;br /&gt;
            # We need to always get requests to not confuse hippo&lt;br /&gt;
            min_w_, child_width = child.get_width_request()&lt;br /&gt;
            min_h_, child_height = child.get_height_request(child_width)&lt;br /&gt;
&lt;br /&gt;
            child.allocate(int(x), int(y), child_width, child_height,&lt;br /&gt;
                            origin_changed)&lt;br /&gt;
&lt;br /&gt;
    def compare_activities(self, icon_a, icon_b):&lt;br /&gt;
        if hasattr(icon_a, &#039;installation_time&#039;) and \&lt;br /&gt;
                hasattr(icon_b, &#039;installation_time&#039;):&lt;br /&gt;
            return icon_b.installation_time - icon_a.installation_time&lt;br /&gt;
        else:&lt;br /&gt;
            return 0&lt;br /&gt;
&lt;br /&gt;
_SUNFLOWER_CONSTANT = style.STANDARD_ICON_SIZE * .75&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Chose a constant such that STANDARD_ICON_SIZE icons are nicely spaced.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
_SUNFLOWER_OFFSET = \&lt;br /&gt;
    math.pow((style.XLARGE_ICON_SIZE / 2 + style.STANDARD_ICON_SIZE) /&lt;br /&gt;
             _SUNFLOWER_CONSTANT, 2)&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Compute a starting index for the `SunflowerLayout` which leaves space for&lt;br /&gt;
the XO man in the center.  Since r = _SUNFLOWER_CONSTANT * sqrt(n),&lt;br /&gt;
solve for n when r is (XLARGE_ICON_SIZE + STANDARD_ICON_SIZE)/2.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
_GOLDEN_RATIO = 1.6180339887498949&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Golden ratio: http://en.wikipedia.org/wiki/Golden_ratio&lt;br /&gt;
Calculation: (math.sqrt(5) + 1) / 2&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
_SUNFLOWER_ANGLE = 2.3999632297286531&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
The sunflower angle is approximately 137.5 degrees.&lt;br /&gt;
This is the golden angle: http://en.wikipedia.org/wiki/Golden_angle&lt;br /&gt;
Calculation: math.radians(360) / ( _GOLDEN_RATIO * _GOLDEN_RATIO )&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class SunflowerLayout(RingLayout):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Spiral layout based on Fibonacci ratio in phyllotaxis.&lt;br /&gt;
&lt;br /&gt;
    See http://algorithmicbotany.org/papers/abop/abop-ch4.pdf&lt;br /&gt;
    for details of Vogel&#039;s model of florets in a sunflower head.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    __gtype_name__ = &#039;SunflowerLayout&#039;&lt;br /&gt;
&lt;br /&gt;
    icon_name = &#039;view-spiral&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Name of icon used in home view dropdown palette.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    profile_key = &#039;spiral-layout&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;String used in profile to represent this view.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        RingLayout.__init__(self)&lt;br /&gt;
        self.skipped_indices = []&lt;br /&gt;
&lt;br /&gt;
    def _calculate_radius_and_icon_size(self, children_count):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Stub out this method; not used in `SunflowerLayout`.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        return None, style.STANDARD_ICON_SIZE&lt;br /&gt;
&lt;br /&gt;
    def adjust_index(self, i):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Skip floret indices which end up outside the desired bounding box.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        for idx in self.skipped_indices:&lt;br /&gt;
            if i &amp;lt; idx: break&lt;br /&gt;
            i += 1&lt;br /&gt;
        return i&lt;br /&gt;
&lt;br /&gt;
    def _calculate_position(self, radius, icon_size, oindex, children_count):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Calculate the position of sunflower floret number &#039;oindex&#039;.&lt;br /&gt;
        If the result is outside the bounding box, use the next index which&lt;br /&gt;
        is inside the bounding box.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        width, height = self.box.get_allocation()&lt;br /&gt;
&lt;br /&gt;
        while True:&lt;br /&gt;
&lt;br /&gt;
            index = self.adjust_index(oindex)&lt;br /&gt;
&lt;br /&gt;
            # tweak phi to get a nice gap lined up where the &amp;quot;active activity&amp;quot;&lt;br /&gt;
            # icon is, below the central XO man.&lt;br /&gt;
            phi = index * _SUNFLOWER_ANGLE + math.radians(-130)&lt;br /&gt;
&lt;br /&gt;
            # we offset index when computing r to make space for the XO man.&lt;br /&gt;
            r = _SUNFLOWER_CONSTANT * math.sqrt(index + _SUNFLOWER_OFFSET)&lt;br /&gt;
&lt;br /&gt;
            # x,y are the top-left corner of the icon, so remove icon_size&lt;br /&gt;
            # from width/height to compensate.  y has an extra GRID_CELL_SIZE/2&lt;br /&gt;
            # removed to make room for the &amp;quot;active activity&amp;quot; icon.&lt;br /&gt;
            x = r * math.cos(phi) + (width - icon_size) / 2&lt;br /&gt;
            y = r * math.sin(phi) + (height - icon_size - \&lt;br /&gt;
                                     (style.GRID_CELL_SIZE / 2) ) / 2&lt;br /&gt;
&lt;br /&gt;
            # skip allocations outside the allocation box.&lt;br /&gt;
            # give up once we can&#039;t fit&lt;br /&gt;
            if r &amp;lt; math.hypot(width / 2, height / 2):&lt;br /&gt;
                if y &amp;lt; 0 or y &amp;gt; (height - icon_size) or \&lt;br /&gt;
                       x &amp;lt; 0 or x &amp;gt; (width - icon_size):&lt;br /&gt;
                    self.skipped_indices.append(index)&lt;br /&gt;
                    continue # try again&lt;br /&gt;
&lt;br /&gt;
            return x, y&lt;br /&gt;
&lt;br /&gt;
class BoxLayout(RingLayout):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Lay out icons in a square around the XO man.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    __gtype_name__ = &#039;BoxLayout&#039;&lt;br /&gt;
&lt;br /&gt;
    icon_name = &#039;view-box&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Name of icon used in home view dropdown palette.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    profile_key = &#039;box-layout&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;String used in profile to represent this view.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        RingLayout.__init__(self)&lt;br /&gt;
&lt;br /&gt;
    def _calculate_position(self, radius, icon_size, index, children_count):&lt;br /&gt;
&lt;br /&gt;
        # use &amp;quot;orthogonal&amp;quot; versions of cos and sin in order to square the&lt;br /&gt;
        # circle and turn the &#039;ring view&#039; into a &#039;box view&#039;&lt;br /&gt;
        def cos_d(d):&lt;br /&gt;
            while d &amp;lt; 0:&lt;br /&gt;
                d += 360&lt;br /&gt;
            if d &amp;lt; 45: return 1&lt;br /&gt;
            if d &amp;lt; 135: return (90 - d) / 45.&lt;br /&gt;
            if d &amp;lt; 225: return -1&lt;br /&gt;
            return cos_d(360 - d) # mirror around 180&lt;br /&gt;
&lt;br /&gt;
        cos = lambda r: cos_d(math.degrees(r))&lt;br /&gt;
        sin = lambda r: cos_d(math.degrees(r) - 90)&lt;br /&gt;
&lt;br /&gt;
        return RingLayout._calculate_position\&lt;br /&gt;
               (self, radius, icon_size, index, children_count,&lt;br /&gt;
                sin=sin, cos=cos)&lt;br /&gt;
&lt;br /&gt;
class TriangleLayout(RingLayout):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Lay out icons in a triangle around the XO man.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    __gtype_name__ = &#039;TriangleLayout&#039;&lt;br /&gt;
&lt;br /&gt;
    icon_name = &#039;view-triangle&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Name of icon used in home view dropdown palette.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    profile_key = &#039;triangle-layout&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;String used in profile to represent this view.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        RingLayout.__init__(self)&lt;br /&gt;
&lt;br /&gt;
    def _calculate_radius_and_icon_size(self, children_count):&lt;br /&gt;
        # use slightly larger minimum radius than parent, because sides&lt;br /&gt;
        # of triangle come awful close to the center.&lt;br /&gt;
        radius, icon_size = \&lt;br /&gt;
            RingLayout._calculate_radius_and_icon_size(self, children_count)&lt;br /&gt;
        return max(radius, _MINIMUM_RADIUS + style.MEDIUM_ICON_SIZE), icon_size&lt;br /&gt;
&lt;br /&gt;
    def _calculate_position(self, radius, icon_size, index, children_count):&lt;br /&gt;
        # tweak cos and sin in order to make the &#039;ring&#039; into an equilateral&lt;br /&gt;
        # triangle.&lt;br /&gt;
&lt;br /&gt;
        def cos_d(d):&lt;br /&gt;
            while d &amp;lt; -90:&lt;br /&gt;
                d += 360&lt;br /&gt;
            if d &amp;lt;= 30: return (d + 90) / 120.&lt;br /&gt;
            if d &amp;lt;= 90: return (90 - d) / 60.&lt;br /&gt;
            return -cos_d(180 - d) # mirror around 90&lt;br /&gt;
&lt;br /&gt;
        sqrt_3 = math.sqrt(3)&lt;br /&gt;
&lt;br /&gt;
        def sin_d(d):&lt;br /&gt;
            while d &amp;lt; -90:&lt;br /&gt;
                d += 360&lt;br /&gt;
            if d &amp;lt;= 30: return ((d + 90) / 120.) * sqrt_3 - 1&lt;br /&gt;
            if d &amp;lt;= 90: return sqrt_3 - 1&lt;br /&gt;
            return sin_d(180 - d) # mirror around 90&lt;br /&gt;
&lt;br /&gt;
        cos = lambda r: cos_d(math.degrees(r))&lt;br /&gt;
        sin = lambda r: sin_d(math.degrees(r))&lt;br /&gt;
&lt;br /&gt;
        return RingLayout._calculate_position\&lt;br /&gt;
               (self, radius, icon_size, index, children_count,&lt;br /&gt;
                sin=sin, cos=cos)&lt;br /&gt;
&lt;br /&gt;
class MyLayout(RingLayout):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Spiral layout based on Archimedean spiral: r = a + b*theta.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    __gtype_name__ = &#039;MyLayout&#039;&lt;br /&gt;
&lt;br /&gt;
    icon_name = &#039;view-mylayout&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Name of icon used in home view dropdown palette.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    profile_key = &#039;my-layout&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;String used in profile to represent this view.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        RingLayout.__init__(self)&lt;br /&gt;
&lt;br /&gt;
    def _calculate_radius_and_icon_size(self, children_count):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Stub out this method; not used in `My Layout`.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        return None, style.STANDARD_ICON_SIZE&lt;br /&gt;
&lt;br /&gt;
    def _calculate_position(self, radius, icon_size, index, children_count):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; Increment the radius as you go; decrease the angle of rotation&lt;br /&gt;
        as the radius increases to keep the distance between icons constant.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        width, height = self.box.get_allocation()&lt;br /&gt;
        # angle decreases as the radius increases&lt;br /&gt;
        angle = index * (2 * math.pi / (12.0 + index / 6.0)) - math.pi / 2&lt;br /&gt;
        # radius is proportional to index/children_count&lt;br /&gt;
        myminimum = _MINIMUM_RADIUS * .67&lt;br /&gt;
        newradius = ((_MAXIMUM_RADIUS - myminimum) * (index * 1.1) / children_count) + myminimum&lt;br /&gt;
        x = newradius * math.cos(angle) + (width - icon_size) / 2&lt;br /&gt;
        y = newradius * math.sin(angle) + (height - icon_size - style.GRID_CELL_SIZE) / 2&lt;br /&gt;
        return x, y&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/View-mylayout.svg&amp;diff=49098</id>
		<title>User:Walter/View-mylayout.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/View-mylayout.svg&amp;diff=49098"/>
		<updated>2010-03-01T18:19:42Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/View-mylayout.svg to Walter is a wanker 2/View-mylayout.svg:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==/usr/share/icons/sugar/scalable/actions/view-mylayout.svg==&lt;br /&gt;
[[Image:View-mylayout.png]]&lt;br /&gt;
[[:Image:View-mylayout.svg|View-mylayout.svg]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&amp;lt;!DOCTYPE svg  PUBLIC &#039;-//W3C//DTD SVG 1.1//EN&#039;  &#039;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&#039; [&lt;br /&gt;
	&amp;lt;!ENTITY stroke_color &amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;!ENTITY fill_color &amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
]&amp;gt;&amp;lt;svg enable-background=&amp;quot;new 0 0 55 55&amp;quot; height=&amp;quot;55px&amp;quot; version=&amp;quot;1.1&amp;quot; viewBox=&amp;quot;0 0 55 55&amp;quot; width=&amp;quot;55px&amp;quot; x=&amp;quot;0px&amp;quot; xml:space=&amp;quot;preserve&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot; y=&amp;quot;0px&amp;quot;&amp;gt;&amp;lt;g display=&amp;quot;block&amp;quot; id=&amp;quot;view-radial&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;g&amp;gt;&lt;br /&gt;
&amp;lt;path &lt;br /&gt;
     d=&amp;quot;M 26.720648,12.91498 C 27.22863,13.897449 25.64692,14.084445 25.08772,13.759279 C 23.572323,12.8781 23.975115,10.705978 25.03205,9.6491238 C 26.922657,7.7586593 30.045759,8.4609262 31.619432,10.382083 C 33.92886,13.201457 32.89446,17.386046 30.097844,19.446692 C 26.370396,22.193209 21.092605,20.813878 18.556007,17.136476 C 15.363958,12.508841 17.093799,6.1246052 21.654853,3.1174115 C 27.178901,-0.52470306 34.676393,1.5585003 38.151144,7.0048859 C 42.246019,13.423263 39.807816,22.037992 33.475041,25.978405 C 26.163602,30.527766 16.429102,27.733542 12.024295,20.513672 C 7.0192742,12.309997 10.170199,1.4540115 18.277656,-3.4143008 C 27.372998,-8.8758115 39.351686,-5.3677118 44.682857,3.6276894 C 50.601467,13.61429 46.735849,26.716574 36.852238,32.510117&amp;quot;&lt;br /&gt;
     stroke=&amp;quot;&amp;amp;stroke_color;&amp;quot; fill=&amp;quot;&amp;amp;fill_color;&amp;quot; stroke-width=&amp;quot;3.5&amp;quot;&lt;br /&gt;
     transform=&amp;quot;matrix(1.1581481,0,0,1.1382204,-5.565927,12.422252)&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/g&amp;gt;&lt;br /&gt;
&amp;lt;/g&amp;gt;&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/Pluto&amp;diff=49096</id>
		<title>User:Walter/Pluto</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/Pluto&amp;diff=49096"/>
		<updated>2010-03-01T18:19:42Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/Pluto to Walter is a wanker 2/Pluto:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pluto is a publishing system developed for community journalism projects by the Electronic Publishing Group at MIT in 1996. It is still in active use but no longer supported. The principle feature of Pluto is its attention to the publishing workflow--it facilitates a smooth interaction between writers and editors.&lt;br /&gt;
&lt;br /&gt;
I&#039;m exploring developing a similar workflow within a MediaWiki. This would be in support of activities such as Jack Driscoll&#039;s [http://wiki.laptop.org/go/Learning_activities/Journalism journalism tutorial].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The idea is to use category tags as the equivalent of the basket system utilized in Pluto. To view a basket, it is simply a matter of visiting the category page for that basket, e.g., &amp;lt;nowiki&amp;gt;http://wiki.ourpublication.org/go/Category:Publish&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* The principle baskets (story repositories) are the &#039;&#039;&#039;Publish&#039;&#039;&#039; basket, the &#039;&#039;&#039;Editor&#039;&#039;&#039; basket, and the &#039;&#039;&#039;Individual&#039;&#039;&#039; basket. &lt;br /&gt;
&lt;br /&gt;
* Each story (a page in the wiki) would be tagged with a category flag for the author. (Multiple-author stories would have multiple category tags. By default, authors would write stories under the User page, but this need not be strictly enforced.)&lt;br /&gt;
&lt;br /&gt;
* When a story is ready to be reviewed by an editor, the &#039;&#039;&#039;Editor&#039;&#039;&#039; category would be added. &amp;lt;nowiki&amp;gt;[[Category:Editor]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Copy edits can be made in-line and comments made on the &#039;&#039;&#039;discussion&#039;&#039;&#039; page. If the &#039;&#039;&#039;watch&#039;&#039;&#039; feature is used, then the author will get an email notification automatically generated when their story has been edited.&lt;br /&gt;
&lt;br /&gt;
* When a story is ready to publish, the &#039;&#039;&#039;Publish&#039;&#039;&#039; category would be added. &amp;lt;nowiki&amp;gt;[[Category:Publish]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A publication-date category could be added to facilitate the archiving process as well. &amp;lt;nowiki&amp;gt;[[Category:July2008]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A series of simple templates can be used for navigation within an issue. &lt;br /&gt;
&lt;br /&gt;
* The front page could be constructed using the &amp;lt;nowiki&amp;gt;{{include}}&amp;lt;/nowiki&amp;gt; mechanism and additional templates.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;Mediawiki:Sidebar&#039;&#039;&#039; can also be used as a navigation aid: direct links to the Editor, Publish, and Archive categories, for example.&lt;br /&gt;
&lt;br /&gt;
* Multimedia would be handled using the usual Wiki markup.&lt;br /&gt;
&lt;br /&gt;
* If desirable, page protections can be used.&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/Events/Sarasota-Design-Summit&amp;diff=49094</id>
		<title>User:Walter/Events/Sarasota-Design-Summit</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/Events/Sarasota-Design-Summit&amp;diff=49094"/>
		<updated>2010-03-01T18:19:42Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/Events/Sarasota-Design-Summit to Walter is a wanker 2/Events/Sarasota-Design-Summit:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sarasota Design Conference 08 =&lt;br /&gt;
&lt;br /&gt;
== Event Details ==&lt;br /&gt;
&lt;br /&gt;
For more information, go to the [http://www.sarasotadesignsummit.com/2008/ Sarasota Design Conference].&lt;br /&gt;
&lt;br /&gt;
== Sugar Organizer ==&lt;br /&gt;
&lt;br /&gt;
[[User:Walter | Walter Bender]] (walter at sugarlabs dot org) will be organizing Sugar&#039;s presence at the Sarasota Design Conference&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
Are you planning to attend?  Add your name and contact info below!&lt;br /&gt;
&lt;br /&gt;
# Walter Bender (walter at sugarlabs dot org)&lt;br /&gt;
# Your name here&lt;br /&gt;
&lt;br /&gt;
== Lodging ==&lt;br /&gt;
&lt;br /&gt;
More info as it becomes available.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
More info as it becomes available.&lt;br /&gt;
&lt;br /&gt;
[[Category:Event]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/Events/SFScon08&amp;diff=49092</id>
		<title>User:Walter/Events/SFScon08</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/Events/SFScon08&amp;diff=49092"/>
		<updated>2010-03-01T18:19:42Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/Events/SFScon08 to Walter is a wanker 2/Events/SFScon08:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= South Tyrol Free Software conference =&lt;br /&gt;
&lt;br /&gt;
== Event Details ==&lt;br /&gt;
&lt;br /&gt;
For more information, go to the [http://www.sfscon.it/2008/ South Tyrol Free Software conference].&lt;br /&gt;
&lt;br /&gt;
== Sugar Organizer ==&lt;br /&gt;
&lt;br /&gt;
[[User:Walter | Walter Bender]] (walter at sugarlabs dot org) will be organizing Sugar&#039;s presence at the South Tyrol Free Software conference&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
Are you planning to attend?  Add your name and contact info below!&lt;br /&gt;
&lt;br /&gt;
# Walter Bender (walter at sugarlabs dot org)&lt;br /&gt;
# Your name here&lt;br /&gt;
&lt;br /&gt;
== Lodging ==&lt;br /&gt;
&lt;br /&gt;
More info as it becomes available.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
More info as it becomes available.&lt;br /&gt;
&lt;br /&gt;
[[Category:Event]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter/Events/Linux.conf.au09&amp;diff=49090</id>
		<title>User:Walter/Events/Linux.conf.au09</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter/Events/Linux.conf.au09&amp;diff=49090"/>
		<updated>2010-03-01T18:19:42Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter/Events/Linux.conf.au09 to Walter is a wanker 2/Events/Linux.conf.au09:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= LCA 09 =&lt;br /&gt;
&lt;br /&gt;
== Event Details ==&lt;br /&gt;
&lt;br /&gt;
For more information, go to the [http://linux.conf.au/ LCA 09 website].&lt;br /&gt;
&lt;br /&gt;
== Sugar Organizer ==&lt;br /&gt;
&lt;br /&gt;
[[User:Walter | Walter Bender]] (walter at sugarlabs dot org) will be organizing Sugar&#039;s presence at LCA 09&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
Are you planning to attend?  Add your name and contact info below!&lt;br /&gt;
&lt;br /&gt;
# Walter Bender (walter at sugarlabs dot org)&lt;br /&gt;
# Joel Stanley (joel dot stanley at adeladie dot edu dot au)&lt;br /&gt;
# Pia Waugh (pia at olpcfriends dot org)&lt;br /&gt;
# Mel Chua (mel at melchua dot com)&lt;br /&gt;
# Alice Boxhall (appletea at gmail dot com)&lt;br /&gt;
# Your name here&lt;br /&gt;
&lt;br /&gt;
== Lodging ==&lt;br /&gt;
&lt;br /&gt;
More info as it becomes available.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
More info as it becomes available.&lt;br /&gt;
&lt;br /&gt;
[[Category:Event]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Walter&amp;diff=49088</id>
		<title>User:Walter</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Walter&amp;diff=49088"/>
		<updated>2010-03-01T18:19:41Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved User:Walter to Walter is a wanker 2:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Walter Bender==&lt;br /&gt;
I was at OLPC for several years and now I am a volunteer on the project. My home page can be found here: [http://www.media.mit.edu/~walter]&lt;br /&gt;
&lt;br /&gt;
Email: walter AT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
===Regarding the Sugar Labs Oversight Board===&lt;br /&gt;
&lt;br /&gt;
While it has been my goal to help get Sugar Labs to a point of self-sustainability, I don&#039;t think we are yet at that point. My goals for 2010 are to focus on fund-raising and further refining the organizational and governance models.&lt;br /&gt;
&lt;br /&gt;
A bit about me and my role in Sugar Labs: I was part of the Sugar team at One Laptop per Child that left to found Sugar Labs in March of 2008. I have worn a few different hats within the organization: activity developer, occasional contributor to Sugar core, member of the deployment team, the marketing team, and the activity team. I was a lead author of the FLOSS Manual on Sugar. I am presently the executive director of Sugar Labs. I also represent Sugar on the GNOME technical advisory board and the Squeakland board. I have been a GSOC mentor and am participating in several pilot deployment projects of Sugar on a Stick.&lt;br /&gt;
&lt;br /&gt;
===To do===&lt;br /&gt;
* &amp;lt;strike&amp;gt;get Frame test set up in Peru/Uruguay/Paraguay&amp;lt;/srike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;New Activity templates&lt;br /&gt;
:Much of the information that is consistent across activities can be held in activities.s.o. ([[User:Dfarning|dfarning]] 22:28, 16 June 2008 (UTC))&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Follow-up with Linux Foundation&lt;br /&gt;
* &amp;lt;strike&amp;gt;Draft membership agreement for Sugar Labs&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;rebase Turtle Art on SVG&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;ask SFC for pointers to lawyers in SA&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;start writing NSF/USAID proposal&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;local-labs proposals&amp;lt;/strike&amp;gt;&lt;br /&gt;
* NSF Creativity grant&lt;br /&gt;
* Babson brief&lt;br /&gt;
* Watertown follow-up&lt;br /&gt;
* Curriculum guides from GPA programs&lt;br /&gt;
&lt;br /&gt;
===Done===&lt;br /&gt;
* New Getting Started Guide (See [http://flossmanuals.net/Sugar The Sugar FLOSS Manual])&lt;br /&gt;
* Add ParserFunctions to Sugar Labs mediawiki&lt;br /&gt;
* Draft rules of [[Sugar Labs/Governance|governance for Sugar Labs]]&lt;br /&gt;
* Start [http://lists.sugarlabs.org/pipermail/community-news/ Community-News Sugar Weekly Digest] list&lt;br /&gt;
* CoSN proposal&lt;br /&gt;
* rebase Gmail on new Browse&lt;br /&gt;
* Finalize arrangements with SFC&lt;br /&gt;
** Incorporate Sugar Labs&lt;br /&gt;
&lt;br /&gt;
===Recent writing about Sugar and learning===&lt;br /&gt;
&lt;br /&gt;
* [http://www.olpcnews.com/software/sugar/confessions_of_a_fundamentalist.html Confessions of a fundamentalist (Part 1)]&lt;br /&gt;
* [http://www.olpcnews.com/software/sugar/more_fundamentalist_confessions.html Confessions of a fundamentalist (Part 2)]&lt;br /&gt;
* [http://walterbender.org/?p=6 A page from the Hilbert playbook]&lt;br /&gt;
* [http://walterbender.org/?p=30 Media, Mathematics, and Mallard Fillmore]&lt;br /&gt;
&lt;br /&gt;
(I also [http://walterbender.org blog] the weekly Sugar Digest.)&lt;br /&gt;
&lt;br /&gt;
The slides from a talk I gave about Sugar at the Women2Woman conference are [[:Image:Women2women-part1.odp|here]] and [[:Image:Women2women-part2.odp|here]].&lt;br /&gt;
&lt;br /&gt;
===Sandbox===&lt;br /&gt;
* [[2010 DML proposal]]&lt;br /&gt;
* [[File:VisualMatch-18.xo]]&lt;br /&gt;
* [[User:Walter/sandbox]]&lt;br /&gt;
* [[User:Walter/favoriteslayout.py]]&lt;br /&gt;
* [[User:Walter/favoritesview.py]]&lt;br /&gt;
* [[User:Walter/View-mylayout.svg]]&lt;br /&gt;
* [[Activities/Turtle Art/Patching]]&lt;br /&gt;
[[Image:Spiral.png|thumb|left|Spiral Home View]]&lt;br /&gt;
[[Image:FermatSpiral.png|thumb|left|Fermat Spiral]]&lt;br /&gt;
[[Image:Pythagorus.png|thumb|left|Modifying TurtleArt]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;visualClear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
====Floss Manual====&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;http://en.flossmanuals.net/bookstore/bookstore.gif&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
 @import url(&amp;quot;http://en.flossmanuals.net/bookstore/bookstore.css&amp;quot;);&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
 &amp;lt;script src=&amp;quot;http://en.flossmanuals.net/bookstore/bookstore.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
 &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
  FM.init({&amp;quot;paging&amp;quot;:true,&amp;quot;preferred&amp;quot;:[&amp;quot;OLPC LAPTOP USERS GUIDE&amp;quot;,&amp;quot;SUGAR USERS GUIDE&amp;quot;]});&lt;br /&gt;
 &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
====Portfolio====&lt;br /&gt;
I am making a &amp;quot;TurtleArt: inspired portfolio tool. See [[Activities/Turtle Art#Portfolios|TAPortfolio]] for more details.&lt;br /&gt;
[[Image:TurtlePortfolio.png|thumb|left|first sketch of the portfolio tool]]&lt;br /&gt;
[[Image:Portfolio2.png|thumb|left|another sketch of the portfolio tool]]&lt;br /&gt;
[[Image:TAPortfolio.png|thumb|left|almost to Version 1.0]]&lt;br /&gt;
[[Image:Clapper.png|thumb|left|clap to advance to next slide]]&lt;br /&gt;
[[Image:Keyboardinput.png|thumb|left|type to advance to next slide]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;visualClear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Turtle Art → Logo====&lt;br /&gt;
I added a &amp;quot;view source&amp;quot; for Turtle Art that exports Logo.&lt;br /&gt;
[[Image:Taspin.png|thumb|left|a Turtle Art project]]&lt;br /&gt;
[[Image:UCB-Logo.png|thumb|left|the UCB Logo version]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;visualClear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some procedures for setting up the palette and the shade functionality:&lt;br /&gt;
&lt;br /&gt;
 to tasetpalette :i :r :g :b :myshade&lt;br /&gt;
 make &amp;quot;s ((:myshade - 50) / 50)&lt;br /&gt;
 ifelse lessp :s 0 [&lt;br /&gt;
 make &amp;quot;s (1 + (:s *0.8))&lt;br /&gt;
 make &amp;quot;r (:r * :s) &lt;br /&gt;
 make &amp;quot;g (:g * :s) &lt;br /&gt;
 make &amp;quot;b (:b * :s)&lt;br /&gt;
 ] [&lt;br /&gt;
 make &amp;quot;s (:s * 0.9)&lt;br /&gt;
 make &amp;quot;r (:r + ((100-:r) * :s)) &lt;br /&gt;
 make &amp;quot;g (:g + ((100-:g) * :s)) &lt;br /&gt;
 make &amp;quot;b (:b + ((100-:b) * :s))&lt;br /&gt;
 ]&lt;br /&gt;
 setpalette :i (list :r :g :b)&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 to rgb :myi :mycolors :myshade&lt;br /&gt;
 make &amp;quot;myr first :mycolors&lt;br /&gt;
 make &amp;quot;mycolors butfirst :mycolors&lt;br /&gt;
 make &amp;quot;myg first :mycolors&lt;br /&gt;
 make &amp;quot;mycolors butfirst :mycolors&lt;br /&gt;
 make &amp;quot;myb first :mycolors&lt;br /&gt;
 make &amp;quot;mycolors butfirst :mycolors&lt;br /&gt;
 tasetpalette :myi :myr :myg :myb :myshade&lt;br /&gt;
 output :mycolors&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 to processcolor :mycolors :myshade&lt;br /&gt;
 if emptyp :mycolors [stop]&lt;br /&gt;
 make &amp;quot;i :i + 1&lt;br /&gt;
 processcolor (rgb :i :mycolors :myshade) :myshade&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 to tasetshade :shade&lt;br /&gt;
 make &amp;quot;myshade modulo :shade 200&lt;br /&gt;
 if greaterp :myshade 99 [make &amp;quot;myshade (199-:myshade)]&lt;br /&gt;
 make &amp;quot;i 7&lt;br /&gt;
 make &amp;quot;mycolors :colors &lt;br /&gt;
 processcolor :mycolors :myshade&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 to tasetpencolor :c&lt;br /&gt;
 make &amp;quot;color modulo round :c 100&lt;br /&gt;
 setpencolor :color + 8&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 make &amp;quot;colors [&lt;br /&gt;
 100 0 0 100 5 0 100 10 0 100 15 0 100 20 0 100 25 0 100 30 0 100 35 0 100 40 0 100 45 0 &lt;br /&gt;
 100 50 0 100 55 0 100 60 0 100 65 0 100 70 0 100 75 0 100 80 0 100 85 0 100 90 0 100 95 0 &lt;br /&gt;
 100 100 0 90 100 0 80 100 0 70 100 0 60 100 0 50 100 0 40 100 0 30 100 0 20 100 0 10 100 0 &lt;br /&gt;
 0 100 0 0 100 5 0 100 10 0 100 15 0 100 20 0 100 25 0 100 30 0 100 35 0 100 40 0 100 45 &lt;br /&gt;
 0 100 50 0 100 55 0 100 60 0 100 65 0 100 70 0 100 75 0 100 80 0 100 85 0 100 90 0 100 95 &lt;br /&gt;
 0 100 100 0 95 100 0 90 100 0 85 100 0 80 100 0 75 100 0 70 100 0 65 100 0 60 100 0 55 100 &lt;br /&gt;
 0 50 100 0 45 100 0 40 100 0 35 100 0 30 100 0 25 100 0 20 100 0 15 100 0 10 100 0 5 100 &lt;br /&gt;
 0 0 100 5 0 100 10 0 100 15 0 100 20 0 100 25 0 100 30 0 100 35 0 100 40 0 100 45 0 100 &lt;br /&gt;
 50 0 100 55 0 100 60 0 100 65 0 100 70 0 100 75 0 100 80 0 100 85 0 100 90 0 100 95 0 100 &lt;br /&gt;
 100 0 100 100 0 90 100 0 80 100 0 70 100 0 60 100 0 50 100 0 40 100 0 30 100 0 20 100 0 10]&lt;br /&gt;
 make &amp;quot;shade 50&lt;br /&gt;
 tasetshade :shade&lt;br /&gt;
&lt;br /&gt;
 to tasetbackground :color :shade&lt;br /&gt;
 tasetshade :shade&lt;br /&gt;
 setbackground :color + 8&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
The project:&lt;br /&gt;
&lt;br /&gt;
 to ta&lt;br /&gt;
 clearscreen tasetbackground 21 100 setpensize 25.0 make &amp;quot;box1 0.0 &lt;br /&gt;
 repeat 300.0 [ tasetpencolor xcor / 6.0 tasetshade heading forward :box1 right 91.0 make &amp;quot;box1 :box1 + 1.0 ] &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 ta&lt;br /&gt;
&lt;br /&gt;
====Turtle Art variables====&lt;br /&gt;
&lt;br /&gt;
Following the lead of Luis Michelena, I&#039;ve added named blocks and stacks. I plan to add push and pop next, which should greatly expand the range of possible constructions.&lt;br /&gt;
&lt;br /&gt;
[[Image:To square.png|thumb|left|to square]]&lt;br /&gt;
[[Image:NewVariableGraphics.png|thumb|left|reworking the graphics]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;visualClear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Turtle Art push and pop====&lt;br /&gt;
&lt;br /&gt;
While it is not the intent that Turtle Art be a full implementation of Logo, but there has been some discussion on teh Sur list about adding some capability for passing arguments to stacks. (and to support recursion). I have added a FILO and push and pop blocks to enable this functionality. I am looking for feedback. regarding this choice.&lt;br /&gt;
&lt;br /&gt;
[[Image:Push and pop.png|thumb|left|push and pop]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;visualClear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HBS-style analysis====&lt;br /&gt;
* our points of difference&lt;br /&gt;
* our points of parity&lt;br /&gt;
* their points of difference&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:Mokurai&amp;diff=49086</id>
		<title>Talk:Mokurai</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:Mokurai&amp;diff=49086"/>
		<updated>2010-03-01T18:18:58Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved Talk:Mokurai to Talk:Walter is a wanker 1:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Would you put the link to your Linux.com talk (http://www.linux.com/feature/147070) on you home page? --[[User:Walter|Walter]] 20:17, 15 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Oh, yeah, I was thinking of that. OK, done.--[[User:Mokurai|Mokurai]] 07:39, 21 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Did I do it wrong?&lt;br /&gt;
&lt;br /&gt;
Delivery to the following recipient failed permanently:&lt;br /&gt;
&lt;br /&gt;
    ed@earthtreasury.org&lt;br /&gt;
&lt;br /&gt;
Technical details of permanent failure:&lt;br /&gt;
Google tried to deliver your message, but it was rejected by the recipient domain. We recommend contacting the other email provider for further information about the cause of this error. The error that the other server returned was: 554 554 5.7.1 &amp;lt;ed@earthtreasury.org&amp;gt;: Relay access denied (state 14).&lt;br /&gt;
&lt;br /&gt;
:We changed servers. It is [mailto:mokurai@earthtreasury.org mokurai@earthtreasury.org] now.--[[User:Mokurai|Mokurai]] 22:46, 21 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
DickKarpinski@gmail.com&lt;br /&gt;
&lt;br /&gt;
[[User:Nitpicker|Nitpicker]] 09:22, 14 June 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Mokurai&amp;diff=49084</id>
		<title>Mokurai</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Mokurai&amp;diff=49084"/>
		<updated>2010-03-01T18:18:57Z</updated>

		<summary type="html">&lt;p&gt;Pmv2: moved Mokurai to Walter is a wanker 1:&amp;amp;#32;Walter is a wanker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|- border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|Founder, [http://www.earthtreasury.org/ Earth Treasury], an NGO to link schools around the world for education and business. See [[User:Mokurai/Plans and Essays|Plans and Essays]].&lt;br /&gt;
&lt;br /&gt;
Mokurai volunteers at OLPC and Sugar Labs as a volunteer coordinator, localization administrator ([http://wiki.laptop.org/go/Khmer Khmer] and [http://wiki.laptop.org/go/Kreyol Kreyòl]), and general knoker (an especially Yiddish know-all, the kind who did math homework in pen), based on &lt;br /&gt;
&lt;br /&gt;
* his training as a mathematician, classroom teacher, amateur musician and linguist, philosopher, and Buddhist priest&lt;br /&gt;
* plus his lifetime of encyclopedic reading, many years in high-tech market research and technical writing, and work in Unicode and Free Software.&lt;br /&gt;
&lt;br /&gt;
|[[Image:Cherlin-xo.jpg|Ah haz teh bestest toyz]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Vision==&lt;br /&gt;
&lt;br /&gt;
End Poverty at a Profit all around by educating children to collaborate and not be helpless. &lt;br /&gt;
&lt;br /&gt;
==Quotes==&lt;br /&gt;
*Epictetus - &amp;quot;Only the educated are free.&amp;quot;&lt;br /&gt;
*Aristotle - &amp;quot;All men by nature desire to know. An indication of this is the delight we take in our senses.&amp;quot;&lt;br /&gt;
[[User:Mokurai/Quotes|More quotes]]&lt;br /&gt;
&lt;br /&gt;
==Mission==&lt;br /&gt;
&lt;br /&gt;
The mission is whatever planning, funding, research, development, and deployment is needed to make that happen, with a focus on Management by Exception in order to keep on top of what is needed in changing circumstances and make sure that nothing gets missed that we must have. &lt;br /&gt;
&lt;br /&gt;
Sugar Labs has the Sugar software as its main focus, but needs to work with others on the rest of the mission. We should raise substantial funding to support these substantive projects, up to the point at which they can become self-sustaining, in the manner of the Grameen Group of companies.&lt;br /&gt;
&lt;br /&gt;
These are the principal elements of the mission today. More will appear.&lt;br /&gt;
&lt;br /&gt;
* Extend the OLPC and Sugar Labs work with evidence-based education research, curriculum development, and the redesign of textbooks, taking maximum advantage of software on the XO, and of the best research that we can find or carry out on how children learn, and what is of greatest value for them to learn.&lt;br /&gt;
&lt;br /&gt;
* Engineer appropriate solutions for electricity and Internet connections in even the poorest and most remote villages in every target environment, in collaboration with university Schools of Engineering, Engineers Without Borders, and others, in order to maximize the usefulness of XOs to children everywhere.&lt;br /&gt;
&lt;br /&gt;
* Work with microfinance organizations to place these electricity and Internet solutions along with XOs. The intention is to jump-start local economies by selling modest amounts of surplus power and bandwidth, and thereby raise the money to pay off the original loans and make further investments.&lt;br /&gt;
&lt;br /&gt;
* Create an R&amp;amp;D consortium to further all of these goals and whatever else turns out to be necessary. We know that issues of economics, governance, social attitudes, and sustainability are important. What do we need to know, and how can we come to know it? What can we learn from the children themselves, and from teachers, parents, and others?&lt;br /&gt;
&lt;br /&gt;
* Tap into Barack Obama&#039;s plans to increase global development aid by $25 billion annually, including a $2 billion Global Education Fund; into the UN Millennium Development Goals program; Make Poverty History; and all of the other initiatives that share our vision, even if they don&#039;t know it yet.&lt;br /&gt;
&lt;br /&gt;
* Save as many languages and cultures as possible from extinction by teaching the children how to record them.&lt;br /&gt;
&lt;br /&gt;
* Link children, schools, and communities together around the world in a safe manner for collaborative development.&lt;br /&gt;
&lt;br /&gt;
* Teach children how to create sustainable international businesses together using their new knowledge and skills.&lt;br /&gt;
&lt;br /&gt;
==Current Projects and Partners==&lt;br /&gt;
&lt;br /&gt;
OLPC and Sugar Labs, of course, within the scope of their own missions to provide hardware, software, content, and teacher training materials. In each case, the intention is to expand to a comprehensive, integrated program including infrastructure, education, community development, and economic opportunity. Volunteers, donors, and partners welcome.&lt;br /&gt;
&lt;br /&gt;
By country&lt;br /&gt;
* Ghana&lt;br /&gt;
** Nana&#039;s House (school and orphanage), computers, Internet, and accessories for students and teachers&lt;br /&gt;
** Winneba Linux Users Group, Linux+Sugar Installfests&lt;br /&gt;
** Catch IT Young youth computer training&lt;br /&gt;
** University of Education, Winneba, research, curriculum, teaching materials, localization&lt;br /&gt;
** OneVillage Foundation Ghana, Winneba wireless broadband project&lt;br /&gt;
* Nigeria&lt;br /&gt;
** Fantsuam Foundation microfinance project and Cisco Network Academy&lt;br /&gt;
* Kenya&lt;br /&gt;
** Asante Foundation Maasai schools and cultural preservation&lt;br /&gt;
* Uganda&lt;br /&gt;
** Bunabumali Good Shepherd Orphanage and School, computers, accessories, electricity, Internet&lt;br /&gt;
** Mt. Elgon coffee growers co-operative equipment and training&lt;br /&gt;
** School programs and the rest&lt;br /&gt;
* Tanzania&lt;br /&gt;
** Mt. Kilimanjaro coffee growers co-operative equipment and training&lt;br /&gt;
** School programs and the rest&lt;br /&gt;
&lt;br /&gt;
Components&lt;br /&gt;
* Interactive [[Education Team/Creating textbooks|digital textbooks]], with Lots of partners.&lt;br /&gt;
* Free computers for schools, two per pupil: one at school, one at home. Possibly Computers4Africa&lt;br /&gt;
* Flash drives for carrying software and work, so that students can use them on any computer&lt;br /&gt;
* Electricity generation and storage, Engineers Without Borders&lt;br /&gt;
* Broadband Internet, OVF Ghana&lt;br /&gt;
* Microfinance, Fantsuam Foundation&lt;br /&gt;
* Economic opportunity, education program to be developed at EduForge, social entrepreneurial investors welcome.&lt;br /&gt;
&lt;br /&gt;
==Analysis==&lt;br /&gt;
&lt;br /&gt;
The following  is as much a prediction as a set of goals. Much of this will happen regardless of us. We can make those parts happen sooner, and more effectively. The other parts have to do with the new ideas that we are discovering and shaping together, particularly integrated&lt;br /&gt;
development that includes the economy, the social structure of society, and spiritual growth. The only project that I know of that&lt;br /&gt;
currently does this is the Sarvodaya Shramadana Movement in Sri Lanka, which I commend to your study and, if possible, participation.&lt;br /&gt;
&lt;br /&gt;
===Preliminary===&lt;br /&gt;
&lt;br /&gt;
For several years I have been seeing a gradual coming together of many strands in development toward the possibility of an integrated&lt;br /&gt;
strategy that can be replicated worldwide. After the initial stage, it should all become self-sustaining in the manner of the [http://www.grameen-info.org/ Grameen Bank, Grameen Phone], and the like, and thus independent of the usual sources of non-profit funding. Here are the leading strands.&lt;br /&gt;
&lt;br /&gt;
* [http://www.unicttaskforce.org/welcome/ ICT4D], including newly powerful mobile phones, computers, and Internet at prices that make sense in even the poorest and most remote villages, given the promise of economic growth to enable paying back costs.&lt;br /&gt;
&lt;br /&gt;
** One Laptop Per Child, for many reasons, including a rethinking of curricula, textbook content, and publishing models. Scarcity of information is no longer the limiting factor in education. Electronic publications still take effort and time to write, but the reproduction cost on the Internet is nearly nil. Governments will soon realize that they don&#039;t have to buy textbooks. They can contract for writing textbooks and other materials with the proviso that the government, or we should say the public, owns the copyright. We can take advantage of [http://www.fsf.org/ Free Software] and [http://en.wikipedia.org/wiki/Open_access Open Access] publishing throughout this process, and of a century of discoveries in how children really learn. Currently XOs are $198 each, with $75 versions promised for 2010. [http://wiki.laptop.org/go/G1G1 GiveOneGetOne] is to start up again in November.&lt;br /&gt;
&lt;br /&gt;
** [http://www.wimaxforum.org/home/ WiMax] and other broadband technologies that can provide Internet to [http://en.wikipedia.org/wiki/List_of_Deployed_WiMAX_networks whole countries] (90-95% coverage) for $10 per person installed. &lt;br /&gt;
&lt;br /&gt;
** [http://www.iconnect-online.org/News/iconnectnews.2006-06-30.8848332576 Fiber optic cables] for every country in Africa. There is one installed on the West Coast, two being laid on the East Coast, and [http://allafrica.com/stories/200807210866.html four more promised]. [http://www.ugabytes.org/nod/?q=node/351 Rwanda] and the other dozen landlocked countries in Africa are making deals with their neighbors for overland links. Some regions in Central Asia may take a little longer. &lt;br /&gt;
&lt;br /&gt;
** New satellite launches that promise both to break the current cartel pricing in Africa, and to link Africa directly to South America, the Middle East, and Asia, not just by multihop through Europe.&lt;br /&gt;
&lt;br /&gt;
** [http://ai.africanews.com/site/list_message/8123 African banks] that are now in a position to start creating a continent-wide network and to roll out electronic banking.&lt;br /&gt;
&lt;br /&gt;
** [http://www.isde5.org/ Global GIS initiatives] dealing with mapping critical poverty issues: environment, water, agriculture, climate, health, and much more.&lt;br /&gt;
&lt;br /&gt;
* The many organizations working on renewable electricity for villages, among them [[User:Mokurai/Earth Treasury|Earth Treasury]], [http://www.ewb.org/ Engineers Without Borders], and the [http://www.jhai.org/ Jhai Foundation].&lt;br /&gt;
&lt;br /&gt;
* Many organizations rolling out vastly improved health services to whole countries and in a few cases to the entire world. This includes the [http://www.rotary.org/en/serviceAndFellowship/Polio/Pages/ridefault.aspx Rotary International eradication of polio]; [http://www.rbm.who.int/ anti-malarial bednets] wherever needed; [http://en.wikipedia.org/wiki/Onchocerciasis#Treatment_and_control free medication for River Blindness]; low-cost AIDS medication (largely due to the [http://www.clintonfoundation.org/what-we-do/clinton-hiv-aids-initiative Clinton Foundation]); practical methods for [http://www.pih.org/issues/tb.html treating multi-drug-resistant tuberculosis] (MDR-TB); [http://www.microinsurancecentre.org/UI/Home.aspx microinsurance]; Free Software for health, such as [http://www.openMRS.org/ OpenMRS]; and [http://wiki.laptop.org/go/Health health education] through One Laptop Per Child.&lt;br /&gt;
&lt;br /&gt;
* More than 100,000 of the million and more NGOs of the world now connected with each other through [http://www.wiserearth.org/ Wiser Earth].&lt;br /&gt;
&lt;br /&gt;
* Barack Obama&#039;s [http://www.barackobama.com/pdf/issues/Fact_Sheet_Foreign_Policy_Democratization_and_Development_FINAL.pdf plan to double US Foreign Aid], and redirect it to much more efficient methods (toward helping the poor, not just subsidizing US agriculture, manufacturing, and consulting). This includes a $2 billion annual Global Education Fund.&lt;br /&gt;
&lt;br /&gt;
* The microfinance movement&#039;s casting about for the next big challenge. I predict village electricity and Internet along with school computers, and I am working on alliances toward that end.&lt;br /&gt;
&lt;br /&gt;
Sugar Labs has taken over software development for the OLPC XO. Walter Bender of Sugar Labs is putting together a research consortium to&lt;br /&gt;
tackle problems in education, and I am assisting in recruiting, and in problem definition. My program is not of the usual kind, where we know&lt;br /&gt;
what subjects we mean to tackle.&lt;br /&gt;
&lt;br /&gt;
My version of the mission is: Whatever turns out to be needed. My self-appointed task is to find the holes in current programs, and fill them, first with my own efforts and second by recruiting others to do the work, research further solutions, and plan where we might go next. Among the critical tasks are village electricity and Internet, redesigning curricula and textbooks, and bringing all of this together into target communities with microfinance, with a flexible, integrated business plan for whole societies to advance societal infrastructure (education, health, clean water, and other essentials), and the private sector (sole proprietorships, sustainable international companies, producer and consumer co-operatives), and shared values.&lt;br /&gt;
&lt;br /&gt;
It is no longer practical to impose the illusion of shared values on a society. They must grow out of the situation. The report on OLPC&#039;s early [http://www.gg.rhul.ac.uk/ict4d/ethiopia.pdf effects in Ethiopia] gives a glimpse into where we are going. Within a few months, in a highly traditional society that has valued teaching politeness and obedience over subject matter in schools, and where asking questions of a teacher was considered insulting, the XO and its software have opened up a new, collaborative relationship between teachers and students. This is in no small part attributable to the collaborative nature of the XO&#039;s Sugar and other software. Access to the information riches of the Internet is another important factor. See [http://wiki.laptop.org/go/Academic_Papers Academic Papers] on the OLPC Wiki for this and other recent reports.&lt;br /&gt;
&lt;br /&gt;
There is more, but that will do to begin with.&lt;br /&gt;
&lt;br /&gt;
===General Consequences===&lt;br /&gt;
&lt;br /&gt;
* We are looking at the possibility of ending poverty as we know it within a generation, except in the most repressive countries (Burma and North Korea are the most likely, but a few others might possibly regress).&lt;br /&gt;
&lt;br /&gt;
* We are doing this by means that promise far freer markets, with &lt;br /&gt;
&lt;br /&gt;
** Market access for all, at least for electronic markets, including easy entry and exit&lt;br /&gt;
&lt;br /&gt;
** General availability of essential economic information, including the price of almost anything right up to the moment&lt;br /&gt;
&lt;br /&gt;
** General availability of production technologies, except where embargoes linger (Cuba, Burma, Syria, Iran, North Korea and a few others)&lt;br /&gt;
&lt;br /&gt;
In short, these and a few other points add up to the closest approximation to the economic ideal of [http://en.wikipedia.org/wiki/Perfect_competition Perfect Competition] ever seen, worldwide. We can confidently predict the largest explosion of productivity and prosperity ever seen, and at some point the end of the continual search for ever-more-benighted denizens of ever-poorer countries to ship jobs off to. The existence of wage differentials between countries is conclusive proof that their market relations are not free.&lt;br /&gt;
&lt;br /&gt;
* A complete communications network, in which every person will have the means to connect with any other person who answers the phone.&lt;br /&gt;
&lt;br /&gt;
* Directories and social network sites that enable everybody to find the right people to do business with and make alliances with for any economic, social, spiritual, or political purpose.&lt;br /&gt;
&lt;br /&gt;
* We can confidently predict an explosive growth of civil society organizations worldwide, among other things.&lt;br /&gt;
&lt;br /&gt;
==AKA ==&lt;br /&gt;
* Edward Mokurai Cherlin/[http://home.earthlink.net/~cherlinfamily/name.html Czerwin]&lt;br /&gt;
* גרשון בן יסעף&lt;br /&gt;
* Эдуард Георгеевич Черлын&lt;br /&gt;
* 장영구/張永久&lt;br /&gt;
* 法雲默雷/धर्ममेघशब्दगर्ज&lt;br /&gt;
==Contact==&lt;br /&gt;
* [mailto:echerlin@gmail.com My e-mail]&lt;br /&gt;
* AIM chat: mokurai&lt;br /&gt;
* ICQ chat: 441484252&lt;br /&gt;
* 812 764 0552 New phone number in Indiana&lt;br /&gt;
* [http://www.linkedin.com/in/cherlin LinkedIn profile]&lt;br /&gt;
* [http://www.wiserearth.org/user/cherlin Wiser Earth]&lt;br /&gt;
* Twitter: Mokurai&lt;br /&gt;
* [http://www.facebook.com/home.php?#/edward.cherlin?ref=profile Facebook page]&lt;br /&gt;
* [http://mokurai.dailykos.com/ My Daily Kos Diary Entries]&lt;br /&gt;
* [http://flickr.com/photos/toepfer/2254179681/ At SCALE x6] Sixth SoCal Linux Expo&lt;br /&gt;
* [http://livingdirectory.net/FF/ Friendly Favors] I&#039;m FF10136 - Edward Cherlin&lt;br /&gt;
* [http://isde5.pbwiki.com/Earth_Treasury My Digital Earth wiki page]&lt;br /&gt;
* [http://globalchildparticipation.ning.com/profile/EdwardCherlin Global Child Participation]&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
Mokurai has extensive experience in every aspect of computers, as a tech writer, editor, and publisher, global market analyst, and software developer. Previous work includes math software and textbooks, Computer Science papers, [http://www.openvoting.org/ Free Software for voting], [http://www.unicodeconference.org/iuc31/program-d.htm#ses6_2 Unicode support on the XO], [http://www.cauce.org/ fighting spam around the world], and [http://unicode.org/iuc/iuc24/a345.html earlier anti-poverty projects]. He can sometimes get people to stop talking past each other and answer the &#039;&#039;real&#039;&#039; questions (though not necessarily [http://wiki.laptop.org/go/Controversies Nicholas] %-[ ). See, for example,the [http://lists.w3.org/Archives/Public/uri/1997Apr/0003.html IETF discussions on multilingual URIs].&lt;br /&gt;
&lt;br /&gt;
When I wrote a guide for new Internet users at Newbie.Net, there were three questions I couldn&#039;t answer:&lt;br /&gt;
&lt;br /&gt;
* How to stop spam. So I founded the [http://www.cauce.org/ Coalition Against UCE] (Unsolicited Commercial E-mail)&lt;br /&gt;
* How to view all languages correctly in browsers and other software. So I joined [http://www.unicode.org/ Unicode.org] and a number of Free Software projects dealing with [http://www.mozilla.org browsers], [http://www.unifont.org/ fonts], [http://wiki.laptop.org/go/Keyboard_Layouts keyboard layouts], [http://wiki.laptop.org/go/Locales locales], and [http://www.pango.org/ rendering software] for screen display and printing, and the [http://lists.w3.org/Archives/Public/uri/1997Apr/0003.html IETF standards process for multilingual URLs and URIs].&lt;br /&gt;
* How to get everybody on the Net. So here I am. I have previously worked on [http://www.barwn.org/ wireless networking], satellite internet, and the [http://wiki.laptop.org/go/Simputer Simputer].&lt;br /&gt;
&lt;br /&gt;
I&#039;m contributing information on [http://wiki.laptop.org/go/Countries countries] and [http://wiki.laptop.org/go/Languages languages] on the OLPC Wiki, including [http://wiki.laptop.org/go/Vriting_Systems writing systems], [http://wiki.laptop.org/go/Fonts fonts], [http://wiki.laptop.org/go/Keyboard_Layouts keyboard layouts], sources of [http://wiki.laptop.org/go/Literature literature], and other items of interest, and administering [http://wiki.laptop.org/go/Localization localization] projects. I will be adding material on education and on the other impacts of the Laptop. It will have major effects in social development, [http://wiki.laptop.org/go/Health health], economic opportunity, politics, and other important areas.&lt;br /&gt;
&lt;br /&gt;
==Contributions==&lt;br /&gt;
I started to work on [http://wiki.laptop.org/go/OLPC_Publications OLPC documentation], but then I discovered that even more pressing needs were being ignored. So now I have appointed myself Shadow Chairman &amp;amp; CEO of OLPC. Don&#039;t tell Nicholas.&lt;br /&gt;
&lt;br /&gt;
==Social Networks==&lt;br /&gt;
&lt;br /&gt;
I&#039;m on too many of these networks. If you want to connect with me, please use LinkedIn, Wiser Earth, or Flickr for photos.&lt;br /&gt;
&lt;br /&gt;
* [http://www.linkedin.com/in/cherlin LinkedIn]&lt;br /&gt;
* Wiser Earth, in particular [http://www.wiserearth.org/user/cherlin my page] and [http://www.wiserearth.org/organization/view/c0517a0a7b8ec94f2440668e64eb667d the Sugar Labs page].&lt;br /&gt;
* [http://www.flickr.com/people/mokurai/ Flickr]&lt;br /&gt;
* [http://www.goodreads.com/user/show/1574679 Goodreads] Share reading lists.&lt;br /&gt;
&lt;br /&gt;
* [http://livingdirectory.net/display/my_profile.php?&amp;amp;new=1223677380&amp;amp;tab=profile Friendly Favors]&lt;br /&gt;
* [http://my.barackobama.com/page/dashboard/public/gxJ7c my.barackobama.com]&lt;br /&gt;
* [http://www.facebook.com/people/Edward_Mokurai_Cherlin/613831268 Facebook]&lt;br /&gt;
* [http://pulse.plaxo.com/pulse/profile/show/60147225135?pk=e4ec91d212c76a3d7ec3af84c82eb63df0bbebb9 Plaxo Pulse]&lt;br /&gt;
* [http://www.myspace.com/echerlin MySpace]&lt;br /&gt;
* [http://twitter.com/Mokurai Twitter]&lt;br /&gt;
* [http://www.naymz.com/search/edward/cherlin/2035203 Naymz]&lt;br /&gt;
* [http://www.grouply.com/member.php/cherlin Grouply]&lt;br /&gt;
&lt;br /&gt;
==Wikis==&lt;br /&gt;
&lt;br /&gt;
There are too many of these, too. &lt;br /&gt;
&lt;br /&gt;
* Here, of course&lt;br /&gt;
* [http://wiki.laptop.org/go/User:Mokurai OLPC]&lt;br /&gt;
* Frequent contributor to [http://en.wikipedia.org/ Wikipedia]&lt;br /&gt;
* [http://isde5.pbwiki.com/Earth_Treasury ISDE5] (International Symposium on Digital Earth)&lt;br /&gt;
* [http://wiki.python.org/moin/FrontPage Python] PyCon Bid Chair for SF Bay Area, 2010&lt;br /&gt;
* [http://impeach.wikia.com Impeachment Wiki] Founder&lt;br /&gt;
* [http://www.obamapedia.org/ Obamapedia Wiki]&lt;br /&gt;
* [http://www.finnegansweb.com/wiki/index.php/Main_Page Finnegans Wiki]&lt;br /&gt;
&lt;br /&gt;
==Generalist==&lt;br /&gt;
&lt;br /&gt;
Buddhist priest, software developer, market researcher, technical writer, Peace Corps volunteer, cook, goatherd, music teacher...&lt;br /&gt;
&lt;br /&gt;
I edited the [http://www.amd.com/us-en/ConnectivitySolutions/ProductInformation/0,,50_2330_9863_9919,00.html Geode processor manuals] for National Semiconductor, before they sold the product line to AMD. (The [http://wiki.laptop.org/go/Hardware_Specification Laptop contains an AMD Geode processor.])&lt;br /&gt;
&lt;br /&gt;
Languages: [http://wiki.laptop.org/go/Hebrew Hebrew], [http://wiki.laptop.org/go/German German], [http://wiki.laptop.org/go/Latin Latin], [http://wiki.laptop.org/go/Russian Russian], [http://wiki.laptop.org/go/French French], [http://wiki.laptop.org/go/Swahili Swahili], [http://wiki.laptop.org/go/Korean Korean], [http://wiki.laptop.org/go/Japanese Japanese] [http://wiki.laptop.org/go/Chinese Chinese], [http://wiki.laptop.org/go/Sanskrit Sanskrit], [http://wiki.laptop.org/go/Pali Pali], [http://www.perseus.org/ Classical Greek], [http://www.lojban.org/ Lojban], [http://www.kli.org/tlh/pIqaD.html Klingon]&lt;br /&gt;
&lt;br /&gt;
Programming languages: [http://wiki.laptop.org/go/APL APL], [http://wiki.laptop.org/go/LISP LISP]/[http://en.wikipedia.org/wiki/Scheme_%28programming_language%29 Scheme], [http://wiki.laptop.org/go/FORTH FORTH], [http://en.wikipedia.org/wiki/SNOBOL4 SNOBOL], FORTRAN, COBOL, Algol, [http://wiki.laptop.org/go/Java Java], C, C++, Pascal, [http://wiki.laptop.org/go/Smalltalk Smalltalk], [http://wiki.laptop.org/go/Python Python], scripting languages. And I&#039;m learning [http://wiki.laptop.org/go/Squeak Squeak].&lt;br /&gt;
&lt;br /&gt;
[http://wiki.laptop.org/go/Unicode Unicode]&lt;br /&gt;
&lt;br /&gt;
Free/[http://wiki.laptop.org/go/Open_Source Open Source] Software: [http://www.math.uwaterloo.ca/apl_archives/apl/i-apl/ I-APL], [http://openvoting.org/ Open Voting Consortium], others&lt;br /&gt;
&lt;br /&gt;
[http://wiki.laptop.org/go/Math Math]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.laptop.org/go/Science Science] Check out [http://antwrp.gsfc.nasa.gov/apod/astropix.html Astronomy Picture of the Day] and the world&#039;s biggest telescopes, for [http://icecube.wisc.edu/ neutrinos] and [http://www.ligo.caltech.edu/ gravity waves].&lt;br /&gt;
&lt;br /&gt;
Co-founder of global anti-spam organization, [http://www.cauce.org/ The Coalition Against UCE (Unsolicited Commercial E-mail)]&lt;br /&gt;
&lt;br /&gt;
Music: [http://www.yale.net/yaleband/ycb/index.html Yale Concert Band] and [http://www.yale.net/yaleband/ypmb/index.html Marching Band], clarinet; First Prize, Classical, in first-ever Foreigner&#039;s Korean Music contest of the [http://www.heraldm.com/english/sub-company_e02.asp Korea Herald] on [http://en.wikipedia.org/wiki/Kayageum gayageum]; [http://www.slavyanka.org/ Slavyanka Russian Chorus]; [http://www.lgsrec.org/classes.php?catid=1&amp;amp;subcatid=2820 Music Around the World] pre-school multilingual music program; banjo, recorders, spoons, piano, harpsichord, dumbek&lt;br /&gt;
&lt;br /&gt;
[http://wiki.laptop.org/go/Simputer Simputer]: Simple, inexpensive, multilingual computer for poor people&lt;br /&gt;
&lt;br /&gt;
Village [http://wiki.laptop.org/go/Telemedicine telemedicine] over [http://wiki.laptop.org/go/Wireless wireless]&lt;br /&gt;
&lt;br /&gt;
Science Fiction: John Brunner would have loved the OLPC project if he had lived to see it. Check out &#039;&#039;Stand on Zanzibar&#039;&#039; (includes national development projects in fictional countries), &#039;&#039;The Shockwave Rider&#039;&#039; (integrated disaster recovery and sustainable communities), &#039;&#039;The Sheep Look Up&#039;&#039; (environmental catastrophe), and &#039;&#039;The Stone that Never Come Down&#039;&#039; (What if people couldn&#039;t ignore information they have?).&lt;br /&gt;
&lt;br /&gt;
[http://www.geekcode.com/geek.html Geek code] GAT d-- s+:+ a+++ C++ UL++ P+ L+++ E- W++ N+++@ o+ K++ M+ b+++ e+++ h---- r+++ w--- APL++++ House, MD+++&lt;br /&gt;
&lt;br /&gt;
Basic level in Korean, Chinese, Swahili, Japanese, Spanish, German&amp;lt;br&amp;gt;&lt;br /&gt;
Intermediate level in Russian, French&lt;br /&gt;
&lt;br /&gt;
[[Category:Education Team]]&lt;br /&gt;
[[Category:Earth Treasury]]&lt;/div&gt;</summary>
		<author><name>Pmv2</name></author>
	</entry>
</feed>