1. App Issues
    1. We need to be careful to add too much information. Don't need to include every bit of info.
    2. Interfaces that are derived from mobile interfaces are really clunky.
    3. Stuff derived from Blackboard, other generic sources/developers. can have a real "cookie cutter" feel.
  2. augmented reality
    1. to help locate people and places on campus
      1. Locating places on campus. The basic problem is to acquire GPS coordinates for a named location at UIC. For example, were someone to tell our app that he/she will be at "BSB" at a particular time, then our app must be able to determine where "BSB" is—that is, what GPS coordinates (longitude, latitude, altitude) represent "BSB". The problem becomes more complex when you consider that people name things differently (and may make spelling mistakes). The "library" can be the "Daley Library" or the "UIC Main Library"…or perhaps a user would like to locate all libraries on campus and pick the correct one. So it should be possible for our app to find all variations of named places at UIC and give our users the opportunity to filter or choose the correct location from all reasonable possibilities (what would be the best GUI way to do this?…show locations in a list or a map?). In addition, it should be possible for people to add (or correct) named places UIC in a uniform way (not necessarily through the app…it could be on a webpage). It occurred to me last Tuesday evening that Google already knows how to do all of this. The process is called forward geocoding . Unfortunately, Apple does not provide a standard mechanism (apparently because of licensing restrictions Google imposes) for forward geocoding on iOS devices (iOS devices can, however, do reverse geocoding…that is, given a latitude and longitude, an iOS device can identify a place using its name). I was able to find a couple of nifty forward geocoders for the iOS. More to come in a further edit…
      2. Augmented reality. I've been toying with Zac White's ARToolkit which, though a little dated, is still a pretty good starting point for understanding how to do augmented reality on an iOS device. The only problem with ARTookkit is that it is really rough and it needs some serious fixing. Some things I have discovered from various sources over the past couple of weeks:
        1. The forward camera on an iPhone 4 has a sensor that measures 4.52 mm top-to-bottom and 3.39 mm left-to-right. The focal length of the camera's lens measures 3.85 mm. Using simple trigonometry, this gives the a top-to-bottom angular field-of-view of 60.82 degrees (or about pi/3 radians). Similarly, the left-to-right angular field-of-view is 30.41 degrees (or about pi/6 radians). Flipping into landscape mode from portrait mode exchanges these values.
        2. The iOS measures degrees from north (otherwise known as azimuth) from the top of the device. That is, if you hold the device in portrait mode with the home button pointing to the ground, draw an imaginary line from your eye to the top of the iPhone. That is your heading. Now if you turn the iPhone 90 degrees clockwise, the "top" of the iPhone now points to your right. Again, your heading is measured from the "top" of the device, even if it's pointing to the right. So even though you yourself haven't moved, the iPhone will now report your heading as having changed 90 degrees. Therefore, changes in iPhone orientation have to be taken into account when doing augmented reality.
        3. The magnetometer on the iPhone does a pretty good job of measuring heading, but is not particularly accurate. However, the iPhone's gyroscope is remarkably accurate. Because of that, I've been experimenting with Apple's Core Motion framework.
        4. Here is information on Core Location and MapKit which are used to locate an iOS device and place located places on a map.
        5. Here is a trick for determining the GPS coordinates for a particular place:
          1. Find the place on Google maps.
          2. Center the place you're interested in on the map.
          3. Paste the following JavaScript in the browser address (URL) text field: javascript:void(prompt('',gApplication.getMap().getCenter()));
          4. To see if you've got it right, pull up the Google maps page, but this time search for the coordinates you got in step 3. Google places a green pin on the place it thinks you wanted to find.
        6. I noticed that many places at UIC are not located in Google maps and there are many places that are located imprecisely. It may be that Kim has a better take on work being done to canonically locate things at UIC.
    2. to provide info about places
  3. foursquare
    1. We've decided to try to use foursquare to handle our app's check-in and tip functionality. There are a couple of advantages for us to do so:
      1. foursquare already does much of what we want our app to do. We just have to tap into its data.
      2. We do not have to build our own cloud service for holding check-in and tip data.
      3. The foursquare API is simple and RESTful.
    2. The foursquare developer page and the API v2 documentation. Although the v2 API is still in a beta test phase, v1 of the API is considered deprecated and foursquare asks that developers adopt the v2 API.
    3. foursquare's terms of use.
    4. The foursquare API v2 uses JSON as described in RFC 4627.
    5. Apple has created a JSON framework, but it is private—an application distributed in the App Store cannot use Apple's private JSON framework.
    6. There are several third-party JSON implementations for OS X and the iOS:
      1. TouchCode's TouchJSON which is distributed under the MIT license.
      2. JSON Framework with a simple license.
      3. An Objective-C wrapper for YAJL ("Yet Another JSON LIbrary") with the same license as for JSON Framework.
    7. Here are some benchmarks comparing each JSON implementation.
    8. Although YAJL runs slightly faster than JSON Framework in the benchmark, both have nearly identical performance characteristics. However, the Foursquare2 Objective-C wrapper (see below) uses JSON Framework, so I think JSON Framework should be the preferred JSON wrapper for our app.
    9. foursquare requires the use of OAuth2 to manage authentication to user data.
      1. OAuth2 is easier to follow than OAuth, but is still a bit tricky. However, foursquare does explain how it uses OAuth2. I used Constantine Fry's source code to get a handle on how to deal with OAuth2 from a coding standpoint (see below for a link to Constantine Fry's foursquare API wrapper).
      2. OAuth2 is a three-step dance. The first step is to open…
    10. For the purposes of OAuth2, I have dubbed our app You-I-See. We can change this.
    11. In addition, for the purposes of OAuth2, I have dubbed our app's website as you-i-see.org. Again, we can change this.
    12. Finally, for the purposes of OAuth2, I have named our (dummy) callback website you-i-see.org. Once again, we can change this.
    13. Our client ID is: WIV1A40XFG4NLJS2KW2LZLUYU0QQZOZYQLYAWPL0CGW5G251
    14. Please talk to me (RIch) for our client secret…or find it in our app's source code. Do not distribute the client secret!—it is the keys to our foursquare kingdom. We can always generate a new secret, but we want to avoid doing that.
    15. Foursquare2 is a foursquare wrapper for OS X and the iOS by Constantine Fry. The code is very rough, and much in it will need to be corrected/re factored, but it serves as a good starting point for dealing with the foursquare API v2..
  4. background processes
    1. allow user to enter recurring places/days/times
      1. classes
      2. office
      3. hours
      4. lunch time
      5. meetings
      6. other?
    2. I was thinking that the simplest way to do this is the leverage other information on the iOS device. That is, the device already has a calendar that notes locations for events. It might be simplest to integrate our app with the calendar app built into the iOS. What the user of our app might do is simply indicate which calendars should be used to check into places at UIC. So long as the calendar entry names a location for the event, then our app might use Google's forward geocoding (see earlier discussion) and attempt to use that to check the user in.
    3. We'll want to use EventKit to do that.
  5. social aspects
    1. allow user to organize meetings at places on (and near?) campus
    2. invite people to those meetings
    3. are there push aspects to tips/news?
  6. mapping
    1. show best routes from place to place
      1. walk, bus, drive