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. 
