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