Tyler A. Green

In Transit

Author: Tyler Green (page 1 of 3)

Hello Transportation Techies!

Last Wednesday, I rode the Amtrak Northeast Regional to our nation’s capital to attend my first Transportation Techies meetup! Michael had been urging me to attend since we first met at TransportationCamp Colorado 2016. Now that I’m on the east coast, it was an easy trip!

Michael always puts on an incredible event and Metro Hack Night VII was no exception! We had a great line-up and turnout. I presented on how we can use graph theory to study transit networks, specifically WMATA Metrorail with and without the Purple line.

You can browse my slides below, or download the PDF deck.

 

All the presenters blew me away with their excellent, excellent projects. The DC transit developer community is special and I loved getting to experience it for one night. You can read about the all projects and presenters in this write-up from Mobility Lab.

If you live in the DC region (or anywhere along the Northeast Corridor), I encourage you to drop in for the next gathering of the Transportation Techies!

All’s Fare? Diving into MTA Fares

A few weeks ago, I was playing around comparing the MTA fares figures against annual inflation. The results initially seemed like some solid clickbait: “MTA Fares Rise Twice As Fast As Inflation.” I showed one of my coworkers the graph and his reaction was interesting, something along the lines of, “Oh, so now they’re just raking in the money?” Well, not quite. Transit fare increases are a complicated topic and his misunderstanding is 100% justified. I decided to delve deeper into the topic.

At this point, I’m going to pause and share the link to my notes and data for this post. They contain all my sources, accessed mostly via the TimesMachine, sorted by decade and which fare increase they correspond to. Since the IRT subway opened in 1904, the subway fare has increased the base subway fare 17 times. The document resembles a 10-car train rumbling by in that it seems to never end. I try to capture the highlights here!

What was the original fare?

When New York City’s first subway opened, the Interborough Rapid Transit system in 1904, the fare was 5 cents. In spectacular fashion, this lasted all the way until 1948, when Mayor William O’Dwyer increased the fare to 10 cents (a 100% increase!) because the artificially low subway fare was beginning to hurt the city’s schools and hospitals. Doubling the fare meant less city subsidy was required to keep the now-city-owned transit system running. Prior to 1940, the IRT and BMT subways (today’s numbered and L, J, M, Z, N, Q, R, and W lines) were privately owned and operated, so the argument against increasing the fare was that it would hurt working class people and line the pockets of private investors of the rail companies. (These investors were referred to as owners of “traction securities,” which makes me chuckle.)

Why do fares increase?

The simplest explanation for fares increases is to close a budget deficit. The New York state legislature requires that the MTA run a balanced operational budget. However, fares do not cover the cost of providing transit service in New York City (or anywhere in the United States for that matter). In 1982, fares for MTA’s modes (subway, bus, and commuter rail) covered 55% of its operational budget, and this is high by US standards. Since 1968, when the MTA consumed Robert Moses’ Triborough Bridge Authority*, cross-subsidies from toll revenues have also supported the city’s transit. The rest is made up through a combination of federal, state, and local subsidies, the amounts of which have varied greatly throughout the decades. That subject is worthy of many, many posts on its own, and is the reason why the fare price versus inflation graph is not the complete story.

For example, the 1995 fare increase from $1.25 to $1.50 was the first 20% rise since 1984. In those 11 years, there had been 3 fare increases, but their effects had been limited by additional contributions from the Mayor or Governor. When costs of providing service rise and aid stays constant, the fares must go up.

What started the rises?

As New Yorkers today are used to biannual fare increases, it’s hard to imagine a time where the fare had literally never been increased, and had stayed the same for 44 years. Several things were changing in the years following WWII: while the rise of the automobile is often cited and was certainly a huge contributor to reduced transit ridership, the 40-hour work week hit the Transit Authority’s** budget hard. If your workers can only work 40 hours, you are either paying more overtime, or benefits to more workers. A five-day work week also meant a less reliable ridership stream on day six.

Who sets the fare?

Today, the subway and bus fare is set by the board of the MTA. However, the reality is often more complicated. The New York Times explains the political nature of the fare well (farewell…hehe) in 1989, “Technically, the M.T.A. can approve fare increases without the agreement of lawmakers. The Legislature, however, controls the authority’s huge capital plans, giving it strong influence.”

Unsurprisingly, the fare has been featured in many political debates. John Hylan famously declared the nickel fare “the cornerstone of the edifice which we call New York City” and a “property right” during his 1921 re-election campaign. More recently, after state legislatives retreated from a $1.25 fare to only $1.15 in 1990 (which was formed through a 1987 agreement with the unions, Governor, and Legislature), many suspected it was a political stunt.

The original 5 cent fare was set by the Rapid Transit Acts of 1891 and 1894, both pieces of state legislation. From 1924 until 1953, fare increases were the responsibility of the New York City Board of Transportation, from 1953 to 1966 the New York City Transit Authority, from 1966 to 1968 the Metropolitan Commuter Transportation Authority, and since 1968, the Metropolitan Transportation Authority. Each of these organizations has their own complex history, but the takeaway should be that the fare was controlled by the city until 1953, but since then has fallen under a public authority with no direct political control.

Every increase is a story

While subway and bus fares are the same today, this was not always true. In 1948, when the subway fare increased to 10 cents, the “surface” fare was 7 cents. A transfer fare was sold for 12 cents, provided both a subway ride and surface (bus or streetcar) ride. Another technical aspect of the fare is today’s “bonus,” or the amount of “free” cash value added to a MetroCard when purchasing a value-based card (as opposed to time-based). Today, the bonus is 5%, but was previously 11%, 5%, 7%, and 8%, all in the last decade. This, combined with the difference in relative increases in the price of passes (day, week, or month), is one of the levers that the MTA controls when setting fares today. Until MTA adopts farecapping, all of these parameters will continue to be debated by the lawmakers representing the rich and poor, upstate and downstate, urban and suburban riders of the transit system.

Since the 1970s, two fare increases have been accompanied by increased state support through new taxes. The largest of these came in 1981, at the insistence of then-chairman Richard Ravitch. When the MTA board voted to increase fares from 60 cents to 75 cents on July 2, 1981, they also approved a rise from 75 cents to $1.00 to take effect two weeks later unless more state aid was provided. Ravitch describes in his 2012 book “So Much To Do” how this plan was devised to strongly encourage the state legislature to pass a tax package to provide operational assistance to the MTA, which they did on July 10, nullifying the second increase for the time being. This tax package is still in effect today.

The Great Recession created another “interesting” fare increase climate in 2009. MTA’s state funding is largely through dedicated tax funds which are susceptible to fluctuations in the larger economy. A commission led by Richard Ravitch recommended a MTA-region payroll tax and tolls on the East River and Harlem River bridges to shore up the MTA’s budget deficit. The Payroll Mobility tax was created, and vehicle registration and parking fees were increased in March 2009. This was all to limit the fare increase from $2 to $2.25, after increases to $2.50 or even $3 were considered. Unfortunately, the Z and W routes were eliminated (though the W was brought back in 2016) to complete the balancing of the budget.

A major logistical aspect of fare increases changed 20 years ago. The 1997 introduction of MetroCard meant that riders no longer had to exchange tokens. On the day that a fare increase took effect, the morning rush hour was often expected to be an hour longer due to long lines of token exchanges. The Transit Authority also didn’t need to order millions of new tokens, or keep around old tokens to use at the next increase. (MTA did not adopt the USPS-like idea of Forever Tokens.) MetroCard also allowed for time-based passes. The best approximation tokens could achieve to this was bulk discounts, which is the same idea as today’s cash value “bonus” discussed above.

Other Transit Authority expenses that drive each increase are labor costs and debt service. In the 10 years prior to 1953, the Transit Authority’s payroll tripled. As the MTA has taken on more debt since the introduction of the first capital program in 1982, more of the operational budget is consumed by servicing this debt. Like many of the thornier issues casually mentioned in this post, labor costs and debt will be the topic of many, manymany future posts.

What’s next?

The MTA board has committed to biennial fare increases as part of the 2009 recovery package. While 2017 did not have a base fare increase, the weekly and monthly fares went up in January of this year, as they did in late-2010. A new fare payment system is on the horizon***, and MetroCard is scheduled to be phased out by 2022.

Besides the coming technological upgrade to the fares, MTA financials continue to be at the front of the news. Governor Cuomo recently announced support for congestion pricing and, a week later, Mayor de Blasio claimed he ‘does not believe‘ in it. The Mayor also supports reduced fares for certain groups, but only if it is funded through a millionaires tax. The present discussion is a valuable one, where we consider which groups in our society are paying for our transportation system (yes, even the road users benefit from a better subway and bus system). Much of the state support received by the MTA originates in the city as it is paid by its downstate constituency through regional sales and payroll taxes. Strong arguments can be made for more direct state subsidy, those not tied to dedicated tax funds paid primarily by residents of the city. Regardless, we’ll likely be paying a bit more in 2019 to ride the subway, the system which is the brunt of many jokes and New Yorker covers, but which supports life in this incredible city day in and day out. Let’s make sure we take care of it.

* The Triborough Bridge Authority is now MTA Bridges and Tunnels.

** The Times will often use the name “Transit Authority” throughout the years as a short had for the “New York City Transit Authority.” Pre-MTA, New York City Transit Authority was the system’s operator. Today, NYCTA is part of the MTA and is branded as MTA New York City Transit. Thank you for reading about MTA New York City Transit.

*** The construction award for the New Fare Payment System is mentioned on page 77 of the Capital Program Oversight Committee Meeting from July 2017.

Graphing Transit Systems, Part III – Centrality Extended

This is the third post diving into the graph structure of the New York City subway system. Read the first two for more background!

At the start of last post, I threw out two questions:

  1. Does the network structure of the New York City subway indicate Times Square is a critical station, or is that just where the most riders board?
  2. Can all stations in a transit network be important?

We discussed the difference between centrality metrics and node importance metrics. The former identify important nodes in a network, while the latter ranks nodes by importance. We’ll use the node importance metrics to answer these questions.

To support our discussion, I whipped up a map showing the MTA subway ridership data by itself using Carto. Here’s the interactive map! The data is from the years 2010 to 2015 and is provided by the MTA.

Does the network structure of the New York City subway indicate Times Square is a critical station, or is that just where the most riders board?

To answer this question, I calculated the correlation between ridership and centrality. In the scatter plots below, the independent variable is the centrality score per station, and the dependent variable is the ridership at that station, averaged over the years 2010 through 2015. This might seem backwards, but I chose this because the centrality metric is a reflection of the network structure and we are studying the effect of network structure on ridership.


The correlation coefficient for these two data sets show a moderate positive correlation.

  • Closeness centrality, r = 0.43
  • Outward accessibility, r = 0.30

Remember, correlation does not imply causation, but these figures suggest that for an increase in the centrality metric, you can expect a moderate increase in ridership.

Did you notice Times Square on the scatter plots? Yep, with an average annual ridership of almost 63 million, it’s the outlier. Based on its position on the horizontal axis, closeness centrality thinks Times Square is an important station in the network, while outward accessibility does not. If you remember from last post, PageRank also finds Times Square to be important and Katz just confused us all. That answers our first question!

Before we go on, I have a theory that any outlier in these plots are the result of externalities. For example, the average ridership at Yankee Stadium – 161 St is 8.7 million, but its neighboring stations have ridership of 1.3, 3, 3, and 4.3 million each on average. What is its externality? The world-famous New York Yankees. Times Square – 42 St is a similar situation. Not only is it a transfer point for 12 NYC subway services, it is also below the mega tourist attraction and its namesake, Times Square. I have no hard data on this outliers theory, but more research could be done on this!

Can all stations in a transit network be important?

Why would we want all stations to be “important”? If our goal is for all citizens to have equal access to quality to public transportation, we would like everyone to live near a station which provides this gateway. A transit network will always have stations which are more centrally located than others, but is it possible to minimize the differences between the most connected and the least connected stations? Let’s see how do our metrics evaluate the structure of another world-class network in this regard. Enter Paris, its minimal geographical constraints, and its lovely radial network.

The two histograms below sit on the same range on the horizontal axis. The count on the vertical axis is the number of stations which fall into the horizontal range represented by its bar. As you can see, Paris has many, many stations which score higher than all of New York City’s.


There is one large caveat here: land area. Officially, the area of New York City is 302.6 square miles, while Paris is only 40.7 square miles. Another metric is longest subway line: New York’s A train extends 31 miles, while Paris’ Line 13 is just over 15 miles. Closeness centrality uses shortest path between station pairs, which in my graph, are the number of seconds for a trip. A 31-mile subway trip will take longer than a 15-mile subway trip, so this metrics are stacked against New York City subway and the large area it covers.

Concerning our question, even though Paris’ stations score much higher than New York’s, they are not all equal. This gets back to my earlier point: there will be an importance continuum among stations, but improving the importance of the least connected stations can still provide a benefit to citizens.

Next, let’s look at this histograms for New York and Paris outward accessibility scores.

There is not as much difference between New York City and Paris in the histograms for outward accessibility. This metric is independent of network area or subway line length, so this does not surprise me. It may hint that more of the difference between the networks for closeness centrality may be due to geographical area.

If you look at the densest parts of the Paris network and see how interconnected it is, the upper bound for its accessibility distribution being higher than New York’s also will not be a surprise.

Next Stop

Now that we have evaluated the centrality of multiple transit networks and performed limited cross-network comparisons, I want to know whether these metrics can tell us the best future subway routes. For example, given the budget for a single new subway line, what is the best route for this new line? It will be a very empirical and barely human analysis, so we may have to take the results with a grain or six of salt, but hopefully the results will have value besides making shapes on maps.

See you then!

Graphing Transit Systems, Part II – Centrality

This post is the second of three four looking into the graph structure of the New York City subway system. In the previous post, I discussed a frontend I built to visualize a depth-first search, breadth-first search, and shortest path algorithm. I ended with a discussion of centrality algorithms. We pick up our hero there…

Centrality metrics identify important nodes in a graph. In the gtfs-graph world, nodes represent subway stations. Why might we want to identify important stations in the NYC subway network? Honestly, my initial reason was I thought it sounded cool. I was curious to see if there are numbers (besides ridership…we’ll get to that in the next post!) to rank stations which align with our human perception of important stations in the system. Meaning: does the network structure indicate Times Square is a critical station, or is that just where the most riders board? That was the first question I wanted to explore. The next question would challenge the Lake Wobegon effect. That is: can all stations in a network be important?

To answer these questions, I created a web app for three cities and their heavy rail networks:

Each city has results for four centrality metrics: PageRank, Katz centrality, closeness centrality, and outward accessibility. I will be discussing the results in terms of the New York City network.

It is worth noting at this point that analyzing a transit network only using stops and edges is a very simplified model. To make any real decisions on the system as it relates to the city and population it serves, we would need to consider population density and employment centers at minimum. Knowing that, let’s proceed!

PageRank

If PageRank sounds familiar to you, it’s likely because it is the algorithm used by book publishers to identify pages, and definitely not because it was invented by Google co-founders Larry Page and Sergey Brin to rank web pages for their search engine. In this algorithm, a node’s importance is derived from the importance of all the nodes which link to it. Mapped over to transit, a station’s importance is derived from the importance of all the stations which have direct connections to it.

The PageRank results look interesting and definitely pick out important stations, but they do not give us insight into the entire distribution of stations.

The PageRank results look interesting and definitely pick out important stations, but they do not give us insight into the entire distribution of stations.

I was giddy while implementing this and my brain swirled with grand visions of unlocking new insights to generations-old transit networks. As it turns out, PageRank is not a great model for a transit network. Let’s look at an example.

In the NYC PageRank view, you can see that Times Square comes out on top. Let’s collectively channel our inner undergrad physics lab student and breathe a sigh of relief that the numbers show us what we expected. Phewwwwwww. However, if we look at one of its neighbors, 34 St – 11 Av AKA the 7 train extension, we see that it ranks last. Not just maybe not top ten or top 100, but dead last. PageRank is saying that the 7 train extension produced a station that is literally the least important in the NYC network.

Have no fear Andrew Cuomo, let’s consider the model again. If you throw in sample numbers using the PageRank formula, you can see that the above behavior is correct. 34 St – 11 Av only has one “link” and that node’s PageRank is high, but it also has a high out-degree. Using the random surfer / random transit rider model, a rider passing through Times Square is not likely to end up at 34 St – 11 Av. Sorry 7 train, but PageRank is just does not do your $2.4 billion price tag justice. Let’s see how the other centrality metrics view the subway network!

Poor 34 St - 11 Av doesn't get any love from PageRank. The data on the right shows the top 10 stations serve several subway routes each. This is not a coincidence; PageRank picks out highly connected nodes.

Poor 34 St – 11 Av doesn’t get any love from PageRank. The data on the right shows the top 10 stations serve several subway routes each. This is not a coincidence; PageRank picks out highly connected nodes.

Katz Centrality

Katz Centrality builds on PageRank by considering all walks between two stops in a network, as opposed to only the shortest path between nodes. This appealed to me in a transit context because in a dense network such as Paris, there are often numerous routes between any two stops. This built-in redundancy has been brought up recently as a weakness of the DC metro during the on-going two-track vs. four-track debate and how it affects the maintenance window for a major heavy rail system.

Now is a good time to mention that I would highly recommend the Wikipedia entry for Katz centrality and all the metrics in this post. The original Katz paper is insightful as well.

The results from Katz are……confusing. If you picked South Ferry as the most important MTA station, you either love platform extenders or misguidedly added the Staten Island Ferry to your subway network. The Staten Island Railway data is included in the MTA subway GTFS feed, so I kept it on my map. Closeness centrality (up next!) requires all nodes to be reachable from every other node, so I threw a fake edge in to the graph to represent the ferry. Believe me: the results were just as confusing before I added the ferry route. Due to the multiplicative nature of Katz centrality, the resulting distribution ranges from 0.00244 (Ozone Park – Lefferts Blvd) to 693,246.863 (St George, just across from South Ferry on the south-bound ferry).

Here’s all the insight I can offer on Katz centrality: all traffic between two well-connected sections of the graph (Staten Island and the entire rest of the MTA subway) has to pass through two stations: South Ferry and St George. Therefore, they are “important” and “central” and I am “confused” and “ready to talk about other metrics.”

Katz says the subway network is equally unimpressive. Except for South Ferry. What a champ.

Katz says the subway network is equally unimpressive. Except for South Ferry. What a champ.

Closeness Centrality

My friend Calvin and I half made-up, half realized-it-was-already-a-thing, a centrality metric which promised a return to the fundamentals. Closeness centrality (or as Cal and I called it, the squiggly-doo) is intuitive in that the closer a node is to all other nodes, the more “central” it is. It does this by ranking a node by the sum of the shortest paths to all other nodes in the network. As you may remember from last post, the distance of each edge in our network is the number of seconds to travel via that route segment according to that system’s GTFS feed.

At this point of confusing results from two metrics, I discovered the term “node influence metrics.” These metrics seek to answer my second question from earlier: can all nodes in a network be important? PageRank and Katz identify important nodes, but only the top of their resulting distribution should be considered. This means the metric results for the bottom half of the distribution are more or less meaningless. Technically, closeness centrality is not a node influence metric, but I treat it as such. Intuition tells me that its results have meaning for the entire distribution of nodes. Please comment if you feel otherwise!

Neapolitan ice cream anyone? Closeness centrality results have no surprises.

Neapolitan ice cream anyone? Closeness centrality results have no surprises.

Manhattan stations are ranked highly by closeness centrality. This uniformity is in contrast to the Manhattan results for outward accessibility.

Manhattan stations are ranked highly by closeness centrality. This uniformity is in contrast to the Manhattan results for outward accessibility.

The closeness centrality results are extremely straightforward. Subway stations on Manhattan score higher because riders can reach all other stations in less time there than elsewhere. The opposite is true for Far Rockaway. This algorithm will play an important role in the next post!

Outward Accessibility

Outward accessibility is one of the primary node influence metrics. It produces a normalized version of diversity entropy proposed in this paper by Travençolo and Costa. A node ranks highly when many unique paths can be taken from it over a course of random walks of varying distances. Sections of a graph which rank highly by this metric are found to have high network redundancy and high accessibility from the rest of the network. Redundancy and accessibility are both critical when evaluating a transit network, so this seemed like a good fit!

One drawback to the outward accessibility metric is performance and repeatability. Before calculating the actual metric, one must perform a series of random walks of varying distances from each node. For these walks to be representative, the walk count must be high, which can lengthen execution time of the analysis. Due to the nature of random calculations, the answers change every time! This could be solved by using a consistent random number generator seed when running the analysis, or by always running enough random walks for the results to converge.

Outward accessibility gives us the weather map similar to closeness centrality, but are its individual stations ranked similarly?

Outward accessibility gives us the weather map appearance similar to closeness centrality, but are its individual stations ranked similarly?

Outward accessibility picks out hotspots of importance in a graph network. These can vary slightly due to the random nature of this algorithm, but should converge over time with enough random walks.

Outward accessibility picks out hot spots of importance in a graph network. These can vary slightly due to the random nature of this algorithm, but should converge over time with enough random walks.

The results for outward accessibility appear to parallel those of closeness centrality at first glance. However, a closer look at the accessibility results shows hot spots. The metric tells us these are the nodes which allow riders to traverse the most unique routes in a given distance. Translated to the real world, this is valuable to the rider’s perception of a transit network. If I can go to 20 different stations within 10 subway stops (on any route), my location is better served by public transit than if I can only go to 10 stations within 10 stops.

Accessibility also has a strange property of ranking end stations higher. The logic is that if I start from the second from the end station, half of my random walks will go outwards and produce little diversity entropy. Conversely, if I start from the end station, all of my walks will go towards the potentially more diverse part of the graph. I emailed the paper authors to comment on this behavior, but have not heard back. If you are reading this, Travençolo or Costa, please comment with insight!

Next Stop

If you’ve hung with me this long and have noticed I haven’t answered either question posed at the start of this post, I’m going to grant you a short break. In the next post, we’ll discuss how the closeness centrality and outward accessibility results correlate to the NYC subway ridership numbers, as well as how these metrics compare between NYC and Paris. I hope you’ll stay on board!

Graphing Transit Systems

I’ve been away from the blogging world for a while! The last few months included a fantastic and inspiring trip to Transportation Camp NYC and loads of (mostly) fun weekend work on transit graphs.

In a hodgepodge effort to improve on Javascript, learn React, create a generic graph representation of a GTFS feed, and implement a few graph algorithms, I finally have a working TRANSIT GRAPH DEMO.

Why transit graphs?

While reviewing algorithms on Jason Park’s algorithm visualizer, I thought, “WE CAN APPLY THESE TO TRANSIT.” It was a moment of pure destiny. To call it multidisciplinary intrigue would be underselling my excitement. Of course, I was not the first person to connect transit and graphs; Google Maps, Open Trip Planner, and Mapzen’s Valhalla are all built on graph representations.

My original goal was to display an animated graph traversal of the New York City subway system. I’ve ended up with a platform to study graph algorithms on transit maps. (I learned that if I’m unsure what I’m building, just call it a platform. The solutions will follow.)

As is the norm in 2016 JavaScript, I used almost as many tools and libraries as there are NYC subway stations. My goal in all projects is to use as little custom data as possible, so I stuck with my Boston model and loaded the MTA GTFS feed into an Amazon RDS Postgres instance. The backend is a Node.js server which boots up after constructing a graph. I used the new ES6 ‘class’ keyword to create a TransitGraph in the style of the object-oriented languages I was raised on. The original frontend was written using JQuery, but when I reached the point of implementing an autocomplete search box, I knew I needed to up my tool game. Enter: React. Facebook’s documentation on the library is quite comprehensive and I latched on to the object-oriented feel and state-based programming model. All the data (stops and routes/edges) is communicated via WebSocket that persists through an entire client connection.

As you can see when using the graph demo, there are three modes. A bit on each…

Shortest Path

Dijkstra’s is the classic gateway algorithm to finding shortest paths in graphs. Wikipedia’s explanation is as clear-worded as I’ve read, so I’ll defer to them:

It picks the unvisited vertex with the lowest distance, calculates the distance through it to each unvisited neighbor, and updates the neighbor’s distance if smaller.

Fire up the algorithm visualizer for to help picture this. In my graph, the edge weights are the time between stations. After running Dijkstra’s, we have an ordered sequence of nodes which represent the shortest path between the origin and destination and the time it would take to do so.

A sample shortest-path from 50th St to 1 Av. The routes are calculated from the GTFS feed based on the trips that pass through that stop. This can periodically result in slightly different route listings than the official MTA map.

A sample shortest path from 50th St to 1 Av. The routes which serve each station are derived from the GTFS feed based on the trips that pass through that stop. This can periodically result in slightly different route listings than the official MTA map.

The user interface to pick the origin and destination nodes. I studied Pinterest's CSS to help build the stop tokens that populate the input fields when selected. The route details at the bottom uses "display: flex;", a tip I picked up from the Google Maps CSS.

The user interface to pick the origin and destination nodes. I studied Pinterest’s CSS to help build the stop tokens that populate the input fields when selected. The route details at the bottom uses “display: flex”, a tip I picked up from the Google Maps CSS.

Sound familiar? Google Maps transit directions do the exact same time. And much better! Knowing when to switch trains becomes a luxury after using my tool.

Depth-First Search

A depth-first search, or DFS as the real algorithm geeks call it, is a classic traversal method for both graphs and trees. The idea of a traversal is to visit all the nodes in the graph which can be reached given a starting node. The depth-first variety is contrasted with the breadth-first procedure (up next!) in that, given a starting node, one of its neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, and so on. Was there anything weird about that last sentence? This is a recursive algorithm! When a visited node has no unvisited neighbors, the algorithm pops back up the call stack, testing for unvisited neighbors at each level.

A snapshot of visited nodes early in a depth-first search from Yankee Stadium. A red line segment is an edge that has been visited, but not unvisited, while a blue line segment has already been unvisited. As the recursive function pops higher up the call stack, more edges turn blue.

A snapshot of visited nodes early in a depth-first search from 161 St – Yankee Stadium. A red line segment is an edge that has been visited, but not unvisited, while a blue line segment has already been unvisited. As the recursive function pops higher up the call stack, more edges turn blue.

We can see that at the completion of a DFS from 161 St - Yankee Stadium, the entire MTA subway system has been visited. The nodes that have not been visited are the Staten Island railway, which has no rail connections to the subway system and therefore no edges in my graph.

We can see that at the completion of a DFS from 161 St – Yankee Stadium, the entire MTA subway system has been visited. The nodes that have not been visited are the Staten Island railway, which has no rail connections to the subway system and therefore no edges in my graph.

Breadth-First Search

A breadth-first search is another traversal variant whose lofty goal is to identify connected components of a graph while providing zero valuable info to passengers riding transit. (Now would be a good time to say that identifying connected components will play a key role in merging nodes during a later step in this project. Traversals are a necessary part of any graph analyzer’s toolkit!) As you may have guessed, a BFS goes wide before it goes deep. From a given node, all of its neighboring nodes are visited before any of their neighbors are visited. This produces a different exploration pattern, which is illustrated in the following three images.

A snapshot early in a breadth-first search from Queensboro Plaza. We see that the visited nodes are spreading outward from the source. Think: diseases. Depth-first search is how you solve a maze and breadth-first search is how you get sick.

A snapshot early in a breadth-first search from Queensboro Plaza. We see that the visited nodes are spreading outward from the source. Think: diseases. Depth-first search is how you solve a maze and breadth-first search is how you get sick.

A bit farther in the breadth-first search, we can see the disease...err...graph traversal has continued to spread outward.

A bit farther in the breadth-first search, we can see the disease…err…graph traversal has continued to spread outward.

The completion of the breadth-first search. There are no blue edges because this is not a recursive algorithm.

The visited edges at the completion of the breadth-first search. There are no blue edges because this is not a recursive algorithm.

What’s next?

“gtfs-graph” (the GitHub project name for now – please help me come up with a better one!) is built to be system-agnostic. I have graph representations for Boston and Paris in addition to New York City. While the GTFS standard allowed me to construct all three graphs in similar ways, there were still a few quirks, resulting mainly from how the different systems represent sub-stops (parent/child or northbound/southbound).

Recently, I have been implementing centrality algorithms to see how the results varied from system to system. Paris’ RATP heavy rail lines certainly look to have higher connectivity than Boston’s hub-centric design, and I’m working to find the numbers to prove this. If I can indeed prove this, I’d like to use a genetic algorithm to efficiently enhance (add lines and stops) a system to match the connected-ness/centrality distribution/equity/whatever-metric-I-end-up-with of a higher quality system.

After implementing Google’s PageRank algorithm, I decided it is a poor model for transit. The rankings currently displayed are a modified version of closeness centrality. I really enjoyed this white paper on a node importance algorithm and plan to implement this soon. It uses random walks to calculate the entropy of a given node after a given number of steps.

I hope to have a much more detailed most on these metrics in the coming weeks! I would love to hear any thoughts or ideas you might have about any or all of this!

Let’s build awesome things to help transit, cities, and, most of all, people.

LIVE: The Boston T Party

I’m a few months late on this one, but I recently wanted to learn about WebSockets and GTFS-realtime feeds. The result: a real-time Boston transit map! I apologize if you were expecting a historical reenactment.

Try clicking on a marker for more information on the subway/bus/light rail/commuter rail vehicle it represents!

The sidebar of the application appears when you click on a vehicle. The area could be populated with tons more info from the GTFS static feed!

The sidebar of the application appears when you click on a vehicle. This area could be populated with tons more info from the GTFS static feed!

How It’s Built

The app runs on a Node.js server that accepts both a socket connection and an API call. Why both? Ask two-months-ago me. A new socket connection is formed when a client (web browser) connects to the server. The server periodically polls for the latest GTFS-realtime update (which the MBTA posts updates to http://developer.mbta.com/lib/GTRTFS/Alerts/VehiclePositions.pb every ~18 seconds) and decodes the resulting protocol buffer using the Google gtfs-realtime-bindings. The decoded data is then broadcast to all socket connections. The frontend client is a simple AngularJS controller which manages the socket connection and updates the markers with the latest vehicle position information.

The basic architecture described until this point can operate completely independent from a GTFS static feed, but this would only produce a bunch of dots on a map which move periodically. Which, don’t get me wrong, made me ecstatic when that was all I had. But linking up a GTFS static feed gives each dot context. I decided to load the MBTA feed into a Postgres database on Amazon’s Relation Database Service using this schema. The GTFS static connection allows for two features: 1) the client issues an API call to fetch the route and headsign when you click on a vehicle, which is fulfilled by the server through a database query, and 2) the colored route lines are pre-generated into a GeoJSON file using a Node.js script which runs a database query to fetch the official MBTA color for each route.

The purple lines are the commuter rail routes. I chuckled the first time these lines loaded and I kept have to zoom out to see where they stop. To Providence and beyond!

The purple lines represent the commuter rail routes. I chuckled the first time these lines loaded and I kept having to zoom out to see where they stop. To Providence and beyond!

Up Next

The map doesn’t have nearly the feature set of NextBus, with gobs of detail about every bus and stop you click on. I do find it clumsy that you have to select routes to view in NextBus, leading me to make sure all the lines appear at load time in my map (or shortly after (#LargeGeoJSONFile)). Feel free to check out the code or even add features yourself; the code lives on GitHub!

A big maintenance issue with the app as constructed is that it requires a manual reload of the GTFS feed after each update by MBTA which changes any trip IDs. The Green Line trains do not have valid trip_ids in the GTFS-realtime feed, so I programmed the app to display any vehicle with an unknown trip_id (one that did not match with the GTFS static feed) as a Green Line trip. After a GTFS static update, you will often see many vehicle markers say they represent a Green Line train, when we really just need to load the new GTFS feed into the Postgres database. Who wants to automate this for me?

You may not need this map to plan your commute from Back Bay to South Station, but it was certainly a fantastic learning experience for me. Many of its components will make an appearance in my next project! (Hint: it involves representing transit networks as a connectivity graph!)

Until next time, ride on!

I never get tired of staring at these colored lines until the markers all jump to their next position! The yellow is the official color specified for the bus routes in the MBTA GTFS static feed. Anyone know the reason for this? It also look like the Silver Line goes a bit crazy right after exiting the Ted Williams Tunnel.

I never get tired of staring at these colored lines until the markers all jump to their next position! The yellow is the official color specified for the bus routes in the MBTA GTFS static feed. Anyone know the reason for this? It also looks like the Silver Line goes a bit crazy right after exiting the Ted Williams Tunnel. Correct me if I’m wrong, but I think this is where Silver Line buses switch from diesel power to trolleybuses?

“Next Stop…Transitland”: A TransportationCamp Colorado Presentation

I attended the inaugural TransportationCamp Colorado was last week! Sticking with the format of an “unconference,” attendees were encouraged to propose their own sessions to present their work and/or lead discussions. I took them up on the format and presented the following slides on Transitland and how I used it to create my New York City transit frequency visualization. We had a really great interactive session with many good ideas exchanged!

Some stories and explanations were left off the slides. Feel free to hit me up for more explanation on anything!

 

The slides can also be downloaded here.

Denver’s A Line Opens with Fanfare

Friday was a celebration worthy of Duke Ellington and John Hickenlooper. “Take the ‘A’ Train” was finally a meaningful phrase for the Denver metro area! Unfortunately, only one of them could make an appearance, while the other’s legacy lives on.  Relive the opening of the RTD University of Colorado A Line with my photo journey below!

The first bus route of the day: Transfort's FLEX from downtown Fort Collins to Boulder. My friend Austin joined me four stops later and we were on our way!

The first bus route of the day: Transfort’s FLEX from downtown Fort Collins to Boulder. My friend Austin joined me four stops later and we were on our way!

Boulder BCycle bike share bikes outside the Downtown Boulder Center. BCycle is the same provider as Denver's bike share, while Fort Collins recently opened with Zagster.

Boulder BCycle bike share bikes sit outside the Downtown Boulder Station. BCycle is also the operator of Denver’s bike share, while Fort Collins’ recently opened with Zagster.

The bus arrival board in Downtown Boulder Station was quite comprehensive, and similar to the one's found in Union Station.

The bus arrival board in Downtown Boulder Station was quite comprehensive, and similar to the ones found in Union Station.

Our second bus of the day: RTD AB from Downtown Boulder Station to DIA! I had not expected a coach-style bus. The driver was initially confused that we wanted return transfer slips. Apparently not many people taking the airport bus return same day! Obviously, they hadn't met transit enthusiasts like us yet.

Our second bus of the day: RTD AB from Downtown Boulder Station to DIA! I had not expected a coach-style bus. The driver was initially confused that we wanted return transfer slips. Apparently not many people taking the airport bus return same day! Obviously, they hadn’t met transit enthusiasts like us yet.

Our first look of 'Denver Airport' station on the new RTD A line! This was taken from the overlook just below the lobby of the new Westin at DIA.

Our first look of ‘Denver Airport’ station on the new RTD A line! This was taken from the overlook just below the lobby of the new Westin at DIA.

The lobby of the Westin reminded me of iconic jet age images, many lost with the destruction of the Pan Am Worldport. One bank of windows overlooks the A line, while the other looks across a pavilion outside the Jeppesen Terminal.

The lobby of the Westin reminded me of iconic jet age images, many lost with the destruction of the Pan Am Worldport. One bank of windows overlooks the A line, while the other looks across a pavilion outside the Jeppesen Terminal.

Colorado Governor John Hickenlooper speaks at the opening for the Regional Transportation District University of Colorado A Line at Denver International Airport on Friday, April 22, 2016. Did I do the AP caption style correctly? Anyway, I should have put the over/under on the number of speakers at 9.5. And taken the over. Except for the protesters up in arms over the $9 fare that began shouting midway through the ceremony, everything went as expected.

Colorado Governor John Hickenlooper speaks at the opening for the Regional Transportation District University of Colorado A Line at Denver International Airport on Friday, April 22, 2016. Did I do the AP caption style correctly? Anyway, I should have put the over/under on the number of speakers at 9.5. And taken the over. Except for the protesters up in arms over the $9 fare that began shouting midway through the ceremony, everything went as expected.

After the ceremony, the public lined up at the "BOARD TRAINS HERE" sign backed by the baby blue branding <a style="display: inline;" href="https://twitter.com/greent_tyler/status/724050085437300737" target="_blank">found everywhere</a> for the #TrainToThePlane. A media run of the train had taken place earlier that morning, so they did not mingle in line with us plebs. While we waited, a band played Duke Ellington's "Take the 'A' Train."

After the ceremony, the public lined up at the “BOARD TRAINS HERE” sign backed by the baby blue branding found everywhere for the #TrainToThePlane. A media run of the train had taken place earlier that morning, so they did not mingle in line with us plebs. While we waited, a band played Duke Ellington’s “Take the ‘A’ Train.”

The five-story escalator from the Westin pavilion to the A line station is the longest in Colorado. And it has art! The visualizations on the back wall were projected out of the fake rocks on the wall. #TheFutureIsHere

The five-story escalator from the Westin pavilion to the A line station is the longest in Colorado. And it has art! The visualizations on the back wall were projected out of the fake rocks on the wall. #TheFutureIsHere

The public makes its way to the first ride on the A line!

The public makes its way to the first ride on the A line!

A portrait to go down in transit lore. If I had been clever in the moment, upon seeing the University of Colorado graphics on the side of the train, I would have said, "That's a wrap!"

A portrait to go down in transit lore. If I had been clever in the moment, upon seeing the University of Colorado graphics on the side of the train, I would have said, “That’s a wrap!”

I wasn't kidding about the baby blue. It was everywhere. We boarded this car!

I wasn’t kidding about the baby blue. It was everywhere. We boarded this car!

The inside of the commuter rail vehicle was immaculate! It had that new train smell. I was taken aback by the imbalanced seating and had to make sure we hadn't accidentally boarded a plane. The vehicles have a top speed of 79 MPH.

The inside of the commuter rail vehicle was immaculate! It had that new train smell. I was taken aback by the imbalanced seating and had to make sure we hadn’t accidentally boarded a plane. The vehicles have a top speed of 79 MPH.

I was excited to finally ride the A line! And if you had asked if my baby blue shirt was in honor of the #TrainToThePlane, I would have answered, "Yes."

I was excited to finally ride the A line! And if you had asked if my baby blue shirt was in honor of the #TrainToThePlane, I would have answered, “Yes.”

I tweeted back and forth with Lisa from @RideRTD and she tracked me down and gave me a sweet squeezy train! I was so calm for the rest of the ride. We departed four minutes early on the inaugural public run of the A line!

I tweeted back and forth with Lisa from @RideRTD and she tracked me down and gave me a sweet squeezy train! I was so calm for the rest of the ride. We departed four minutes early on the inaugural public run of the A line!

The station at 38th and Blake was ready for passengers! Other stations had lines of people waiting to board the first outbound train.

The station at 38th and Blake was ready for passengers! Other stations had lines of people waiting to board the first outbound train.

We passed behind Coors Field as we arrived to Union Station. The Rockies would play (and beat!) the Dodgers on that ground later that day.

We passed behind Coors Field as we arrived to Union Station. The Rockies would play (and beat!) the Dodgers on that ground later that day.

The first passengers arriving at Union Station on the A line!

The first passengers arriving at Union Station on the A line!

We made it! The platform is the first at Union Station with at-grade boarding. Both the light rail vehicles and Amtrak trains require passengers to go up steps to board.

We made it! The platform is the first at Union Station with at-grade boarding. Both the light rail vehicles and Amtrak trains require passengers to go up steps to board.

The passengers on the right wait their turn for a ride on the A line, while those on the left celebrate a smooth inaugural ride.

The passengers on the right wait their turn for a ride on the A line, while those on the left celebrate a smooth inaugural ride.

I love this view because the commuter rail vehicle reminds me of the MTA rolling stock. Denver finally has commuter rail!

I love this view because the commuter rail vehicle reminds me of the MTA rolling stock. Denver finally has commuter rail!

Downtown Denver has come a long way in the last few years. The #TrainToThePlane sits proudly and personified on the backside of Union Station in this photo.

Downtown Denver has come a long way in the last few years. The #TrainToThePlane sits proudly and personified on the backside of Union Station in this photo.

The tracks at Union Station have a neat roof structure! Which doesn't provide much actual roof-age. But it makes for cool photos! Two buildings in development can be seen at the end of the platforms, which will provide even more residential and retail buzz for the LoDo area.

The tracks at Union Station have a neat roof structure! Which doesn’t provide much actual roof-age. But it makes for cool photos! Two buildings in development can be seen at the end of the platforms, which will provide even more residential and retail buzz for the LoDo area.

The queue to board the A line to DIA wrapped around the side of Union Station by the time we arrived on the first train. A public train had left Union Station towards DIA at the same time as ours. The tunnel in the foreground is the entrance to the underground bus depot.

The queue to board the A line to DIA wrapped around the side of Union Station by the time we arrived on the first train. A public train had left Union Station towards DIA at the same time as ours. The tunnel in the foreground is the entrance to the underground bus depot.

The interior of Union Station was bustling! Cities take note: this is a public space to die for.

The interior of Union Station was bustling! Cities take note: this is a public space to die for.

Taking a break from transit, Austin and I made our way up 16th Street Mall to the state capitol!

Taking a break from transit, Austin and I made our way up 16th Street Mall to the state capitol!

One of the stairs near the doors to the capitol is etched with the phrase "One Mile Above Sea Level." The Mile High City, indeed!

One of the stairs near the doors to the capitol is etched with the phrase “One Mile Above Sea Level.” The Mile High City, indeed!

We exercised our rights as citizens willing to walk through a metal detector to experience the rotunda of the Colorado capitol dome.

We exercised our rights as citizens willing to walk through a metal detector to experience the rotunda of the Colorado capitol dome.

The interior of the capitol reminded me of the Minnesota state capitol in St. Paul! Both are incredibly ornate and stately, but feel a tad smaller than the U.S. Capitol building.

The interior of the capitol reminded me of the Minnesota state capitol in St. Paul! Both are incredibly ornate and stately, but feel a tad smaller than the U.S. Capitol building.

There were even representatives working in the Colorado House of Representatives chamber! Considering this was a Friday afternoon, I guess I shouldn't be surprised. The speakers at the ceremony had just praised these individuals' bipartisanship and its impact on the passage and completion of the A line.

There were even representatives working in the Colorado House of Representatives chamber! Considering this was a Friday afternoon, I guess I shouldn’t be surprised. The speakers at the ceremony had just praised these individuals’ bipartisanship and its impact on the passage and completion of the A line.

We joined up with a capitol tour just in time to catch a trip up to the dome!

We joined up with a capitol tour just in time to catch a trip up to the dome!

The views looking westward were stunning! Unfortunately, the mountains were more impressive in real life. It was neat to think how all the grass between the capitol and city building had been covered with fans (including myself!) during the Broncos Super Bowl Parade and celebration just a few short months ago.

The views looking westward were stunning! Unfortunately, the mountains were more impressive in real life. It was neat to think how all the grass between the capitol and city building had been covered with fans (including myself!) during the Broncos Super Bowl Parade and celebration just a few short months ago.

The flags cooperated as I snapped a photo of the city building and the rounded Denver Post building. 16th Street Mall can be seen on the far right.

The flags cooperated as I snapped a photo of the city building and the rounded Denver Post building. 16th Street Mall can be seen on the far right.

And continuing the northward pan, this was the view of downtown Denver from the capitol dome.

And continuing the northward pan, this was the view of downtown Denver from the capitol dome.

This was the staircase we took to reach the dome level at the capitol. I filmed a brief episode for the Discovery Channel in my mind during the trips up and down.

This was the staircase we took to reach the dome level at the capitol. I filmed a brief episode for the Discovery Channel in my mind during the trips up and down.

Walking back towards Union Station, we made our last pass through Civic Center Station. The end-of-line for the Mall Ride is slated for replacement by something glassier, according to Austin.

Walking back towards Union Station, we made our last pass through Civic Center Station. The end-of-line for the Mall Ride is slated for replacement by something glassier, according to Austin.

This semi-protected bike lane on Lawrence Street reminded us that on a day that a train stole the show, mobility options do not stop with heavy rail.

This semi-protected bike lane on Lawrence Street reminded us that on a day that a train stole the show, mobility options do not stop with heavy rail.

We made the journey back to Fort Collins using the Flatiron Flyer “bus rapid transit” from Union Station to Boulder. From there, the FLEX took us north onto the MAX guideway and to our respective stops in FoCo. Our $9 regional RTD day passes worked as fare for both the AB and the Flyer. The A line was free for opening day, and I used my Transfort year pass to board the FLEX. This means, we traveled to Denver and back for only nine dollars. Without Transfort passes, the total would have been $11.50. Once the A line begins revenue service, this route will cost $20.50. Regardless, transit has come a long way in northern Colorado and our (very circuitous) route showed that mobility has reached new heights.

I am excited for the rest of the FasTracks program and am thrilled we had the chance to experience the first public run of the #TrainToThePlane.

Until next time Denver opens a train line, ride on!

Have you gotten to ride the A line yet? What did you think? Let me know in the comments below!

Seeking a Pro Bono* Position in a Transit Dance Video

Objective

I am seeking a pro bono* position in a transit dance video. I intend to use my multimodal excitement to raise awareness, excitement, and ridership of American transit systems. Please contact me if you are in need of someone who can learn dance steps on bus steps. Let’s make transit more visible, safer, and more fun!

Experience

DanceBlue, University of Kentucky Dance Marathon
Lexington, KY
February 2013

I’m the one in the white.

Actually, I may have been wearing blue. We’d been dancing for 23.5 hours at point.

Purdue Night Train Swing Dance Club
West Lafayette, IN
August 2013 – December 2014

If you didn’t get a great sampling of my individual skill from DanceBlue, the following video shows my full repertoire of lindy hop moves and my ability to seemingly read them off the ceiling.

Skills

  • Well-versed at managing life with awkward arms
  • Experience at walking on beat for minutes at a time
  • Ability to provide vision for groups of people though bus windows

Influences

I consider the following two videos required viewing for all participants in my future transit dance videos.

Silver Line Opening
Washington Metropolitan Area Transit Authority

The guy who opens the video inspires me. His energy walking down a suburban street to a train is infectious. I’m moving my shoulders like that right now. You too?

Let’s match (or exceed) this.

Virgin American Safety Video
The airline formerly known as Virgin America

My own flight on Virgin, I was literally grinning ear-to-ear the five minutes before the boarding door closed and the following video is the reason why. I’m not sure whether I love the lyrics or choreography more. “So tonight, get ready to fly, cuz we’re gonna live it on up in the sky”? Genius.

I know this isn’t public transit, but they move people and this video moves me. I hope the Alaskan Airlines’ dancers are stretching and their choreographer is being inspired as we speak.

Let’s match (or exceed) this.

Contact

If you are a transit agency producing promotional media, contact me and we’ll talk.

If you are an enthusiastic transit rider, let’s brainstorm.

Either way, see you on the rails.

* The pro bono part is negotiable.

Bike Share Has Arrived in Fort Collins

I took advantage of a gorgeous Saturday morning to try out Fort Collins’ newest urban mobility option: bike share!

The overall process is quite smooth. Here are your six steps to a ride about the town.

  1. Download the Zagster app and create an account.
  2. Choose from daily, weekly, or yearly memberships.
  3. Enter the code of the bike you wish to use into the app to get the U-lock key.
  4. Unlock the bike.
  5. Ride!
  6. Return the bike to any station, lock it up with the U-lock, and hit “Return it!” on the app.

That’s it! Keep reading for some photos of my experience and details on each component of the bike share.

The Stations

As you can see in the screenshots below, there are several stations scattered throughout Old Town. The second image is a wider map view of Fort Collins, which shows the stations are very concentrated in a single part of town for now. I would expect the station coverage to expand if the program proves successful in the denser section of Fort Collins, following the roll-out model of Chicago’s Divvy bike share.

Map of bike share stations in north Fort Collins.

Map of bike share stations in north Fort Collins.

Bike share stations are concentrated main around Old Town Fort Collins at the system's launch on Friday, April 1st. But this is no joke!

Bike share stations are concentrated main around Old Town Fort Collins at the system’s launch on Friday, April 1st. But this is no joke!

The bike share station at Oak and College.

The bike share station at Oak and College.

The instructions at the Oak and College station have already been "artistically modified."

The instructions at the Oak and College station have already been “artistically modified.”

The Fees

The fee structure is as follows:

  • 24 hour membership for $7, weekly membership for $15, or annual membership for $60.
  • Free to checkout a bike for the first 30 minutes, $2 an hour after that, up to $18 for a single ride.

I’ve included some screenshots showing how you pick your payment plan in the Zagster app. I purchased the 24 hour membership for $7 and had the bike checked out for about 50 minutes, resulting in a $2 usage fee.

Screenshot of the Zapster app for the 24 hour membership.

Screenshot of the Zapster app for the 24 hour membership.

Screenshot of the Zapster app for the weekly membership.

Screenshot of the Zapster app for the weekly membership.

Screenshot of the Zapster app for the annual membership.

Screenshot of the Zapster app for the annual membership.

The Bikes

I could tell the bikes were very new (I was riding on their second day of operation) and mine had a great feel to it! It was a comfortable cruiser with 8 speeds controlled by a single dial on the right hand grip. I would have preferred one higher gear for cruising down Mountain Avenue, but the gear range is quite suitable for most urban biking trips, especially in a town as flat as Fort Collins.

Two codes are important when unlocking the bike. First, you enter the 4-digit code labeled “Zagster.com Bike #” into the app. This code is on the side of the keypad on the rack above the back tire. There is also a longer code on the other side that did not work. The app gave a me a bike not available error when I tried the longer one, so be sure to enter the correct code! After you do this, the app will give you a longer code which you enter on the bike keypad (sandwiched by two presses of the ENT(er) key). This will cause they keypad to open, revealing a key you can use the unlock the U-lock.

The bike even had a bell and basket in front! I saw another bike share user put the U-lock in a slot on the back rack so I did the same. It jiggled a bit while the bike was in motion, so I wonder if some rubber could be added to create a more peaceful ride.

I’m not quite sure what I did to relock the key box when I returned the bike. I locked the U-lock back up to the station, but could not get the key box to close. The sign on the bike says to re-enter your code if you can’t get the box to lock, and I did this and was eventually able to hear the box relock, but I don’t think it was because of me re-entering the code. If you understand the inputs and feedback of this system, please let me know!

The keypad on the back rack of the bike.

The keypad on the back rack of the bike.

Instruction for using the keypad, also on the back rack of the bike.

Instruction for using the keypad, also on the back rack of the bike.

A row of new Zagster bikes at the Oak and College station.

A row of new Zagster bikes at the Oak and College station.

The 4-digit code you type into the app on the side of the keypad.

The 4-digit code you type into the app on the side of the keypad.

The 8-digit code you DO NOT type into the app.

The 8-digit code you DO NOT type into the app.

The slot which holds the U-lock while you ride.

The slot which holds the U-lock while you ride.

Recommendations for the Bike Share

I noticed two features that were missing from the app. First, it did not seem possible to begin a second reservation using the same phone. This would be a major hindrance to renting bikes for a family. I would hope there is actually a way to do this. Does anyone know if I just missed this feature?

Second, the app does not tell you how many bikes are available at each station. I know I did not miss this feature because the technology does not exist at the stations to track this. When I said “Return It!” it was my responsibility to lock the bike up to any station using the provided U-lock. Yes, I returned mine to the same station from which I checked it out, but this is not required, nor known to the app. Bike counts will not affect passerbys, but it could prevent someone from leaving home expecting to rent a bike that may not be at the closest station.

All in all, I was quite pleased with the new Fort Collins bike share! I had a lovely bike ride from Old Town to City Park and back on a comfortable bike. Visible bikes in Old Town are a great addition to an already strong biking culture in this city. I can see the system being very useful for visitors or even residents who came to Old Town without their bike but decide to go on a ride. Almost more than anything, we are seeing mobility options improve in Fort Collins and that should be celebrated!

I know I normally say this about other modes of transit, but until next time…

Ride on!

Have you had any good or bad experiences with the bike share?

My Zagster bike at City Park Lake. The new bike share is a great improvement for mobility in Fort Collins!

My Zagster bike at City Park Lake. The new bike share is a great improvement for mobility in Fort Collins!

Older posts