{"id":10225,"date":"2020-11-11T14:07:32","date_gmt":"2020-11-11T19:07:32","guid":{"rendered":"https:\/\/courses.ideate.cmu.edu\/62-362\/f2021\/?page_id=10225"},"modified":"2021-11-17T13:09:03","modified_gmt":"2021-11-17T18:09:03","slug":"arrows","status":"publish","type":"page","link":"https:\/\/courses.ideate.cmu.edu\/62-362\/f2021\/arrows\/","title":{"rendered":"ARROWS"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">Contents<\/p><ul class=\"toc_list\"><li><a href=\"#Arrows_in_computing\"><span class=\"toc_number toc_depth_1\">1<\/span> \u201cArrows\u201d in computing<\/a><ul><li><a href=\"#Historical_context\"><span class=\"toc_number toc_depth_2\">1.1<\/span> Historical context<\/a><\/li><li><a href=\"#Compilers\"><span class=\"toc_number toc_depth_2\">1.2<\/span> Compilers<\/a><ul><li><a href=\"#An_example_from_the_Arduino\"><span class=\"toc_number toc_depth_3\">1.2.1<\/span> An example from the Arduino<\/a><\/li><\/ul><\/li><li><a href=\"#Emergent_complexity\"><span class=\"toc_number toc_depth_2\">1.3<\/span> Emergent complexity<\/a><\/li><\/ul><\/li><li><a href=\"#Assignment\"><span class=\"toc_number toc_depth_1\">2<\/span> Assignment<\/a><\/li><li><a href=\"#Due_dates\"><span class=\"toc_number toc_depth_1\">3<\/span> Due dates<\/a><ul><li><a href=\"#Mon_Nov_15_Initial_Ideation_Due\"><span class=\"toc_number toc_depth_2\">3.1<\/span> Mon, Nov 15: Initial Ideation Due<\/a><\/li><li><a href=\"#Wed_Nov_17_Group_Check-in\"><span class=\"toc_number toc_depth_2\">3.2<\/span> Wed, Nov 17: Group Check-in<\/a><\/li><li><a href=\"#Mon_Nov_22_Proof_of_Concept_Demo_Low-fi_Maquette_Presentation\"><span class=\"toc_number toc_depth_2\">3.3<\/span> Mon, Nov 22: Proof of Concept\u00a0 Demo, Low-fi Maquette Presentation<\/a><\/li><li><a href=\"#Thur_Dec_2Fri_Dec_3_Install_in_CFA_time_TBA\"><span class=\"toc_number toc_depth_2\">3.4<\/span> Thur, Dec 2\u2013Fri Dec 3 Install in CFA, time TBA<\/a><\/li><li><a href=\"#Fri_Dec_3_7pm_Install_Complete_IDeATe_End_of_Semester_Event_in_CFA\"><span class=\"toc_number toc_depth_2\">3.5<\/span> Fri, Dec 3, 7pm Install Complete IDeATe End of Semester Event in CFA<\/a><\/li><li><a href=\"#Finals_Week_Complete_Critique_Documentation_Due\"><span class=\"toc_number toc_depth_2\">3.6<\/span> Finals Week: Complete Critique &amp; Documentation Due<\/a><ul><li><a href=\"#Documentation_requirements\"><span class=\"toc_number toc_depth_3\">3.6.1<\/span> Documentation requirements<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/div>\n<h1><span id=\"Arrows_in_computing\"><span style=\"font-weight: 400;\">\u201cArrows\u201d in computing<\/span><\/span><\/h1>\n<h2><span id=\"Historical_context\"><span style=\"font-weight: 400;\">Historical context<\/span><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Modern digital computers were originally developed to speed up and improve the accuracy of repetitive mathematical operations. Some of the first electronic computers were, fundamentally, no more than a sort of calculator which could remember and refer back to prior results to use in future calculations in a fixed, predefined way. At this point in their history, computers were simple, fairly transparent, and \u201cspecial-purpose,\u201d in the sense that they were individually designed specifically to solve particular well-defined problems. For instance, an early computer would multiply two complex numbers (which exist in the form <\/span><b>a<\/b><span style=\"font-weight: 400;\">+<\/span><b>b<\/b><i><span style=\"font-weight: 400;\">i<\/span><\/i><span style=\"font-weight: 400;\">, where <\/span><i><span style=\"font-weight: 400;\">i <\/span><\/i><span style=\"font-weight: 400;\">is the imaginary number which is the square root of \u20131) and return the result; it could do nothing else.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The complex number multipliers were designed in such a way that the output of a specific operation was wired directly into the input of the next step of computation. The \u201carrows\u201d inside the machine\u2014steps where one value referred to another\u2014were fixed and couldn\u2019t be changed without reengineering the device.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The first modern <\/span><i><span style=\"font-weight: 400;\">reprogrammable<\/span><\/i><span style=\"font-weight: 400;\"> digital computer was the ENIAC (Electronic Numerical Integrator and Computer), built in 1945. This behemoth had tens of thousands of vacuum tubes and consumed 147kW of electricity when it was running. Different sections of the machine accomplished specific tasks like addition, multiplication, square root extraction, etc. In order to load a new program onto the ENIAC, patch wires connecting panels of sockets had to be manually reconfigured, a process which took hours to accomplish; each new program was hardwired into the machine by rearrangement of these cables. The glorious mess of patch cables were this machine\u2019s \u201carrows,\u201d physically visible and at human scale.<\/span><\/p>\n<div style=\"width: 1250px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium\" src=\"https:\/\/spectrum.ieee.org\/media-library\/marlyn-wescoff-and-ruth-lichterman-were-two-of-the-female-programmers-of-eniac.jpg?id=25588099&amp;width=1240&amp;height=930\" alt=\"Two women manipulate wires in a large plugboard.\" width=\"1240\" height=\"930\" \/><p class=\"wp-caption-text\">Marlyn Wescoff (left) and Ruth Lichterman program the ENIAC. (Corbis\/Getty Images via <a href=\"https:\/\/spectrum.ieee.org\/media-library\/marlyn-wescoff-and-ruth-lichterman-were-two-of-the-female-programmers-of-eniac.jpg?id=25588099&amp;amp;width=1240&amp;amp;height=930\">IEEE<\/a>)<\/p><\/div>\n<p><span style=\"font-weight: 400;\">The ENIAC was the fruit of an idea that had emerged 115 years earlier, when Charles Babbage, working with Ada, the Countess of Lovelace, developed a plan for an Analytical Engine. This was to be a machine which could not only perform fixed mathematical operations but also was \u201cprogrammable\u201d\u2014it would be able to be modified on the fly to perform different functions, in different orders, as the ENIAC was. It\u2019s difficult to overstate the importance of this leap from a fixed-use mathematical solving machine to one which can be programmed to produce different sorts of outcomes from the same input.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Lady Lovelace contributed enormously to the field with her insight that a computer \u201cmight act upon other things besides number,\u201d which was the first known conceptualizing of the expansion of a computer\u2019s power beyond the merely mathematically computational. With this, she allowed for an entirely different class of \u201carrows\u201d to come into being; if non-numerical entities could be represented, and calculated, stored, etc., then the whole world may potentially be the arrow that any particular piece of a computer\u2019s memory points towards.<\/span><\/p>\n<h2><span id=\"Compilers\"><span style=\"font-weight: 400;\">Compilers<\/span><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">At the same time that the ability to program computers introduced a new era of possibility, it also brought with it enormous complexity. Remapping the logical operations of a computer was a very difficult and error-prone task; the computer programmer needed a precise and intimate understanding of that particular computer\u2019s method of operation to be able to write successful instructions. Early computer instructions were written directly on punch tape in binary or by rearrangement of patch cables, processes which do not lend themselves to easy understanding or legibility. Generally, a program (or wiring arrangement) written to run on one model of computer would likely not run on a different one because of underlying differences in hardware.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the nineteen fifties, people began to develop <\/span><i><span style=\"font-weight: 400;\">compilers<\/span><\/i><span style=\"font-weight: 400;\">: computer programs which could take instructions written in a fairly generic form and convert them into programs that would actually run on different pieces of computer hardware. The compilers read a piece of software and interpreted the author\u2019s intent, capturing it in a set of formal instructions applicable to a specific type of hardware.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A compiler represents a sort of indirection (or arrow) which points from the programmer\u2019s language to the \u201cmachine code\u201d which will actually be executed by the computer. As \u201chigher-level\u201d computer languages were developed, the gap between the programmer\u2019s original instructions and the underlying machine code grew. Instead of writing the fairly confusing\u00a0 <\/span><code><span style=\"font-weight: 400;\">MOVL $-0x8(%rpb), 0x4A<\/span><\/code><span style=\"font-weight: 400;\">, a programmer might now be able to write something more legible like <\/span><code><span style=\"font-weight: 400;\">x = 74;<\/span><\/code><span style=\"font-weight: 400;\"> (in both cases, the purpose is to set a variable to have the value of 74).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">There are more layers here, though. Going from a programmer\u2019s instruction to an underlying behavior in the computer is not so simple as programmer\u2013compiler\u2013machine code; there are other intermediate steps involving further indirection, \u201clinking,\u201d and interpretation along the way. Once the instructions are in machine code, there is more interpretation done by the microcontroller, using yet another type of code called \u201cmicrocode,\u201d which provides further indirection\/redirection when the code actually runs. Following is an example to briefly illustrate this process.<\/span><\/p>\n<h3><span id=\"An_example_from_the_Arduino\"><span style=\"font-weight: 400;\">An example from the Arduino<\/span><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">If you wish to blink an LED on pin 13 of the Arduino, which is the typical point of entry to the hardware platform for new learners, you might run this bit of code:<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">void setup(){\r\n\u00a0pinMode(13, OUTPUT);\r\n}\r\n\r\nvoid loop(){\r\n\u00a0digitalWrite(13, HIGH);\r\n\u00a0delay(1000);\r\n\u00a0digitalWrite(13, LOW);\r\n\u00a0delay(1000);\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This is written in C. But what does the Arduino actually run? A generated hexadecimal file, which looks like this:<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">:100230000FB60F9211242F933F938F939F93AF93F9\r\n:10024000BF938091010190910201A0910301B091AF\r\n:1002500004013091000123E0230F2D3720F4019693\r\n:10026000A11DB11D05C026E8230F0296A11DB11DD9\r\n:10027000209300018093010190930201A093030158<span style=\"font-weight: 400;\">\u00a0<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">These are lines 36 to 40 of the hexadecimal; it is 60 lines long. Here we have seen the two endpoints of the process, from highest-level (C) to lowest-level (hexadecimal machine code).\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To see the indirection and reinterpretation in the midst of them we might examine something as simple as <\/span><code><span style=\"font-weight: 400;\">digitalWrite()<\/span><\/code><span style=\"font-weight: 400;\">, the command which turns a pin\u2019s electrical output on or off. When the user asks the Arduino \u201cintegrated development environment\u201d (IDE) to push their code to the board, it goes through many sequential steps, and one of them is locating and interpreting the definition of <\/span><code><span style=\"font-weight: 400;\">digitalWrite()<\/span><\/code><span style=\"font-weight: 400;\">, which is:<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">void digitalWrite(uint8_t pin, uint8_t val) {\r\n\u00a0uint8_t timer = digitalPinToTimer(pin);\r\n\u00a0uint8_t bit = digitalPinToBitMask(pin);\r\n\u00a0uint8_t port = digitalPinToPort(pin);\r\n\u00a0volatile uint8_t *out;\r\n\u00a0if (port == NOT_A_PIN) return;\r\n\r\n \/\/ If the pin that support PWM output, we need to turn it off\r\n \/\/ before doing a digital write.\r\n\u00a0if (timer != NOT_ON_TIMER) turnOffPWM(timer);\r\n\r\n\u00a0out = portOutputRegister(port);\r\n\u00a0uint8_t oldSREG = SREG;\r\n\u00a0cli();\r\n\u00a0\u00a0if (val == LOW) {\r\n\u00a0\u00a0\u00a0*out &amp;= ~bit;\r\n\u00a0} else {\r\n\u00a0\u00a0\u00a0*out |= bit;\r\n\u00a0}\r\n\u00a0SREG = oldSREG;\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">This definition may be longer and more complex than we expect, but fundamentally the command is simply an on\/off switch (lines 14 and 16 are the actual things that would prepare the Arduino to set a pin to turn on or off respectively). The definition itself rests on many other definitions; <\/span><code><span style=\"font-weight: 400;\">NOT_A_PIN<\/span><\/code><span style=\"font-weight: 400;\">, for instance, is just a variable, or symbol, storing the number 0. <\/span><code><span style=\"font-weight: 400;\">HIGH<\/span><\/code><span style=\"font-weight: 400;\">, similarly, is merely a variable pointing to the number 1. Ultimately every time any number is stored or referred to on a modern computer, the stored value is simply a series of tiny physical units which are either \u201chigh\u201d or \u201clow,\u201d \u201con\u201d or \u201coff\u201d\u2014these may be transistors, regions of magnetic field or electrical charge, or a less-reflective vs. more-reflective area on a thin film of metal. Abstractions built upon abstractions built upon abstractions!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Getting back into our descent through the layers of abstraction: the first few lines of the Arduino\u2019s assembler version of the <\/span><code><span style=\"font-weight: 400;\">digitalWrite()<\/span><\/code><span style=\"font-weight: 400;\"> command look like this:<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">234: 56 ea \u00a0 \u00a0 \u00a0 ldi r21, 0xA6 ; 166\u00a0\r\n236: e5 2e \u00a0 \u00a0 \u00a0 mov r14, r21\u00a0\r\n238: 50 e0 \u00a0 \u00a0 \u00a0 ldi r21, 0x00 ; 0\u00a0\r\n23a: f5 2e \u00a0 \u00a0 \u00a0 mov r15, r21<\/pre>\n<p><span style=\"font-weight: 400;\">This is the penultimate level of proximity to the hardware; these assembly code instructions are (in a slightly simplified sense) turned into a part of the hexadecimal machine code shown earlier. Any microcontroller has a list of \u201copcodes,\u201d i.e. operation codes, particular to it. These are often represented as three- or four-letter acronyms to help the human programmers who are using them, but in <\/span><i><span style=\"font-weight: 400;\">yet another indirection<\/span><\/i><span style=\"font-weight: 400;\">, the opcodes written in letters are themselves referring to a purely numerical value; for instance, <\/span><code><span style=\"font-weight: 400;\">LDI<\/span><\/code><span style=\"font-weight: 400;\"> (\u201cload immediate,\u201d a basic process of writing a value to a memory location) is represented by opcode <code>1110<\/code>. The ATMega328 has a <\/span><a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/devicedoc\/atmel-0856-avr-instruction-set-manual.pdf\"><span style=\"font-weight: 400;\">list<\/span><\/a><span style=\"font-weight: 400;\"> of about 100 such codes that will work on that hardware.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">As you\u2019ve seen in this section, even the relatively simple, inexpensive, and low-powered Arduino contains a real maze of layers of redirection. A laptop or desktop computer is a <\/span><i><span style=\"font-weight: 400;\">far<\/span><\/i><span style=\"font-weight: 400;\"> more complex machine than those small chips, and with many more internal layers to show for it.<\/span><\/p>\n<h2><span id=\"Emergent_complexity\"><span style=\"font-weight: 400;\">Emergent complexity<\/span><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Computers are capable of undertaking truly complex tasks at high speed. Underlyingly the complexity they exhibit is a carefully choreographed interplay of many, many small, simple elements of information, called bits. Each little transistor, following a well-defined rule of electrical behavior, can be said to be a very small cog in a very large machine (for instance, the Atmel chip driving the Arduino Uno has perhaps a million or so).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the natural world there are myriad examples of individual decision making elements working together in such a way that the complexity of the whole is significantly greater than the parts combined. Consider the <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=uV54oa0SyMc&amp;ab_channel=MarcoValk\"><span style=\"font-weight: 400;\">flocking behavior of birds<\/span><\/a><span style=\"font-weight: 400;\"> or fish: each animal can be modeled as following a simple set of rules regarding their own movement with respect to their peers, encoded by three parameters (cohesion, alignment, and separation). When the whole group follows such a set of rules, incredible larger-scale complexity emerges. Here is an interactive example of a population-level simulator of many individually driven elements; it\u2019s an implementation of <\/span><a href=\"https:\/\/dl.acm.org\/doi\/10.1145\/37402.37406\"><span style=\"font-weight: 400;\">Craig Reynolds\u2019s \u201cBoids\u201d<\/span><\/a><span style=\"font-weight: 400;\">:<\/span><\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/preview.p5js.org\/rzachari\/embed\/MMg99o3D4\" width=\"100%\" height=\"380\" frameborder=\"0\"><span data-mce-type=\"bookmark\" style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" class=\"mce_SELRES_start\"><\/span><\/iframe><\/p>\n<p><span style=\"font-weight: 400;\">Large-scale order can emerge from the \u201cdecisions\u201d or behaviors of small individually mobile elements, even when there are seemingly no decision-making agents present; regular, periodic sand waves on a beach are merely the result of countless grains which have fallen into a large-scale order, a result of their individual and collective response to wind patterns. On a larger scale, given the right conditions, sand will form into slowly shifting dunes that are hundreds of feet tall.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We may contrive artificial systems which explore the results of many individually-acting elements sharing a common environment; the flock above is one example. A different sort of system can be modeled where each member of a two-dimensional grid has some awareness of the cells around it, and responds to them according to a set of rules; this was famously pioneered by John Conway, in his <\/span><a href=\"https:\/\/playgameoflife.com\/\"><span style=\"font-weight: 400;\">Game of Life<\/span><\/a><span style=\"font-weight: 400;\">, and Stephen Wolfram claims to have invented an <\/span><a href=\"https:\/\/www.wolframscience.com\/nks\/\"><span style=\"font-weight: 400;\">entirely &#8220;new science&#8221;<\/span><\/a><span style=\"font-weight: 400;\"> that\u2019s driven by these \u201ccellular automata.\u201d In a rather stunning illustration of the higher-level complexity that can be achieved following these 2d grid-based systems, an internet denizen responded to an open challenge by constructing a functioning <\/span><a href=\"https:\/\/copy.sh\/life\/?gist=f3413564b1fa9c69f2bad4b0400b8090&amp;step=512\"><span style=\"font-weight: 400;\">digital clock display built entirely in a Game of Life simulation<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">It is tempting to relate the complex behavior of many small individual elements to our own brains, which are, after all, composed merely of many, many individual neurons, attached to each other in a complex web from which our consciousness arises.<\/span><\/p>\n<h1><span id=\"Assignment\"><span style=\"font-weight: 400;\">Assignment<\/span><\/span><\/h1>\n<p><b>Working as a group, build a system, machine, installation and\/or embodied creation that responds to, is inspired by, or is in dialogue with some of the ideas above. Your project must:<\/b><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Have at least one input stream from the larger environment<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Have at least one input stream from another group\u2019s project<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Have at least one output stream (which another group\u2019s project might read as an input)<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">You must consider some element of the larger context in your project\u2019s design and\/or content. For example, the architecture or environment your work will be installed in, physical characteristics of the space (light, sound, smell, etc.), the history of the building or components of CFA, the public that will be attending the event, or the performances or work from other courses.<\/span><\/p>\n<h1><span id=\"Due_dates\">Due dates<\/span><\/h1>\n<h2><span id=\"Mon_Nov_15_Initial_Ideation_Due\"><b><\/b>Mon, Nov 15: <a href=\"https:\/\/canvas.cmu.edu\/courses\/23581\/assignments\/372320\">Initial Ideation Due<\/a><\/span><\/h2>\n<p><b>Prepare two distinct project ideas to turn in and discuss.<\/b><\/p>\n<p><b>Each of your project ideas should include:<\/b><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>A block diagram<\/b><span style=\"font-weight: 400;\"> showing the flow of data through your system. This is an accounting of all inputs, computational steps, and outputs. We recommend you use Draw.io&#8217;s block diagramming mode to create this. <\/span><span style=\"font-weight: 400;\">You may also draw a figure by hand, or in other software of your choosing. Regardless of how you draw the figure, it should include:<\/span>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">All of your system\u2019s inputs on the left side of the drawing, connected by arrows to:<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Any\/all of your system\u2019s computational steps in the middle, connected by arrows to:<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">All of your system\u2019s outputs on the right.<\/span><\/li>\n<\/ol>\n<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>A narrative description (~250 word) addressing:<\/b>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Intended interaction mode by members of the public and\/or performers and\/or yourself (whatever is appropriate to the piece)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Intended siting (where will it live and how will it be installed?)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Intended experience for the audience<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Theoretical underpinnings (e.g. what led you to this idea, what about it intrigues you, etc.)<\/span><\/li>\n<\/ol>\n<\/li>\n<li aria-level=\"2\"><b>A representative drawing of your proposed build<\/b><span style=\"font-weight: 400;\"> (drawings need not be high-fidelity; sketches are certainly fine). Consider illustrating how your piece will live in context and not just what the objects will look like. This will help us understand scale and spatial concerns.<\/span><\/li>\n<li aria-level=\"2\"><b>Basic list of needed materials as well as sources<\/b><span style=\"font-weight: 400;\"> (on or off campus) <\/span><b>for those materials<\/b><span style=\"font-weight: 400;\"> (this need not be a finalized purchase list!<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">We will review your proposals with you individually in class.\u00a0<\/span><\/p>\n<h2><span id=\"Wed_Nov_17_Group_Check-in\"><b>Wed, Nov 17: <\/b><a href=\"https:\/\/canvas.cmu.edu\/courses\/23581\/assignments\/427544\"><b>Group Check-in<\/b><\/a><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Post your finalized idea to share with the class for feedback.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span id=\"Mon_Nov_22_Proof_of_Concept_Demo_Low-fi_Maquette_Presentation\"><b>Mon, Nov 22: <\/b><a href=\"https:\/\/canvas.cmu.edu\/courses\/23581\/assignments\/372327\"><b>Proof of Concept\u00a0 Demo, Low-fi Maquette Presentation<\/b><\/a><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">You will present a proof of concept tech demo and low-fi maquette of your project to the class. It need not be high-fidelity. There is a lot of different thinking in the design world about what \u201cprototyping\u201d means. Designer and academic Graham Pullin, in his excellent <\/span><a href=\"http:\/\/www.worldcat.org\/title\/design-meets-disability\/oclc\/751829811\"><i><span style=\"font-weight: 400;\">Design Meets Disability<\/span><\/i><\/a><span style=\"font-weight: 400;\"> (2011), helpfully outlines a few different approaches:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>looks-like<\/b><span style=\"font-weight: 400;\"> prototype: an <\/span><i><span style=\"font-weight: 400;\">appearance<\/span><\/i><span style=\"font-weight: 400;\"> model for form, color, materials, etc.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>works-like<\/b><span style=\"font-weight: 400;\"> prototype: an <\/span><i><span style=\"font-weight: 400;\">engineering<\/span><\/i><span style=\"font-weight: 400;\"> prototype for electronics and electromechanical build, etc.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>behaves-like<\/b><span style=\"font-weight: 400;\"> prototype: an <\/span><i><span style=\"font-weight: 400;\">experience<\/span><\/i><span style=\"font-weight: 400;\"> prototype for interactions. It may have tethers instead of being wireless, or be built larger than the proposed final size, but the fundamental user interactions are well-modeled. (p. 138)<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">For this assignment, you will be combining components of looks, works, and behaves-like prototype approaches. This piece must shows clear progress towards your final goal. Use this time to focus on the interactive and aesthetic aspects of the project.<\/span><\/p>\n<p><b>Requirements:<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><strong>Requirements:<\/strong>\n<ul>\n<li><strong>A lo-fi maquette or meaningful start on the project<\/strong> with sketches that represent the physical embodiment\/fabrication of the envisioned final project.<\/li>\n<li><strong>A first pass at\u00a0<\/strong><strong>the electronics.\u00a0<\/strong>Figure out your electronics needs and begin!<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">In class, we will discuss the prototypes. This deadline is meant to help you prepare to deliver a polished finished less than two weeks later.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Submit your maquette by adding it to your process blog documentation and sharing the URL of this post to Canvas via <\/span><a href=\"https:\/\/canvas.cmu.edu\/courses\/23581\/assignments\/372327\"><span style=\"font-weight: 400;\">this assignment.<\/span><\/a><\/p>\n<h2><span id=\"Thur_Dec_2Fri_Dec_3_Install_in_CFA_time_TBA\"><b>Thur, Dec 2\u2013Fri Dec 3 Install in CFA, time TBA<\/b><b><\/b><\/span><\/h2>\n<h2><span id=\"Fri_Dec_3_7pm_Install_Complete_IDeATe_End_of_Semester_Event_in_CFA\"><b>Fri, Dec 3, 7pm Install Complete <\/b><b>IDeATe End of Semester Event in CFA<\/b><\/span><\/h2>\n<h2><span id=\"Finals_Week_Complete_Critique_Documentation_Due\"><b>Finals Week: <a href=\"https:\/\/canvas.cmu.edu\/courses\/23581\/assignments\/372307\">Complete Critique &amp; Documentation Due<\/a><\/b><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Your presentations should address the following:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Title<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/www.gyst-ink.com\/artist-statement-guidelines\"><span style=\"font-weight: 400;\">Project Statement \/ Artist Statement<\/span><\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Documentation of physically-built projects installed in CFA\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Challenges along the way, interesting findings, and\/or lessons you\u2019d like to share.<\/span><\/li>\n<\/ul>\n<h3><span id=\"Documentation_requirements\"><b>Documentation requirements<\/b><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Each documentation submission must consist of at least:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>A \u201cfeatured image\u201d<\/b><span style=\"font-weight: 400;\"> that is a good overall view of the project. This image should be one of the \u201cwell-shot\u201d images described below, or a cropped subset of one of them.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>The project title.<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Careful and well-shot images<\/b><span style=\"font-weight: 400;\"> of the final project.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><b>Submit at least seven shots and these must include:<\/b><\/li>\n<\/ul>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Overall photo for proportion and scale<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Detail photo of any part that you\u2019d like to highlight (up to 3)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Gif or gifv or little .mov that shows the piece working (i.e. interacting with an input(s) and the output(s) that are derived.)<\/span><\/li>\n<\/ol>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Simple narrative description<\/b><span style=\"font-weight: 400;\"> of the thing and usual operation of the thing\u2014the type of plain and straightforward description that you might write in a letter to a child to explain what you had made. Free of judgment and totally literal and straightforward. Try to use as little technical language as possible. (E.g. \u201cA white plastic box has a switch on the top side. When the user turns it on, a green LED flashes five times showing that the system is ready. A small white flag waves back and forth.\u201d) For a study in the art of using simple language, see Randall Munroe\u2019s wonderful <\/span><a href=\"https:\/\/xkcd.com\/1133\/\"><span style=\"font-weight: 400;\">Up Goer Five<\/span><\/a><span style=\"font-weight: 400;\">. To use a simple-language filter yourself, try the <\/span><a href=\"http:\/\/splasho.com\/upgoer5\/\"><span style=\"font-weight: 400;\">Up-Goer Five text editor<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Five progress images<\/b><span style=\"font-weight: 400;\">, each of which could be a step or misstep that happened along the development process, and each with at least a sentence or two caption. These images may capture decision points, especially interesting or illustrative mistakes, or other mileposts along the way. The idea is that these medium-quality images (though good pictures work too) are taken along the way to document progress. Sometimes you might understand these as being moments-that-matter only in retrospect! The safe route, therefore, is to snap lots of photos as you go along for later review.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Process Reflection<\/b><span style=\"font-weight: 400;\"> pertaining to process and outcome. For instance, what was easy, what was hard, what did you learn? What little tweak, in retrospect, would\u2019ve changed the direction entirely? This is an opportunity for you to reflect on your creative and technical growth through the project, and think about what growth you want to aim for next. This <\/span><i><span style=\"font-weight: 400;\">shouldn\u2019t<\/span><\/i><span style=\"font-weight: 400;\"> be a recital of your process, but rather a meaningful consideration of what you experienced during the creation of your piece, 2\u20134 paragraphs in length.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Code submission (if using Arduino)<\/b><span style=\"font-weight: 400;\">, embedded into the project page, and optionally also with a Github or other version control service public-facing link. Your code should be reasonably commented throughout so that people other than you (the author) can better understand it. You don\u2019t need to explain every single line\u2014that would be overkill\u2014but leave useful notes in a reasonable measure. Write a <\/span><b>comment block at the top<\/b><span style=\"font-weight: 400;\"> of the code including:<\/span>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">the project title,<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">(optionally) your name,<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">a description (short or long) of what the code does,<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">any description of pin mapping that would be useful to somebody else trying to recreate your work,<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">appropriate credit to any other person\u2019s\/project\u2019s code that you incorporated into your project, and<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">(optionally) a license notice (i.e. copyright, <\/span><a href=\"http:\/\/www.creativecommons.org\/\"><span style=\"font-weight: 400;\">CC BY-SA 4.0<\/span><\/a><span style=\"font-weight: 400;\">, the <\/span><a href=\"https:\/\/opensource.org\/licenses\/MIT\"><span style=\"font-weight: 400;\">MIT License<\/span><\/a><span style=\"font-weight: 400;\">, <\/span><a href=\"https:\/\/creativecommons.org\/share-your-work\/public-domain\/cc0\/\"><span style=\"font-weight: 400;\">release it to the public domain<\/span><\/a><span style=\"font-weight: 400;\">, or just <\/span><a href=\"https:\/\/github.com\/pjreddie\/darknet\/blob\/master\/LICENSE.v1\"><span style=\"font-weight: 400;\">follow your heart<\/span><\/a><span style=\"font-weight: 400;\">). If you have written code that you wish to keep strictly proprietary for any reason, please speak with the instructor about an exception to this documentation requirement.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Contents1 \u201cArrows\u201d in computing1.1 Historical context1.2 Compilers1.2.1 An example from the Arduino1.3 Emergent complexity2 Assignment3 Due dates3.1 Mon, Nov 15: Initial Ideation Due3.2 Wed, Nov 17: Group Check-in3.3&#8230;<\/p>\n","protected":false},"author":112,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/courses.ideate.cmu.edu\/62-362\/f2021\/wp-json\/wp\/v2\/pages\/10225"}],"collection":[{"href":"https:\/\/courses.ideate.cmu.edu\/62-362\/f2021\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/courses.ideate.cmu.edu\/62-362\/f2021\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/62-362\/f2021\/wp-json\/wp\/v2\/users\/112"}],"replies":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/62-362\/f2021\/wp-json\/wp\/v2\/comments?post=10225"}],"version-history":[{"count":41,"href":"https:\/\/courses.ideate.cmu.edu\/62-362\/f2021\/wp-json\/wp\/v2\/pages\/10225\/revisions"}],"predecessor-version":[{"id":11952,"href":"https:\/\/courses.ideate.cmu.edu\/62-362\/f2021\/wp-json\/wp\/v2\/pages\/10225\/revisions\/11952"}],"wp:attachment":[{"href":"https:\/\/courses.ideate.cmu.edu\/62-362\/f2021\/wp-json\/wp\/v2\/media?parent=10225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}