Archive for Senior Project – VISTAS Data Visualization

A Post about a Poster

Just a quick note to say how proud I am of the VISTAS project team for entering a poster submission to IEEE VIS!  Fingers crossed that we get selected, it is a fantastic opportunity for some exposure.

Microsoft “eScience in the Cloud” 2014

I had the honor to represent the project at Microsoft’s “eScience in the Cloud” workshop.  This was a small conference oriented towards domain scientists hoping to utilize cloud data storage & processing in their research projects, held on the Microsoft campus.

Building 99 (Microsoft Research)

Building 99 (Microsoft Research)

The main themes of the conference were:

  • Impacts of the cloud on research communities
  • Streaming environmental data and urban science
  • Perspectives on data science
  • The leading edge of cloud design
  • Deriving information from data
  • Data analytics and simulation

The first day of the workshop was an Azure training session.  My fellow students and I were led through a series of trainings on the various features of Azure.  Microsoft did a great job on tailoring the training towards researchers, with several examples revolving around R, MatLab, and iPython Notebook.

Not to come across as too much of a Microsoft fanboy, but I have to say, Azure is pretty awesome.  The ability to spin up a virtual server or cluster of your choice on-demand unlocks a lot of potential for data scientists.  Need a Hadoop cluster for a massive mapreduce job?  You can have it up and running in minutes, spin up a website to display your findings, and store all your data in a CKAN data repository in the cloud for reference by collaborators.  All through Azure and all very quickly. It’s pretty amazing tech.

The second and third day consisted of a series of talks by Microsoft personnel as well as domain scientists & researchers.  Too much was covered to really go into detail here.  I particularly enjoyed some of the talks in the “Leading Edge of the Cloud” segment, which covered some of the techniques Microsoft is doing to improve cloud performance (i.e. micro server farms called “cloudlets” geographically located in close proximity to your research facility, as well as software networking approaches for better bandwidth within a data center).  I also really enjoyed a talk by Gabriel Antoniu entitled “Scalable Data-Intensive Processing for Science on Azure Clouds: A-Brain and Z-CloudFlow”, covering his work tackling challenges so large in processing demand that they require collaboration of multiple geographically-diverse data centers.

All in all, it was a great workshop and I’m glad to have had the opportunity to see some cutting edge work by fellow researchers!

UW CRPE Talk with Hadi Partovi

This week I had the chance to attend a talk by Hadi Partovi of Code.Org.  The topic of computer science education, particularly as it relates to STEM and domain scientists, is one that is near and dear to VISTAS’ heart.  The live stream of the event can be viewed at http://www.crpe.org/events/washington-education-innovation-forum

And here is Code.Org’s original promotional video.

The talk opened with Ed Lazowska, chair of Computer Science at UW.  He spoke about how every field in STEM is becoming a computational field, but how there is an enormous work force gap in CompSci, including a large diversity gap.  He cited a study that found 71% of ALL new STEM jobs in the next decade will be in computing.  Biologists, chemists, physicists, you name it– everyone in Science and Engineering will need computational skills to be competitive in their field.

However, there is a BIG problem– only 10% of High Schools in the United States currently offer ANY computer science curriculum.  Whereas chemistry, biology, mathematics and physics are required curriculum for high schools, Computer Science is largely ignored.

The original goal of “Hour of Code” was to get every school to, at least for one hour per year, to introduce students to programming concepts and computational thinking.  Code.Org supplies teachers with training materials and interactive exercises.  “Hour of Code” has been EXTREMELY successful, and Code.Org is now moving on to create captivating CompSci educational material across every single grade, K-12.

The talk then opened up into a panel with Hadi Partovi, founder of Code.Org, and WA State Representative Reuven Carlyle.  Also on the panel were two young high school girls who had gotten hooked on programming via Code.Org — they were the comic relief on the panel, as well as the voice of the students.

I won’t recite the panel’s discussion verbatim, but here are some bullet points:

  • In Washington State, there are currently 27 open jobs in Computer Science per Computer Science graduate.
  • 70% of STEM jobs in the next decade will be in computing; but only 2% of all STEM students are Computer Scientists.
  • “Hour of Code” had 20 million students within a week of launch.
  • 1 in 3 students in the US have now participated in “Hour of Code”.
  • Hour of Code continues to get about 15,000 students a week.
  • There are now approximately 30 school districts across the US directly partnering with Code.Org to provide computer science education.
  • 99% of all teachers who use Code.Org with their students say they’ll use it again next year.  Yes, 99%.
  • Many states are now changing policies to allow credit for CS classes.
  • Texas just ruled EVERY High School in Texas must now teach Computer Science, Just 49 more states to go…

There were also some good questions from the audience.  A teacher expressed, with some frustration, that school teachers already have VERY full plates– how can they squeeze in Computer Science as well?

Hadi’s advice — use Computer Science to teach the other stuff!  CS can help teach people math, English, etc.  For example, the Pythagorean Theorem is funner to learn via programming a basketball game than in the traditional way.

Overall it was a really interesting panel.  I definitely wish “Hour of Code” had been around when I was in High School, and I think it’s wild success is definitely getting people thinking more about the Computer Science education gap.

Project Status & Timeline

VISTAS User Interface Project

For my project for the Student Originated Software program at The Evergreen State College, I have joined a small development team working on VISTAS, a 3-D scientific data visualization tool.  This project is taking place under the mentorship of Judy Cushing and is funded by the National Science Foundation.

My role in the project is to focus on learning user interface design & programming with the goal of enhancing the usability of the program.  I am also actively learning about modern source control methods as well as obtaining practice at collaborative development.  In addition to feature implementation, I am fulfilling additional developer responsibilities within the VISTAS team, including attending weekly online meetings and contributing to code reviews, bug fixes, and collaborative readings of select research papers.

Timeline of Feature Implementation

Timeline as of 3/12/14

Successfully Implemented Features

  • Ability to zoom in & out using the MouseWheel.
  • Altered camera panning behavior to be more intuitive.
  • Added mouse-hover tooltips to all appropriate static UI elements.
  • Overhauled the icon image resources to be more intuitive and visually appealing.
  • Created a new VISTAS icon.
  • Added icons to the title bars of plugins window, spatial animator, and main program.
  • Wrote methods to load bitmap and icon resources.
  • Fixed a bug related to scene counting.

TO-DO List

Short term:

  • Fix the “Add” buttons on the Data & Visualizations tabs. Right-clicking is not intuitive to a new user. This could be as simple as a small “+” or “Add” button next to Project Visualizations/Project Data.
  • Tooltips/mouse hover context information need to be added to the Data and Visualization panel items.
  • Add camera modes to viewer panels, with mouseover hotkey information.
  • Update wx libraries to 3.0, to allow for toggle buttons.
  • Add default string to scene selection dropdown.

Medium term:

  • Add “Help” section with integrated quick start guide.
  • Revamp the Tool Bar. Re-evaluate overall layout, icon choices and functionalities present.
  • Revamp the Menu Bar. Right now there is a bare minimum of functionality here, and several existing buttons don’t work.
  • “About” as its own item, and not nested under File — to be discussed.

Longer Term:

  • Adding/removing Viewers could perhaps be done in a more intuitive way.
  • Bundle a small sample data set with VISTAS so that a new user can experiment with the program without committing to downloading a large data set & going through all the steps of setting up the visualization. Ideally this would come in the form of a sample project include with VISTAS, so the ability to Save & Open projects needs to be implemented first.
  • Ability to take a screenshot of the viewer window, either via right-click or perhaps a button in the toolbar. Ability to copy screengrabs to clipboard for easy insertion into documents/emails/whatever.
  • Optional camera controls on the viewer window might be nice. At least a zoom control– Shift+mouse zooming is not always intuitive nor precise for fine camera movements.
  • Ability to click on colors in Legend and change them.

Project-Related Links

Bibliography

Previous Posts

Week 9 – Icon Overhaul

I submitted my first phase of graphical UI polish to the VISTAS codebase.  This is an initial overhaul of icon choices.  It may seem a trivial thing to be spending much time on, but icons are actually very important cues to your users.  Subtle enhancements in iconography and color choice can greatly improve how intuitive an application feels to a novice user.  Additionally, better-looking icons can make a program more of a visual joy to use.

VISTAS has had a very prototype look to it thus far.  Behold, the application as I first came to it:

VISTAS with old icons

The VISTAS UI, before my changes.

There are some eyesores here.  The icon on the title bar is just a default filler icon.  The icons on the toolbar are difficult to parse, and some are not even fully relevant to what they do– for example, the camera icon takes you to the “Create Flythrough” window, and the lock icon is really to sync all of the viewer windows.  Futhermore, the overall lack of color makes it hard to distinguish some icons from their neighbors… i.e. the play button on the animation controls on the bottom.

In my overhaul, I not only selected new representations but also introduced more color, so that neighboring icons stand apart from each other.  The “Create Flythrough” icon is now just a picture of a plane, and “Sync Viewers” is properly a picture of a split screen with sync arrows between them, mirroring what it actually does in the application.  There are a lot of other little graphical embellishments throughout the program, but this main program window shot gives you a good idea.  Note that my blog substantially scales down screenshots, but hope this gives you a good sense of the style of my update:

Vistas with new icons

The VISTAS UI, after my changes.

Note that I have not yet addressed icon placement; only image choice.  I still plan to overhaul the menu bar and icon placement in a later update.

While I was at it, I updated the main program icon.  The old icon was functional, but had pixellation around the edges and was just generally not too easy on the eyes.  So, I created a more colorful version in the spirit of the original.  Here they are, sitting side-by-side on my desktop:

Old VISTAS iconNew VISTAS icon

Finally, I also created a new pair of methods to ease loading icons and bitmaps from file.  Previously, when creating a new control with a graphical element, you had to embed a big long resource string in your function call and pass it the type of the image.  Now, with my GetBitmapFromImage() method, you can just call gApp->GetBitmapFromImage(“legend.png”) and it’ll handle the rest.  Here’s the source code; it’s short, but sweet.

Source code for "GetBitmapFromImage()"

A pair of methods to load external resources.

Still being a rookie to the project and source control, it took me a lot of revisions to get an update of this size pushed through and approved by the other devs… but I’m already feeling a lot more excited to use VISTAS!

Week 8 – Tooling In Tooltips

This week, I nabbed a low-hanging (but juicy!) fruit.  I implemented tooltips for all of the static UI elements…

Tooltips are just one of those little things that you tend to take for granted.  The ability to hover a mouse cursor over a UI element and get a clue as to it’s functionality does is one of the prime ways that users learn your program.  They learn not only what that specific element does; by considering it’s placement context, the meaning of nearby elements may be inferred.

In wxWidgets, adding a mouse hover tooltip is as simple as calling the SetToolTip() method on the control.  Certain control types allow you to just place the tooltip text inline in the constructor.

Sample Tooltip code

Source code for a sample tooltip…

And here is the result:

Sample wx code for a Tooltip

The tooltip in action!

Unfortunately, dynamic tooltips are going to require a lot more work.  Eventually I’d like to add dynamic tooltips to the items in the Data & Visualization panes, which would provide various kinds of information depending on what kind of element the mouse is hovering over, but this is going to have to come later.

Week 7 – VISTAS Meeting At OSU

Last weekend, I drove down to Corvallis to meet up with the VISTAS project team for a set of meetings with our scientific collaborators.  I had the pleasure of driving an official State of Washington vehicle, which made me feel like a Senator or something.

We managed to cover a lot of ground in the span of two days worth of meetings.  Of primary interest to my UI-enhancement project was a user session we ran with Bob McKane from the EPA.  Bob is a major collaborator on the project, and a big part of what the application does is support creating visualizations for a hydrology model he helped develop called VELMA.  Observing him using the application gave me a good sense of the sticking points & hurdles to a casual VISTAS user.  Specifically, there are two main sticking points:

  • Correctly loading data files is tricky.
  • Creating a visualization requires too many steps.

We also had a consultation session with Dr. Margaret Burnett from OSU.  Margaret gave us some great insights on user perspective.  One point she brought up that I found particularly interesting was the notion of “information foraging.”  This is the theory that humans evolved to have built-in “foraging” behavior to enable sifting through quantities of information in order to find the cues most likely to lead to food.  You can think of a user of an application as being a predator, searching for prey in the form of desirable usage outcomes. So when a user looks at a new application interface or website they’ve never visited before, where is the eye drawn?  What stands out to the user as being most likely to lead them to their prey?  Right now, in VISTAS, it is difficult to find the prey without preexisting knowledge, and I hope to change this.

Week 6 – Zooming Mice

I just submitted my very first Pull Request on bitbucket, for my very first new feature — mousewheel zoom!  Check it out:

My First PR

My very first pull request! Hope it gets approved…

Previously, to zoom in in a scene, you had to hold down the SHIFT key and then move the camera in or out.  This is not the most intuitive thing to a user!  Part of what I want to revamp in the program is the intuitiveness of the camera controls, so I implemented a MouseWheel event handler which zooms the camera in or out depending on whether the user rolls the mousewheel forwards or backwards.  This gives users with the right hardware a much easier way to control zooming.

It’s really a simple piece of code, but it’s a start, and signifies that I’m beginning to understand how to successfully add new functionality to VISTAS.

View the source code:

Week 5 – Cupid the Time Thief

I worked on some wxWidgets tutorials this week in preparation for launching into actual development.  Unfortunately, my job picked up dramatically due to Valentine’s Day– thanks, Cupid!– so I didn’t get much else done this week.

I also acquired a resource for my forays into OpenGL: Interactive Computer Graphics: A Top-Down Approach with Shader-Based OpenGL(r), Sixth Edition (Edward Angel. Dave Shreiner).  I will begin working my way through this book next quarter, and will instead focus strictly on UI this quarter.

Week 4 – The Best Laid Plans…

Just a few small updates this week…

The team had a fantastic in-person set of meetings arranged for last weekend.  The plan was to meet with our scientific collaborators, as well as hold a consultation session with  Margaret Burnett, an OSU professor & UI expert, about the direction of VISTAS’ UI work.  Unfortunately at the last minute a snowstorm hit Corvallis, so the retreat was cancelled.

The VISTAS reading group read and discussed a really interesting paper called Storytelling: The Next Step for Visualization (Robert Kosara).  The author discusses the use of visualization imagery to compose an overall story to stakeholders, as well as the role of visualization in exploration of data relations.  Oftentimes the quality of a visualization is judged only atomically, so it was interesting to get a more holistic view of presentations and how they can compose visualizations to present an argument.

I sent the development team my rough roadmap of UI feature implementation, and got some really good feedback from the lead developer.  A couple of things that I thought were low-hanging fruit really aren’t, so I’m having to revise a bit.

Not much else going on… just need to buckle down and code!