The RefCard is intended to be a jumping off point and provides information about and links to the frameworks that now support GAE as well as external resources to help you dive deep if this new arena of cloud computing. Grab a copy and send me feedback.
Of all the cities I’ve presented in this year for both NFJS, private training, and user groups, two stand out so far as real gems: Minneapolis and Denver. The audiences are highly engaged and ask challenging questions. This is both scary and energizing as a presenter. You are being asked to call on not just your prepared slides, but your experience and catalog of knowledge to come up with a relevant answer. Sometimes, the audience will even help you with the answers, like on the defaults for Objective-C’s @property. It turns out, the answer is: atomic. Thanks Johnny Wey!
Sometimes things just don’t go perfectly in the open source world. There are times where it seems like a dot release cures many things, but then breaks/regresses several important ones as well. Like the XML parsing in the iPhone demo. Turns out, it was a Grails 1.1 issue (which I upgraded to from 1.0.3 to solve another bug) in which optional URL parameters are wrongly required. Grails 1.1.1 fixes it, which I validated at 11pm last night, but it would have been fun to live fix this with the audience. This reinforces the point in my talk though that you should always check your web services, possibly using curl, or SOAPui prior to connecting your iPhone application to them.
It’s amazing to see how many of the presenters and audience members are on Twitter and posting their experiences about the conference. That’s a real change from last year, where hardly anyone was live posting in that fashion. I hope to see you all again in the Fall at the next Denver NFJS, loaded with more difficult questions and an inquiring state of mind.
After many sessions of debugging and even memory inspection not yielding fruit, I’ve finally discovered what caused my previous RESTful demo apps to have sporadic behavior, in addition to the memory leak of the synchronous call.
Today’s problem solving summary:
XCode projects cannot have commas anywhere in the path up to the location where they are stored or else you’ll get an error message of: ld: -filelist file not found: <Project Path>
All RESTful web services called via the NSURLConnection APIs must return a non-null payload.
This bit me because my “Add Contestant” function was adding the contestant and returning void. I now return a string of “Success” to satisfy this requirement. The observable failure is very quiet, which made it so hard to debug; every other web service call appears valid, but never actually makes a call across the wire. This was proven via TCPDump. All the web service call callbacks are properly called in the Objective C side of the program. It just silently failed and passed back a null payload in the response data structure.
As you may be aware, the git pull command actually does two things under the covers. It does a git fetch to freshen your tracked remote branch and it does a git merge to merge it into the linked local branch. Sometimes this can go awry if you’ve been experimenting with files locally and forgot to return them to a checked-in state. Git errors out nicely, saying “I don’t know what you want me to do, but I’m going to be cautious here and just let you tell me exactly how to handle this.”
Error Message
One of the possible error messages you’ll see is:
error: Entry 'myapp/src/main/resources/scripts/launchapp.bat' not uptodate
Solutions
If your local changes are unimportant to you and you just want to get back in alignment with the remote branch, you have two options to apply depending on the state of your local files. First, you can reset any tracked files to their last committed state via the following command. This discards any local changes to any tracked files.
git reset --hard
Second, you can discard any untracked local files via the git clean command, in the case that they are colliding with files that the remote branch has actually added and is now tracking. You can purge your repository’s current branch of untracked local files by typing:
git clean -f
And in case you are paranoid about what this will remove, you can get a safe preview of what it would do by typing:
git clean -n
Which outputs a preview list like so:
[~/Documents/Code/myproj.git]: git clean -n
Would remove morecruft.java
Would remove unwatedfile.txt
Open source is gaining momentum like never before in the most respected of institutions and enterprises. Originally, the choice to use open source was made only by smaller companies for strictly financial reasons. Those reasons still hold, but are now joined by a chorus of other great points in the current intellectual property, commercial vendor, and economic state that the business world is currently in.
Interoperability is strongest in the Open Source realm. Open Source enjoys the absence of financial motivations to close data inputs, and the existence of desire to have adopters join in and migrate from other open and closed platforms. You’ll find that there are numerous import & migration tools for your existing data, and you’ll discover that your data is stored in highly interoperable formats for future migration to any platform your business needs dictate.
Cost continues to be a factor leading towards Open Source in today’s economic climate. Open Source wins every time on initial acquisition cost, but also on maintenance expenses over time. You can budget for well known project costs without yearly surprise increases in maintenance just because a commercial vendor raises renewal prices.
Quality is also a strong point of Open Source. This can be surprising to teams who think that well funded commercial products would have higher quality due to all the talent on such teams. But Open Source also sports excellent talent, as well as the hidden weapon of breadth of automated unit tests, constantly guarding the product’s quality at each and every release.
In this uncertain economic climate, it can actually make more sense to know you perpetually have the full source code to your product. This removes the dangerous dependency on the continued solvency of a particular vendor. Open Source allows you to control and know your software destiny beyond any outside economic influences.
In sum, Open Source presents an attractive package in terms of cost, sustainability, and quality that are a perfect fit for the current business conditions of 2009 and beyond.