Last month I was given the opportunity to write an article for The Pragmatic Programmers great magazine called “PragPub”. I am happy to say that the article I wrote for them was published in this month’s edition. The article, titled “Touching the Core”, is a walk through Apple’s great addition to the Core Data API for the iPhone.
Specifically this article walks through using the NSFetchedResultsController and some best practices in its use. The magazine is available for free on their website, The Pragmatic Bookshelf.
For those not aware, when you compile an Objective-C application, whether it be for the desktop or for Cocoa Touch devices, the debugging symbols are stripped out of the binaries. Therefore, unlike other languages such as Java, when a crash occurs, there is virtually no way to determine where the crash occurred. However, when the applications are compiled, a dSYM bundle is generated. This bundle allows us to match up the debugging symbols with the application’s crash log to help determine the cause of the crash.
October 17th and October 18th of this year, the Voices That Matter conference will be occurring in Boston. I will be speaking at this conference on the subject of Core Animation. In addition to myself, there is a very nice list of speakers at this conference including Aaron Hillegass, Daniel Jalkut, Fraser Speirs and many others.
Currently, you can get $200.00 off the the price of the conference if you sign up before the 12th of September.
In addition, if you use the speaker code ‘PHASPKR’, you can receive an additional $150.00 off the price. That is a combined discount of $350.00 if you sign up before September 12th.
Having finally decided that I prefer the 1920×1200 display of the 17″ Macbook Pros I am finally committing to one size of laptop. To help force myself into that commitment I am going to be selling my gently used late 2008 15″ Macbook Pro.
The specs are:
- 2.53 Ghz Intel Core Duo
- 4GB RAM
- 320 GB Harddrive
- 512 Nvidia Video cards (9400 and 9600)
- 2 USB
- 1 FW/800
All of the original hardware and equipment are included.
The asking price is $1,800.00 plus shipping.
The machine is in perfect condition as shown in these photos on flickr (http://tr.im/kQ11).
If you are interested in this machine please contact me at marcus at cimgf dot com.
Thanks to the ability to have configurations in a Core Data Managed Object Model and being able to save data to multiple Persistent Stores, it is possible to have a Core Data Model that is constructed from not only an internal model, but from the models of all the plug-ins that are loaded into the application.
In this example we are going to build a basic application with the following requirements:
- A plug-in framework
- Plug-ins can extend the managed object model of the application
- Removal of a plug-in should not corrupt the persistent store.
I am happy to confirm that I will be at WWDC this year in San Francisco. I am making this trip a little tighter, time-wise than I have in the past so I will be arriving on Sunday, June 7th and leaving on June 13th.
I normally post my nighttime plans on twitter (@mzarra) so if you are interested in having a chat then that is the best way to track me down. I will also be tweeting which sessions I am going to throughout the day.
I look forward to seeing everyone there, it should be very interesting as always.
In some recent discussions I have been shocked to realize that many developers treat DEBB as gospel. This is a terrible idea. DEBB is written by people like me and I am a moron.
As part of working with the print world I occasionally have to actually print something out. Publishers like to have paper copies of contracts, tax documents, etc. Its a pain in the rear and outdated but a necessary evil at this point.
One such occasion happened today and I needed to mail out a new signed contract to THe Pragmatic Programmers. As luck would have it, I lost my aging copy of Mail Factory, an app that prints nice mailing labels, since the last time I needed to print a label. No big deal, I went to their website and tried to download a new copy. Since the last time I used it, about a year ago, they have cancelled that product and rebranded it Labels & Addresses. Still no big deal, I downloaded the new application and recreated my label.
When I went to print the label I saw in the preview window that they printed “trial version” on the label. Ok, now this is starting to get annoying. If you are going to let me demo the software, let me demo it! Don’t put trial version on the very first label I try to print!
I took a deep breath, remembered that I have been using their software for many years now and decided to just buy a license. They even took my old license in and gave me a discount. Blood pressure dropped, things were fine. Then I ran into their payment processor — Digital River.
I am stunned, stunned, that anyone is still using these thieves! Immediately they try to charge me a “license backup” fee which is an Opt-Out. Annoyed, I opt out of that. On the payment page I have a choice for PayPal. Surprise, there is a $3.50 “manual processing fee” for PayPal. This is NOT 1998! Still, I wanted to print a pretty label so I back out, add a credit card and hit process. I am then presented with this:
Did my order go through or not? Who knows? I check my credit card provider, no charge. But are they slow or did it fail?
I contact the software vendor but they are only open until noon EST. Guess I will find out tomorrow or the next day since their site claims they strive to respond within 1-2 days. A happy customer this does not make.
Do not do this to your customers. Stop using these payment processing services that charge you insane amounts of money and screw your customers over. Spend a day (yes it only takes ONE day) and write your own that links to Google or PayPal. Or just use E-Junkie like I do. This is a customer facing system. When you bend your customers over with additional fees, cryptic error messages and other junk, they are not going to come back to you and say “please sir I would like some more”.
Also, respond to customer email within 24 hours. Don’t let it sit. Don’t give your customers a 7 hour window per day that you handle email. This is just bad.
I deleted their software, will be asking for a refund (IF they ever charge me) and I wrote the label by hand. I will not be going back to them any time in the future for any of their software unless they stop using Digital River.
Every once in a while I run across a situation that just amazes me. While this topic is not strictly about software development it is about the subject of the business of software.
Our customers give us money for something we have already written.
This is an important point to grasp. We write software once and sell it many times over with no production costs other than initial development. Unlike almost every other industry in the world we only have to write the software once! We do not have to produce something new every time a customer wants to purchase something from us.
As most of you know, Scotty is hosting a developer’s conference next year in England. To make this event even more enticing, he has just announced a Christmas offer.
Sign up for MacDev2009 before the 24th of December and get FREE copies of both Code Collector Pro and Changes App together worth over Â£40.
There are going to be some great speakers at this event and I am looking forward to it.
Now that the NDA has been lifted we can all finally come out of the closet :)
If you have not heard, O’Reilly is hosting a conference on November 18, 2008 to discuss all things iPhone. I have been invited to attend the conference as a Panelist.
Please come and join the conference, if nothing else, to heckle me :)
The list of speakers (as opposed to panelists), is quite impressive and definitely worth the trip.
A couple of weeks ago we discussed how to build frameworks and how to bundle them with a Cocoa application. This week we are going to build on that knowledge and add Plug-ins to a Cocoa application.
There are numerous situations where creating your own framework is advantageous. Perhaps you have a block of code that you use repeatedly in many different projects. Perhaps you are building a plug-in system for your application and want the infrastructure to be available both to the application and to any plugins that are coded.
A Cocoa framework is another project type in Xcode. The end result is a bundle, similar to an application bundle. Inside of this bundle is the compiled code you wrote and any headers that you want exposed. The headers are important. Without them, just like any other piece of Objective-C code, it is very hard to code against.
Sync Services have come a long way in Leopard. Before Leopard it was an extremely complex operation that was almost completely manual. Needless to say, this sucked and it was probably one of the reasons it was shunned by most developers.
If you are using Core Data in a Leopard application then Sync Services is so trivial that you should be syncing if it makes sense. In this article we are going to cover syncing in a non-Core Data situation as that is quite a bit more complex.
If you have read the Sync Services documentation then you know it is complex. Let me dispel an illusion right away. It is hard. It is not poor documentation, syncing is very hard and very few people get it right. Take a look at Omnifocus to see an example of a company thinking it is easy and losing data. Therefore if you are expecting this subject to be trivial you will be disappointed.
In this example we will be syncing with the bookmarks schema and displaying them in a simple outline view. The outline view itself will be editable and those edits can be synced back. Not terribly useful but provides a very simple example. (more…)
Let us pretend for a moment that NSXMLDocument was not available to your Cocoa application for some reason. Perhaps you have low memory requirements, perhaps you are running on a slimmed down version of OS X. Whatever the reason, for the purposes of this exercise, NSXMLDocument does not exist.
Let us now assume that we have a requirement to parse an xml document quickly and without loading the entire tree into memory in a object structure. In a situation like this libxml comes in handy. Unfortunately it is quite a bit more complicated than calling alloc init on NSXMLDocument.
libxml is a C library that is included with all current releases of OS X. With this library we can quickly read in a document, scrape the information we need out of that document and avoid loading the entire tree into memory at once. In addition, libxml (and more specifically xmlReader) does this very quickly, far faster than NSXMLDocument which is very useful when you have a lower end CPU. In this project we are going to create a simple application that reads in an xml file containing a list of people, their names and their ages. For the purposes of demonstration we are going to load that data into an array of NSDictionary objects and display it in a standard Cocoa window.