Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

An iPhone app and data API for Boston MBTA schedules and other information

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 OpenMBTA
Octocat-spinner-32 ipadmbta better way to sort columns of grid October 20, 2010
Octocat-spinner-32 rails fix subway realtime for 2011 changes, which were bad January 17, 2011
Octocat-spinner-32 .gitignore
Octocat-spinner-32 README.markdown
README.markdown

OpenMBTA

Notice

I've rewritten the backend of OpenMBTA to use PostgreSQL instead of MySQL. The code for the new backend is at http://github.com/danchoi/openmbta2.

Old README

OpenMBTA gives users current schedule information for MBTA buses, commuter rail lines, subway, and ferries. MBTA is the public transit system of the Boston metropolitan area.

This project has two components: an XCode project for the iPhone app and a Rails application for the data backend and the mobile web version of OpenMBTA. The iPhone app relies on the backend to feed it schedule data and stop coordinates to display on its maps and schedule tables.

The backend, in turn, uses the MBTA's Google Transit Feed Specification data to populate its database. The database must be reloaded with new GTFS schedule data about once every 3 months to keep the schedule information current.

Note that this project is in an early stage. There is a lot of room for adding features and improving the UI.

How to set up a development environment

Follow these instruction to set up a local version the Rails backend. The Rails code is located in the rails directory of the project. Set up the config/database.yml file as usual to suit your development environment and then run rake db:migrate.

Next, create a folder inside the rails directory named data.

Now you need to get the MBTA GTFS data from the EOT Developers Page. Download the full MBTA GTFS zip file containing all the services. This file is currently linked from the middle of the page.

Unzip the file. You should see a bunch of *.txt files. These are the GTFS files. Transfer these files to the rails/data directory.

Now we're ready to populate the MySQL database with the GFTS data. There is a rake task for this. Run

rake mbta:populate

Be warned that the GFTS dataset is huge, with over 3 million rows. On my Macbook Pro this task takes more than 2 or 3 hours to finish.

After the mbta:populate task is finished, you should be able to start the Rails app with script/server.

Now we can to run a local copy of the OpenMBTA iPhone app as a client to the local copy of the Rails data server.

Go to the OpenMBTA directory of the project, which contains the XCode project for the iPhone app. Open the project in XCode, and then just Build and Run. The development version of the iPhone code is set to use http://localhost:3000 as the URL of the data backend. If you want to run the iPhone client against some other URL, change macro definition for ServerURL Classes/ServerUrl.h.

Figuring out your way around the code

The best way to dive in is to watch the development log of the Rails app while you play around around with the iPhone client. By doing the this you'll see when the iPhone app is making a request to the backend, what URL is being called, and what SQL statements are being executed to generate the response. You won't be able to see the response returned by the backend in the log, but you can get the response by copying the request URL noted in the log and making the same request with curl (or something similar) from the command line. When you do this, make sure you append :3000 to localhost as the Rails logger doesn't seem to record the port number of incoming requests. The responses returned to the iPhone all are all formatted in JSON.

From this point on, I would suggest looking at config/routes.rb to trace the URL requests to the controllers that handle them. The controllers, in turn, point to the model classes that construct the appropriate SQL calls and assemble the data for each response.

As for the iPhone end, if you have experience in Objective-C development for the iPhone, you should be able to figure things out. If you have any questions, just ask them in the OpenMBTA Google Group.

Currently, there are no unit or integration tests for this codebase. This is definitely one area where volunteers can contribute. The first version of OpenMBTA was written quickly and not with the best code hygiene. We plan on improving this in the near future.

On collaborating and pushing out the next version

Join the OpenMBTA Google Group to communicate with everyone else who will be working on this project.

I'll also start adding stuff to the wiki as things move along.

Another thing we'll need to do is to set up a collective entity through which to publish future versions of this application on the iTunes App Store and to set up a project team in the iPhone Dev Center.

Open Source License

The source code for OpenMBTA is governed by the MIT License, which reads as follows:

Copyright (c) 2009 Daniel Choi

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
Something went wrong with that request. Please try again.