I don't think they were trying to be. Broadly, those are the key bindings to copy a column of characters (presumably numbers) paste them into the `scratch` buffer and sum them, give or take some assumptions
This is getting ridiculous. The Objective-C runtime allows dynamic method calls, using performSelector: which takes a selector name, which can be constructed from any random string. This basically means any static analysis tool can be trivially fooled. Apple might as well start rejecting all apps which use any "features" of their runtime.
Who cares whether a method was overridden or called or whatever -- if it's in the runtime it can be invoked.
Who cares whether a method was overridden or called or whatever -- if it's in the runtime it can be invoked.
API's aren't hidden to make developers lives harder, but rather because they may not be stable and may or may not exist in future releases. And if they do exist, they may not do the same thing anymore.
So, users care. Not about the method itself, but about why their app that they may have paid money for has stopped working after they upgraded their iPhone.
I wasn't implying that we should all start using hidden APIs. Personally, I have a hard enough time using the documented API. My point was that a tool to catch such uses is pretty pointless, as it can be defeated using other entirely "legitimate" API calls.
To your second point, even apps that stick to using only documented API methods have known to fail after iPhone OS upgrades. So, let's not delude ourselves (or the users) into thinking we're writing robust (or worse, future proof) software simply by adhering to Apple's guidelines. All I would ask from Apple is that they get out of my way of getting an update to my users as quickly as I can.
The final game is a fully graphical game. I had to decide what method to use to bring graphics into Lisp that would be the most valuable to learn. Since almost everyone can benefit from learning the nitty gritty of how the web works, I used the following steps:
Step 1: Write REPL game
Step 2: Write a web server from scratch using sockets
Step 3: Write an SVG library
Step 4: Implement an inline SVG-based HTML5 browser frontend for the game
If you're taking votes I'd love to see some OpenGL demos using something like the cl-opengl bindings.
I don't know the extent of your book, but navigating asset management has been a bit of a challenge. I know there's a few libraries out there but docs/examples are at a premium. I'm using cl-devil and looked at freeimage, also looking for 3d model importing and the like.
Second that. It's really easy once all the electronic filing paperwork has been filed with the IRS and State. Also, their system is the same as Paycycle, just rebranded (I think).
This may seem really "out there", but I keep all the code of a package in one file. Not only does this reduce or eliminate asdf/defsystem maintenance, which I loathe doing, it also helps avoid the kind of habit you described. After all, the edits are all in one place.
To borrow a quote from the movie Highlander - "There can be only one (file)!"
the first thing I do with any new project is create a directory for it, the package.lisp file and the .asd. That much I do (though I should automate it, like weblocks does with defproject, hmmm)
but after that it's one file, until it gets too bloated and redundant, then i break it to two small redundant pieces.
Thought sometimes its too tempting to do everything in the repl: cramming a fat piece of code into one form and save the result as (setf foo *) if I like what I see :-D usually for experimentation with a new library I'm using for the first time.
"Kudos to Pierre Chatelier for writing the book that Apple and Alan Kay could not."
What does Alan Kay have to do with Objective C? He invented Smalltalk not Objective-C. Perhaps the author meant Brad Cox (http://en.wikipedia.org/wiki/Brad_Cox).
1. Concurrency done right -- take a look at Erlang or Clojure to get an idea of multi-threaded programming without the nightmare of locks and deadlocks. This feature will become increasingly important as CPUs are scaled by integrating more and more cores.
2. Testability -- immutable variable bindings and carefully sequestered state changes means your code is vastly better suited for testability.
3. Distributed Computing -- this maybe a controversial claim, but in my experience building distributed systems in Java, Common Lisp and finally Erlang (on separate projects of course), Erlang stood out as the most robust and understandable distributed model of all.
In so far as 3rd party libraries go, a lot of newer FP languages are built on top of existing VM platforms (e.g, Clojure on JVM, F# on .NET), and are able to leverage all their available libraries. Bear in mind, that while these libraries may help build your application slightly more quickly, you end up sacrificing the benefits of FP by integrating their non-FP code.
I used Erlang to build a mid-sized web service app (i.e. REST only, no user interface) which serves more than two million connections per day (sustained), and is deployed on a half dozen nodes across the Internet -- different ISPs (yeah, I'm a masochist). The app integrates the Mnesia database (with replication) and the Yaws web server (with my own extensions).
On any given node there were between 1,000 and 3,000 processes (threads) handling requests and internal jobs. I had supervisor trees for ensuring that everything kept running. All that worked like a charm.
Most of the issues I ran into were with getting the host infrastructure (Linux in my case) configured correctly. Things like number of available socket handles etc. Erlang dies unceremoniously when it runs out of system resources.
Mnesia is really nice. My database isn't very big (~500K objects), but still needed to be redundant and highly available. Setting all that was a breeze compared to most SQL dbs.