Junior Seminar/Rouvelle/Spring '07
Thursday 6pm-9pm.
Brown Center 215
Contact:jrouvelle@mica.edu
Office: Brown Center, room 211, phone (in office).
Office hours: by appointment
_______________________
Course work in summary:
We will spend the first four weeks of the term building a Magnetometer - the rational behind this decision can be found below. I will then meet with you individually during week five to discuss your interests and plans. Week six we will meet with Norm White - I will ask you to read something about Norm, and come up with two questions for him - in addition I will ask you to show him some of your work.
In addition to the Visiting artists who will visit with you, we have an opportunity to participate in this year's Maryland Robot Festival that will occur on Saturday, April 29, at the Historical Electronics Museum in Linthicum. The Directors of the Maryland Robot Society - both engineers - and both very interested in your artworks - will be visiting our class either week two or week three. They would like you to show some of your work at the Festival. In advance of their visit, I will ask you to prepare a brief presentation on your work.
We will spend time talking about content, and it's place in your own work, and in the work of artists whom you admire. During our meetings I will go into more detail about this topic. I will ask each of you to write a brief (3-5 page) paper as a final project that covers the content of your work. I repeat, we will discuss this in detail after we have finished the Magnetometer.
I will also present information (Guidelines for Admission, Faculty, Student Work, etc...) on a few Graduate Schools that have programs related to Interactive Media. The intention of these presentations is to familiarize you with what is going on in your media at other schools, and to introduce the protocols necessary to get into Grad School.
Evaluation:
Grades in this course will be based on regular class attendance, the quality of
your work, class participation, and progress. Tardiness and excessive absences
will adversely affect your grade. Participation in discussions and critiques is
mandatory.
Projects & Grading:
Students will be graded by letter, A-F, on all evaluated work. Work must be
completed on time and in full satisfaction of each project goal. Late work
(assignments handed in or posted after the start of in-class critique sessions)
will be automatically downgraded by one letter grade.
A Well above the expectations of the course. Outstanding
participation, attendance, and exceptional progress.
B Above average assignments and participation. No more than
one absence.
C Average execution of assignments, participation, and no more
than two absences.
D Well below average: work, attendance (two absences),
projects, and participation.
F Unsatisfactory: work, attendance (more than two absences),
projects, and participation
Attendance:
Two or more unexcused absences from class may result in failure. Two unexcused late
arrivals, or early departures (eg, not returning from dinner, or other
unexplained disappearance) will be marked as the equivalent of one absence.
Absence from a class is not an excuse for skipping a tutorial, reading
assignment, or posting an assignment. You are fully responsible for completing
work.
Readings:
Readings and tutorials will often be delivered through the web - via links
(URLs). Critiques will frequently be initiated from various topics covered in the
readings - in other words, please use the concepts you read about in discussion
of fellow students' work.
Supplies:
Please bring to each class: 1-2 CD-R(s) - Recordable Compact Discs (700 MB).
You'll probably go through many of them, for both this and other digital
classes. You might also want to bring in a sharpie to label your CD's.
It is essential that all work done in class be saved to CD-R at the conclusion
of class. There will be many, many other students using these computers and
anything saved on them will be permanently removed shortly after the conclusion
of class.
Software Consultant:
If you are having trouble becoming acquainted with the software we will be
using please see the software consultant.
Food and Drink in the Computer Labs:
No.
ADA COMPLIANCE:
In order to provide the highest quality educational experience for every
student, MICA is committed to compliance with the ADA and Section 504. Any
student who has (or suspects he or she may have) a physical, cognitive, or
psychological disability and who wants to request accommodations must
immediately schedule an appointment to meet with the Director of the Learning
Resource Center, Dr. Kathryn Smith, by calling the LRC Administrative
Assistant, Mary Walsh, at (410)669-3177. The LRC is MICA’s designated
department for determining reasonable accommodations based on legal
requirements and will provide the eligible student with an official
Accommodation Verification letter to the instructor. Each semester the student
must formally request accommodations from the LRC each semester, and format of
the Verification letters change each semester to ensure currency.
NOTE: Students with disabilities who want assistance during emergency
evacuations must register with the LRC within the first week of each semester.
HEALTH AND SAFETY:
MICA has developed policies and practices to ensure a healthful environment
and safe approaches to the use of equipment, materials, and processes. It is
the mutual responsibility of faculty and students to review health and
safety standards relevant to each class at the beginning of each semester.
Students should be aware of general fire, health, and safety regulations
posted in each area and course specific polices, practices, and cautions.
Students who have concerns related to health and safety should contact
Quentin Moseley, Environment Health and Safety Coordinator at 410 225 0220
or email at qmoseley@mica.edu
There is no Final Exam during exam week. Our final class is the last week of classes.
______________
Weekly Schedule
______________
Week 3
turner broadcasting guerilla ad stunt draws ire
A visit from Career
Development’s Hadieh Shafie
Inspirational
Videos:
http://www.youtube.com/watch?v=J7pok0TKDU8 #1
http://www.youtube.com/watch?v=nAV0sxwx9rY #2
Google group: AreaDecoded
Timeline for event.
Who is doing what?
____________________________
Timeline for the exhibit.
Google group AreaDecoded.
Designer:
Of the
University of Colorado
Craft Technology Group
Related work(?):mobilebacktrack?
Web2.0 in four minutes and thirty-three….: The machine is Us/ing Us
____________________________________
“so, what do you do?” (artist statements, spoken
introductions, how to talk about your work)
timeline for exhibit.
**Next week we will meet at the Contemporary for an artist talk
Tech:
Python Scripts for parsing email
Brief intro to the Arduino
Board:
3-axis
accelerometer (LIS3LV02DQ)
script to connect it to
the Arduino (based on julian bleecker’s
work)
Ph sensor (two transistors, a power source, and a 500k potentiometer)
****power the sensor directly from the Arduino board’s “5V” supply and ground only***
script
to connect the Ph sensor to the Arduino board (ADC = Analog to Digital
Conversion)
Tri-color LEDs and an electrostatic sensor I made using the 74hc14 hex inverter
ideas:
Conferences:
_______________________________________________________
Constructing the classroom of the present
In a previous post I wrote about a few php scripts connected to an SQL database that produced a Class Tag Cloud where members of my class can anonymously contribute words or phrases while we dialogue, and the words/phrases they contribute end up projected on a screen for all to see. Words may be sent via phone or PC. The font size of the words/phrases are proportional to the prominence in the database, so, if someone contributes something to the class tag cloud and you want to emphasize the thought you would then submit the same word/phrase and that word/phrase would literally become larger on the screen.
Here’s a recent pic:
I’m writing about this again because I’ve put it into practice lately and can report that it has been a valuable aspect of my classroom work, permitting the expression of notions, associations, and other ideations that tend not to bloom under the protocols of traditional classroom decorum – i.e., speak in turn, raise your hand, contribute proper sentences, etc.
As an addition to the class tag cloud (which I do a screen capture of at the end of each class), last week I used Twitter and found it to be another valuable addition. The way we did it was that each class member signed up for the service and we all then took the time to issue the “follow_ x_ “ command for each classmate. At various times during our work the room fell silent as we were all focused on the sms flow around the group, then, one by one, the group became more vocal, and less twittered, and the form became more about speaking and tag clouding, and so on. It was, I think for many of us, a fine in-class experience.
For me, though, the magic occurred once class had ‘stopped’ and I continued to receive messages via Twitter from classmates throughout the week. The messages had a random quality but, as we’ve been discussing bohm style dialog and collective intelligence lately, the challenge of associating these messages into our respective ‘heres’ opened our work and class out in a way that I found beautiful.
This experience with Twitter gave me the image of taking our Class Tag Cloud out for a walk – allowing us to know each other better, while exploring the relationship of environment to idea. I strongly recommend these tools and welcome your feedback.
Here are the scripts with instructions for the class tag cloud, they require the creation of a simple database table (in the examples below called ‘cloud’) comprised of two fields: ID (int, auto-increment, primary key), and Words (var chars, at least 25 characters long).
I strongly recommend that you copy these scripts and paste them into an editor such as smultron (for MacOSX) or even dreamweaver, as sometimes spaces produce junk characters that will crash the scripts below. Such junk can be seen and eliminated in a decent script editor.
Here is how to make your own class (y) tag cloud.
INPUT>> You’ll need these two scripts (code.php and tag_cloud_input.php) to input words into the tag cloud, you’ll need the tag_cloud_display.php to display the tag cloud. When you first launch this script you will see some error messages followed by a text input box and a submit button. This is normal as there is nothing in the database yet. Once you place a word in the database the errors will dissapear.
name of script: code.php
Here’s the script>>
<?php
$dbh=mysql_connect ("localhost", "<username>", "<password>") or die ('I cannot connect to the database because: ' . mysql_error());
?>
**************************************************
***If you change the name of this you’ll need to make changes below. You’ll have to create a table in your own database, and then replace ‘DATABASE_NAME’ with your own database name (not the table name, that goes elsewhere). The Mysql table this is reading is called cloud, which consists of two columns: ID and Words. ID is the primary key, set to auto-increment, Words is set to Var Char with a max length of 30.
<?php require_once('code.php'); ?>
<?php
if (!$dbh) {
die('Could not connect: ' . mysql_error());
}
// select the db
$db_selected = mysql_select_db('DATABASE_NAME', $dbh);
if (!$db_selected) {
die ('Can\'t use database : ' . mysql_error());
}
if (isset ($_POST))
{
$word = ((isset ($_POST['word']) && trim ($_POST['word']) != '')?trim($_POST['word']):'');
$word = mysql_escape_string ($word);
if ($word != ''){
$sql = "INSERT INTO cloud (words) VALUES ('$word')";
@mysql_query ($sql, $dbh);
('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']).'/tag_cloud_input.php';
}
}
// connect to database
$sql ="SELECT words FROM cloud ORDER BY id DESC limit 1";
$result1 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result1) {
die('no results: ' . mysql_error());
}
$row1 = mysql_fetch_array($result1);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row1[0]' group by words";
$result2 = mysql_query($sql);
$row2 = mysql_fetch_array($result2); //$row2[0] = last tag...
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result2) {
die('no results: ' . mysql_error());
}
//select the second to last word
$sql ="SELECT words FROM cloud where words != '$row2[0]' ORDER BY id DESC limit 1";
$result3 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result3) {
die('no results: ' . mysql_error());
}
$row3 = mysql_fetch_array($result3);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row3[0]' group by words";
$result4 = mysql_query($sql);
$row4 = mysql_fetch_array($result4);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result4) {
die('no results: ' . mysql_error());
}
////
//select the third to last word
$sql ="SELECT words FROM cloud where words != '$row2[0]' and words != '$row4[0]' ORDER BY id DESC limit 1";
$result5 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result5) {
die('no results: ' . mysql_error());
}
$row5 = mysql_fetch_array($result5);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row5[0]' group by words";
$result6 = mysql_query($sql);
$row6 = mysql_fetch_array($result6);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result4) {
die('no results: ' . mysql_error());
}
//select the forth from last word
$sql ="SELECT words FROM cloud where words != '$row2[0]' and words != '$row4[0]' and words != '$row6[0]' ORDER BY id DESC limit 1";
$result7 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result7) {
die('no results: ' . mysql_error());
}
$row7 = mysql_fetch_array($result7);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row7[0]' group by words";
$result8 = mysql_query($sql);
$row8 = mysql_fetch_array($result8);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result8) {
die('no results: ' . mysql_error());
}
//select the fifth from last word
$sql ="SELECT words FROM cloud where words != '$row2[0]' and words != '$row4[0]' and words != '$row6[0]' and words != '$row8[0]' ORDER BY id DESC limit 1";
$result9 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result9) {
die('no results: ' . mysql_error());
}
$row9 = mysql_fetch_array($result9);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row9[0]' group by words";
$result10 = mysql_query($sql);
$row10 = mysql_fetch_array($result10); //$row4[0] = last tag...
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result10) {
die('no results: ' . mysql_error());
}
//select the sixth from last word
$sql ="SELECT words FROM cloud where words != '$row2[0]' and words != '$row4[0]' and words != '$row6[0]' and words != '$row8[0]' and words != '$row10[0]' ORDER BY id DESC limit 1";
$result11 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result11) {
die('no results: ' . mysql_error());
}
$row11 = mysql_fetch_array($result11);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row11[0]' group by words";
$result12 = mysql_query($sql);
$row12 = mysql_fetch_array($result12);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result12) {
die('no results: ' . mysql_error());
}
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud GROUP BY words ORDER BY id";
$result = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result) {
die('no results: ' . mysql_error());
}
// here we loop through the results and put them into a simple array:
// $tag['thing1'] = 12;
// $tag['thing2'] = 25;
// etc. so i can use all the fancy array functions
// to calculate the font-size of each tag
while ($row = mysql_fetch_array($result)) {
$tags[$row['tag']] = $row['quantity'];
}
// change these font sizes if you will
$max_size = 250; // max font size in %
$min_size = 100; // min font size in %
// get the largest and smallest array values
$max_qty = max(array_values($tags));
$min_qty = min(array_values($tags));
// find the range of values
$spread = $max_qty - $min_qty;
if (0 == $spread) { // we don't want to divide by zero
$spread = 1;
}
// determine the font-size increment
// this is the increase per tag quantity (times used)
$step = ($max_size - $min_size)/($spread);
echo '<a href="http://www.rouvelle.com/tag_cloud_input.php"> full cloud</a><br>';
echo '<i>recent cluster >>> </i><br>';
// loop through our tag array
foreach ($tags as $key => $value) {
echo "<body BGCOLOR=\"C9C9C9\">";
if ($key == $row2[0]) {
$size = $min_size + (($value - $min_qty) * $step);
echo '<a href="http://www.rouvelle.com/tag_cloud_input.php" style="text-decoration:none; font-size: '.$size.'%; color: 000000"';
echo ' title="'.$value.' things tagged with '.$key.'"';
echo '>'.$key.'</a> ';
}
elseif ($key == $row4[0]) {
$size = $min_size + (($value - $min_qty) * $step);
echo '<a href="http://www.rouvelle.com/tag_cloud_input.php" style="text-decoration: none; font-size: '.$size.'%; color: 919191"';
echo ' title="'.$value.' things tagged with '.$key.'"';
echo '>'.$key.'</a> ';
}
elseif ($key == $row6[0]) {
$size = $min_size + (($value - $min_qty) * $step);
echo '<a href="http://www.rouvelle.com/tag_cloud_input.php" style="text-decoration: none; font-size: '.$size.'%; color: ffffff"';//was FFC2BF
echo ' title="'.$value.' things tagged with '.$key.'"';
echo '>'.$key.'</a> ';
}
}
echo "<title> black=latest, size=prevalence, add new or amplify existing </title>";
echo "<form name='chatform' method='post' target='chatroom' action='tag_cloud_input.php'>
tag:
<input type='text' name='word'><br>
<input type='submit' name='action' value='Submit'>
</form>";
echo "</body>";
?>
*****************************************************************
As mentioned above you’ll need to insert in your own username and password (at least – if you’ve come up with another name for the database, table, and columns you’ll have to change those, too. If you change the name of the script you’ll need to make changes in the script itself so that it points to itself. The commented out stuff works. Play with it and see what it does.
***If you change the name of this you’ll need to make changes below. The Mysql table this is reading is called Cloud, which consists of two columns, ID and Words. ID is the primary key, WORDS is set to Var Char with a max length of 30.
<?php require_once('code.php'); ?>
<?php
if (!$dbh) {
die('Could not connect: ' . mysql_error());
}
// select the db
$db_selected = mysql_select_db('DATABASE_NAME', $dbh);
if (!$db_selected) {
die ('Can\'t use database : ' . mysql_error());
}
if (isset ($_POST))
{
$word = ((isset ($_POST['word']) && trim ($_POST['word']) != '')?trim($_POST['word']):'');
$word = mysql_escape_string ($word);
if ($word != ''){
$sql = "INSERT INTO cloud (words) VALUES ('$word')";
@mysql_query ($sql, $dbh);
('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']).'/tag_cloud_display.php';
}
}
// connect to database
$sql ="SELECT words FROM cloud ORDER BY id DESC limit 1";
$result1 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result1) {
die('no results: ' . mysql_error());
}
$row1 = mysql_fetch_array($result1);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row1[0]' group by words";
$result2 = mysql_query($sql);
$row2 = mysql_fetch_array($result2);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result2) {
die('no results: ' . mysql_error());
}
//select the second to last word
$sql ="SELECT words FROM cloud where words != '$row2[0]' ORDER BY id DESC limit 1";
$result3 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result3) {
die('no results: ' . mysql_error());
}
$row3 = mysql_fetch_array($result3);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row3[0]' group by words";
$result4 = mysql_query($sql);
$row4 = mysql_fetch_array($result4);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result4) {
die('no results: ' . mysql_error());
}
//select the third to last word
$sql ="SELECT words FROM cloud where words != '$row2[0]' and words != '$row4[0]' ORDER BY id DESC limit 1";
$result5 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result5) {
die('no results: ' . mysql_error());
}
$row5 = mysql_fetch_array($result5);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row5[0]' group by words";
$result6 = mysql_query($sql);
$row6 = mysql_fetch_array($result6);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result4) {
die('no results: ' . mysql_error());
}
$sql ="SELECT words FROM cloud where words != '$row2[0]' and words != '$row4[0]' and words != '$row6[0]' ORDER BY id DESC limit 1";
$result7 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result7) {
die('no results: ' . mysql_error());
}
$row7 = mysql_fetch_array($result7);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row7[0]' group by words";
$result8 = mysql_query($sql);
$row8 = mysql_fetch_array($result8);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result8) {
die('no results: ' . mysql_error());
}
//select the fifth from last word
$sql ="SELECT words FROM cloud where words != '$row2[0]' and words != '$row4[0]' and words != '$row6[0]' and words != '$row8[0]' ORDER BY id DESC limit 1";
$result9 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result9) {
die('no results: ' . mysql_error());
}
$row9 = mysql_fetch_array($result9);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row9[0]' group by words";
$result10 = mysql_query($sql);
$row10 = mysql_fetch_array($result10); //$row4[0] = last tag...
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result10) {
die('no results: ' . mysql_error());
}
//select the sixth from last word
$sql ="SELECT words FROM cloud where words != '$row2[0]' and words != '$row4[0]' and words != '$row6[0]' and words != '$row8[0]' and words != '$row10[0]' ORDER BY id DESC limit 1";
$result11 = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result11) {
die('no results: ' . mysql_error());
}
$row11 = mysql_fetch_array($result11);
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud where words = '$row11[0]' group by words";
$result12 = mysql_query($sql);
$row12 = mysql_fetch_array($result12); //$row4[0] = last tag...
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result12) {
die('no results: ' . mysql_error());
}
$sql = "SELECT words AS tag, COUNT(id) AS quantity FROM cloud GROUP BY words ORDER BY id";
$result = mysql_query($sql);
if (!sql) {
die('Could not sql: ' . mysql_error());
}
if (!result) {
die('no results: ' . mysql_error());
}
while ($row = mysql_fetch_array($result)) {
$tags[$row['tag']] = $row['quantity'];
}
// change these font sizes if you will
$max_size = 250; // max font size in %
$min_size = 100; // min font size in %
// get the largest and smallest array values
$max_qty = max(array_values($tags));
$min_qty = min(array_values($tags));
// find the range of values
$spread = $max_qty - $min_qty;
if (0 == $spread) { // we don't want to divide by zero
$spread = 1;
}
// determine the font-size increment
// this is the increase per tag quantity (times used)
$step = ($max_size - $min_size)/($spread);
// loop through our tag array
foreach ($tags as $key => $value) {
echo "<body BGCOLOR=\"C9C9C9\">";
if ($key == $row2[0]) {
$size = $min_size + (($value - $min_qty) * $step);
echo '<a href="http://www.rouvelle.com/tag_cloud_display.php" style="text-decoration:none; font-size: '.$size.'%; color: red"';//was FF0C00
echo ' title="'.$value.' things tagged with '.$key.'"';
echo '>'.$key.'</a> ';
}
else{
$size = $min_size + (($value - $min_qty) * $step);
echo '<a href="http://www.rouvelle.com/tag_cloud_display.php" style="text-decoration: none; font-size: '.$size.'%; color: 4F2F4F"';
echo ' title="'.$value.' things tagged with '.$key.'"';
echo '>'.$key.'</a> ';
// notice the space at the end of the link
}
}
echo "<title> red=latest, size=prevalence</title>";
echo"<head> <meta http-equiv=\"refresh\" content=\"5\"></head>";
echo "</body>";
?>
*********************************************