Wayfinding at the Metropolitan Museum of Art

The mission of the The Metropolitan Museum of Art is to collect, preserve, study, exhibit, and stimulate appreciation for and advance knowledge of works of art that collectively represent the broadest spectrum of human achievement at the highest level of quality, all in the service of the public and in accordance with the highest professional standards.

As a casual visitor with no previous knowledge of the Met’s history or purpose, it’s easy to pass through the digital and bricks-and-mortar locations of The Metropolitan Museum of Art and come away with a well crafted experience that serves the Museum’s mission. The Met benefits from the critical mass created by the collection, the donors, the staff, and the visitors to achieve a broader experience than many of its world-class peers. It reveals to its stakeholders what we have achieved as a family of curious minds encompassing all places and all histories. It lends credence to the truth of being human above all other things.

On the other hand, the Museum is monumental, and it sometimes appears insurmountable. A casual visit to the Met can quickly become exhausting as one navigates through artifacts exhibiting a level of quality that demands careful consideration. Not many of us are well trained to process the content and context of one piece after another. Both the Museum and the Museum’s website present a vast network of information with an innumerable number of threads weaving together the record of the collection, the activities of the staff, and the background information generated through its stewardship.

One chief challenge embedded in the mission of the museum must be to satisfy the intellectual pursuit of a unique constituent with an agreeable depth of exposure to the ocean of content. Ultimately, the Museum should succeed in the effort on the order of several million times a year. An important obstacle to surmounting the challenge lies in translating the literate, focused, and precise point of view of a well-knit circle of curators to the often uninitiated, broadly focused, and imprecise observations of a visitor. Fortunately, the storytelling surrounding the collection can turn the viewership into a never ending tide that will gradually carve meaningful paths into the Museum’s bedrock.

Wayfinding is one the most difficult tasks faced by a visitor to the Museum. Although a destination might be set out at the beginning of a visit, any number of fascinating choices presented along the way may lead the quest astray. When searching for Fabergé eggs, one easily ends up tuckering out in Oceanic Art. Traditional wayfinding might be the goal of a long and expensive campaign to organize a day in the museum, but the caretakers have useful alternatives to simply labeling expected paths through the collection.

Perhaps one of the most unique assets of the Met is an extensive digital archive for finding and remembering artwork. The reward of a visit to the museum can grow by attaching digital assets to the collection in the same way that a website grows through keeping records of the click-throughs of a visitor. The Metropolitan Museum of Art can employ its existing assets to perfect the art of guided wandering.

Guided wandering consists of a chain of options that may resolve in the moment of experience. Guided wandering changes the intended path with a constantly updating menu of what might be interesting to find. The progression of guided wandering consists of at least four stages: setting goals for a visit, seeking out the content, consolidating the discoveries, and reflecting on the experience. Today, the Met’s toolbox supports each of those activities well, and it may be improved by channeling from one stage to the next inside a unified mobile interface.

YouTube contains videos of the Museum’s Director exploring the collection. Foursquare holds tips from previous visitors. The website’s calendar displays upcoming events such as lectures and panels. Each resource invites a casual observer to satisfy her curiosity with a visit to the Museum, and a visitor can easily browse these resources before a visit.

Once the visitor has arrived with a desire to explore, she can take advantage of a preconfigured mobile device to follow a path or change its course. For example, an application that has access to the database of objects in the collection can present alternative destinations by gallery, period, artist, etc. Highlights chosen by curators can gather visitors by drawing attention when the visitor is within a given proximity or headed in the direction of the artwork. The artworks themselves could become signposts along a path to a destination.

Mobile devices can exploit MyMet’s features to create a list of favorites for future reflection as well as recommend related objects to view while at the Museum. The Heilbrunn Timeline of Art History is particularly well suited to revealing the historical context of a piece in the moment of viewing and chaining together a revised path of exploration.

After the visit, Flickr sets, favorites from a visit, The Met Around the World, and the Heilbrunn Timeline can contribute related content to considerations of a future visit to the Museum in New York or at sites closer to the visitor’s point of origin.

Advantages of tracking a visitor’s path emerge through the self-organizing behavior of the full audience:

  • Devices that are aware of each other can suggest paths through less crowded rooms.
  • Tours can generate content that might be useful to many others. Devices could be chained to each other to allow a group to collectively receive supplementary information.
  • Documented answers given along the path of a tour can be upvoted by a solo viewer to inform the discovery of future viewers.
  • Along the way, a visitor can save links to the pieces that catch her eye. The buildup of favorites chosen in the moment of viewing allows recommendation engines to suggest new paths through the museum along with purchases in the Museum’s store on the way out or from home.
  • A record of overlapping paths of interest builds up a picture of the viewership of the collection while leaving room for the individual’s story to exist in the data. Taken with basic consumer demographics information, they offer the seeds for programming events like those of the Multicultural Audience Development Initiative.
  • Curators might continue to craft the experience of an exhibition by highlighting the narrated path of a single visitor.

Clearly, the modern museum employing the full range of sensing and record keeping abilities provided in a mobile device should evolve in tandem with the discoveries of the audience.

The “Connections” section of the Museum’s website presents clear insight into the same type of meaning created by a guided wander. For example, a staff member from Tennessee has prototyped a model of experience that can be adopted by fellow Tennesseans who discover his story. The profiles offered here do not center on the traditional rubrics of organizing information about art but use pieces of information like time and location to author stories that lead paths through the museum along intensely personal dimensions of interest. A curator has little ability before an exhibition to guess what conclusions their designs will generate inside of an audience, but the Museum can install a lens into the experience through which meaning can surface and inform.

One focus of the Museum’s information architecture should therefore be the mechanism through which these experiences are created and shared. Completing a visit by following in-the-moment preferences creates interesting arcs of meaning. Documenting the journey provides entry and exit points for overlap and intersection with other personal and interpersonal arcs. It cultivates a cycle of exploration that embeds a sense of the collection into a person, invites a sense of community among the visitors, and reveals a commonality of interests that do not lie on presupposed paths. In essence, it will collectively represent the broadest spectrum of human interests and fulfill the mission of the Museum.

Proof of Concept Process

Write Notes
Form it Into a Coherent Thought
Sketch Ideas
Develop a proof of concept
Document the process for further development

Most Data Visualization is Bad, Some is Not so Bad

I’ve been asked to present some examples of what’s going on in viz to my group next week, and I’m thinking about pitching O’Reilly on a conference talk about comparing out of the box viz tools vs a roll your own solution. These two converging ideas lead me to do a bit of critique about what’s out there right now. Most of the viz I see I tend not to like for one reason or another. I’m more disappointed in myself than in other viz artists because I believe that there are good ways to present information but take few opportunities to produce examples. Anyway, here’s a sample of what I’ve been looking through to find something to present with some Monday morning quarterbacking. These are from the recent posts on the infosthetics.com blog.

Poor Visualization

The Fed’s Secret Liquidity Lifelines

This line chart is the most familiar and typical example of data visualization from applied math fields like finance. As information is added to the graph, a careful eye is needed to discriminate between what is relatively straightforward information. The volatility of the data injected into the similarity of color and compression of scale make this a hard graph to follow. There’s potential here to simplify the graph and perhaps take it into a more meaningful representation of when, for example, the value of a loan approached the value of the company.

311 Scale

This visualization uses an extremely poor scale and representation for its bar-chart-on-map views. I find it difficult to compare the lengths of bars at an angle. For example, the radiation scale requires a zoom to the highest level to see the bounds of the largest bar. A logarithmic scale might have been a better solution.

Health InfoScapes

Chiefly, I dislike the representation of overlapping text in this network diagram. It becomes very difficult to read smaller categories. Zooming in improves the readability in most cases but not all. It’s hard to find the right zoom level, and the center of attention does not change when changing categories. The transparency of the hover overlay also reduces the cleanliness of the design, particularly under a font with a light stroke.

Visualizing Seating Habits

This is a lot of design for some pretty homogenous data. What you might want to compare here is not the categories, but people within each category, and so color may be assigned to the wrong dimension. Also, starting the graph with everything turned on does not invite inquiry.

Beautiful But Terrible Population Pyramids

These are beautiful but extremely hard to tell how the data maps. A simple improvement in the key might make it a lot more interesting, or at least a way to follow a thread through interactivity.

Historical Snapshots of Birth Trends

The Barbarian Group usually puts out good work, but this “graph” of temperature or income represented as 3D extrusions of states is one of the worst examples of bar charts I’ve seen. The height scale is incomprehensible but somewhat mitigated by the double encoding in color. Certain smaller states are lost all together. This could have been done better in just color.

Strong Visualization

Borderline

I really like the concept of creating geographical divisions by grouping social connections. It’s clear to see the emerging provinces based on the colors chosen, even with the busyness of the arcs. In some ways, it’s the idea behind the visualization that is more compelling than the presentation, but the presentation itself clearly communicates the idea.

Flickr vs. Twitter

Geography emerging from geolocated data can be beautiful, and this artist takes it an extra step by using complimentary categories to provide simple context. The colors choices are also well executed.

Social Connections of Facebook

Another good example of geography emerging from geolocated data.

Clear Congress Project

This network visualization offers good filters and seems more readable than the GE diagram listed in the section above. On the downside, it requires a significant amount of screen real estate. It’s nice that the “Jitter” feature spreads apart the graph, but it should also change the axes to not lose the meaning of the data. Also brings in a good amount of current contextual information.

House Hunting All Day, Every Day

This is an extremely clean data dashboard with excellent choices in colors and simple interactivity.

Sexperience 1000

Clever ways of spicing up traditional charts through movement and transitions. Lots of good filters based on the data.

Nike+ Runs

Clean, glossy, organic, data driven movement.

Anatomy of a Mashup

Nice use of color and layout. Interesting conclusions from a passive reading of the data.

Cinemetrics
Stunning compression of widely varying characteristics into a single metric of a “fingerprint”.

Cheerio Maps

Even though this fails to satisfy some basic curiosity of scale, the map does give a high level view of what’s going on in the data. Best of all, it comes with an explanation about why the choices to set the characteristics were made.

Getting a Working OpenGL context in Windows 7 64 bit

I managed to mess up my OpenGL config files, so I had to start from scratch.

The commonly used OpenGL files are GLUT, Freeglut, GLEW, GLEE, etc. These can come in 32 or 64 bit flavors. To get them to work with Visual Studio 2010, I
- downloaded the 32bit version of the NVidia Graphics Computing SDK 4.0
- copied the .h files out of the /GL folder and put them in the Visual Studio GL folder
- copied the 32 bit .dll and .lib out and put them in the Windows/System32 folder
- copied the 64 bit .dll and .lib out and put them in the Windows/SysWOW64 folder
- downloaded the source code for GLUT 3.6.7
- opened the Visual Studio 6 project in Visual Studio 2010
- added an x64 configuration
- compiled the Release build
- pulled the glut32.dll out and put it in the Windows/SysWOW64 folder
- recompiled the Release build for 32 bit
- pulled the glut32.dll out and put it in the Windows/System32 folder
- pulled the glut32.lib out and put it in the Visual Studio lib folder

HPC Notes Day 2 Cont.

GPUs – gpus are single instruction, multiple data. If the data accesses are sparse, how do you vectorize onto SIMD?

CUDA is designed for manycore, wide SIMD parallelism, scalability. Provides thread abstraction to deal with SIMD. Synchronization and data sharing among small groups of threads.

Kernels are composed of many threads. All threads execute the same sequential program. Threads are grouped into thread blocks. Threads inside thread blocks can synchronize, communicate. Not guaranteed to synchronize with other thread blocks. All have unique IDs to query.

CUDA thread – own program counter, variables, processor state, no implication of scheduling.
CUDA thread block – data parallel task. all blocks stay at the same entry point, but each can execute any code they want. thread blocks must be independent tasks.

Thread parallelism – independent thread of execution
Data parallelism – access threads in a block, across blocks in a kernel
Task parallelism – different blocks are independent, independent kernels in separate streams

Threads within a block synchronize with barriers called syncthreads();
Thread blocks can coordinate to share a task. Any possible interleaving of blocks should be valid. Can run in any order, concurrently or sequentially. Allows scalability.

CUDA kernels are always void.. don’t return anything. Fills up a pointer on a buffer in device memory.

Each thread has its own private memory. Compiler takes care of local memory space for a stack. Per block shared memory is mapped on chip.

cudaMemcpy() moves data from the host memory to the device memory and back. cudaMalloc allocated memory on the device to memory allocated with malloc.

variables shared across the block
__shared__ int *begin, *end;

scrathpad memory
per block shared memory is used for communication between threads

__global__ – function callable from host
__device__ – function callable on device
__device__ – variable in device memory
__shared__ – in per-block shared memory

cudaGLMapBufferObject() – interoperability with OpenGL

OPENCL:
has a rich task parallelism model
different terminology, similar model to CUDA
AMD chips / OpenCL, have to parallelize data structures. CUDA/Nvidia do not.

Tips for Efficient CUDA Code
Need abundant, fine grained parallelism to make the NVidia GPU efficient.
Maximize on-chip work.
Minimize execution divergence.
Minimize memory divergence.
First priority: make things work.
Second priority: get performance.
You initiate a grid of thread blocks, hardware has a load balancer that takes threads from launch and schedule them and process until its done. Peak efficiency requires multiple thread blocks schedules on every SM. How many thread blocks can be simultaneously scheduled? Mapping depends on resources that each thread blocks require (register file limiting factor, possibly). Want to have about 20 registers per thread for Fermi in order to get full occupancy.

Can’t have synchronization inside divergent code. Must terminal logic branches to get them all doing the same thing before you can synchronize.

Performance depends on optimize utilizing memory. How do we tune memory? Memory is SIMD also. Sparse access wastes bandwidth. Unaligned access wastes bandwidth (depends on the cache line width). Optimal case for ‘coalescing’: dense accesses that are aligned. That’s what you want your data structure to be like.

Structure of Arrays is often higher performance that Array of Structs.

CUDA Thrust – C++ libraries inspired by the STL, includes reduce, sort, reduce_by_key, scan.. Includes OpenMP backend for multicore programming.

HPC Notes Day 2 cont

MPI.h is a library (message passing interface) which runs on supercomputers (with CUDA, for example).

MPI_Comm_rand( MPI_COMM_WORLD, &rank) which one am I
MPI_Comm_size(…) number of processes in the system

Group and context form a communicator. default communicator is MPI_COMM_WORLD. packs up datas a packet to send across the system and then have them taken apart over the system. loses its type information as it goes over the network.

Blocking send
MPI_SEND( start, count, datatype, dest, tag, comm )
When the function returns from the send operation, we know that we can reuse that buffer without corrupting the message (it has been copied into another place). We don’t know it has necessarily been received.

Collective operations:
get all the processors together than own a piece of an array and perform an operation (reduce to a sum, min, max, prod, etc).

Sources of deadlocks:
send a large message from process 0 to process 1 – if there is insufficient storage at the destination. 0 copy synchronous models (copying directly to the destination with no buffer) can cause this problem. You have to set the buffer size in order to make sure the application doesn’t deadlock, while balancing it with the memory constraints of the system.

Non blocking operations:
MPI_Request
MPI_Status
MPI_Isend
MPI_Irecv
MPI_Wait

figuring out whether the messages have gone out to reuse the buffers. MPI_Wait can be really slow – if things are not load balanced.

can wait for a global synchronization with MPI_Barrier

race conditions can arise from not checking the buffer.

MPI doesn’t match gpus, multicore processors, etc very well. It’s made for a mid-90s architecture. OpenMP for shared memory. CUDA for GPUs (or maybe OpenCL). MPI uses too many copies on many cores and demands a huge memory footprint.

PGAS languages give message passing and shared memory in the same implementation. (http://upc.lbl.gov). Unified Parallel C (UPC). Parallel extension of ANSI C.

Single program multiple data style – fixed number of threads, runs to the end of execution. any serial c program can be a parallel program (each processor runs its own copy of the program). Any thread can write to a shared variable – expensive. UPC has locks, but they are slow. Shared arrays.

One sided vs. two sided communication:
a one sided message you send the address instead of the message id to directly write into memory without getting any information back from the host.

Notes on High Performance Computing

Long version of the parallel computing course.
www.cs.berkeley.edu/~demmel/cs267_Spr11

Python for science – AY250
Optimization Models in Engineering – EE127
Software Engineering for SCientific Computing CS194/294

Parallel is always forced to be at the lowest level all the time. Cars with multiprocessors. Manycore chips.

Amdahl’s law – only speed up by the fraction of what is being sped up. 50% of the code == speedup factor of 2 at most.

Pipelining parallelism – get all stages going at the same time (doing the laundry: dryer while washer is going on second load).

Hazards prevent the next instruction from executing during its designated clock cycle.
- structural, hardware isn’t ready
- data, data isn’t ready
- control, need to make a decision, but don’t know what to do

Software architects get rid of hazards by stalling the process. Out of order execution for instructions with no dependencies. Make sure the results appear sequentially. Branch prediction and value prediction – guesses to lead the process that can be thrown out later. But can always solve a hazard by waiting.. if you’re not correct guessing, you’re wasting time and power. Ridiculous power consumption levels off CPU clock times. Accuracy of guesses decreases with the number of instructions in the pipeline. Moore’s law holds because of multicore processors. Parallelism must be taken up in software. (Uniprocessor parallelism though pipelining has run out of steam because of heat/power).

Very long instruction word (VLIW) – figured out in the compiler. Compilers guarantee no data hazards. Keeps the chip sections idle.

Vector code: Uses vector registers to move more through.

Single instruction, multiple data (SIMD): Image filters. GPUs have SIMD architecture.

PThreads – Threads for Portable Operating System Interface for UNIX (POSIX)
Thread level parallelism (TLP) – divide app into multiple threads.

Caches are used to provide spatial and temporal locality for speed. Can’t ignore the cache when thinking about an algorithm because cache misses bring the cpu to a halt. Techniques for improving cache performance are blocking and tiling. Or you can deal with the complexity through experiments – variants of the algorithm with different block sizes that figures out the best size for the architecture.

Explicitly parallel computer architecture depends on the communication between the processors. Software architect must manage the communication (rather than letting it be done under the hood in hardware). What data is private vs. shared? How is it accessed and communicated? How is it synchronized?

Shared Memory Programming Model. Threads communicate implicitly by writing and reading shared variables. Leads to the need for synchronization because you don’t know when something is finished. Data race occurs when two processors or two threads access the same variable and at least one does a write. Doesn’t give the right computation. Make instruction an atomic operation by putting a lock around it. Locks can lead to deadlocks.

Barrier synchronization is waiting for everyone to finish before moving on. Fine grained locking is sometimes faster than barriers.

Message passing – no shared pot of memory, every execution unit has its own memory. Only way to share is to send messages. De facto standard for parallel processing. The arrival of a message is a synchronization event. Overhead of messaging varies based on the support in the architecture.

Time Estimation for Cleaning Requestors

Some general indications of time for cleaning the master list:

Cleaning the first 1763 rows (All requestors beginning with the Letter A)
4 hours of review and processing
273 total edits
668 variations of org names reduced to 416 org names (62% compression)
- Foundations and Chapters and Medical Centers were folded into one organization / health system
- Capitalization errors were corrected
- Business indications such as “Inc.” were removed
- A dozen or so organizations were looked up to verify existence / correct name

Assuming this is a random sample (it’s not) and these numbers hold,
Approx. 24 working hours to edit the entire list
1628 total edits
5,219 variations of org names will be reduced to 3,236 final requestors

Suggestions for Next Year’s Eyeo

Eyeo ended on a higher note than I had expected. The last session of the day surfaced the issues that I pondered in my previous blog: mostly that the storytelling that results from data visualization is inherently built on political decisions that must be made to determine the aggregation at which information takes shape and becomes convincingly actionable, often towards goals that are determined by considerations external to the data itself.

The closing parties put me in the mood to marginally expand upon the social network I had coming in to the conference and be so bold as to send out some links to my own work. I even spent some time parsing my daytime-job’s work, not for the requirement of it but for the love.

I feel like there are some changes that could be made for next years conference to improve the experience overall.

Some stratospherication should take place, wherein there are introductory, technological introductions made to Arduino and Processing through workshops held in compliment with panels composed of marquee names positioned around points of debate. We need nuanced consideration of the deeper issues present for those experienced in information architecture.

Also, there’s two, perhaps three, distinct tracts of information being presented.. furthering the pursuit of information consumption as opposed to consolidating technology into forms of play. There’s some crossover there, but they can also be explicit.

The most important change I think the organizers could make is to invite a professional data scientist – someone who is explicitly not in the game for visualization – to underline how important it is that designers partner with statisticians to reach valid, reproducible, documented conclusions that have a basis in verifiable science.

I would leave the long presentations of bodies of work to the attendees rather than the invited speakers. We have all seen the work of Aaron Koblin. The “Show Your Shit” session hastily put together at the end of the conference had more interest in its diversity and value in connecting the group than most others I sat in on. No debate is fostered when the audience is left to simply peruse the portfolios of speaking artists. No one is going to critique in that situation. And Eyeo could use more critique, for certain.

I would also suggest that the organizers look beyond the marquee names to the work of the new generation. Kyle McDonald has made a fantastic career for himself. Others who are his peers remain unknown but do inspiring work. These are the ones we should discover at the conference. Watching the thesis presentations of the UXD schools would be a good place to start.

Finally, a job board, if you please. Give us a way to reorganize ourselves out of the places in which we’ve might have stagnated into new ventures built on the relationships of the conference.

So say we all.

Eyeo So Far

I haven’t had many coherent thoughts on Eyeo Festival since I’ve been here, but after listening to the thoughts of my friends for a few days and spending 50 minutes running 5 miles thinking about it, I have what may be the outline of a coherent thought.

There seems to be two threads of conversations going on: visualization for the sake of play and visualization for the sake of decision making. In what limited work I’ve done, I tend to think more about the second, but Eyeo is, at least temporarily, fostering the consideration that the first may be a more noble pursuit.

Wes Grubbs underlined something in his talk that I learned as a data analyst years ago: information gained from data analysis is essentially only useful as far as you can convince someone of the story you’re trying to tell. Most data can be parsed and aggregated to support any decision, for or against, any particular action. Our ability to clarify increasingly large amounts of data (or shape it into a compelling story) does not seem to further reveal underlying patterns that override our tendency as politicians to see what we want to see, talk that into something actionable, and ignore the rest. (This was most clearly evidenced when I was calculating the unemployment rates in Philadelphia. 4% for the city, 30% in particular neighborhoods – which do you think is talked about most? Do you even expect that’s accurate?) Even Amanda Cox leaves the final decision up to “whoever is right.” Reanimated data mumbles with a ventriloquist’s voice.

While Moritz Stefaner and Jer Thorpe and Amanda Cox have convincingly written tools which allow us to get an idea of what we want to say, there is a prevailing (and dangerous) shock and awe in the crowd, and their methods may empower those who are careless with the toolset to pass off an embellished presentation as truth rather than opinion. Grubbs knowingly strays into this territory by adding in the numbers of protestors outside the Wisconsin capitol to his data set of email responses to the protest in question. Basic statistics might suggest this is a perversion of the conclusion, but he is mostly unapologetic.

The real overarching conclusion of this section of the conference is that even the marquee names in the business in this area don’t have a very precise idea of what is able to be accomplished with this so-called science. Most of the advanced visualizations and infographics are experiments that do not convincingly improve the reading and interpretation of data sets for an expert, thought in some cases they may prettify them enough to be palatable to the layman (who arguably has no business adopting gross politically-guided conclusions beyond the simple goal of educating the masses to the influence of selectively choosing data for the purpose of story telling and economic manipulation). Stefaner’s visualization of OECD data is an excellent example of data so vague as to be meaningless embedded in a compelling-enough-to-be-misleading presentation.

On the other side of the aisle we have the OpenFrameworks and Local Projects crews showing off their playful consolidation of technologies into limited but effective applications and the toolmakers such as Reas and Fry giving the rest of us some ground to stand on as well as leading us along by example. One of the highlights of the conference so far has been Reas’ assumption of Sol LeWitt’s mantle. In that at least, we do not have many questions left unanswered about the implications of the work and could leave him for another decade to develop his own art in peace. He serves as a better inspiration, ultimately, because he doesn’t presume to pass his work off as anything more than what it is.

And so we come to the real purpose of Eyeo as echoed in nearly every conversation I’ve absorbed here: Eyeo is an opportunity to meet your heroes, size them up, and feel like you stand among them as peers. To be sure, Golan Levin gives a fascinating show and is extending his work into its most profound expressions (on the MOON for god’s sake).. but to be honest, I’ve found more ambitious and more effective attempts at pushing the state of the art in the thesis presentations of friends like Eric Mika and Patrick Hebron (see the Überbeamer, if you don’t believe me). I’ve had, at one point or another, most of the thoughts I’ve heard come out of the mouths of the glitterati at the conference in my own deliberations of my own work, and my peers agree that the celebrity culture explicitly set up in the opening speech of the conference seems to be both the reason to be and the downfall of the experience. I, for one, will enjoy anonymity for as long as everyone will willfully ignore me.

I was floored to learn that Jared Tarbell and I have been working on two sides of the same question a month or two ago at SVA. Here, I was pleased to learn that Casey Raes is codifying questions that leave me to ask others. Beyond that, I feel like I’m leaving with a reminder that my own espousal of and pursuit of the benefits of data visualization might end up being less interesting that just designing the abstractions of gestures I postulated in my thesis. But for now, it pays the bills.