Saturday, March 20, 2010
Dave Dribin:
In our swizzled implementations, we’d like to capture the backtrace at time they are called. Later, we can dump out the backtrace for debugging, if we want to. To do this, we’ll create an intermediate object to hold the backtrace: DDPerformDebugger.
Thursday, March 18, 2010
Amazon has released the Mac version of the Kindle software. It’s built using Qt and has a weird looking interface. On the other hand, Apple’s iBooks e-reader looks like it will debut as iPad-only.
Update: John Gruber has screenshots.
Wednesday, March 17, 2010
Drew Thaler:
But for what I was doing, I needed to go the other way around. Mac OS X provides BoolCAS functions in <libkern/OSAtomic.h>, and I needed to convert those to ValueCAS functions.
Monday, March 15, 2010
John Gruber:
Three weeks ago the hard drive in my MacBook Pro went bad. So far as I can tell, I didn’t lose a single byte of data. Here’s how.
DiskWarrior and SuperDuper are indeed fantastic. Dropbox is in many ways very well done. Why can’t iDisk work like that? Still, I wish there were an option to operate Dropbox in non-haxie mode, where it didn’t load its code into the Finder. And I think that the company has been irresponsible with their users’ resource forks and metadata (and also with disclosing which parts of the files they sync). However, there is now a beta version that addresses these issues, so hopefully they’ll soon be a thing of the past.
Gruber potentially had a problem because his SuperDuper clone was over 10 days old, since he had been out of town. His solution: back up important files constantly to Dropbox. My solution: travel with a portable clone drive and back up important files to CrashPlan.
Friday, March 12, 2010
RE2, from Google, “is a fast, safe, thread-friendly alternative to backtracking regular expression engines like those used in PCRE, Perl, and Python. It is a C++ library.” A paper by Russ Cox explains how it works.
Wednesday, March 10, 2010
Joe Clark (via Cathy Shive):
The electronic book is the latest example of how HTML continues to win out over competing, often nonstandardized, formats. E-books aren’t websites, but E-books are distributed electronically. Now the dominant E-book format is XHTML. Web standards take on a new flavor when rendering literature on the screen, and classic assumptions about typography (or “formatting”) have to be adjusted.
Tuesday, March 9, 2010
Glenn Fleishman (via John Gruber):
The post-RealDVD world means that unless there’s a major change to the law surrounding copy protection, there will never be a legal way to perform legal acts of copying or shifting protected movies, music, and games.
Lukas Mathis makes some good points:
This trade-off does not apply to many software patents. I only need to spend five minutes on Amazon’s site to figure out how one-click shopping works. There is nothing useful I can learn from reading the patent. Likewise, I only need to turn on an iPhone once to figure out how to unlock it. This means that Amazon or Apple don’t give up anything when they patent these ideas.
Jonathan Schwartz (via John Gruber):
My response was simple. “Steve, I was just watching your last presentation, and Keynote looks identical to Concurrence – do you own that IP?” Concurrence was a presentation product built by Lighthouse Design, a company I’d help to found and which Sun acquired in 1996. Lighthouse built applications for NeXTSTEP, the Unix based operating system whose core would become the foundation for all Mac products after Apple acquired NeXT in 1996.
The Elecronic Frontier Foundation has obtained and published the iPhone Developer Program License Agreement. Jonathan Rentzsch:
Diabolical. Apple’s developer tools license mandates use of their distribution channel.
Jakob Nielsen (via Adam Engst):
As an aside, why is the iTunes window so large in my screenshot, when it contains only a few icons? Because the same application manages both the phone’s apps and its music collection. When you work with several hundred sound tracks, you need a big space. It’s not always good to try to support highly distinct tasks within a single GUI.
Nielsen’s main point is about button proximity and is well taken. However, I found his example about updating iPhone applications confusing because my understanding is that the “Check for Updates” button always applies to all applications, and that nothing much happens when you select individual applications in iTunes.
Wednesday, March 3, 2010
Andy Greenberg (via Nicolas Seriot):
There’s no doubt, Shields says, that phones are still much safer from spying software than PCs, which allow software to be installed from any source, often invisibly, as in the case of “drive-by downloads” by infected Web pages or booby-trapped e-mail attachments. But the wide privileges given to phone apps still create exploitable vulnerabilities in devices, says Shields.
I’m more worried about software from the App Store. I don’t believe Apple’s screening process can offer significant protection, and the phone is so locked down that users can’t easily audit what the apps are doing.
Nilay Patel (via John Gruber) has a breakdown of the patents in question. Wil Shipley to Steve Jobs:
But when you sue someone for doing something you do yourself, you become one of the bad guys. Can you name a company you admire that spends its time enforcing patents, instead of innovating?
Update: Great post from John Gruber.
Neven Mrgan:
The new version of Microsoft Visio—which, in case you’re not cursed with a sucky office job, is a very popular diagramming application—includes a rip-off of Panic’s Transmit truck.
A high-profile addition to the Rip-Off Express.
Tuesday, March 2, 2010
Dave Dribin:
Before settling in on Objective-C, I was a Java guy for about six years or so. Overall, I much, much prefer coding in Objective-C to Java, and have no intentions of going back to Java. But that doesn’t mean there’s some things I miss. Here’s a quick list…
A good list, although I’ve come to like NSError.
Monday, March 1, 2010
John Gruber:
A new non-Windows name would have let Microsoft use a 1.0 version number. I think the “7” in “Windows Phone 7 Series” is a detriment to their message that this is a clean break from Windows Mobile 6 and earlier. The 7 implies “new version of the old thing”, which isn’t what they want at all because the old thing is unloved and unpopular. A new 1.0 thing would have also dampened uncomfortable questions about why phones available today won’t be upgradeable to the new system when it ships.
Saturday, February 27, 2010
Steven Levy (via Jason Kottke):
The data people generate when they search—what results they click on, what words they replace in the query when they’re unsatisfied, how their queries match with their physical locations—turns out to be an invaluable resource in discovering new signals and improving the relevance of results.
Friday, February 26, 2010
Brent Simmons:
But, still, in the end, the new version of the system was less code than the Core Data version. That will not be the case for most apps. I took it as further indication that this was the right move for this particular app.
I’ve run into these issues as well. I don’t think they’re that uncommon, unfortunately. One thing that Simmons didn’t mention is that all of these examples could be handled well in a future version of Core Data. That is, they’re not fundamentally incompatible with its design. (In fact, I think his #4 was addressed in Mac OS X 10.5, and 10.6 added some more database-type features.) Of course, this doesn’t help him now, but if you can possibly live with Core Data you probably shouldn’t bet against it. It will get better with time.
Update: Jonathan Rentzsch explains how this worked with Enterprise Objects Framework and how it might work with a future Core Data.
Marco Arment:
I learned that I much preferred pagination to scrolling—even tilt scrolling—and that pagination is part of what makes the Kindle reading experience so great. So I spent a long time experimenting with different methods to bring pagination to the iPhone, and I finally found a solution that, while simplistic, allows any mix of pagination and scrolling in the dynamic Web content that Instapaper is ideal for reading. I now prefer pagination to tilt scrolling. You can toggle between them with the Pagination switch in the Settings screen.
Also, an in-app browser replaces the graphical mode.
Thursday, February 25, 2010
Hg Init, from Joel Spolsky, looks like a nice Mercurial and DVCS tutorial. (I’m still happy with Git, though.)
John Gruber:
So what I see as hypocritical about Apple’s decision here is not about the fact that you can access the same sort of content via MobileSafari, but rather about the exceptions granted to Sports Illustrated, etc. I see why: Sports Illustrated, Victoria’s Secret, and Playboy are not just strong brands but also quality brands. But who’s to say some new brand couldn’t be just as good? The best apps in all sorts of categories across the board in the App Store are frequently from new companies, building new brands. It’s no more fair for the “hot chicks in bikinis” category to be occupied solely by existing major brands like Sports Illustrated/Victoria’s Secret/Playboy than it would be if the, say, photo manipulation category were occupied solely by Adobe and Corel, or if games were only allowed from companies like EA.
António Martins & João Reis (via Jonathan Rentzsch):
We’ve decided, therefore, to write this open letter exposing what we consider a misjudgment and huge discrimination, specially if you compare it with current Apple iTunes Store contents like L World, Californication, Sex and the City, Bikini Blast, Top 100 Models or Good Luck Chuck.
Thursday, February 18, 2010
Joseph Linaschke:
The handling of multiple changes is astonishingly good. Let’s say you crop photo_01 in the desktop library, and adjust exposure on photo_02 in the mobile library. Then let’s say in that mobile library, you add metadata to the same photo_01 file that was cropped in the desktop library. When you merge the libraries, everything is synced correctly—the desktop-cropped photo_01 will gain the metadata added to the same photo_01 in the mobile library; the exposure adjustment on photo_02 will be applied.
Wednesday, February 17, 2010
Peter Ammon:
Every divisor has a magic number, and most have more than one! A magic number for d is nothing more than a precomputed quotient: a power of 2 divided by d and then rounded up. At runtime, we do the same thing, except backwards: multiply by this magic number and then divide by the power of 2, rounding down. The tricky part is finding a power big enough that the "rounding up" part doesn't hurt anything. If we are lucky, a multiple of d will happen to be only slightly larger than a power of 2, so rounding up doesn't change much and our magic number will fit in 32 bits. If we are unlucky, well, we can always fall back to a 33 bit number, which is almost as efficient.
Kontra:
Unsure of its ability to successfully roll it out as an independent product, Google must have then decided to force feed Buzz through its Gmail user base of 175 million. Google executives likely reckoned that in a single day Buzz would garner more users than Twitter has been able to in two years after all that celebrity publicity. That really is why Gmail users woke up one day to find their private account details exposed to the public, unannounced and unprepared, because without such default exposure Google executives likely didn’t believe they could deliver a critical user base for Buzz. That’s not “improper testing,” it’s a platform strategy.
On the whole, I’m very happy with the new features and interface improvements in Aperture 3. Many of the changes have been discussed elsewhere, however I wanted to mention a few points that I haven’t seen covered:
Face Detection
I’ve been putting off keywording people in my photos because I assumed that face detection was on the way. Now that it’s here, I’m not sure how much I’m going to use it.
In one of my projects, the faces were totally messed up. Aperture detected “faces” in solid-color areas near the corners of the photos, completely ignoring the prominent people in the middle of the frame. I manually added some faces, drawing rectangles and naming them, but Aperture forgot this as soon as I clicked on another photo in the browser. The only way I could get faces to work with this project was to delete the versions and re-import the masters. Luckily, these versions did not yet have any keywords or adjustments because they would have been discarded.
In my other projects, at least the dozen or so that I’ve gone through since upgrading, the face detection seems to be working properly, pretty much like in iPhoto.
Face Naming
There was some confusion when multiple people had the same first name, or the same first and last name with different middle initials. Also, the Address Book integration didn’t quite work the way I expected. Now that I see how it works, I think it’s adequate, but I would rather that Aperture not get cute and try to abbreviate to ambiguous first names.
The “Unnamed Faces” strip doesn’t seem to offer a way to zoom out or jump to the original photo. As a result, there are some faces that I can’t identify because I can’t see enough context. I don’t want to click Skip, because then how do I get back that list of untagged faces? But if I don’t click Skip, it seems the strip will be forever filled with those same unnameable faces.
Face Storage
Aperture uses a sensible storage model (which I first saw in Mail and copied for EagleFiler) where an “index” database is used for speed but the data and metadata are stored in flat files and XML. If the database is deleted or damaged (or not backed up), the data and metadata remain intact, and the database can be reconstructed from the other files.
Unfortunately, this does not seem to be true for faces. It looks as though Aperture stores the face information in the Faces.db SQLite database but that it does not save it in the XML files along with the other metadata. (It does export faces as keywords in the JPEG files, but that’s not particularly helpful when reconstructing a library.) This makes me wary of spending lots of time tagging faces and possibly losing that work if there’s ever a problem with my Faces.db.
I’m considering using the face detection to aid in assigning keywords. However, there doesn’t seem to be an easy way to generate and assign keywords from faces (other than exporting) or to assign faces from keywords (if I were reconstructing a library where the face information had been backed up in that way). It’s a shame because, although Aperture has good support for keywords, the faces feature is better suited for tagging people (though, alas, faces don’t show up in the various metadata displays).
Core Data
Aperture 1 and 2 used Core Data, but Aperture 3 seems to have dropped it in favor of using SQLite directly. As a user, this doesn’t particularly matter to me, but as a developer making heavy use of Core Data I wonder about the reasons for the change. It’s curious that Mail, iTunes, iPhoto, and Aperture are highly visible “database” applications, none of which use Core Data. Does Apple think that Core Data is the wrong kind of technology for these applications? Or are there limitations/flaws that make the dog food unpalatable? My hunch is that for what Mail needs to do it’s more efficient to use SQLite directly. However, Aperture seems like exactly the kind of application that Core Data was intended for.
Backups
The folder structure inside the library package has been improved so that Time Machine backups should be much more efficient, especially if you rearrange your projects and folders. The thumbnails are now excluded from Time Machine backups, as is the BigBlobs.apdb. Other large database files are included, however: Faces.db, History.apdb, ImageProxies.apdb, Library.apdb, and Properties.apdb. My guess is that, except for Faces.db, these could all be reconstructed, so I’m excluding them from my CrashPlan backups.
Performance
Even after face detection completed (and I rebooted), Aperture 3 seems slower and more RAM-hungry than ever. I’m using a 2009 MacBook Pro, maxed out with 4 GB of RAM, and my library has about 34,000 versions. Aperture 2 was sluggish at times but bearable. Aperture 3 often locks up itself—and the rest of my Mac—for seconds or minutes. I’m going to see whether DiskWarrior helps.
Friday, February 12, 2010
MoneyWell 1.5 is a nice update to the financial application that I’ve switched to from QuickBooks. I couldn’t be happier. Previous versions weren’t difficult to use, but 1.5 cleans up a bunch of interface issues that had been slightly bothering me, and it feels much smoother now. Although it’s marketed for budgeting and cash flow, MoneyWell works well as a simple tool for reconciling accounts and keeping track of categories for tax reporting. Unlike QuickBooks, it does not support invoicing, so I’m using Billable for that.
Wednesday, February 10, 2010
Brent Simmons:
As you can see, the server doesn’t have to do that much. It stores some small bits of data with timestamps. I don’t think it needs any cron jobs (at least not conceptually) — it just responds to requests. It doesn’t even have any idea what this data is about.
Jens Alfke:
You can think of the log file as a queue or message stream that’s being collaboratively read and written by all of the clients. This sounds like something you’d need a fancy web-app to manage, but it turns out that all it takes is a typical HTTP 1.1 server and a trivial server-side script.
It’d be nice to have an alternative to Google Reader.
Wednesday, February 3, 2010
Eoghan McCabe:
Given the crappy copy and links in the message, after a quick scan, it’s not difficult to miss a key line or two and be left thinking you can hit reply and continue the conversation. After all, they originally asked me to e-mail them, they just replied to my mail, they ask me to “write back”, speak in the first person and they sign with a staff member’s name. I typed “Hi Scott, there must be some confusion. There is no another e-mail add—” before I noticed the “cannot accept incoming e-mail” line.
Tuesday, February 2, 2010
Victoria Wang:
At this time, I suspect the closed nature of the App Store is not as worrying as it should be because it only concerns our smart phones. We can still develop anything we want for Macs, the “real” machines. However, what if the iPad starts to replace the Mac to such a degree that it no longer becomes profitable to write apps for the Mac? It seems that to be a Cocoa developer will eventually mean to have one’s business chained to the App Store. To be chained to the App Store means Apple makes the final decision on whether your apps can be sold the way you like them, or at all.
Webdesigner Depot (via Cathy Shive):
On February 10th, 2010, Photoshop turns twenty. To mark this anniversary, we’ve come up with an article that takes you through the evolution of Photoshop from its modest beginnings as a bundled program sold with scanners to its current version.
For each version and major feature listed, we couldn’t help but think “did Photoshop ever exist without that feature?”.
Monday, February 1, 2010
Friday, January 29, 2010
I have a MacBook Pro and an iPhone. Both are great, but—for me—I don’t feel as though there’s a gaping hole in the middle. It would probably be useful, though not essential, to have a digital reading device for light Web browsing, PDFs, and perhaps FogBugz. I’m less sure that the screen will tempt me from paper books.
I don’t want to speculate too much, since I haven’t used an iPad and it’s harder to judge something when you’re not really the target market. Nevertheless, I think the iPad is going to be a success and a big deal. For some people, devices like the iPad will make computing more accessible and traditional-style computers unnecessary. For techies, it signals that the “wild west” era of open, tinkerable computers for the masses may be on its way out.
Alex Payne:
The iPad was pitched by Steve Jobs yesterday as a response to netbooks. It is not a mobile device, per se. Rather, the iPad is competing with full-fledged (if small and ugly) computers capable of running arbitrary programs and operating systems. Play all the category games you want, but the iPad is a personal computer. Apple has decided that openness is not a quality that’s necessary in a personal computer. That’s disturbing.
John Gruber:
A car with an automatic transmission still shifts gears; the driver just doesn’t need to know about it. A computer running iPhone OS still has a hierarchical file system; the user just never sees it.
[…]
What I found interesting is that I’m very familiar with this resolution — for years I used PowerBooks and iBooks with 1024 × 768 displays running Mac OS 9 or Mac OS X. 1024 × 768 somehow seems very different on the iPad than on Mac OS — physically smaller but conceptually bigger. The full-screen concept, without Mac-style overlapping draggable windows, leaves the iPad free to use as many pixels as possible for display content rather than UI chrome.
Kevin Hoctor:
I’m a geek. I love this stuff. I even know all the keyboard shortcuts for switching apps and spaces and windows. I am a software developer with an engineer’s brain. I am not the person Apple was thinking about when they built the iPad.
William Van Hecke:
It’s easy to miss what the big deal is, especially if you’re the sort of person who already has an iPhone and a Mac and you are perfectly happy with the way they fit into your life. @benaar said that they should have just called it iPod Big, and on the face of it, he’s right. It is just a fricken huge iPod touch. But something subtly momentous happens when an iPod touch gets fricken huge.
Steven Frank:
Apple is calling the iPad a “third category” between phones and laptops. I am increasingly convinced that this is just to make it palatable to you while everything shifts to New World ideology over the next 10-20 years.
Fraser Speirs:
The people whose backs have been broken under the weight of technological complexity and failure immediately understand what’s happening here. Those of us who patiently, day after day, explain to a child or colleague that the reason there’s no Print item in the File menu is because, although the Pages document is filling the screen, Finder is actually the frontmost application and it doesn’t have any windows open, understand what’s happening here.
Right now, various constraints have kept software for the iPhone OS simple. There’s less to get in the way because it does less. It will be interesting to see what happens as devices like the iPad become more powerful, developers have more time to iterate their products, and users expect them to do more. Will things stay simple? Or will we slowly reinvent most of the features and problems that we currently see on the desktop?
Tuesday, January 26, 2010
Joe Kissell:
In principle, the solution is simple. Your photo editing software should remove the profile, but then modify the raw pixel data to give the colors the same boost that they would have received if the profile had been present and used. If this process were carried out, and it worked correctly, then the result would be that the image would look the same in any program. The image wouldn’t have a profile, but it also wouldn’t need one, because all the information provided by the profile would be merged into the original image. That way it would be irrelevant whether a browser ignored the profile.
Monday, January 25, 2010
Aristotle Pagaltzis:
Today, I use it and rely on it so much that I can’t imagine moving to any other VCS that doesn’t have this concept. (And none of the contemporary contenders do.) Because of this, I keep responding to such criticism, repeating myself. I figured I should put my explanation down somewhere where I can point people to.
Saturday, January 23, 2010
Allan Odgaard:
Of the many build systems I have looked at, I don’t see anything which has this simple axiomatic definition nor is actually very versatile. A lot of build systems have been created because make files are ugly/complex/arcane/etc., and I agree with that sentiment, but it seems like many of the replacements are systems hardcoded for specific purposes which simplify the boilerplate but make them inflexibile, or they are actual programming languages, which makes the build script only marginally better than a custom script…
Thursday, January 21, 2010
Lukas Mathis:
The thing on the left is a house. The thing on the right means «home». Somewhere between the two, the meaning switches from «a specific house» to «home as a concept». The more realistic something is, the harder it is to figure out the meaning. Again, if the image is simplified too much, it’s not clearly and immediately recognizable anymore.
Phil Gyford (via John Gruber):
For some time I’ve been meaning to test my small collection of PDA/smartphone gadgets to see which of their methods of input was quickest. The iPhone’s software keyboard? The Newton’s handwriting recognition? Palm’s Graffiti? With the possible imminent arrival of a tablet from Apple that will save the world, it seemed a good time to get round to the test.
It’s definitely my recollection that Graffiti was at least twice as slow as pen and paper. Typing on the iPhone feels slow compared to a real keyboard, but it passes the good enough threshold.
Tuesday, January 19, 2010
Dave Dribin refactors and improves Matt Gallagher’s sample test-driven Cocoa application:
The problem is that Matt’s code is testing the string formatting by asserting the web view’s HTML and text field’s strings. Separating the responsibility of formatting the strings from updating the UI not only improves the design, but makes testing much simpler.
Sunday, January 17, 2010
Tickets is a Mac application for creating FogBugz cases (via Justin Williams). You can set a quick-entry hotkey and include screenshots.