Remarks: Ports to Other Platforms
From Maze
(Difference between revisions)
(Created 1.1 to 1.4 so the C64 variations are within a single section) | (Put in standard spelling/typesetting of 10 PRINT, removed "Additional Images") | ||
| Line 1: | Line 1: | ||
| − | Thanks to its simplicity of construction and of form, 10 Print is easy to appreciate as an aesthetic object. This experience takes place on several registers. To name a few: as a visual experience running on a Commodore 64, a line of computer source code, and as the relationship between those two. To appreciate ''10 Print'' fully, a viewer must consider all of these registers and perhaps even more. | + | Thanks to its simplicity of construction and of form, 10 PRINT is easy to appreciate as an aesthetic object. This experience takes place on several registers. To name a few: as a visual experience running on a Commodore 64, a line of computer source code, and as the relationship between those two. To appreciate 10 PRINT fully, a viewer must consider all of these registers and perhaps even more. |
| − | There's another way to reflect on ''10 Print'': by reimplementing it in different ways. The most obvious reimplementations take place on the C64, by changing the original program in modest or significant ways. But many other methods of variation and reimplementation are possible, including considering the way mazes work in other programs and recreating ''10 Print'' on totally different platforms. At first blush such effort might seem like mere geekery, but a closer look shows that these variations can tell us much about the nature of the program. | + | There's another way to reflect on 10 PRINT: by reimplementing it in different ways. The most obvious reimplementations take place on the C64, by changing the original program in modest or significant ways. But many other methods of variation and reimplementation are possible, including considering the way mazes work in other programs and recreating 10 PRINT on totally different platforms. At first blush such effort might seem like mere geekery, but a closer look shows that these variations can tell us much about the nature of the program. |
| − | ===Commodore 64 Variations === | + | === Commodore 64 Variations === |
| − | When a C64 user first keys in and runs ''10 Print,'' he or she may soon wonder how the pattern might change if it used different character set instead of the slash characters. Whether through experimentation with different numeric values or by consulting a PETSCII table to find promising graphic characters, such changes are quite easy to accomplish. | + | When a C64 user first keys in and runs 10 PRINT, he or she may soon wonder how the pattern might change if it used different character set instead of the slash characters. Whether through experimentation with different numeric values or by consulting a PETSCII table to find promising graphic characters, such changes are quite easy to accomplish. |
| − | It turns out that even small changes have a significant impact on the visual output, particularly on its status as a maze-like pattern. The output of ''10 Print'' has a unique visual appeal, which we can understand in terms of design and composition (diagonal vs orthogonal), and in terms of how it plays against the contextual expectations of the historical period when it emerged (graphical software -- particularly video games of the era). | + | It turns out that even small changes have a significant impact on the visual output, particularly on its status as a maze-like pattern. The output of 10 PRINT has a unique visual appeal, which we can understand in terms of design and composition (diagonal vs orthogonal), and in terms of how it plays against the contextual expectations of the historical period when it emerged (graphical software -- particularly video games of the era). |
| − | When we attempt to change even the smallest element of ''10 Print'', we make an interesting discovery -- ''10 Print'' is a kind of optimal solution that is uniquely elegant in its design space (a c64 BASIC one-line maze generator). Any similar attempt is both less concise (requires more code) and less expressive (resembles a maze less). In fact, the concision of the code and the expressiveness of the image are tightly related, and arise out of a unique set of constraints and interactions, particularly the interaction between the desire to constrain the program code to a single line and the sequence of adjacent characters in the PETSCII table. | + | When we attempt to change even the smallest element of 10 PRINT, we make an interesting discovery -- 10 PRINT is a kind of optimal solution that is uniquely elegant in its design space (a c64 BASIC one-line maze generator). Any similar attempt is both less concise (requires more code) and less expressive (resembles a maze less). In fact, the concision of the code and the expressiveness of the image are tightly related, and arise out of a unique set of constraints and interactions, particularly the interaction between the desire to constrain the program code to a single line and the sequence of adjacent characters in the PETSCII table. |
Because the original program is a concise randomized offset to a region of the PETCSII character table, let's consider only variations that embrace the same limitation. | Because the original program is a concise randomized offset to a region of the PETCSII character table, let's consider only variations that embrace the same limitation. | ||
| Line 56: | Line 56: | ||
| − | ===PATH: Maze as Program=== | + | === PATH: Maze as Program === |
| − | While computer users may think of programming languages as relatively straightforward instruments used to produce increasingly complex or efficient tools and experiences, ''10 Print'' shows that the code itself can have aesthetic features worthy of consideration on their own merit. | + | While computer users may think of programming languages as relatively straightforward instruments used to produce increasingly complex or efficient tools and experiences, 10 PRINT shows that the code itself can have aesthetic features worthy of consideration on their own merit. |
A small but lively group of programmers rejects the values of clarity and efficiency in programming, in favor of other code aesthetics. While some of these techniques rely on the exploitation of conventions in existing, "normal" programming languages, others involve the invention of entirely new languages with their own aesthetic properties. These "esoteric" or "weird" languages test the limits of programming language design and comment upon programming languages themselves. | A small but lively group of programmers rejects the values of clarity and efficiency in programming, in favor of other code aesthetics. While some of these techniques rely on the exploitation of conventions in existing, "normal" programming languages, others involve the invention of entirely new languages with their own aesthetic properties. These "esoteric" or "weird" languages test the limits of programming language design and comment upon programming languages themselves. | ||
| Line 68: | Line 68: | ||
PATH is a weird language that borrows from the conventions of Brainfuck and Befunge, offering a syntactically constrained language whose control flow takes place in a two-dimensional space. | PATH is a weird language that borrows from the conventions of Brainfuck and Befunge, offering a syntactically constrained language whose control flow takes place in a two-dimensional space. | ||
| − | PATH has a natural connection to ''10 Print'' because the language uses the / and \ characters for program flow. / and \ are reflectors. As the program counter travels around in 2D space, it bounces off the reflectors in the intuitive way. Here's a path program that computes nothing (but moves | + | PATH has a natural connection to 10 PRINT because the language uses the / and \ characters for program flow. / and \ are reflectors. As the program counter travels around in 2D space, it bounces off the reflectors in the intuitive way. Here's a path program that computes nothing (but moves |
the PC around). | the PC around). | ||
| Line 81: | Line 81: | ||
respectively, if the current memory location is non-zero. Memory locations are arrayed on an infinite tape Turing style, and you can increment and decrement the current memory focus. | respectively, if the current memory location is non-zero. Memory locations are arrayed on an infinite tape Turing style, and you can increment and decrement the current memory focus. | ||
| − | Given PATH's strong typographical similarity to ''10 Print,'' it's possible to implement a version of ''10 Print'' in PATH--a program that generates labyrinths by endlessly walking a labyrinth. Here's what such a PATH program looks like: | + | Given PATH's strong typographical similarity to 10 PRINT, it's possible to implement a version of 10 PRINT in PATH--a program that generates labyrinths by endlessly walking a labyrinth. Here's what such a PATH program looks like: |
<pre> | <pre> | ||
| Line 170: | Line 170: | ||
</pre> | </pre> | ||
| − | Amusingly, the output of ''10 Print'' is itself a PATH program, just one that only moves the | + | Amusingly, the output of 10 PRINT is itself a PATH program -- one that moves the |
| − | program counter around, doing no other work. | + | program counter around and does no other work. |
===Processing=== | ===Processing=== | ||
| − | ''10 Print'' produces an appealing visual effect. As such, it deserves the name "visual art." While computer artists have used code to make visual compositions for decades, since the turn of the millennium interest in computer-generated visual art has expanded rapidly within the digital art community. Some use widely-available commercial tools like Flash for this purpose, while others have built bespoke programming environments designed specifically for visual artists. | + | 10 PRINT produces an appealing visual effect. As such, it deserves the name "visual art." While computer artists have used code to make visual compositions for decades, since the turn of the millennium interest in computer-generated visual art has expanded rapidly within the digital art community. Some use widely-available commercial tools like Flash for this purpose, while others have built bespoke programming environments designed specifically for visual artists. |
John Maeda's _Design by Numbers_ (2001) offers one example, but a far more popular and influential tool is Ben Fry and Casey Reas's Processing, which was inspired by Maeda's work and started within his research group at the MIT Media Lab. Processing is really just Java, with a specialized toolkit, program framework, and authoring environment laid atop. Among its goals, Processing seeks to introduce non-programmers to the practice of programming, but it also offers a set of very simple tools (such as mechanisms for drawing and coloring lines and shapes) for the creation of generative visual art. | John Maeda's _Design by Numbers_ (2001) offers one example, but a far more popular and influential tool is Ben Fry and Casey Reas's Processing, which was inspired by Maeda's work and started within his research group at the MIT Media Lab. Processing is really just Java, with a specialized toolkit, program framework, and authoring environment laid atop. Among its goals, Processing seeks to introduce non-programmers to the practice of programming, but it also offers a set of very simple tools (such as mechanisms for drawing and coloring lines and shapes) for the creation of generative visual art. | ||
| − | That lineage in mind, implementing a version of ''10 Print'' in Processing allows us to focus on its visual design in a way that might not be easy or even possible to do in a C64 program. In the Processing version of ''10 Print'' depicted here, the program is created by drawing a left or right-facing diagonal line within a grid of enclosing squares. | + | That lineage in mind, implementing a version of 10 PRINT in Processing allows us to focus on its visual design in a way that might not be easy or even possible to do in a C64 program. In the Processing version of 10 PRINT depicted here, the program is created by drawing a left or right-facing diagonal line within a grid of enclosing squares. |
[Need to add image of Casey's Processing implementation]http://mailman.mit.edu/mailman/private/10-print/attachments/20100505/92aa360e/Picture-1-0001.gif, http://reas.com/rnd/ | [Need to add image of Casey's Processing implementation]http://mailman.mit.edu/mailman/private/10-print/attachments/20100505/92aa360e/Picture-1-0001.gif, http://reas.com/rnd/ | ||
| Line 186: | Line 186: | ||
Already that's a different way to think about the visual output of the program, since the C64 version simply outputs characters to the screen buffer, which wraps them in order to create the appearance of a maze. But Processing programs also tend to rely on code rather than assets to create their effects. That is, Processing is particularly adept at visual renderings produced entirely from geometric primitives fashioned in source code rather than from loading and manipulating image files (although it is certainly capable of the latter). When using such a technique, it is easy to make small variations on the appearance of individual elements in the output by changing the values of particular variables in the program. | Already that's a different way to think about the visual output of the program, since the C64 version simply outputs characters to the screen buffer, which wraps them in order to create the appearance of a maze. But Processing programs also tend to rely on code rather than assets to create their effects. That is, Processing is particularly adept at visual renderings produced entirely from geometric primitives fashioned in source code rather than from loading and manipulating image files (although it is certainly capable of the latter). When using such a technique, it is easy to make small variations on the appearance of individual elements in the output by changing the values of particular variables in the program. | ||
| − | The adaptation of ''10 Print'' shown here offers several knobs that can be used to alter the appearance of the individual cells, among them thickness, randomness, and shape. Changing the shape used for individual cells from slashes to circles or lines results in the same sort of systemic visual changes seem in the Commodore 64 variations discussed above. However, changing the thickness or randomness of the pattern results in a totally different appearance, as shown below. | + | The adaptation of 10 PRINT shown here offers several knobs that can be used to alter the appearance of the individual cells, among them thickness, randomness, and shape. Changing the shape used for individual cells from slashes to circles or lines results in the same sort of systemic visual changes seem in the Commodore 64 variations discussed above. However, changing the thickness or randomness of the pattern results in a totally different appearance, as shown below. |
[Image of some variations]http://mailman.mit.edu/mailman/private/10-print/attachments/20100505/92aa360e/Picture-2-0001.gif, http://mailman.mit.edu/mailman/private/10-print/attachments/20100505/92aa360e/Picture-3-0001.gif | [Image of some variations]http://mailman.mit.edu/mailman/private/10-print/attachments/20100505/92aa360e/Picture-2-0001.gif, http://mailman.mit.edu/mailman/private/10-print/attachments/20100505/92aa360e/Picture-3-0001.gif | ||
| − | Generative art is characterized by the use of algorithms or self-automated processes to create some artistic result. From an author's perspective, the practice of creating generative art is less a matter of designing a fixed, singular outcome than in designing a machine capable of producing a variety of different outcomes. ''10 Print'' is itself generative--it uses a set of instructions to create a visual effect. But as the C64 variants suggest, the manner of parametric variation possible on that platform, within a single line of BASIC code, are limited. The Processing variant of the program is not only many more lines of code, but also far more granular in its settings. When discussing generative aesthetics, it's common to think that more parametric variation is "better"--or at least more generative--than less variation. | + | Generative art is characterized by the use of algorithms or self-automated processes to create some artistic result. From an author's perspective, the practice of creating generative art is less a matter of designing a fixed, singular outcome than in designing a machine capable of producing a variety of different outcomes. 10 PRINT is itself generative--it uses a set of instructions to create a visual effect. But as the C64 variants suggest, the manner of parametric variation possible on that platform, within a single line of BASIC code, are limited. The Processing variant of the program is not only many more lines of code, but also far more granular in its settings. When discussing generative aesthetics, it's common to think that more parametric variation is "better"--or at least more generative--than less variation. |
| − | That value in mind, the Processing program's results suggest a question: were one to create or discover ''10 Print'' as a Processing program instead of a Commodore 64 one-liner, would the particular configuration of settings that correspond with the latter seem most natural or appealing? It's impossible to answer definitively, but the question does underscore how the constraints of the original program's authorship--a single line of code, the particularities of the PETSCII table, and so forth--contribute to the result partly by reducing its possible variations, rather than by increasing them. | + | That value in mind, the Processing program's results suggest a question: were one to create or discover 10 PRINT as a Processing program instead of a Commodore 64 one-liner, would the particular configuration of settings that correspond with the latter seem most natural or appealing? It's impossible to answer definitively, but the question does underscore how the constraints of the original program's authorship--a single line of code, the particularities of the PETSCII table, and so forth--contribute to the result partly by reducing its possible variations, rather than by increasing them. |
| − | |||
| − | === Additional Images (what were these here for?) === | ||
| − | |||
| − | [[Image:Game-Pac-Man-arcade-(1980).png|left|thumb|160px|''Pac-Man'' (1980 arcade) -- a maze-like field of partitions must be run while being chased by ghosts]] | ||
| − | |||
| − | [[Image:Atari2600-Adventure-v2-(vgmaps).png|left|thumb|200px|Map of ''Adventure'' for Atari 2600 (VGmaps)]] | ||
| − | |||
| − | [[Image:10print-77,78-NM-letters.png|left|thumb|160px|10 PRINT CHR$(77+RND(1)*2); : GOTO 10]] | ||
| − | |||
== Bibliography (not sure which of these are still in scope here) == | == Bibliography (not sure which of these are still in scope here) == | ||
