DESKTOP 0
download the executable here. requires os x 10.5+ sorry!

Nick Lally and will have a piece in Full Disclosure, a show opening tomorrow in the Sesnon gallery at UCSC. Look at dat pretty Epson TM-88 III. Big thanks to all the information available at http://microprinter.pbworks.com/
Failbase 831.xxx.4046 is a system for the collection and output of participant testimonies of failure. By leaving voicemail or sending SMS (text) messages to (831) xxx-4046, participants can submit their failures. As they speak or type, the failures are printed in the gallery as paper receipts. Visitors to the gallery space are encouraged to submit their own failures, as well as to read, cut, notate and file incoming failures according to how they see fit.
Failbase 831.xxx.4046 was conceived and created by Digital Arts and New Media graduate students Nik Hanselmann and Nick Lally under the auspices of E.G. Crichton who invited them to be part of Archive of What’s Left Behind.

AXIS webcams are fun to play with because they are generally pretty easy to google, have fast feeds (depending), and sometimes allow user control. Of the thousands of AXIS cams online many of them are public. A somewhat well known trick to turn up thousands of AXIS cameras is to google for:
intitle:"Live View / - AXIS" | inurl:view/view.shtml^
Which will turn up thousands of (mostly) boring feeds. Every once in a while however, something really interesting turns up that you may want to scrape for some reason or another. The typical URL result for the cam is something like:
http://191.22.175.200/view/view.shtml (this URL doesn't work btw)
Which sometimes displays an image in mjpeg format and sometimes displayed with a cgi script. A cool thing the cams do (and cool if you want to scrape) is catalogue all previous images on a server somewhere. This means that if the cam is displaying a mjpeg which is a pain to deal with, never fear! To access plain ol’ jpegs from AXIS web software you need to look here:
http://191.22.175.200/jpg/1/image.jpg?(UNIX TIME)
Where the Unix time is generally a big number. This makes the whole process pretty simple from here on out, as that is simply the location you need to query to get fairly up-to-date images from that camera. The directory structures sometimes change, and sometimes finding the jpeg URL is as simple as viewing the source of the AXIS camera page. Also, especially on faster camera feeds, the main AXIS page occasionally links to a mjpeg which is tricky to deal with.
Processing sketch:
//scrape AXIS web cameras with processing. //please don't be a jerk with this sketch. import java.util.Date; PImage cam; Date d; float last_millis; void setup(){ size(320,240); d = new Date(); } void draw(){ cam = loadImage("http://somedomain/jpg/1/image.jpg?"+d.getTime()); image(cam, 0,0,320, 240); last_millis = last_millis - millis(); println(last_millis); last_millis = millis(); }
Pretty simple right? All the math with milliseconds can be deleted, the code is there to see the difference in time between the last time an image was downloaded. Downloading discreet jpegs causes some lag and is a lot slower than using a conventional browser. Also, remember that d.getTime() gets the current Unix time — you can always change that to whatever, assuming the webcam existed at that point.
yay! Finally uploaded something with fine lines to vimeo that didn’t get entirely screwed up by the compression process. Animation Codec @ 720×480 with lots of keyframes seems to do okay.
all these triangles! from nik hanselmann on Vimeo.
I put together a simple screen scraper using HTML::TreeBuilder in Perl. I am new to Perl and had a bit of a tricky time getting code available online to do what I wanted it to do, so after a bunch of trial and error I ended up with this. The script gathers 1000 results for “Doogie Howser, M.D.” from Google and then parses out the title, link, and summary for each result. As you can see, I used HTML::TreeBuilder to pick out specific instances of CSS styles in the HTML.
#!/usr/bin/perl #screenscraping with HTML::TreeBuilder use strict; use LWP; use HTML::TreeBuilder; my($user_agent, $url, $browser, $request, $max_result, $response, $start, $content, $search_result, @search_results); $max_result = 1000; $start = 0; #Google for "Doogie Howser, M.D.", 100 results per page. $url = 'http://www.google.com/search?hl=en&q=Doogie+Howser%2C+M.D.&aq=f&oq=&aqi=&num=100'; $user_agent = LWP::UserAgent->new(); print "Searching...this may take a minute\n"; while ( $start < $max_result ) { $request = HTTP::Request->new(GET => $url."&start=$start"); $user_agent->timeout(30); $user_agent->agent('Mozilla/5.0'); $response = $user_agent->request($request); if($response->is_success){ $content .= $response->content; $start += 100; } } #parse $content with treebuilder my $page = HTML::TreeBuilder->new(); $page->parse($content); $page->eof(); #the following code finds every <li> item with class 'g' -- right now, #this is how search results are styled on google. so, the HTML result #for each item returned by google is stored in @search_results # #you could uncomment this: #foreach $search_result (@search_results){ # print $search_result->as_HTML,"\n\n"; #} #and see how each item looks in the array. @search_results= $page->look_down( sub{ $_[0]-> tag() eq 'li' and ($_[0]->attr('class') =~ /g/)} ); foreach $search_result (@search_results){ my($url, $title, $summary); #now that we have each HTML chunk of search results stored in an array #we can take it apart further: $page = HTML::TreeBuilder->new_from_content($search_result->as_HTML); #the title is styled as <h3 class=r> $title = $page->look_down( sub{ $_[0]-> tag() eq 'h3' and ($_[0]->attr('class') =~ /r/)} ); #the summary is styled as <div class=s> $summary = $page->look_down( sub{ $_[0]-> tag() eq 'div' and($_[0]->attr('class') =~ /s/)} ); #now we have to get the href attribute from the title to get the link #so we load the title, as HTML, into the treebuilder object $page = HTML::TreeBuilder->new_from_content($title->as_HTML); #the link is styled as <a class=l href="..." #the following assigns $url the href attribute $page->look_down( sub{ $_[0]-> tag() eq 'a' and ($_[0]->attr('class') =~ /l/), $url = $_[0]->attr('href')} ); #print everything out... if($title) { print 'title: '.$title->as_text."\n";} if($summary){ print 'summary: '.$summary->as_text."\n";} if($url){ print 'url: '.$url."\n\n";} } #delete the treebuilder object. $page->delete;
The best thing I found while searching:
FnPtr FnED[256]= { fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, in_b_xc,out_xc_b,sbc_hl_bc,ld_xworde_bc,neg,retn,im_0,ld_i_a, in_c_xc,out_xc_c,adc_hl_bc,ld_bc_xworde,fuck,reti,fuck,ld_r_a, in_d_xc,out_xc_d,sbc_hl_de,ld_xworde_de,fuck,fuck,im_1,ld_a_i, in_e_xc,out_xc_e,adc_hl_de,ld_de_xworde,fuck,fuck,im_2,ld_a_r, in_h_xc,out_xc_h,sbc_hl_hl,ld_xworde_hl,fuck,fuck,fuck,rrd, in_l_xc,out_xc_l,adc_hl_hl,ld_hl_xworde,fuck,fuck,fuck,rld, in_f_xc,fuck,sbc_hl_sp,ld_xworde_sp,fuck,fuck,fuck,fuck, in_a_xc,out_xc_a,adc_hl_sp,ld_sp_xworde,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, ldi,cpi,ini,outi,fuck,fuck,fuck,fuck, ldd,cpd,ind,outd,fuck,fuck,fuck,fuck, ldir,cpir,inir,otir,fuck,fuck,fuck,fuck, lddr,cpdr,indr,otdr,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,fuck,fuck, fuck,fuck,fuck,fuck,fuck,fuck,patch,fuck };
from http://www.google.com/codesearch/p?hl=en#OiylO0H42Bs/codeed.c&q=fuck&l=373