11 settembre, l'iPhone lo ricorda con la realtà aumentata

11-settembre

Il Memoriale ed il Museo Nazionale dell’11 Settembre apriranno solo l’anno prossimo ma, per venire incontro alla massa, in occasione del nono anniversario è stata rilasciata un’applicazione gratuita per iPhone in realtà aumentata.

‘Explore 9/11’ – questo il suo nome – offre le seguenti funzioni:

-un percorso in sette tappe dei punti d’interesse attorno all’area del World Trade Center. L’esperienza è animata da immagini vivide e narrazioni audio. I dettagli di ciò che accadde l’11 settembre 2001 e le conseguenze sono raccontate dai soccorritori, dai volontari e dagli abitanti della Lower Manhattan;

-un’opzione di esplorazione, mediante il GPS, mostra immagini legate all’11/9 scattate vicino ai luoghi dei cittadini. Utilizzando la fotocamera, la modalitàrealtà aumentatasvela foto dell’11/9;

-una timeline interattiva fornisce una cronaca degli eventi del giorno e di quelli seguenti.

Dopo alcune ore di utilizzo dell’app, l’abbiamo trovata ingegnosa, educativa ed implacabile, il che la rende una degna anteprima del futuro museo. Le foto che mostra attingono dall’immenso archivio di foto del Memoriale inviate dalla gente comune (una sorta di Flickr perfetta per l’iPhone).

Il Memorial dell’11/9 non è la prima città-museo con un’applicazione per iPhone dedicata. Le prime due sono state il Museum of Natural History ed il MoMa, che ha svelato la sua app quest’estate. Ma nessuno dei due può battere il Brooklyn Museum, la cui versione mobile è già alla versione 1.30.

Antonino Neri

- // 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); // -->"

Cerca