Hatti Lim and I are working on a male version of Hatti’s urban purse for our iterative assignment in design workshop.  The idea is to create some sort of mechanism that eases the gesture that men (typically living in a city) have to endure, by reaching around into the back pocket to take out their wallet (presumably to show an ID//for NYU??) while carrying a any sort of messenger style bag that could potentially be making the gesture more difficult. [Assuming you need a messenger bag to fit all the things you would need if you were carrying a backpack].

First of all, we looked at why the messeger bag was preferrable to the classic bookbag.  What we noticed is that the ‘bookbag’ has many flaws for the urban dweller.  First of all, it is not optimal for riding in subways- it makes up a good deal of space and is situated in the chest-level area; where people have the greatest girth (as far as body mass) and provides much discomfort for those in the train if the owner does not have the forethought to take off his bag and bring it down to his/her feet (where there are typically gaps between people for it to fit).  Furthermore, if they do have the forethought to do so, it usually smacks a few bystanders along its way down, since the movement for taking off a backpack lends itself to those sort of incidents.  Also, accessing items in a backpack is rather awkward and uncomfortable, having either to engage in the wrap-around gumby arm only to feel around blindly for what you are looking for..or even worse, the swing around and bringing it to the front (again, probably smacking a few poor neighbors in the process).  Lastly, there are cultural stigmas that we associate with backpacks as being adolescant or unprofessional, etc.  (I.E, you probably would not wear your backpack to a job interview or a bar for drinks after work).  All of these reasons have led us to re-adapt the sling bag instead of the bookbag.

The first idea and main focus of our bag is to make use of the strap that run diagonally along your chest, since it is the portion of the bag the user would have easiest access to.  We think that by adapting an elastic mechanism inside a pocket (a feature I actually stole from the arm portion of one of my snowboarding jackets) will be a good appropriation for the wallet.  Also, Roger Tsai mentioned in class that he can never listen to an ipod in his backpack bc the headphones are too short, so it should be easy to fabricate another pocket along the front of the strap for an ipod as well.

Another feature we wish to add is the ability to make it slightly modular.  While Hatti focused a lot on the pocket mechanisms, I was more concerned with the safety of his laptop and how a lot of uneccessary space is wasted on days that he decides not to carry it.  So, we have decided to attempt a compartmentalization process where you can attach and detach portions (just 2 for now) of your bag to give the wearble a more modular approach.  Wish us luck!

Midterm

October 18, 2007

So, I did an NHL score retrieval system, using asterisk, PHP, XML, and Festival.

Here’s the code, using Shawn’s XML parser code:

#!/usr/local/bin/php -q
<?PHP
require(‘/var/lib/asterisk/agi-bin/phpagi.php’);

// Create an AGI Object
$agi = new AGI();

class Myxml
{
var $tag;
var $value;
var $attributes;
var $next;

function xml2array($xml_string)
{
$Parser = xml_parser_create();
xml_parser_set_option($Parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($Parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($Parser, $xml_string, $Xml_Values);
xml_parser_free($Parser);
$XmlClass = array();
$LastObj = array();
$NowObj = &$XmlClass;

foreach($Xml_Values as $Xml_Key => $Xml_Value)
{
$Index = count($NowObj);
if ($Xml_Value[“type”] == “complete”)
{
$NowObj[$Index] = new Myxml;

if (isset($Xml_Value[“tag”]))
{
$NowObj[$Index]->tag = $Xml_Value[“tag”];
}
else
{
$NowObj[$Index]->tag = “”;
}

if (isset($Xml_Value[“value”]))
{
$NowObj[$Index]->value = $Xml_Value[“value”];
}
else
{
$NowObj[$Index]->value = “”;
}

if (isset($Xml_Value[“attributes”]))
{
$NowObj[$Index]->attributes = $Xml_Value[“attributes”];
}
else
{
$NowObj[$Index]->attributes = “”;
}
}
else if ($Xml_Value[“type”] == “open”)
{
$NowObj[$Index] = new Myxml;

if (isset($Xml_Value[“tag”]))
{
$NowObj[$Index]->tag = $Xml_Value[“tag”];
}
else
{
$NowObj[$Index]->tag = “”;
}

if (isset($Xml_Value[“value”]))
{
$NowObj[$Index]->value = $Xml_Value[“value”];
}
else
{
$NowObj[$Index]->value = “”;
}

if (isset($Xml_Value[“attributes”]))
{
$NowObj[$Index]->attributes = $Xml_Value[“attributes”];
}
else
{
$NowObj[$Index]->attributes = “”;
}

$NowObj[$Index]->next = array();
$LastObj[count($LastObj)] = &$NowObj;
$NowObj = &$NowObj[$Index]->next;
}
else if ($Xml_Value[“type”] == “close”)
{
$NowObj = &$LastObj[count($LastObj) – 1];
unset($LastObj[count($LastObj) – 1]);
}
}
return $XmlClass;
}

function findElementByAttribute($xmlArray,$attribute_name,$attribute_value)
{
if (sizeof($xmlArray) > 0)
{
for ($i = 0; $i < sizeof($xmlArray); $i++)
{
if (is_array($xmlArray[$i]->attributes))
{
$attributes = $xmlArray[$i]->attributes;

foreach($attributes as $name => $value)
{
//echo $name . ” ” . $value . “\n”;
if ($name == $attribute_name && $value == $attribute_value)
{
return $xmlArray[$i];
}
}
}

if (isset($xmlArray[$i]->next))
{
$possible = findElementByAttribute($xmlArray[$i]->next,$attribute_name,$attribute_value);
if ($possible !== false)
{
return $possible;
}
}
}
}
else if (isset($xmlArray[0]->next))
{
//echo “really here”;
$possible = findElementByAttribute($xmlArray[0]->next,$attribute_name,$attribute_value);
if ($possible !== false)
{
return $possible;
}
}
return false;
}

/*function findElementByTag($xmlArray,$element)
{
//echo “looking for $element”;

if (sizeof($xmlArray) > 0)
{
for ($i = 0; $i < sizeof($xmlArray); $i++)
{
//echo “here”;
//echo “does ” . $xmlArray[$i]->tag . ” == ” . $element . “\n”;

if ($xmlArray[$i]->tag == $element)
{
return $xmlArray[$i];
}
else if (isset($xmlArray[$i]->next))
{
$possible = $this->findElementByTag($xmlArray[$i]->next,$element);
if ($possible !== false)
{
return $possible;
}
}
}
}
else if (isset($xmlArray[0]->next))
{
//echo “really here”;
$possible = $this->findElementByTag($xmlArray[0]->next,$element);
if ($possible !== false)
{
return $possible;
}
}
return false;
}*/

function findElementsByTag($xmlArray,$element)
{
//echo “Looking for ” . $element . “\n”;

$return_elements = array();

if (sizeof($xmlArray) > 0)
{
//echo “Size is greater than 0\n”;

for ($i = 0; $i < sizeof($xmlArray); $i++)
{
//echo “does ” . $xmlArray[$i]->tag . ” == ” . $element . “\n”;

if ($xmlArray[$i]->tag == $element)
{
$return_elements[sizeof($return_elements)] = $xmlArray[$i];
}
else if (isset($xmlArray[$i]->next))
{
$possible = $this->findElementsByTag($xmlArray[$i]->next,$element);
if (is_array($possible))
{
$return_elements = array_merge($return_elements,$possible);
}
}
}
}
else if (isset($xmlArray[0]->next))
{
//echo “Going to next \n”;

$possible = $this->findElementsByTag($xmlArray[0]->next,$element);
if (is_array($possible))
{
$return_elements = $possible;
}
}
return $return_elements;
}
}

exec(“echo ‘Robo Man is getting the scores from totally scored dot com’ | /usr/bin/text2wave -scale 1.5 -F 8000 -o /tmp/temp.wav”);
$agi->stream_file(“/tmp/temp”);

//$scores = array();

// Using Snoopy
// http://sourceforge.net/projects/snoopy/
//curl_setopt($ch, CURLOPT_URL, “http://feeds.feedburner.com/unmediated/&#8221;);
include “Snoopy.class.php”;
$snoopy = new Snoopy;

$snoopy->fetch(“http://www.totallyscored.com/rss/team/10/&#8221;);

exec(“echo ‘Robo man has got the feed and is parsing the scores’ | /usr/bin/text2wave -scale 1.5 -F 8000 -o /tmp/temp.wav”);
$agi->stream_file(“/tmp/temp”);

// Myxml defined above
$myxml = new Myxml();
$xml = $myxml->xml2array($snoopy->results);

$scores = $myxml->findElementsByTag($xml,”title”);

// For debugging
for ($i = 0; $i < sizeof($scores); $i++)
{
$score = $scores[$i]->value;
// echo “Was $score”;
//$score = preg_replace(‘/^\*$|^NHL$/’,””,$score);
$score = str_replace(“(NHL)”,””,$score);
$score = str_replace(“*”,””,$score);
$scores[$i]->value = $score;
// echo “now ” . $scores[$i]->value;
}

//$newScores = preg_replace(‘^\*$|^NHL$’, ‘/s’, $scores);

/*
exec(“echo ‘Robo man is preparing to speak the scores’ | /usr/bin/
text2wave -scale 1.5 -F 8000 -o /tmp/temp.wav”);
$agi->stream_file(“/tmp/temp”);

for ($i = 0; $i < sizeof($scores) && $i < 1; $i++)
{
$current_score = $scores[1]->value;
exec(“echo ‘$current_score’ | /usr/bin/text2wave -scale 1.5 -F 8000 –
o /tmp/temp.wav”);
$agi->stream_file(“/tmp/temp”);
}

*/

// For debugging
//for ($i = 0; $i < sizeof($headlines); $i++)
//{
//var_dump($headlines[$i]);
//echo “\n”;
//$title = $item[$s]->value;
//$scores[sizeof($scores)] = preg_replace(‘/[^0-9a-z\s\.]/i’,””,$scores[sizeof($scores)]);
//}

//$newScores = preg_replace(‘^\*$|^NHL$’, ‘/s’, $scores);

exec(“echo ‘Robo man is preparing to speak the scores’ | /usr/bin/text2wave -scale 1.5 -F 8000 -o /tmp/temp.wav”);
$agi->stream_file(“/tmp/temp”);

for ($i = 0; $i < sizeof($scores) && $i < 1; $i++)
{
$current_score = $scores[1]->value;
exec(“echo ‘$current_score’ | /usr/bin/text2wave -scale 1.5 -F 8000 -o /tmp/temp.wav”);
$agi->stream_file(“/tmp/temp”);
}

exit(0);
?>

More to come on the development and future plans and such.

Project 2 Documentation

October 17, 2007

Here’s the link to my presentation and documentation for my observation and response assignment. I was reasonably happy with the concept, although I wish my prototyping skills were a bit better, especially since I spent so long working on this one, reworking it from scratch at least three times. Oh well. Practice always helps. Enjoy.

While observing the interaction between books and people, I realized quickly that my design ideas would focus down to one of three general options: changing the human, changing the book, or some combination of both.

What I mean by this is pretty simple.

Changing the human involves design solutions centered around the perspective of allowing the user (humans) to interact more comfortably with the books by designing something centered around the body. Essentially, by changing the form in which the user interacts with the book. Harnesses, gloves, stands, and the like.

Changing the book, then, involves looking at the design possibilities generated from changing the actual form of the book itself. Is the current rectanglular shape really the most human-centered form? How can the text be displayed efficiently while still improving the ease of use? Is it a technological solution, or simply a form solution? Changing materials and information technologies all come into play here.

And finally, perhaps the answer lies in both worlds; the marriage of a human component and a book component creating the ultimate reading experience. Some kind of modular systemic design solution seems like a very interesting and challenging possibility.

This final design possibility seems the most promising – both the book and the human have been in their current forms for so long that it would seem a whole new interface would be necessary to affect serious change. So I am currently researching what has been done in this and closely related areas, as well as advances in relevant material and information technology, to see if an elegant solution presents itself.