-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathOLPC-notes.txt
366 lines (274 loc) · 15.8 KB
/
OLPC-notes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
Micropolis for OLCP Sugar User Interface
By Don Hopkins (dhopkins@DonHopkins.com)
Why is Micropolis such a great match for OLPC's Sugar interface?
Constructivist education.
Children learn by doing and experiencing.
Playful learning (as opposed to edutainment).
People learn effectively through making things.
Micropolis is often mentioned as a great example of an educational,
constructivist game, in the academic literature and popular press.
Multi player
Sharing, collaborating, conferencing, voting.
Writing journals about Micropolis
The Micropolis Journal: newspaper metaphore.
Drive the development and prove the worthyness of the technology.
Develop Micropolis hand-in-hand with Sugar, so they synergize with each other.
I developed the HyperLook version of Micropolis in parallel with the
HyperLook user interface environment, and they both were better
because of it. Micropolis required HyperLook to support useful
multimedia extensions like a shared audio mixer server, an efficient
shared memory based bitmap animation system, and integration with
TNT Open Look user interface components (sliders, pin-up menus,
buttons, etc). And Micropolis was able to take full advantage of
HyperLook's features like outline graphics, scaling images,
graphical editing, printing PostScript, etc. Micropolis was extremely
useful as an engaging promotional demonstation that proved the
capabilities and quality of HyperLook.
Use Micropolis to showcase the unique ideas and features of Sugar, in an
exciting way that many people can easily understand.
CSound audio mixer.
Mesh networking.
D-bus messaging system.
Python scripting langauge.
GTK widgets.
Pie menus.
Communication and conferencing.
Chat, shared whiteboard, voting interface.
Learn to work together with other people, and argue your ideas.
Politics. Interpersonal communication and cooperation.
Immersive microworlds.
Inspire and teach kids to program.
Virtual datalogger, tricorder, lets you export and analyze logs and data from simulation.
Micropolis courseware.
Teach ecological and environmental issues.
Social studies.
Creative writing, developing language skills.
Science education.
========================================================================
Notes on adapting Micropolis to the OLPC Sugar user interface:
Core Ideas:
Activities, not Applications
First cut:
Integrate the current TCL/Tk version of Micropolis to run as a simple activity within Sugar.
Restructure the multi-window TCL/Tk code to run in a single full screen window.
Implement a simple activity-oriented tiled window management interface.
Disable advanced features like multiple editor and map windows,
that require more sophisticated window management.
Instead of using a traditional multi-window management approach,
Make a simple wrapper around it that makes it appear in the Sugar user interface as an activity, like eToys does.
Long term:
Implement activity specific modes that reconfigure the user inteface (like Eclipse "perspectives").
- build/edit oriented interface
- query/analysis oriented interface
- financial oriented interface
- communication/coordination oriented interface
- dynamic zone finder analysis
- grid of several overall map views, each configured to show a different overlay.
- grid of several close-up map views, each centered on a different parts of the city (or tracking a player's cursor)
Collaboration: Enhance multi player mode to support sharing activities.
Both publishing your game for others to clone and play themselves (massively single player, like Spore),
and letting others join in your game (like the current cooperative multi-player mode)).
Multi player inte
Expression: Enhance chat, journaling, storytelling, and personalization aspects of the game.
Journaling: Record all events (both user edits and simulation events), chat messages and drawings.
Checkpoint the game state, and implement the ability to deterministically replay time stamped
editing events into the simulation, so you can fast forward and rewind from any checkpoint to
any step of the simulation.
Enable players to write newspaper articles about the cities, with live links to a snapshot
of the simulation and a place on the map, related to the story. Other players could browse
their published newspapers about the history of a city, and jump into that history at any time
from any story.
Iteration: Checkpoint game save files, allowing players to rewind history, and try "what-if" experiments.
Presence is Always Present
First cut:
Enhance the current X11 based multi player interface to support presence, the grid network, and messaging.
The current multi player interface runs a single Micropolis process on one laptop,
which connects to the local X server, and/or several other X servers on laptops over the net.
Rewrite the "Add User" dialog to be grid-network aware.
Instead of asking for an X server DISPLAY screen, provide a list of friends on the network.
Send an invitation to play to friends on the network.
Rewrite the built-in chat interface to integrate with the chat system used by Sugar.
Improve the shared "white board" overlay, so kids can draw on the map in different colors,
enable and disable different overlays, save overlays with the map, add text to overlays, etc.
Implement location based chat, by overlaying people icons and chat bubbles on the map.
Each player has a people icon "cursor" that they can move around the map (which follows
their selected editing cursor), and their chat messages show up in bubbles overlayed on the map.
When you select an editing tool, you can type what you're doing with the tool,
other people will be able to watch you, and make comments on what you're doing.
Long term:
Rewrite Micropolis in terms of Python/GTK/Cairo, and take full advantage of the Sugar libraries and services.
Support sharing, mentoring, colaboration, voting, political dialogs, journaling, etc.
Develop Micropolis into a exemplary, cutting edge demonstration of all that's great about Sugar.
Tools of Expression
Micropolis is great at supporting personal expression, interpretation and storytelling,
and leveraging what the player already knows to make connections to new knowledge,
and stimulating conversation, debate and analytical thinking.
Develop a web based "Wikipedia" oriented interface to Micropolis, supporting colaboration, discussion,
annotation, history journaling, and branching alternative histories.
Journaling
The "Micropolis Journal" could be realized as a web-based
newspaper-like interface.
Expose the multi player user interface through the web, instead of
using X11.
Automatically generate a newspaper for any particular time in a
city's history, from the simulator events and state, combined with
user written articles and chat messages.
The newspaper has sections that present automatically generated
snapshots of the information displayed in the various dialogs
(graph, evaluation, chat, notices, etc), and stories about
significant events (both user-generated and simulation-generated).
Enrich the city save file with metadata including the chat and
event journal, overlays, snapshots at different points in time (in
a branching "what-if" tree structure), etc.
In the Python version of Micropolis it will be easy to implement a
web server based interface that lets users read the city's
newspaper through the web browser, automatically inserting
pictures of the map corresponding to particular events in time. An
article about pollution going down could show a before and after
overall map with the polution overlay, and stuff like that.
Plug in modules to the simulator that analyze the state of the
city and generate events for the newspaper to write articles
about, including interesting stastical information and other
parameters to insert into the story template.
Implement "online surveys" that let newspaper readers vote on proposals
(expose the voting interface to web based users).
Use OpenLaszlo to develop a rich graphical AJAXian web service
based Micropolis interface, eliminating the need for the X11
interface, and enabling all kinds of interesting interface
customizations and mash-ups with other web services.
Know your Audience
Inexperienced
Keep the user interface simple, low surface area, direct, obvious, redundant, forgiving.
Gentle learning curve. Self revealing interface. Direct manipulation.
Integrated help and educational content.
Playback journals with voice-overs, so kids can learn by watching and listening to
recordings of teachers playing and describing what they're doing.
Multi player support for mentoring.
Young
Micropolis appeals to a wide range of age levels.
Design the user interface to support zooming, use large colorful
graphics, etc.
Do not require high coordination, fine pointer positioning, moving
the mouse while holding down the button, etc.
Scale across age levels by using interfaces that clearly reveal
themselves to novice users, but can be reconfigured by more
experienced users to be more streamlined.
For example, from the current interface: the map editor window has
a palette of editing tools, which makes it easy for novice users
to see and learn all the available editing commands, but consumes
precious screen space.
It also provides pie menus as a short cut to the palette, which
are layed out in the same arrangement as the palett (so the
palette serves as a map to the pie menus). Intermediate users can
use the palette as a map, to help learn the pie menus, and when
they are more experienced, they can close the palette to make the
map bigger, and use the pie menus exclusively.
The pie menus themselves are self-revealing, and have their own
gradual learning curve that supports graduation from inexperienced
users (click the menu up, look at the screen, move in the
direction, select the item), intermediate users (press down and
move in the direction, look at screen to make sure the right item
is selected, then select the item), and advanced users (mouse
ahead in the correct direction without looking at the screen).
International
The text in Micropolis needs to be broken out into external files so
it can be translated to different languages.
The Micropolis documentation, supporting essays about city planning,
and study guides need to be translated.
Best to do this after converting to Python/GTK/Cairo, since the
old version of TCL/Tk that Micropolis currently uses does not support
unicode or i18n.
Dig up the tile sets for different kinds of cities (old west,
european, futuristic, moon base, etc), develop new tile sets, and
enable children to easily develop their own tile sets and
interface skins.
Key Design Principles
Performance
Micropolis was designed to run well in a C64.
I've profiled and optimized it to run efficiently on Unix, and
take optimal advantage of the X11 window system.
Usability
Micropolis is fairly usable and approachable, but every effort should
be made to improve it, take maximum advantage of the Sugar user
interface, and for Micropolis to serve as a good example of Sugar
interface design, for others to emulate.
Simplicity
Some of the advanced features of the multi player X11 version of
Micropolis (like multiple map views and editors) will have to be
temporarily sidelined, and eventually reimplemented in simpler,
activity-oriented ways.
Reliability
Micropolis is currently pretty robust and can run for an indefinite
time without leaking memory or crashing.
The scripting language interface should try to protect against hard crashes,
but once you open it up to scripting, there are an infinite number of ways
programmers could make mistakes.
Security
The code should be audited for security.
User access to the scripting language and network remote control
code should be disabled.
Currently it allows any users to type TCL expressions, which is
great for cheating, but bad for security.
Currently there is some code in there to enable network remote
control (setting the tax rate and other parameters via a midi
slider box on a Mac running Bounce/Body Electric that sends UDP
packets to Micropolis when the user changes the slider). That should
be disabled (and eventually be replaced by a secure web service
based network interface.).
Adaptability
Adapt to different screen display modes and resolutions. Micropolis
has a high contrast monochrome tile set that it could use in
monochrome mode.
The color tiles look great in monochrome mode with gray scales,
but the high contrast monochrome tiles might be easier to see.
Need to support zooming into the map with any magnification, like
google maps (or the old PostScript-based HyperLook version of
Micropolis).
Support playing Micropolis with the game controller in book mode.
Instead of using X11 for multi player interaction (which will
cause the application to crash horribly if the network connection
is lost), reimplement the multi player mode on top of the dbus
messaging system, so it is more robust, and every player runs
their own instance of the simulator, so they all simulate together
in lock-step, like The Sims Online.
Recoverability
Use checkpointing and journaling to implement automatic back-up,
and expose a "rewind/fast forward" interface to the user, so they
can back up, change history, and replay changes at any point in time.
This is also the key to implementing a more advanced multi player
interface (better than the current X11 based system, more like The
Sims Online, where everyone runs their own copy of the simulation
in lock-step), so anyone can join the game by cloning its current
state, subscribing to its edit event stream, and submitting all
their edits to the master simulation (or going through the voting
negotiation system, like the current voting interface for building
expensive items and changing the tax rate).
Solve the colaborative undo/redo problem by allowing children to
branch out to their own private alternative histories. Instead of
overwriting the one main history, it inserts a branch point into
the shared history that links to their own private Idaho, which
itself may branch out into many histories. See Larry Niven's "All
the Myriad Ways".
Interoperability
Exposing Micropolis as a set of web services would enable all kinds
of interesting mash-ups and rich web based user interfaces.
Mobility
Support playing Micropolis in book mode with the game pad.
Transparency
The "view source" button could bring up the Micropolis source code.
Develop some source code documentation and extend the "How the
Simulator Works" documentation to link into the appropriate source
code. Annotate the C and Python source code to better explain how
it works.
Encourage children to learn Python programming (rather than
focusing on the C source code). Develop a robust Python scripting
interface that lets you hook into and control all aspects of the
simulator. Enable users to develop various kinds of Micropolis
plug-ins (buildings, editing tools, agents, disasters, etc) that
are easily scripted in Python, by subclassing.
Accessibility
Enable full keyboard control.
Enable full game pad control.
Enable full network control.
Speech synthesis and recorded voice feedback.
Zooming interface.