appendices
Coding.Care
Find many more ideas in the Code Collective Resource Hub
FIRST CCC INTEREST FORM
In January 2019 I sent out this Google form to USC students, staff, and faculty who I thought might be interested in a new code-friendly community. This was our first document, where you can see the shape it was beginning to take and its raw edges, as I was wayfinding for what I was interested in offering and what others might need.
Want to see how MA+P PhDs approach programming as artists, not engineers, and incorporate it into their work? Frustrated with coding but want to use it in your projects? Donât know where to start?
Come connect and create with PhDs and other undergrads interested in artistic programming.
First meeting FRIDAY JAN 18, 1pm-4pm, SCI L106. Sign up to learn moreâlet us know when youâre available to meet, plus what activities you want to see.
This weekly drop-in studio will focus on growth not perfection, scrappy artistic strategies not perfect code, collaboration not competition. Weâll offer workshops, troubleshooting, support, and snacksâand keep our structure flexible to meet the collectiveâs needs. All levels and languages welcome!
Schedule
- I am available most Fridays, 1-4 pm (for at least part of that time)
- I am not available then, but still want to hear about the group (List your preferred availability below)
- Other:
What do you want Code Collective to offer? (Add your ideas!)
- Co-working space
- Online resource hub
- PhD-led workshops
- Student-led workshops
- Student-led drop-in tutoring
- Student-organized project showcase
- Visits to hackathons or other outside events and organizations
- Other:
What workshops interest you? (Add your ideas!)
- Activist Chatbots and Other Automated Agents
- Environmental Data and Sensor Networks
- Machine Learning Tactics for Artists
- Making Electronic Instruments
- Movement-Based Interaction Design
- Poetics of Regular Expressions
- Python as a Second Language
- Raspberry Pi for Tactical Media
- Visualizing Your Personal Data
- Other:
Bonus
- What projects do you want to work on? What would keep you coming back? What skills can you share with the collective? Any fears / interests / context you want to mention?
DEPARTMENT PROPOSAL
15 Nov 2018
Proposal: Code Collective
The Code Collective will be a space for MAP + iMAP students to develop their computational media practice in a flexible, collaborative setting that strengthens the Media Arts + Practice community. It supports gaining computer science skills in an engaging, non-intimidating, non-engineering environmentâinstead focusing on artistic strategies for learning and making with code, emphasizing criticality and experimentation.
Code Collective draws from models like Girls Who Code, UCSDâs ICAM and Stanfordâs CS+X majors, and Gene Koganâs Machine Learning for Artists. It addresses the need in Media Arts + Practice for additional emphasis on computational media practices expressed by students. Designed as an emergent organization responsive to community needs, Code Collective will be flexible enough to support existing IML instruction and in-class projects (e.g. for 288, 300, 400), and it will also incorporate programming languages and code practices not currently prioritized within IML curricula so that students may extend their artistic practice and professionalization.
Potential components of Code Collective will include workshops led by iMAP PhD students and invited guests; student-led tutoring, coworking, and troubleshooting; online resource-sharing; and visits to local hackathons or other campus groups. Sample workshops may include Python as a second language, machine learning tools and tactics, movement-based interaction design, environmental data and sensor networks, raspberry pi for tactical media, visualizing personal data APIs, and the poetics of regular expressions.
OBJECTIVES
Students will extend their confidence with CS skills using creative coding practices. They will develop and troubleshoot projects for courses, shows, portfolios, etc. They will also connect with each other across classes and years, and within the broader community.
My professional development goals in convening Code Collective include developing curriculum for future workshops, TAships, or classesâas well as building my own coding skills and developing projects and collaborations.
PRE-LAUNCH STEPS
Create google form: signup via email list, schedule standard time to book room (schedule around classes; survey students for availability and particular interests) Create web presence/wiki/email contact; write invitation announcement; write mission Share group invitation announcement to undergraduate lists Identify potential undergraduate liaisons, visit code-focused courses Set workshop schedule with PhD students Connect with coding faculty & outside organizations
PLANNED ACTIVITIES SCHEDULE SP18
First meeting Week 2 or 3, first meeting Weekly drop in at standard time, ~3 hours Week 4, 7, 10: Workshops (2-4 in semester, every few weeks as needed) Join a hackathon or engineering meetup on campus Organize a fun event like Stupid Hackathon http://www.stupidhackathon.com/ Or join a community-conscious hackathon like Hack for LA http://www.hackforla.org/
QUESTIONS
What might I need to adapt to make this an appropriate TA position or potentially a course in the future? Would the club need to be offered as research units for students to attend? Thoughts on how to build in positive accountability to retain students? Resources for outside funding from university or industry?
CODE COLLECTIVE WORKSHOPS & TALKS
past
- Help Me Code IAI zine making workshop, Sarah Ciston
- Feminist.AI, Christine Meinders
- Movement-based interaction design, (Fidelia Lam)
- Machine Learning Tactics for Artists, (Catherine Griffiths)
- Getting Started with ML5.js, Sarah Ciston
- 8-bit Game Design, (Todd Furmanski)
- Coding for Live Performance, (Ben Nicholson)
- Multisensory Touch Electronics, Emily Van Bellingham
- Coem: An esolang for poetics, Katherine Yang
planned or dreamed
- Ethics of NFTs for Artists: If Such a Thing Is Possible
- Bias in NLP Language & Ethical AI
- Group coding: we each take some time to attempt a solution to a simple but not trivial given problem, then come back and talk about our approaches
- Co-write community values & docs
- Anti-hackathon
- Remix videos on the command line
- Music visualization with Pure Data
- Audio signal processing
- P5js and P5 Live
- Data moshing
- DIY Portfolio Examples and How to Code Them
- Shaders for scaredy cats
- Internships and jobs for multi-/inter-disciplinary work like ours
- Webscraping with Python
- Merging theory and content with code and practice. Choosing tools that are ethically and conceptually grounded.
CODE COLLECTIVE SUMMER LAB SYLLABUS
9-11a PDT, 4 weeks 2x week, Sarah Ciston
Frustrated with coding but want to use it in your projects? Always wondered about programming but felt intimidated to try? Overwhelmed with too many choices and confusing jargon? Just donât know where to start?
The Code Collective Summer Lab is an opportunity to join fellow students in a fun and friendly space to dabble in code, ask dumb questions, troubleshoot your dream project, and just explore.
This summer intensive builds on USCâs Creative Code Collective, a year-round student group supporting critical and artistic coding. We build programming skills in an engaging, non-intimidating environmentâemphasizing co-learning and co-teaching, celebrating experimentation and process. We believe in growth not perfection, scrappy artistic strategies not perfect code, collaboration not competition. All levels and languages welcome!
During the Summer Lab, weâll explore the relationships among machine learning, datasets, and human language. We will learn strategies for gathering, utilizing, and tending to data (both big and personal) with care and curatorial consideration. We will consider the aesthetics, ethics, and poetics of datasets through the lenses of intersectional identities and text-based machine learning.
Weâll tinker with conversational agents like Alexa and text generators like GPT. Through artistic-critical interventions and workshops, we will focus on how these technologies get embedded in the very words we use; and weâll reflect carefully on what assumptions these tools make in their materials, their language, and their users.
Preparation
No particular experience is required! Any kind of field or background is helpful to get started; weâll meet you where you are. You donât have to install or buy anything in advance either; weâll handle that together.
So that we can focus during our time together, it will help if you have in mind a project or a skill you want to work on. Weâre going to focus on text-based tools, so hereâs what you can prep in advance:
Have a dataset (text) in mind youâre interested to work withâthis could be your own journal, something from the USC Libraries Digital Collection, or anything goes. For example, your corpus could be the entire series of the show Community, like @kayserifserif, or these sarcastic and serious news headlines, or the archived pages from the early internet sites like Friendster and Geosities.
Donât worry, no matter your existing level of comfort with code, even if itâs none, we will meet you where you are. Just start from asking, What do you want to make, and why?
Goals
- Youâll understand how artists, engineers, makers, and academics can embrace coding with a critical eye toward ethics and a creative glint that can help imagine more equitable futures.
- You will gain comfort exploring data and coding, building on any existing skills with new perspectives both technical and critical. You will also emerge with a zine about what weâve learned.
- Youâll develop your portfolio of individual and collaborative code projects, plus the opportunity to continue in the fall with the Code Collective community.
Format
This course is a workshop in exploratory programming, run as an open-format collaboratory. Its self-directed learning model requires motivated student engagement and rewards artistic risk-taking. As lab leader I provide technical and theoretical resources to facilitate your projects, and as a group we agree to cultivate a supportive environment for creating. Together we bring our individual skill sets and abilities; our interest to learn from each other and together; and our open minds, mutual respect, and sense of possibility. Practically, this means you come each day ready to discuss the topic and to support each otherâs co-learning, ideating, and troubleshooting; and youâll have time to develop your code-based projects with support from the collaboratory. Because of the lab nature of this course, we will decide as a group how to work through the readings and where to take them next, thus this schedule and reading list are subject to change depending on your projects and interests.
Weekly sessions will be divided into âStudioâ days, during which we code together and troubleshoot our work, and âSalonâ days, during which we discuss something weâve read and reflect on the practices weâre undertaking. Each will have a text or tutorial attached that pertains to the broader theme. Still the work will be self-directed toward each studentâs particular project, explorations, and goals. Through collaboration, co-learning, co-teaching, We discover how much we already know and how much we can build on that together.
FIRST LOOK AT JAVASCRIPT
This was a lesson made for a beginner coding course. You can check out the interactive version here
Not So Vanilla đŚ âJustâ Javascript
What Is Javascript?
âThe programming language of HTML and the Web. Interaction with the user, animation, etc, all done with JavaScript.â (Q)
Whatâs a Javascript Library
P5 is a Javascript library, which means itâs an add-on set of Javascript thatâs been pre-written to make certain things easy. But thereâs a lot Javascript can already do.
Pssst, weâve been coding in Javascript this whole time!
And thereâs a TON of other JS libraries for ANY specialized thing you might want to do, from make sleek websites, to run servers, to music, virtual reality, or machine learning. Hereâs a list
We say âvanillaâđŚ Javascript when we mean not using any added libraries, but usually youâre always using some⌠this demo will offer some code concepts that apply to web development as well as general times youâre working with Javascript situations.
Review: Setup
Files are structured same as here whether they are saved locally, on the Glitch or P5 web editor, or served by your web host.
Scripts are loaded in the HTML for P5 or any any outside libraries, as well as your own script files.
- 2 ways, each with benefits, either one use the
<script></script>
tag in your index file: - cloud: fewer steps, stays up to date
- local: you save the file so you control it, works offline, doesnât randomly update on you
- 2 ways, each with benefits, either one use the
The DOM > âAn HTML document is structured according to the Document Object Model, or âDOMâ. [âŚ] The DOM consists of every element on the page, laid out in a hierarchical way that reďŹects the way the HTML document is ordered.â (Q)
- Elements use
<tags>
and have parent/child relationships- id vs class: (single vs groups)
- styles: (inline vs css file)
- Comments are written as single and multiline. -
Keyboard shortcut to toggle:
Command+Slash
- Comments are an essential part of coding, debugging, & documentingâfor you and others!
//
single line/* */
multi line
Review: P5.js DOM
Besides adding functions to JS, the P5.js library âwrapsâ up some Javascript to simplify the syntax.
P5âs DOM functions: -
selectElement()
-createElement('tag', [content inside])
-createDiv([html/content])
- Things to do on a selected or created element(el
): -el.style('color', 'black')
,el.style('font-size', '18px')
-el.position(0,0)
(absolute position) -el.attribute('align', 'center')
-el.hide()
,el.show()
-el.size()
-el.html(<tag></tag)>, true)
note: the additon of true appends instead of replacing (if no argument, returns existing) -el.parent()
,el.child()
attaches new thing to existing thing - Events:createButton()
,el.mouseClicked()
,el.mouseOver()
,el.mouseOut()
,changed()
,createInput()
- Highly recommend the callbacks on multiple elements video
These are all âwrappersâ of the same code you learned to write in plain JS. Behind the scenes, itâs calling that plain JS to do this work.
Essential Javascript for Web
Select by id, class, element/tag, parent, child
document.getElementById('id')
document.getElementByClassName('class')
document.querySelector('#id')
document.querySelectorAll('.class')
- Note the different syntax options. Document for more choices.
- set it to a variable name to âsaveâ it for reuse:
let line = document.querySelector('#line') //selects the element with the id line
Create makes new elements and Append places the items we made where we want them
let button = document.createElement("BUTTON"); // creates a button but hasn't put it anywhere yet .innerHTML = "click me"; // puts text in the button button.appendChild(button); // adds a button inside every paragraph line
Add/remove class is confusing, donât worry because theyâre each doing slightly different things
el.className = 'class'
set equal to className makes it that class only, erases any others- OR:
el.classList.toggle('class')
note toggle on/off choice can avoid a check before if/then but might intro errors - OR: add/remove
from classList
el.classList.add('class')
andel.classList.remove('class')
note the name is in quotes but doesnât need dot before it because class is in the attribute, âŚmaintains a list of classes
-
el.style.color = 'blue'
el.style.borderBottom = '1px dotted black'
-
- think about how these events combine using 1) thing you touch and 2) thing you want to affect
- click, scroll, hover, mouseEnter/Leave, slideToggle etc. onclick vs item.click()
- Hide/show/fade/delay/toggle all done with
callbacks:
document.addEventListener('eventname', functionName)
`` - Transformations
Note where elements appear, in the canvas vs in the rest of the DOM/page depending on how youâre writing them. As youâre blending the P5 library with other Javascript this can get confusing. P5 has ways to do both, but theyâre different. So does plain JS. They serve different purposes: - e.g. Choose
createImage()
(P5) ordocument.createElement('IMG')
and thenappendChild
(plainJS) anywhere in the DOM vs chooseimage()
to put it inside a canvas element.
- Choosesetup()
ordraw()
depending on if you want it to happen once or repeatedly, only works in P5.
Review: Logics of Code**
You already know (because you know JS) or may see around town:
- Callbacks and Code Patterns
MAKE & NAME : create a thing & assign it to a variable so you can keep referring to it
SCHEDULE & ACT: use functions to say what you want to do with it when
var thing = new Thingy() //MAKE & NAME thing.doStuff('click', actFunction) //SCHED //ACT function actFunction(){ console.log("outcome") }
Thingy() initializes an object of the class Thingy, which already has a method (function) .doStuff(), weâre saying to run it when âclickâ happens and to run actFunction()
- Loops & Conditionals
if
/then
andif
/else
for
loopsfor (let i=0; i<list.length;i++){}
andfor (let l in list){}
try
/catch
and the dreadedwhile
- Data Types Javascript is wild & doesnât label its types like other languages do
- individual:
- strings (âtextâ)
- numbers (integers, floats, binary, etc.)
- boolean (True, False)
- groups:
- arrays aka lists
- objects aka dictionaries or key-value paired lists etc.
- sets (stricter lists of unique items)
- functions
- imported data that can be converted to the above: JSON, CSV, TXT, etc.
- Additional Considerations & Weirdnesses
- Helps to write pseudocode to start
- Comments are a great debug strategy (Note where your
console.log()
comments appear in glitch, frontend vs backend concepts) - Include error handling.
let
works the same asvar
andconst
, they all initialize variables. Let is the preferred going forward. JS used to distinguish between variable and constant.- arrow functions: if you see them, donât let them confuse you:
let myFunction = () => console.log("sarah")
is same as ``` function myFunction(){ console.log(âsarahâ) } - Glitch has a back-end/server-side Log/Console besides the front-end console youâre used to seeing in the browserâs dev tools. Check it out!
BONUS: Libraries & Frameworks & Expansion Oh My!
Ways people have solved problems, tried to make life easier and made it more complicated, aka words you might see around town & more to think about later
#### Helpers
- [p5]
- [JQuery]
- What are some others youâve heard of? Do you know what they do?
#### Design for web layout, look, & feel
- Handlebars templating language, pre-built buttons and CSS for your sites, lots of others like it, such asâŚ
- Bootstrap, Semantic.io, Material.io (React)
- [React] a whole superset of JS built by Facebook to make complex sites with many components. Other Frameworks like it are Vue and Angular. You only need to learn one of these, if any.
#### Design tools for specific tasks
- Tiny Tools Directory by Everest Pipkin
- ScrollMagic scroll effects
- [Paper.js] curves & swerves
- [Three.js] 3D stuff
#### Servers & Offline
- [Node.js] a superset of Javascript that lets you do servers and use JS without a browser, just in your local machine. A great place to start with Node is the Glitch template! Use Node for websites where you want a database or need to send info back and forth to a server.
- [Express.js] makes it easy to make a server, part of the Node template in Glitch
#### Machine Learning
- ML5, part of the p5/Processing family, is a simpler version of (aka built on/wrapper of Tensorflow)
- [Tensorflow.js]
- Lots of little ML tools out there, another lesson maybe for code collective?
Examples made with (almost) âjustâ javascript
- Cyberfeminism Index only uses a bit of JQuery but wouldnât need it. Also another type of site your project could be, gathering resources/examples for others.
Your Project
â index.html
Where youâll write the content of your website. This can start out barebones because you can add so much with Javascript. Good rule of thumb is to put in HTML anything that will stay static. Javascript is for interactivity!
â style.css
CSS files add styling rules to your content. Remember you can change these with Javascript too.
â script.js
Literally where the action happens. Add interactivity with JavaScript. Can also be inside your HTML file if you only have a little bit of script. Woo!
â assets
A folder. Drag in assets
, like images or music, to add
them to your project. Often for bigger projects youâll create separate
folders for your styles and javascript files too.
â README.md
Thatâs this file. It doesnât show up to your end-user/reader. In this case Iâm using it for a tutorial. You might use it for documentation about how you made your site or how others could implement your tool.