A Social Shell & Mesh Cookbooks

From ActiveArchives
Jump to: navigation, search

Construction.gif Draft proposal for Variable Summer School 2014


  • Anne Laforet
  • Michael Murtaugh



A Social Shell & Mesh Cookbooks proposes to deploy a network of small server nodes (via Raspberry Pi, Olimex, or possibly installed on individual's laptops) during the Summer School session. The software provides a web-based commandline/shell environment (a social shell) in which commandline programming is enhanced by "dynamic" manual pages provided by a live "cookbook" or collection of stored "recipes"/scripts (the mesh cookbook). The cookbooks are distributed in that each node runs independently (and is specific to the group using it) but whose contents may be "merged" (itself a social operation) with others to form a distributed (code) documentation system for the Summer School event.


The Raspberry Pi[1] and Olimex[2] projects are popular examples of a contemporary trend in inexpensive computing devices for a wide variety of (educational, artistic) uses. The operating system for the devices, are typically a variant of the UNIX operating system[3]. The shell is the name for the (typically textual) program that a user uses to interface with the system and stems from the early history of connecting to computers via typewriter like "terminals". The history of the shell is a social one. Command-line driven shells or terminals allowed expensive and large computers to be "time-shared", allowing simultaneous and interactive access by multiple users. Commands like who (show who is logged in), write (send a message to another user), and finger (user infomation lookup program) represent a pre-Web (in fact pre-Internet) functionality we might associate with social networks of today.

Mother of all demos: Social coding circa 1970
Stack Overflow: Programming Q&A circa 2014
If you don't have access to the information you need to improve things, how can you fix them? A free exchange of information particularly when the information was in the form of a computer program, allowed for greater overall creativity. When you were working on a machine like the TX-0, which came with almost no software, everyone would furiously write systems programs to make programming easier—Tools to Make Tools, kept in the drawer by the console for easy access by anyone using the machine. This prevented the dread, time-wasting ritual of reinventing the wheel: instead of everybody writing his own version of the same program, the best version would be available to everyone, and everyone would be free to delve into the code and improve on THAT. A world studded with feature-full programs, bummed to the minimum, debugged to perfection.[4]

A Social Shell

The introduction of the web radically popularized and changed and use of networked computers. The use of URLs to bridge protocols, host names, and file paths, and a simple public domain standard for hypertext created a social space of documents by virtue of the link (and associated pracices like the webring). CGI bridges the web and the shell script, and provides a mechanism for another kind of sociality via for instance the guestbook, itself also introducing the world to electronic spam. The eventual addition of the image tag (and image maps) and other means of embedding multimedia broke the text-only nature of the terminal and expanded the scope of the web to include graphic design and multimedia. Unfortunately, the web and the shell still occupy separate spaces, as CGI has several problems:

  • The HTTP protocol is not designed for long running or interactive processes, nor does it have any inherent notion of a pipeline,
  • Forms rather than free-form text are the "native" and typical user interface (also fitting the temporality of longer request-response loop),
  • Scripts are typically isolated and restricted to match a worst case scenario of potential misuse by virtue of being "world-executable" (when not coupled with some form of "authentication" such as a login system)

A Social Shell would:

  • Marry the power the shell with the familiarity, functionalities, and flexibility of the browser.
  • Augment the textual nature of the shell to exploit the hypertextual nature of the web.
    • Example: Man pages available as navigable HTML alongside a script output.
    • Exploit the mixed media / collage capabilities of HTML5.
    • Create a rich inter linked space of cross-reference scripts
  • Integrate cookbooks (socially curated compilations of example code) of shell scripts
    • Imagine the system as a hybrid development / publishing platform.
  • Is on the ground, not in the cloud; Enable fully functional access to one's system thanks to the "situated authentication" of running locally, directly under the control of its users;
    • Run in a local network on locally situated hardware, for instance a laptop or low-cost low-power microcontroller (Olimex, Rasberry Pi)
  • Encourages a pipeline based approach to experimentation and creation through making novel connections between existing tools
    • apt-get not app: Tap into the vast diversity and cross-disciplinary richness of command-line based free software tools (in contrast to the restrictions of a given platforms "app" store)
    • Help with some of the syntax complexities of actually using pipelines in the shell
    • Help out with managing in-between/temporary files (let files be more like programming variables and less hierarchical)

Mesh cookbooks

Mesh cookbooks are networked local machines to host/serve/publish cookbooks :

  • A local network of machines (Raspberry Pi, Olimex...) scattered in a space for publishing/documenting activities going on simultaneously in that environment
    • Documenting the different work sessions at Variable at the Summerschool as a testing ground for decentralized, simultaneous and parallel publishing platforms. Each worksession could document its activities on the local node, publishing cookbooks, snippets of code and other types of notes, observations.
      • It would need to work at the beginning of the Summerschool (installing it the first day) and then use/modify/repair/fork/merge/expand during the week.
  • Synchronization of the nodes in a mesh network is not necessarily the default mode.
    • Only partial information about ongoing publishing/documentation (names or types of files or other metadata) could be exchanged/broadcasted in real time by the nodes and read by the users of the mesh cookbooks through their terminals.
    • The cookbooks could be accessible to other nodes and published online after they are edited for instance.
    • Users of other nodes could pull not yet synchronized files using social shells.
  • While access to public Internet is required during a learning session, using mesh cookbooks could reduce some of the traffic (which may be critical during the Summerschool).

Social is not Web 2.0

A stack exchange for Libraries & Information Sciences was created but failed to meet the criteria for an Excellent Q&A community and was according to the platform's policies taken offline (the collected Q&A content available only in dump form)[5]

The popular programming Q&A site Stack Overflow[6] has, as of 2014, become the dominant programming help site, often representing the first Google hits to questions about an error message or a particular programming language or library. Through a highly effective use of community-driven reputation scores to determine the best answers, the site has quickly established itself as a place for programmers to trust and provides an important reflection of the best practices of programming at any given moment. While the content of the site (the actual questions and answers) are offered under a Creative Commons license, the platform itself, called Stack Exchange, is proprietary. New topics for Exchanges may be proposed and tried out, but only Exchanges that meet the criteria determined by the platform for an Excellent site are maintained. The platform is financed by advertising via an integrated job-seeking site (Careers 2.0).

In situating a social shell & mesh cookbooks in the browser we do not envision transposing established concepts the "social web". A core motivation in this project is a critical and often resistive response to contemporary online social media as many of the central mechanisms (think frictionless sharing, algorithmic "karma" scores, free software sandboxed in proprietary platforms, network infrastructure, and hardware) are highly problematic. In terms of network infrastructure, a social shell is closer to a 1960s multi-user UNIX system than to the "cloud" infrastructure behind today's popular social platforms. This project hopes to explore alternatives to centralization and global-scale as the only means of creating functional networked communities.

Web 2.0 Social Shell & Mesh Cookbooks
Public Network, Centralized/Corporate Authentication Private/Mesh Network, Implicit authentication
All access remote by default Local access to local machine & local network, Remote access via tunneling / VPN
Servers in data centers running 24/7 (Micro)server running as needed locally
Infrastructure for continuous public Internet connections essential Local network access, public Internet optional
Monolithic, "Sandboxed" in proprietary platforms Heterogeneous (multi-stack), Free-software throughout, All parts replaceable
Centralized, Lowest common denominator/Large scale-driven policies Localized, Community-driven policies

Proof of concept / sketches

The design of the web was successful due to the way it balanced introducing new functions (HTML/HTTP) with an approach that bridged and leveraged the existing / parallel (URLs, Mime types). In a similar way, the work of developing a social shell is often not so much about creating something new, but in linking together what already exists in an environment that brings these pieces together. Example: the man command that gives access to each program's "manual" page has long had support for creating HTML output. This output (if one explicitly requests it) is by default displayed using a text based browser in the terminal (such as links). In the space of a browser page, however, the HTML document can be displayed in a frame, with the full graphic and layout capabilities of HTML and visually presented alongside one's command output. This proof of concept is implemented in Python using the Twisted framework and WebSockets.

In a nutshell (no pun intended ;), we imagine a social shell as a combination test kitchen and collaborative cookbook publishing platform. The tool is designed for use within a particular community of use (for instance a class, or a project team, or perhaps a community organized around a particular interest). The software could be used on a local laptop running a GNU/Linux distribution, or on a micro-controller such as the Rasberry Pi or Olimex.

In the example below, a shell script recursively explores nested folders of images and uses imagemagick's montage command to make contact sheets.

Related projects / links


  1. http://raspberrypi.org
  2. http://olimex.com
  3. Raspian, a special packaging of Debian, a popular distribution of the GNU/Linux family of operating systems which are free (as in freedom) versions of the original proprietary UNIX system.
  4. From Hackers, Heroes of the Computer Revolution by Steven Levy, retrieved from: http://www.gutenberg.org/cache/epub/729/pg729.html
  5. http://area51.stackexchange.com/proposals/12432/libraries-information-science
  6. http://stackoverflow.com
Personal tools