{"id":2078,"date":"2003-12-30T21:29:50","date_gmt":"2003-12-31T00:29:50","guid":{"rendered":"http:\/\/brockerhoff.net\/bb\/viewtopic.php?p=741"},"modified":"2010-05-08T22:56:40","modified_gmt":"2010-05-09T01:56:40","slug":"zingg-out","status":"publish","type":"post","link":"https:\/\/brockerhoff.net\/blog\/2003\/12\/30\/zingg-out\/","title":{"rendered":"Zingg! out&#8230;"},"content":{"rendered":"<p>Well, <a href=\"\/zingg\">Zingg! 1.3<\/a> is out.<\/p>\n<p>It took a few days longer than I expected. First there were some more bugs and suggestions; then I tested it on Jaguar and two things didn&#8217;t work at all; and finally I had a run-in with configuration problems for my local database server. If you&#8217;re wondering about the last item, it&#8217;s because Zingg! 1.3 now incorporates the latest version of my online version-checking code&#8230; which incidentally feeds me the user&#8217;s version of Mac OS X for my statistics.<\/p>\n<p>As I type this, the <a href=\"http:\/\/www.versiontracker.com\/dyn\/moreinfo\/macosx\/12965\">VersionTracker page<\/a> counts 387 downloads. If past stats are any indication, that means about 800 or 900 downloads total&#8230; many people go directly to my site. My site statistics run every midnight, so I have no exact figures yet. Meanwhile, 206 of those people (let&#8217;s say 25%) used the new version-checking code. 204 are on Mac OS X 10.3.2, 2 are on 10.3.1. No earlier versions at all! I&#8217;ll have to check whether this is a bug or a reliable statistic&#8230;<\/p>\n<p>Then again, this is good news, as I&#8217;d like to do Panther-only software in the near future. I&#8217;ll try and hurry up the next version of XRay to get stats from those users, too.<\/p>\n<p>The Jaguar incompatibilities were quite puzzling. The Zingg! Configurator relies on a main <a href=\"http:\/\/developer.apple.com\/documentation\/Cocoa\/Reference\/ApplicationKit\/ObjC_classic\/Classes\/NSTableView.html\">NSTableView<\/a> to show a list of applications. I wanted to allow the user to sort the table by any of the 4 table columns. The standard way of doing this, by clicking on the column headers, seemed simple to implement. Since I used <a href=\"http:\/\/developer.apple.com\/documentation\/Cocoa\/Reference\/Foundation\/ObjC_classic\/Classes\/NSURL.html\">NSURL<\/a> objects to store the application names and paths, I subclassed this to store a complete table row in each object and then used the standard <a href=\"http:\/\/developer.apple.com\/documentation\/Cocoa\/Reference\/Foundation\/ObjC_classic\/Classes\/NSArray.html\">NSArray<\/a> <a href=\"http:\/\/developer.apple.com\/documentation\/Cocoa\/Reference\/Foundation\/ObjC_classic\/Classes\/NSArray.html#\/\/apple_ref\/doc\/uid\/20000137\/BABBHAGJ\">sortedArrayUsingSelector:<\/a> method to sort this in different ways. It worked on the first try on my Panther development machine&#8230; but then in Jaguar it threw an exception indicating that my subclassing wasn&#8217;t working at all.<\/p>\n<p>This was complicated by the fact that I&#8217;ve migrated all my projects to Xcode, so I couldn&#8217;t use a debugger on the Jaguar machine&#8230; but I finally found some hints that the NSURL internal workings had changed significantly from Jaguar to Panther &#8211; apparently it used to be a <a href=\"http:\/\/www.cocoadev.com\/index.pl?ClassClusters\">class cluster<\/a>, but wasn&#8217;t anymore. To save time, I changed from a <em>is-a<\/em> to a <em>has-a<\/em> pattern for my table row object, and this worked again.<\/p>\n<p>Then I ran into a Jaguar bug: the delegate <a href=\"http:\/\/developer.apple.com\/documentation\/Cocoa\/Reference\/ApplicationKit\/ObjC_classic\/Classes\/NSTableView.html#\/\/apple_ref\/doc\/uid\/20000118\/BCICHEGF\">tableView:didClickTableColumn:<\/a> method isn&#8217;t always called, unlike in Panther. The workaround is to turn on the option to allow column reordering (by drag&amp;drop) &#8211; I thought it kind of useless but found no other way.<\/p>\n<p>Then (after already uploading the disk image) I had to go back and rewrite the docs for the changes&#8230; c&#8217;est la vie. At least it&#8217;s out now and no bug report&#8217;s arrived so far&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Well, Zingg! 1.3 is out. It took a few days longer than I expected. First there were some more bugs and suggestions; then I tested it on Jaguar and two things didn&#8217;t work at all; and finally I had a run-in with configuration problems for my local database server. If you&#8217;re wondering about the last [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4,19],"tags":[26,30],"class_list":["post-2078","post","type-post","status-publish","format-standard","hentry","category-dev","category-software","tag-cocoa","tag-zingg"],"featured_image_src":null,"author_info":{"display_name":"Rainer Brockerhoff","author_link":"https:\/\/brockerhoff.net\/blog\/author\/rbrockerhoff\/"},"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1q3Zc-xw","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/brockerhoff.net\/blog\/wp-json\/wp\/v2\/posts\/2078","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brockerhoff.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brockerhoff.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brockerhoff.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/brockerhoff.net\/blog\/wp-json\/wp\/v2\/comments?post=2078"}],"version-history":[{"count":0,"href":"https:\/\/brockerhoff.net\/blog\/wp-json\/wp\/v2\/posts\/2078\/revisions"}],"wp:attachment":[{"href":"https:\/\/brockerhoff.net\/blog\/wp-json\/wp\/v2\/media?parent=2078"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brockerhoff.net\/blog\/wp-json\/wp\/v2\/categories?post=2078"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brockerhoff.net\/blog\/wp-json\/wp\/v2\/tags?post=2078"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}