Annotation of micropolis/src/notes/OLPC-notes.txt, revision 1.1

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. 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.