Group Members: Daniel Mehdi, Ryan Ostrander, Justin Hein, Mahkambet Buzurmankulov
We initially had the idea of data-mining Facebook to see what a person liked, and then using that data to do something. We then thought of determining how “mainstream” a person was, and from that, came up the idea with a pun on “mainstream”: have an actual stream, filled with fish. This eventually evolved to having a fish tank in which each fish had their own level of “mainstreamness.” The viewer could then go fishing by using moves, song, etc. as lures. Each lure would, like the fish, have its own mainstream value, and fish would only be attracted to lures with a value similar to theirs. Choosing the lure would therefore be a game in itself; for example, one would have to determine the type of movie most likely to catch a hipster fish.
We began by taking an open source algorithm for fish graphics (created by Nicolas Tang). This displayed rather pretty fish animations, but the fish were only programmed to swim around randomly and to chase bits of food the user could add via mouse clicks. To get them to behave as we wanted, we had to program them to detect edges (so that they would stay on screen), follow the position of a lure onscreen, to only chase a lure if it had a similar mainstream value, and to be attracted to or scared away from a lure based on how much that lure was moving. Although the algorithms for this behavior wound up being quite complicated, it was possible to do all this only using simple position vectors and angles. We also had to have some way of telling one fish from another. To do this, we set up a database from which a user could pick two colors for their fish. These colors would then be sent to our fishtank program, along with the users mainstream value, enabling us to create a new fish.
When a fish was caught, we used networking to tell another program to add that fish to a bucket, and to display the information associated with that fish. The bucket program also contained a “release” button, which allowed the caught fish (which were being stored offscreen) to swim back into the viewable area.
We then use ajax to send the user’s facebook uid, their name, mainstream value, and fish color they’ve selected on the login page to a database which can be queried by the processing application. The processing application sends the server the id of the last fish it received the the server can send back only new fish that have been added since that id was seen. The server sends this request for new fish every second or so concurrently with the drawing of the fish so there is little delay between the user’s facebook submission and the fish being added.
When the user is logged in, a tacklebox comes up where you can select your likes or the likes of anyone that has logged in before you, this will act as your lure to lure in fish with a mainstream value similar to the mainstream value of the lure. The aquarium application is using the same method it uses to get new fish to get a newly attached lure.
Processing’s network library is being used for communcation between the bucket application and the aquarium. The bucket is the server and the aquarium sends the bucket the facebook information about the fish that was caught when a fish is dragged to the edge of the tank. Also the bucket application has a “Release” button that releases all the fish from the bucket back into the aquarium by simply sending the string “releasefish” through the network.
In the end we we’re very satisfied with our results. The physical set up with the television monitor placed under the plexiglass aquarium made for a very beautiful aesthetic and helped create a more visceral fishing experience for the user. Our calculations of “mainstream” we’re generally accurate but not always so that aspect of the project could be improved. Overall we we’re happy with the final exhibition.fishingforfriends2