|
|
1.1 ! root 1: Micropolis for OLCP Sugar User Interface ! 2: By Don Hopkins ([email protected]) ! 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.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.