Monday, April 22, 2013

tinyxml issue with ctype.h

Compiling tinyxml for iOS?  Seeing this kind of error?

tinyxml.cpp:25:10: fatal error: 'ctype.h' file not found

You probably just upgraded Xcode, or just installed it.  You don't have the right simulator installed.  Go  to Xcode preferences -> Downloads tab and install the right simulator.

Thursday, April 11, 2013

Very simple Google Spreadsheet code

FYI - this blog post is from a long time ago, and I think things have changed quite a bit.  I'm leaving it here because some parts my still be useful, but definitely read the comments and don't expect it to work out of the box.   - James, 26 Nov 2013

(Update - see comment from Sean about this no longer working due to auth changes from Google)

I wanted to use data from a google docs spreadsheet in a project, and the sample code all talks about how to authenticate and get lists of documents for a user.
In my case, I already had a public document that I wanted to read. 
You’ll want to read the doc here first, but there were two gaps. 
  1. It wasn’t straightforward (at least for me) to figure out exactly what the URL for a public spreadsheet should be (the doc concentrates on private documents, and assumes you’re going to be iterating through a list of available spreadsheets, not going straight to a specific one).
  2. It wasn’t clear which Java classes mapped to the URLs I had.
So here’s a very simple sample, reading data from this public spreadsheet:

The output:
The code:
package com.banshee;



public class SpreadsheetSucker {
  public static void main(String[] args) {
    SpreadsheetService service = new SpreadsheetService("com.banshee");
    try {
      // Notice that the url ends
      // with default/public/values.
      // That wasn't obvious (at least to me)
      // from the documentation.
      String urlString = "";

      // turn the string into a URL
      URL url = new URL(urlString);

      // You could substitute a cell feed here in place of
      // the list feed
      ListFeed feed = service.getFeed(url, ListFeed.class);

      for (ListEntry entry : feed.getEntries()) {
        CustomElementCollection elements = entry.getCustomElements();
        String name = elements.getValue("name");
        String number = elements.getValue("Number");
    } catch (IOException e) {
    } catch (ServiceException e) {