Friday, November 30, 2012
It’s even harder to remove the iPhone 5 from the Elevation Dock than I expected. It requires two hands almost every time, and it makes me want to throw the Dock out the window. The Lightning connector on Apple’s cables not only wasn’t designed for this use, but substantially hinders it.
Oh well. Is it possible to make an (official) Lightening connector that’s low-friction?
Doug Gregor, who works on Clang at Apple (via Hacker News):
The C preprocessor has long been a source of problems for programmers and tools alike. Programmers must contend with widespread macro pollution and include-ordering problems due to ill-behaved headers. Developers habitually employ various preprocessor workarounds, such as LONG_MACRO_PREFIXES, include guards, and the occasional #undef of a library macro to mitigate these problems. Tools, on the other hand, must cope with the inherent scalability problems associated with parsing the same headers repeatedly, because each different preprocessing context could effect how a header is interpreted---even though the programmer rarely wants it. Modules seeks to solve this problem by isolating the interface of a particular library and compiling it (once) into an efficient, serialized representation that can be efficiently imported whenever that library is used, improving both the programmer's experience and the scalability of the compilation process.
There’s a PDF of his slides. This seems like a great idea that will improve compilation times while maintaining compatibility.
Update (2012-12-10): Here’s the thread on Lambda the Ultimate.
Recently I had some free time so I broke down this enum situation and also included some of the history and present and also maybe even a little bit of the future of enumerated types in Objective-C.
I think Netflix missed the boat, bigtime. They could have been the place on the net to learn about and watch and share movie experiences. I think they could have started a match.com type service. If you’re in a strange city and would like to go to the movies with someone with similar tastes, just click a few buttons. They were gathering all this information about people’s movie preferences. But they were reluctant to build systems around it. And reluctant to open it up to app developers. I think we all missed out on something, because movies at least to some of us are such an important form of personal expression.
I’m not exactly sure what Netflix should have done differently, but this resonated with me. When I joined the service in 2001, I rated movies and put every one that I wanted to watch in their queue. I saw it as an online database of my own movie information. That broke down some years later when I hit the maximum queue size and started augmenting it with a text file. Even with Ajax, managing the queue always felt cumbersome. And they never really built out the service in the way that I predicted. Why was there nowhere to add notes, such as why I had added a particular movie or what I thought of it? Why did their database and summaries remain so poor?
A few weeks ago, I deleted my entire Netflix queue except for the next few discs that I want to receive. I now manage the queue in a single text file. The new commands in BBEdit 10.5 make reordering easy. It syncs to my iPhone via Dropbox and WriteUp.
I still like Netflix the DVD-mailing service, though. The selection is top notch. The price, though higher than before, is still reasonable. With Blu-ray, the video quality is better than iTunes, except for some TV shows where Apple offers HD quality and only a DVD exists. You get commentary and other special features. You can keep the movie longer than 24 hours.
I had previously had the radio mode set to all 802.11n, because I have a separate network for the few remaining 802.11g devices I have, and I thought I was benefitting myself by preventing the network from dropping down to g speeds to accommodate those devices. This turned out to be a counterintuitive mistake - if you lock the radio mode to 802.11n, it CANNOT achieve maximum throughput, and it cripples most modern connections. The only acceptable radio mode I’ve found is 802.11a/n - 802.11b/g/n (Automatic).
Now, wherever you need to send a signal to Instruments from your app, you just add this line of code:
DTSendSignalFlag("com.invasivecode.mytracepoints.app.point", DT_POINT_SIGNAL, TRUE);
You can also mark sections using
At the time of this release, the iPod had not yet made its public debut—that came later in the year. So those MP3s you were ripping? They were meant to be synced to some other MP3 player, such as those that were available from Creative Labs or Rio.
Look at that brushed metal window with Aqua buttons and a square Close box.
However, as it turns out, if you have app syncing off, and then restore from an iTunes backup, what happens is this: you get a freshly restored iPad with all of your data, and exactly zero apps installed. Apparently, the ONLY way to get them back is to painstakingly go through your purchased list, figure out what you actually had installed, and bring them back one by one. And if you happen to forget something, you can end up with a lot of orphaned data in your Other section where the app’s data still exists on your iPad but the app doesn’t (the only way to delete that data is to magically figure out which app it might be, reinstall it, and then delete it again). Moreover, once you turn off sync apps, there’s no evident way to turn it back on again without completely wiping the list of apps that are already on your device and starting fresh.
Ian Delaney (via Dave Nanian):
You install the app and use it to look at pictures in your gallery. As soon as you open a picture, you’re told to go to photobeamer.com in any web browser (not the one on your phone!).
Point the phone camera at the QR code that appears on the website, tap it when it’s visible on the camera screen […] your photos are automatically transmitted to the website and shown on the screen without another click.
This Windows Phone app offers AirPlay-like photo sharing to any device with a Web browser—no extra hardware required.
I would argue that this method should use
-boolValue to check the options dictionary values, but I would also argue that this is something the compiler should be handling when it translates the literal syntax into an object. I’ve filed radars on both of these issues this with Apple (rdar://12761147 and rdar://12761621).
He found that GLKit checks the identity of
NSNumber objects rather than their value and that
@(YES) doesn’t have class
Thursday, November 29, 2012
The iPhone version of Fantastical is now available. Like the Mac version, it’s great at creating new events. It also has a great list view. At the top is the DayTicker, a horizontal list of days reminiscent of OmniFocus’s Forecast view, except that it’s scrollable. Below that is an editable list of events. Somehow, even with the DayTicker, it’s able to show more events at once than the built-in Calendar app’s list. The month view also has better information density.
I’m pretty sure that Fantastical will become my go-to iPhone calendar app, however there is one area where Apple’s Calendar is better. Apple’s Calendar app can display the current day number on its home screen icon. Third-party applications aren’t allowed to do this.
See also the articles by Ellis Hamburger and Federico Viticci.
Update (2012-12-02): Dr. Drang notes that there’s no way to get alarm notifications to open Fantastical rather than Calendar. Fortunately, I don’t open events from notifications.
Wednesday, November 21, 2012
I’ve seen attempts at duplicating Apple’s face detection technology. (Apple is far from the first company to do it.) There are libraries on GitHub and various blog posts for doing so. But recently I realized that Apple added support for face detection in OS X Lion and iOS 5. It seemed to slip under my radar of new shiny things. Developers now have a direct link to this powerful technology on both platforms right out of the proverbial box.
Tuesday, November 20, 2012
One of the worst aspects of Windows 8 for power users is that the product’s very name has become a misnomer. “Windows” no longer supports multiple windows on the screen. Win8 does have an option to temporarily show a second area in a small part of the screen, but none of our test users were able to make this work. Also, the main UI restricts users to a single window, so the product ought to be renamed “Microsoft Window.”
Update (2012-12-02): Donald Norman:
Here is my prediction. The requirements of small screen, mobile devices are incompatible with those of large screen, fixed devices. All the computer companies are learning how to deal with this. It is not unusual for first attempts to have flaws. Microsoft, however, is famous for building flawed systems, but focusing upon them and improving them. By version 3, they get it right.
1. Scammer makes an extremely simple iOS app and submits it to Apple.
2. Once it’s approved, they change the screenshots, description, and name — things you can edit at any time. Piggyback off a popular game!
It seems like demos/trials would be an easy solution to this problem. The same basic issue applies to legitimate apps. I’ve had people buy my apps from the Mac App Store and be unhappy because they did not include a feature that they thought would be in the app, but which wasn’t mentioned in the description.
Of course, this also happens, to an extent, for apps purchased directly from my Web site. But these are easier to deal with because I can quickly refund the purchase at no cost, whereas with the Mac App Store I have to direct the customer to Apple support, which has an official policy of not offering refunds.
Update (2013-01-09): Apple:
Beginning January 9, app screenshots will be locked in iTunes Connect once your app has been approved. New screenshots may be uploaded when you submit a binary for an update to an existing app or a new app.
It would be better if Apple could approve screenshot changes without requiring a new binary that may take weeks to review.
Of course it would be nice to see Foundation provide its own proper IDN support.
Apple has always been given a pass with the cloud stuff because they make such great hardware and the on-device software experience is top-notch. How nice it is to hold an iPhone in my hand is of little consequence to me if I can’t actually use it. As more stuff you care about makes its way into the cloud, Apple’s inability to reliably build a web service is becoming a bigger hindrance than my phone not working if I hold it the wrong way.
Tokens looks like a great new app for generating and managing App Store promo codes—much easier than using the iTunes Connect Web site.
And as the year comes to a close, a bit of sad news: two of my good friends, John Siracusa and Marco Arment, are retiring their shows, which are coming to an end in December of 2012. Both of these shows, Hypercritical and Build and Analyze, started at about the same time, in early 2011 and late in 2010 respectively. Both Marco and John told me independently at the outset that they had no idea how long they might want to do a show for. But I didn't care: I'm always happy to team up with guys as awesome as they are for a couple of hours each week and help create something as awesome as their shows have been. At their conclusion, each of these shows will have recorded over 100 amazing episodes, many of them over two hours long.
Thanks to John and Dan for so many great episodes of Hypercritical.
This is a crazy task, because every developer keeps all its rights, and VideoLAN has little rights on VLC. This involves contacting a few hundred developers, some who were active only 10 years ago, some with bouncing mails, and people spread across continents, countries, languages, OS…
See also parts 2 and 3.
Thursday, November 15, 2012
[Don’t] Use a short password—no matter how weird. Today’s processing speeds mean that even passwords like “h6!r$q” are quickly crackable. Your best defense is the longest possible password.
Longer is better, but aren’t key derivation functions supposed to protect short passwords?
Overall, I think the article gives the mistaken impression that the problem is passwords, when the real problem is the ease of resetting them:
To reset a lost login, you need to supply answers to questions that (supposedly) only you know. For his Apple ID, Pogue had picked (1) What was your first car? (2) What is your favorite model of car? and (3) Where were you on January 1, 2000? Answers to the first two were available on Google: He had written that a Corolla had been his first car, and had recently sung the praises of his Toyota Prius. The hackers just took a wild guess on the third question. It turns out that at the dawn of the new millennium, David Pogue, like the rest of the world, was at a “party.”
They wanted to get into his Google Apps account, but it was protected by two-factor. What to do? The hackers hit his AT&T cell phone account. As it turns out, AT&T uses Social Security numbers essentially as an over-the-phone password. Give the carrier those nine digits—or even just the last four—along with the name, phone number, and billing address on an account and it lets anyone add a forwarding number to any account in its system. And getting a Social Security number these days is simple: They’re sold openly online, in shockingly complete databases.
Prince’s hackers used the SSN to add a forwarding number to his AT&T service and then made a password-reset request with Google. So when the automated call came in, it was forwarded to them.
(Apparently, this two-factor authentication was using SMS rather than Google Authenticator.)
Update (2012-11-15): Daniel Jalkut:
Of course Honan has had a little more practice than me with this, and when he saw my tweet he was inspired to ask if he could give it a shot. He and I are friends, and I trusted him to do nothing more than test the security of my account, so I agreed. He said it might take a day or two. A few hours later he sent me a screenshot of the AOL page where it was helpfully offering to let him enter a new password for my account.
I simply hadn’t tried diligently enough to get through the ridiculous “security” wizard. In the end it was as simple as knowing that I grew up in Santa Cruz (a value that I had evidently chosen to enter accurately), and that my email address was my last name at “red-sweater.com.” Totally, outstandingly, ridiculously poor security.
Once again it’s not in the URL documentation, but the behaviour of these methods actually depends on which SDK you link against. When running on OS X v10.6, or linking against the 10.6 SDK while running on a newer OS, they throw an exception when handed nil. Just like the other methods above.
If you link against the 10.7 SDK or newer, and are running on 10.7 or later, you instead get the more sensible & friendly behaviour of them returning nil. This change doesn’t even get a mention in the Foundation release notes!
Wednesday, November 14, 2012
Much as the “lickable” Aqua UI ended up doing a decade ago, a serious mistake would be to hide many of these behavioral, functional and experiential software problems under a more attractive, aesthetically unifying display layer…
Monday, November 12, 2012
Adam C. Engst:
A year after returning to private ownership after suffering under a series of uninterested corporate owners, Retrospect Inc. has simultaneously released Retrospect 10 for Mac and Retrospect 8 for Windows.
The Retrospect FAQ:
Instant Scan runs as a background process on Retrospect servers and clients to maintain a list of all the files and folders present on HFS+ (Mac) and NTFS (Windows) volumes. It uses FSEvents on OS X and the USN change journal on Windows to keep track of new, changed, moved, and deleted files. When it’s time for a backup or a restore, Retrospect gets the file listing from Instant Scan, instead of needing to scan each volume, as it did in previous versions.
Synk’s Live Sync (formerly ZeroScan) and Time Machine also use FSEvents. I’m not very fond of this approach, as it introduces an additional point of failure. Indeed, one of the FAQs is about how to rebuild the scan file if you think it’s corrupted; another is about how a file added 30 minutes ago might not be included in the current backup.
Instant Scan lets the Retrospect server back up more clients in a specified amount of time. However, to me it seems that the bottleneck is not the slow client scanning but the fact that the server only backs up one client at once. (At least, that’s how it worked the last time I used the product.) My guess is that backup throughput would be much higher if the server could let multiple clients do their slow scans simultaneously rather than have clients “instant” scan one-by-one.
In the new version of Paper released last week, you mix colors with your fingers, like it’s paint—only somehow more beautiful. This one magical feature burned a year of development time, resurrected the work of two dead German scientists, and got Apple’s attention.
To model colorant mixing you need to use subtractive color models. Adding a blue paint and a yellow paint together result in a paint that subtracts light in both the areas that the individual paints subtract in and relate to their concentrations and relative proportions—an over-simplification but conceptually true. None of the color representations referred to in the article (RGB, HVS, LAB, LUV, …) are subtractive, which is why the “yellow plus blue don’t give me green” issue arises—linearly mixing RGBs was never going to work as it’s not meant to :) Even taking a simple CMYK (e.g. a standard one like ISO Coated v2) space would have already solved this one issue alone…
For all its gains since then, however, Mountain Lion has not kept pace with the uptake trajectory of Apple’s last two editions, OS X 10.6, aka Snow Leopard, and OS X 10.7, better known as Lion.
Mountain Lion adoption has been quick for my customers, with slightly more than 50% of SpamSieve users now running 10.8. (25% are on 10.7, 19% are on 10.6, and less than 4% are on 10.5.)
Mountain Lion’s gains were again more at the expense of Lion than Snow Leopard, although the gap narrowed in October.
Snow Leopard has lost more than half its share of all Macs since Lion’s appearance over a year ago, but so far it has been resistant to Mountain Lion’s call to upgrade. In each of the last two months, for example, Snow Leopard’s losses were less than its 12-month average.
The chart of the Net Applications data is striking. It’s also interesting that a higher percentage of Macs are running Snow Leopard now than were when Snow Leopard was as old as Mountain Lion currently is. I’m not sure what’s behind this, although people seemed to agree last week when I noted Snow Leopard’s reliability.
The THINK products helped define the Mac software ecosystem in the 1980s, and I don’t think it’s an overstatement to say that the THINK products, and Andrew’s influence, made the Mac software industry successful at a crucial time. There’s a great writeup here (thanks to Philip for the link) about Macintosh Pascal and THINK Pascal and their effect on how Mac software was developed.
Update (2012-11-12): Clark Goble:
It’s hard to explain just how big a difference Think C was. There were many programming languages for the Mac but it honestly was shocking how poor Apple’s own tools were. For several years you basically had to buy a Lisa just to write Mac programs. I tried several languages but it was really when Lightspeed C got me that I think I finally started writing real programs and not just small hacks.
Friday, November 9, 2012
My colleague Dan Wood has also recently been discussing this UI pattern.
I decided to make it a re-usable component, since “Show password” is something I find myself wishing more apps offered. And thus KSPasswordField was born. Go check it out and, hopefully, include in your apps where appropriate.
I’ve often wished that NSSecureTextField offered a checkbox to show its contents.
It always feels terrible to ship a serious, crashing bug. It’s even worse in the context of the Mac App Store where developers have no direct control over the approval and release of new versions of the software. After waiting 14 days for 3.5.7 to be approved, I was excited to release it as soon as it was ready. But once you approve an app for release in the Mac App Store, there’s no going back. I can’t “wind back the clock” to make 3.5.6 available again.
I decided to remove MarsEdit from sale on the App Store until Apple approves 3.5.8.
That evening, the storm surge from Sandy, assisted by a rising tide and full moon, flooded the basement of our data center, cutting off the fuel supply to the backup generator. The next morning, Peer1 informed us of an impending emergency shutdown of the generator. We executed a protective shutdown to prevent loss or corruption of customer data. Later, when we’d secured confirmation from Peer1 that there was no imminent danger of power loss, we restarted our systems. The total duration of this unplanned, voluntary downtime was 3 hours.
FogBugz is a great service, and the team worked hard to minimize the downtime. The data center is still not on city power, but the service is running smoothly. Once things are back to normal, I think we’re owned an explanation for why there was only one data center. When I signed up for the hosted FogBugz service, it was based on Joel Spolsky’s 2007 description of their infrastructure:
Rather than setting up Los Angeles as a mere backup, we decided it would be completely live. Half our customers will be hosted from Los Angeles, and half from New York. That way we know at any time that both data centers are working and set up correctly, and we don’t have to wait until a massive failure to discover the problems with the backup data center.
Copies of the database backups are maintained in both cities, and each city serves as a warm backup for the other. If the New York data center goes completely south, we’ll wait a while to make sure it’s not coming back up, and then we’ll start changing the DNS records and start bringing up our customers on the warm backup in Los Angeles.
However, the current infrastructure page describes only a single data center.
Update (2013-03-05): Mendy Berkowitz:
All excellent questions, but as we debated the various answers we realized there was nothing wrong with our current datacenter that a second datacenter wouldn’t fix. In a disaster (natural or man made) situation, a second geographically diverse datacenter with a tested and practiced failover procedure is our best option for providing our customers with continued service.
You push code (or compiled code) to Objective Cloud. This can be done by using git (for example via GitHub) or by uploading it manually to our servers. We then make your app logic available via RESTful web services which you can access via HTTP. You can also define blocks of code that are not exposed to the public but which are triggered automatically. Once code is pushed to Objective Cloud, we scale it automatically according to your needs. We do provide an SDK which includes an Xcode template that you can use to get started; however, you don’t have to use the SDK at all. Of course you can test your app locally before pushing it to Objective Cloud.
Lots of cool stuff could be built with this.
Benny Kjær Nielsen:
The main reason for the unusual amount of time between updates is that MailMate has not yet been sandboxed and this is now a requirement for distributing through the Mac App Store. MailMate is still not sandboxed and a consequence of this release is that MailMate is no longer for sale in the Mac App Store. […] It is not yet decided when (if ever) MailMate returns to the Mac App Store.
dyld is one of the most essential parts of OS X; without it, nothing but the kernel would run. With that responsibility inevitably comes significant complexity, and
dyld has it aplenty. Some of that complexity comes from the massive backwards-compatibility requirements of
dyld, and some simply from the sheer scope of the tasks it must handle. Most developers will have no need to understand linking in such detail, but maybe the next time you get a strange error message in Xcode from the linker, you’ll have a better idea of where to look for the problem.
As almost a last ditch effort, I carefully reviewed the implementations of all my UITableView delegate and data source methods. Sure enough, I found I had implemented the above method with the wrong return value. And when I changed it to correctly return an NSInteger instead of a CGFloat, all was right with the world.
This is the sort of mistake that Xcode should be able to catch but can’t yet. The commenters suggest using Xcode’s code completion to avoid this typing in the first place.
So, if you’ve decided to throw in the towel on iTunes Match, you had better prepare. If you don’t have local copies of all your music, start downloading it now. Because if you don’t, when iTunes Match turns off for you, you won’t have access to any of that music, and you can’t get it back.
With the advent of Amazon Glacier, the pricing equation has changed. iTunes Match is $25/year. Storing my 88 GB iTunes library in Glacier for a year (e.g. using Arq 3) would cost roughly $11. Of course, iTunes Match offers other features beyond backup.
Tuesday, November 6, 2012
My favorite backup program has added support for Amazon Glacier. This is exciting news, as S3 is great for backups of my frequently changing files, but I want to use the less expensive Glacier to archive large quantities of mostly static files.
With Arq 3, when you choose a folder to back up you can select whether to use S3 or Glacier. The two services can have different backup schedules. Unlike with S3, Arq does not let you set a target budget for Glacier, however it does help calculate the Glacier retrieval costs and set the restoration transfer rate to maximize speed or minimize cost. Since it takes hours to retrieve files from Glacier, Arq stores the bookkeeping for the Glacier data on S3.
In my opinion, Arq is one of the best new apps of the last few years (along with Tower and Hibari). That said, due to some unfortunate interface design, I haven’t actually been able to get Arq to use Glacier yet. Each folder must be set to use either S3 or Glacier, and Arq prevents me from creating two folders that overlap. So, for example, I currently have my Photos folder backing up to S3, with all but the last few months excluded. I would like to back up the entire folder to Glacier, but Arq won’t let me create another entry for it.
Since updating to Mountain Lion, or perhaps later versions of Lion, I’ve seen a bug where the Mac freezes when coming out of the screen saver. There’s no way to unlock the screen. It has not actually kernel panicked, as applications continue to run and I can ssh in, however the Mac is essentially unusable until it’s been shut down—via ssh, as that’s a bit cleaner than using the power button. This problem didn’t occur every time I used the screen saver, but at its peak it was happening nearly once a day.
I tried different screen savers, but that didn’t help. What did help was disabling the screen saver entirely (setting it to “Start after: Never”) and instead using Energy Saver’s “Display sleep” setting to lock the screen. (I had been using this before, but with Energy Saver set to kick in after a longer delay than the screen saver.) Using these settings for nearly a month, the problem has not recurred.
However, I’m still seeing various display waking problems that have been happening since Lion. Sometimes both screens remain blank (but with the backlight on) until after I’ve entered my password and pressed Return. Other times, the internal display wakes but the external one doesn’t. In that situation, the workaround is to unplug and replug the display. The window positions get all messed up, then Moom fixes them automatically.
All of this is to say that I still think that 10.6.8 was the pinnacle of Mac OS X reliability.
Monday, November 5, 2012
This is the sort of attitude Microsoft displayed in the late 1990s.
Update (2012-11-09): Emil Protalinski:
Now both the US and UK sites use the vertical layout, and neither scales the iPad mini photo to an unreasonable size. The homepage looks much better.
Update (2012-11-12): Chris Foresman:
The England and Wales Court of Appeal has ordered Apple to pay all of Samsung’s legal fees arising from a dispute over whether or not Samsung violated Apple’s registered design for a tablet computer. The order comes after Apple flagrantly thumbed its nose at a previous court order requiring Apple to post public notices that Samsung did not infringe, instead using the notice to claim other courts had concluded Samsung “copied” the iPad.
This is in relation to the original apology, not the hidden one.
Update (2012-11-14): Groklaw quotes the order (via John Gruber):
Mr Beloff, on instructions (presumably given with the authority of Apple) told us that “for technical reasons” Apple needed fourteen days to comply. I found that very disturbing: that it was beyond the technical abilities of Apple to make the minor changes required to own website in less time beggared belief. In end we gave it 48 hours which in itself I consider generous. We said the time could be extended by an application supported by an affidavit from a senior executive explaining the reasons why more was needed. In the event no such application was made. I hope that the lack of integrity involved in this incident is entirely atypical of Apple.
Friday, November 2, 2012
Spokesmen for each campaign have separately said that their own campaign had put safeguards in place to protect that user data, as Charles Duhigg and I reported in an article published in The New York Times on Oct. 28.
But now a new study by Jonathan Mayer, a graduate student in computer science and law at Stanford University, reports that both sites are leaking information about site visitors to a number of third-party trackers operating on their pages.
Christian Cantrell (via Rich Siegel):
Being the determined hacker that I am, I initially saved the source from the confirmation page, fixed the error by turning “ ” into “&nbsp” (the character code for ampersand followed by “nbsp” — the proper way to escape user input in this case), and started working on tricking the DMV’s servers into believing that the form I was submitting actually came from them. But then it occurred to me that I could simply fix the DMV’s mistake using the WebKit Web Inspector. I opened up the awesome Chrome Dev Tools, made the change in the live page, and the form submitted perfectly. About two weeks later, my brand new plates arrived.
The adapter works well when it works, providing full FireWire 800 performance. But users of the adapter have encountered a frustrating limitation: Only 7 watts of bus power is supplied to an attached device. The FireWire standard supports up to 45 watts, although most computers, including Macs, deliver 10 to 20 watts. Some bus-powered FireWire devices have an optional DC power port, even if they don’t include an AC power adapter. If you can externally power your device, you can bypass the 7-watt limitation. Otherwise you’ll need to explore other solutions.
Unfortunately, this transition seems to be taking a while. FireWire is on the way out. Thunderbolt devices are few and expensive. USB 3 is here and fast. It’s great in theory, but USB has never approached the reliability of FireWire.
What frustrates me about setting constraints with Interface Builder is its instance on adding more constraints automatically for me, even if I don’t want/need them.
When something has such a steep learning curve as Auto Layout, you want to provide as much documentation and help as possible, especially if you want developers to adopt the technology.
In the case of Auto Layout, the best documentation isn’t in Apple’s official documentation. It isn’t in a book. It’s in three hours of WWDC 2012 videos.
Auto Layout debuted with Lion, so you would think there would have been time to fill out the documentation. Still, I’m excited to start using it in my apps.
If you click on your purchases it’ll frequently claim that several of them belong to an other account, even though I’ve only ever used a single account. Thus they don’t update properly. So I can’t get tonight’s iPhoto update, for instance.
I’ve seen all sorts of weird behavior with the Updates tab. Yesterday, a customer reported that it was offering EagleFiler 1.5.10 as an update. This was the version he already had installed, and although it was listed as an update the button was disabled. To prevent the Mac App Store from offering this “update” he had to delete and reinstall the app.
I wanted to use bindings, so that the UI will always update as new objects are created. The problem is, I couldn’t bind to my Core Data entities, because the NSTreeController expects just one kind of object throughout its tree. Also, my groups and my static rows aren’t in the database.
I’m not convinced that it makes sense to use Cocoa bindings in this situation, but if you want to do so she explains the non-obvious way that you can make it work.