Cool Space Things
Cool Space Things is a project my friend Jonathan Frees and I completed while we were in the computer science program at the University of Alabama at Birmingham, for our data visualization class.
This project was the term project of the class; initially, we didn’t have a specific idea in mind of what to do, other than having something space-related as the topic. However, we happened on this excellent website and instantly knew we had to visualize all this awesome data.
Unfortunately, n2yo has little in the way of a public API for their data. We had to build a scraper before we could get started in earnest on the visualization. This had some funny consequences of its own, because the data as formatted on n2yo is irregular and inconsistent.
The graph itself is radial, mapping satellite height (the apogee or perigee depending on selection) on the Y axis and date launched on the X axis.
Fun discoveries
Starlink Clusters!
During the presentation of an early version of our project, one student asked about whether the Starlink satellites were on the visualization. We scrolled up to 2021, and found that all the Starlink satellites were there, bunched up together since they are
Anti-satellite missile test
During the same presentation, we spotted a large cluster of satellite debris belonging to the Fengyun 1C Chinese weather satellite. As it turns out, China tested an anti-satellite missile on this same satellite in 2007. Since our graph has launch date on the X axis, large clusters of satellites stick out because it’s otherwise rare for a large number of man-made objects to share a launch date.
Fun bugs
1957 doesn’t exist
For every charted year there is at least one object remaining in orbit that NORAD tracks and assigns an ID to. Except 1957. There were objects launched in 1957, but since none remained in orbit, the logic for creating the graph was broken: there was neither a least nor greatest apogee or perigee among the zero objects in orbit.
Former orbiting objects all fell in the Atlantic Ocean
Before we created logic for properly handling objects which were no longer in orbit, these object would render at 0,0 on the graph. This placed them in an hilarious stack in the Atlantic ocean in the visualization.
How many datetimes?
Javascript is too lenient with its typing behavior at times. Johnny and I ran
into this more than a few times, but the instance with the funniest consequences
looked like this: every time we would scroll the year bar, our webapp would slow
to a crawl, then max out your RAM. What?!
As it turns out, we were errantly summing a string to an integer. Javascript
implicitly casts this operation to be a string concatenation. Every time we
would alter the year slider, we would create about ten times more datetime
objects than before. Oops.
Tooltip stacking
When I initially implemented the tooltip behavior for hovered objects, I was
lazily pretty-printing the original JSON into the tooltip. After I began
formatting the JSON, I made some aesthetic choices along the way to make the
tooltip more accessible and useful. Some of this involved altering the tooltip
at render time, which was a terrible decision. After all, This is SATELLITE
DEBRISThis is SATELLITE DEBRISThis is SATELLITE DEBRISThis is SATELLITE
DEBRISThis is SATELLITE DEBRISThis is SATELLITE DEBRIS
. The fix was to alter
the tooltips at initialization, not render; after we turned the assignment in, I
made another change to calculate most of the tooltip data before it even goes to
the webapp to save on init time.