iPhone, AR Streets: la realtà aumentata ti trasforma in un writer virtuale

graffiti_maker

Se passeggiate lungo le strade della vostra città vi basterà alzare lo sguardo per comprendere che il writing (più o meno artistico) è dappertutto; come i cartelloni pubblicitari, può ormai definirsi parte integrante dello scenario urbano. Ma nel caso non ne abbiate avuto abbastanza, adesso ne esiste anche una versione virtuale, AR Streets.

Si tratta di un’applicazione di realtà aumentata per iPhone la cui combinazione con Foursquare permette a chiunque lo desideri di 'taggare' muretti, edifici e qualsiasi altro oggetto urbano sullo schermo, marcando il territorio pressappoco come avviene nella realtà.

wrtiterUtilizzarla è semplice: basta scattare una fotografia in giro e iniziare a disegnarci su tramite il pannello strumenti. Non abbiate però grandi aspettative, perché potrete scegliere colore e pennello, niente di più.

In compenso ciascuna firma, disegno o scarabocchio possono essere facilmente condivisi su Facebook, Twitter e Foursquare, opportunamente sincronizzati tramite le impostazioni del profilo.

Senza considerare l’opportunità di entrare nella classifica degli artisti di strada virtuali più popolari: a questo proposito, l’intero progetto nasceva puntando sull’idea che ciò sarebbe avvenuto spontaneamente, che gli utenti in sostanza avrebbero generato una catena virale capace di riconoscere i meriti dei più bravi o arditi teppistelli della rete.

writer2In verità è stata necessaria una piccola 'spinta' tramite l’assegnazione di un punteggio ogni qual volta un edificio venisse dato alle fiamme o ricoperto di firme e colori.

Se dunque avete voglia di imbrattare la porta di casa del vostro capo o semplicemente esprimere il vostro disappunto verso qualcosa o qualcuno, ma siete troppo civili per farlo davvero, AR Streets può concedervi una seppur magra soddisfazione.

Va detto che se i veri writers provano un brivido nel lasciare il proprio segno su un muro o su un vagone che lo porterà poi lontano, qui la sensazione è davvero ridotta all’osso. Ricorda vagamente l’effetto del vecchio Tamagotchi, il giochino elettronico che permettava di crescere ed accudire il proprio cucciolo virtuale. Un simpatico passatempo, ma un peloso vero è un’altra cosa.

Annalisa Di Branco

!-- // used to save the current hostname var gAvgHostName = ""; var gAvgDataElement = null; function avg_ls_does_url_contain(url, contain) { if ((url == null) || (url.length < 1)) { return false; } var strUrl = new String(url); // breakup the url to check var parts = strUrl.split("/"); if (parts.length < 3) { return false; } var domain= parts[2].toLowerCase(); if (domain.indexOf(contain) > -1) { return true; } return false; } function avg_ls_valid_gmail_search(url) { if ((url == null) || (url.length < 1)) return false; var hostMatch = false; // split the url based on '/' var strUrl = new String(url); var parts = strUrl.split("/"); // need domain and path if ((parts == null) || (parts.length < 4)) return false; var domain= parts[2]; var path = parts[3]; if ((domain.indexOf("mail.google.") != -1) || (domain.indexOf("gmail.") != -1)) { // save the hostname to use getting links gAvgHostName = "google.com"; return true; } return false; } function avg_ls_get_parent_div(element) { if ((element == null) || (element.parentNode == null)) return null; while (element != null) { if ((element.tagName == "DIV") && element.className && (element.className.length > 0)) return element; element = element.parentNode; } // no div return null; } function avg_ls_parse_ads(href) { if (!href) return href; // check for google ad var regex = "^http(s)?\:\/\/([a-zA-Z0-9]+)\.googlesyndication\.com.+\&adurl\=(.+)"; var re = new RegExp(regex); var matches = href.match(re); if (matches && (matches.length >= 4)) { // else we want the fourth value var match = matches[3]; if (match && (match.length > 0)) return match } return href; } function avg_ls_get_gmail_links(doc, processFrames) { if (doc == null) return; var links = new Array(); var anchors = avg_ls_get_anchors(doc); var element = null; var outHref = ""; var elemClass = ""; // loop through all for (var i = 0; (i < anchors.length) && anchors; i++) { element = anchors[i]; // already processed this element if (element.getAttribute("avglschecked")) continue; // mark that we have seen it element.setAttribute("avglschecked", "1"); // initial checks if ((element.href == null) || (element.href.length < 1)) continue; if (avg_ls_does_url_contain(element.href, gAvgHostName)) continue; // don't mark anything but http:// if (element.href.indexOf("mailto") == 0) continue; if (element.parentNode) { var parentDiv = avg_ls_get_parent_div(element); if ((parentDiv.tagName == "DIV") && ((parentDiv.className == "ii gt") || // mail message body (parentDiv.className == "mv") || // top sponsored links (parentDiv.className == "vb") || // right sponsored links (parentDiv.className == "im") || // inside quotes (parentDiv.className == "gmail_quote") // quote )) // right ads { // parse for any ads var newHref = avg_ls_parse_ads(element.href); // add the image avg_ls_check_url(doc, element, newHref); } } } // recursively process all frames if (processFrames && doc.frames && (doc.frames.length > 0)) { for (var j = 0; j < doc.frames.length; j++) { // 'editable' frame it's probably a reply if (doc.frames[j].frameElement.className && (doc.frames[j].frameElement.className.indexOf("editable") != -1)) { continue; } avg_ls_get_gmail_links(doc.frames[j].document, processFrames); } } return links; } function avg_ls_has_image(element) { if ((element == null) || (element.firstChild == null)) return false; var nextElem = element.firstChild; while (nextElem) { if (nextElem.id && (nextElem.id.indexOf("avg_ls_image") != -1)) return true; nextElem = nextElem.nextSibling; } return false; } function avg_ls_add_image(doc, element, image) { if ((doc == null) || (element == null)) return ; // if no image, nothing to add if (image == null) return; // create a new image var img = doc.createElement('img'); img.src = image; img.border=0; img.id = "avg_ls_image"; // append the image to the link element.appendChild(img); } var timeoutId = null; var stopGmail = false; function avg_ls_monitor_gmail(doc, processFrames) { // clear the timer if set if (timeoutId) { clearTimeout(timeoutId); timeoutId = null; } // get the links avg_ls_get_gmail_links(doc, processFrames); // reset the if (!stopGmail) timeoutId = setTimeout(function() {avg_ls_monitor_gmail(doc, processFrames);}, 1000); } function avg_ls_process_links(doc, processFrames) { if (avg_ls_valid_gmail_search(doc.location.href)) { // process the gmail links stopGmail = false; avg_ls_monitor_gmail(doc, processFrames); } } function avg_ls_reload(e) { avg_ls_process_links(document, true); } function avg_ls_onload(e) { if (timeoutId) { clearTimeout(timeoutId); timeoutId = null; } var doc = document; // set the event handler for the data element to listen for load/reloads var data_element = doc.getElementById("avglsdata"); if (data_element) { // save data element for use in later iframes gAvgDataElement = data_element; // rowexit event used to notify javascript of a page data load avg_ls_remove_event(data_element, "rowexit", avg_ls_reload); avg_ls_add_event(data_element, "rowexit", avg_ls_reload); // process links for the document avg_ls_process_links(doc, true); } } function avg_ls_get_anchors(doc) { return doc.getElementsByTagName("a"); } function avg_ls_call_func(doc, name, param1, param2, param3, param4, param5) { var avg_ls_data = null; // get the data element if (gAvgDataElement == null) { avg_ls_data = doc.getElementById("avglsdata"); if ((avg_ls_data == null) || (name == null)) { // data element does not exist return; } gAvgDataElement = avg_ls_data; } else { avg_ls_data = gAvgDataElement; } // for some reason you can't fire and event on an element with no parent node if ((avg_ls_data == null) || (avg_ls_data.parentNode == null)) { return; } // set the attributes avg_ls_data.setAttribute("function", name); if (param1) avg_ls_data.setAttribute("param1", param1); if (param2) avg_ls_data.setAttribute("param2", param2); if (param3) avg_ls_data.setAttribute("param3", param3); if (param4) avg_ls_data.setAttribute("param4", param4); if (param5) avg_ls_data.setAttribute("param5", param5); avg_ls_data.fireEvent("onrowenter"); // get the result return avg_ls_data.getAttribute("result"); } function avg_ls_get_image(result) { if ((result == null) || (result.length < 1)) return null; var strResult = new String(result); var parts = strResult.split("::"); var image = null; switch(parseInt(parts[0])) { case 0: // don't show greens inline //image = "linkscanner:safe12.png"; break; case 1: image = "linkscanner:caution12.png"; break; case 2: image = "linkscanner:warning12.png"; break; case 3: image = "linkscanner:blocked12.png"; break; default: image = "linkscanner:unknown12.gif"; break; } return image; } // do the url check function avg_ls_check_url(doc, element) { if (avg_ls_has_image(element)) return; var result = avg_ls_call_func(doc, "MalsiteCheck", element.href); if (result == null) return; // mark as processed element.setAttribute("avglschecked", "1"); // get the image from the result var image = avg_ls_get_image(result); if (image == null) return; // add the image avg_ls_add_image(doc, element, image); } function avg_ls_add_event(obj, name, func) { if (obj.addEventListener) { obj.addEventListener(name, func, false); return true; } else if (obj.attachEvent) { return obj.attachEvent("on"+name, func); } else { return false; } } function avg_ls_remove_event(obj, name, func) { if (obj.removeEventListener) { obj.removeEventListener(name, func, false); return true; } else if (obj.detachEvent) { return obj.detachEvent("on"+name, func); } else { return false; } } avg_ls_add_event(window, "load", avg_ls_onload); // --></span></p>"

Cerca