Archive for January 2013

Thursday, January 31, 2013

Wasabi Sync

Wasabi Sync is a cloud service and framework for Core Data syncing, for those who don’t want to use iCloud. Unlike TICoreDataSync, it is closed source and can be accessed without Core Data via a REST/JSON API. Pricing is based on the number of users; I don’t see any mention of storage capacity.

Wednesday, January 30, 2013

Down With Magic Strings

Patrick Hughes shares a script for scanning the files in his app’s images folder and generating macros that load and verify the images. I agree with his goals, although I’ve solved this particular problem a bit differently. I redirect all image loading through a helper class (with a method per image), which also handles caching and can be unit-tested. I’ve found this level of indirection helpful, as some images need to be processed a bit or loaded in different ways on different OS versions.

Detecting Overflows, Undefined Behaviour and Other Nasties

Graham Lee:

Coming up in a future release of clang is a collection of sanitisers that insert runtime checks for the things described above. If you’re the kind of person who writes assertions like the above in your code, you can swap all that for sanitisers enabled in your debug builds. If you’re not the kind of person who writes those assertions, you probably should enable these sanitisers, then go and find out where else you should be adding assertions.

For example, -fsanitize=integer will print a runtime error if you add two integers and the result would overflow int.

Money Apps Removing Core Data iCloud Sync

Giedrius Jaloveckas:

After a rather frantic month of dealing with the unfortunate iCloud sync, we made an always-difficult decision: to do a U-turn. New versions of all three Money apps are currently waiting for Apple’s review, and they all contain the old sync via Wi-Fi. Some of you will be glad to go back to the old sync, and some will be inevitably disappointed, but we must admit that iCloud sync is just not reliable on Money. Let us explain you how we ended up with this undesirable result.

Monday, January 28, 2013

Is Final Cut Pro X Ready for Professional Use?

Larry Jordan (via Chris Adamson):

So, in thinking about Final Cut Pro X today, you need to separate in your mind your reactions to the launch from your perception of the product.

Personally, I think the launch was terrible, but that FCP X is quite good.

Sunday, January 27, 2013

How Newegg Crushed the “Shopping Cart” Patent

Joe Mullin:

The ruling effectively shuts down dozens of the lawsuits Soverain filed last year against Nordstrom’s, Macy’s, Home Depot, Radioshack, Kohl’s, and many others. All of them did nothing more than provide shoppers with basic online checkout technology. Soverain used two patents, numbers 5,715,314 and 5,909,492, to claim ownership of the “shopping carts” commonly used in online stores. In some cases, it wielded a third patent, No. 7,272,639.

App Reviews Are Unpredictable

Alexander Clauss (via Cédric Luthi):

Apple rejected the update. The reason was not the bugfix, they rejected the App because of a feature that was available for years in iCab Mobile and which is also available in hundreds of other Apps in the AppStore. They rejected the App because it is able to download videos from YouTube so you can watch the videos offline.

[…]

This time Apple did not complain about the features of the App, they rejected the App because I mentioned in the AppStore description that I had to block downloads from YouTube… And as the reason for this, they cited item 3.3 from the AppStore guidelines: “Apps with descriptions not relevant to the application content and functionality will be rejected”.

[…]

Besides, there are millions of videos on Youtube which are under the creative commons license CC-By which explicitly allows to share, mix, redistribute, there are also laws like “fair use” (US) and “private use” (Germany) and similar laws in other countries, which do allow users to use even copyright-protected material under certain conditions (like for educational purposes, for your own private usage). So there’s nothing illegal in downloading content per se, at least if the content itself is provided legally on the web site.

[…]

There are Apps released to the AppStore even after Apple has rejected my App, which not only have the same feature (Downloading youtube videos for offline viewing), but which also explicitly advertise this feature in the description and in the screenshots for the AppStore. Apple allows these Apps to do something which my App is not allowed to do anymore.

Friday, January 25, 2013

BitTorrent Sync

Nick Summers (via Mark Christian):

BitTorrent has announced a new service today called Sync, that uses peer-to-peer technology to synchronize personal files across multiple computers and devices.

[…]

Gigaom reported the news, and was told by the company that Sync will be able to share files between different devices without any cloud caching. BitTorrent was also cited as saying there would be native apps for OSX, Windows and Linux.

Thursday, January 24, 2013

Amazon, Apple, and the Beauty of Low Margins

Eugene Wei:

Attacking the market with a low margin strategy has other benefits, though, ones often overlooked or undervalued. For one thing, it strongly deters others from entering your market. Study disruption in most businesses and it almost always comes from the low end. Some competitor grabs a foothold on the bottom rung of the ladder and pulls itself upstream. But if you’re already sitting on that lowest rung as the incumbent, it’s tough for a disruptor to cling to anything to gain traction.

MacWrite and MacPaint, a Coral Reef

Dave Winer:

Software evolves like a coral reef. I've written about this many times. Something happens, a ship sinks, some fish live in the wreck. Their predators come there too, because there's food to eat. Then they die and their skeletons form a new structure for life to cling to. Eventually you have a thriving ecosystem. No one uses MacWrite or MacPaint today, but in a sense we all do, all the time.

I have fond memories of using them on the Mac 128K at school. The yellowish plastic of the case made it look like an antique compared with the Apple IIc and IIGS, which were much faster and had cursor keys.

The History of the Scroll Wheel

Eric Michelman (via Mark Christian):

Having Word scroll in response to the wheel roll while Excel zoomed was very controversial since people didn't want them to be incompatible (even though Ctrl-roll allowed each to do the other function too). Ironically, most of the pressure at that time was on Word to go along with zooming since that was still considered the primary use of the wheel.

About App Icons

Louie Mantia:

If we really think about it though, these shopping carts aren’t appropriate for any of these three apps. Zappos and Amazon only exist as online services that have never used a physical cart, and more-so their primary business is to sell you products! It’s a given what their intent is, so instead of focusing on the cart, why not focus on the brand? And regarding Apple, could you imagine an Apple Retail Store featuring a glowing white cart logo embedded in the stainless steel outside the storefront?

Wednesday, January 23, 2013

The No-Hire Paper Trail

Jeff Blagdon:

Steve Jobs threatened patent litigation if Palm wouldn’t agree to stop hiring Apple employees, says former Palm CEO Edward Colligan in a statement dated August 7th, 2012. The allegation is backed up by a trove of recently-released evidence that shows just how deeply Silicon Valley’s no-hire agreements pervaded in the mid-2000s. Apple, Google, Intel, and others are the focus of a civil lawsuit into the “gentleman’s agreements,” in which affected employees are fighting for class action status and damages from resulting lost wages, potentially reaching into the hundreds of millions of dollars.

Colligan claims that Palm only hired three people from Apple, while Apple hired 2% of Palm’s employees.

While there are perhaps arguments to be made for the strategic benefits of these kinds of no-hire pacts, it’s obvious from the e-mails we’ve seen that high-ranking executives realized their potential legal ramifications. Above, Google’s Eric Schmidt notes that he doesn’t want to create a paper trail explicitly mentioning the agreements, lest the company “be sued later.” In a separate e-mail, Intel CEO Paul Otellini expresses his desire that the existence of the handshake agreements not be “broadly known.”

Core Rot at Apple

Lloyd Chambers:

Over the past few years a semi-conscious unease has been steadily growing in my mind: OS X is not getting more reliable and more stable, it is instead developing more and nastier problems that range from interference with getting work done to potential data loss.

We can quibble over the details—for example, I like Mission Control—but I agree with the general sense that something is going wrong with the development of the OS. There have been improvements in some areas, but it seems like technical debt is accumulating and Apple is shipping more stuff that’s half-baked.

Update (2013-02-11): He’s posted some reader comments.

Update (2013-02-27): Gene Steinberg interviewed Chambers about Core Rot on his podcast.

Xcoder 0.1.15

Ray Yamamoto Hilton (via Ole Begemann):

Xcoder is a ruby wrapper around various Xcode tools as well as providing project and workspace parsing and partial write support. Xcoder also supports manipulation of keychains, packaging and uploading artifacts to Testflight and provisioning profile management.

The Serif Readability Myth

Kas Thomas (via Kontra):

Lund undertakes an exceptionally detailed and critical review of 28 typeface legibility studies conducted between 1896 and 1997. He finds seriouos methodological problems in nearly all of them. Legibility itself is still poorly defined, even today, and is not well distinguished from readability. It turns out a surprising number of otherwise convincing “legibility studies” have been based on reading speed or reading comprehension, which have no bearing on glyph recognition per se. Reading speed is now known to be mainly a function of cognition speed, which varies considerably from individual to individual and is not related in any straightforward way (and possibly in no way) to typeface design. Reading comprehension is even further removed from type design.

It does feel unnatural for me to read large amounts of sans-serif text (on paper), but it may simply be that I’m not used to it.

Ole Lund’s dissertation is available for free download; you just have to register with your e-mail address (which the site doesn’t verify).

Tuesday, January 22, 2013

Actual Facebook Graph Searches

Actual Facebook Graph Searches is like The Amazing iOS 6 Maps except more scary than funny (via Hacker News).

An Open Letter to Xcode

Graham Lee:

I think you, and the product people, and the developers who make you, all know that you are a key piece of machinery in producing Apple’s bread and butter. I worry though that other people at Apple, particularly some of the managers, do not see this. I think that they see you as a tool for internal use and a small number of external customers; a group that is not the primary focus for Apple’s products. These same people would see the combine harvester not as the greatest labour-saving device of the twentieth century, but as a niche instrument only of interest to combine harvester operators.

[…]

Help everyone to realise that the better you are, Xcode, the better nearly everything else that Apple does will become.

[…]

What I’m saying, Xcode, is that you’re mature and grown up and people respect you for that. Please stop having these mid-life crises like you did at version 4 where you suddenly change how everything is done. Your work now is in incremental enhancement, not in world-changing revolution. People both at Apple and outside have come to expect you to be dependable, reliable and comfortable. You may think that’s boring. It’s not! Remember all of those things that exist because of you, all of those people who are delighted by what you have helped create. Just bear in mind also that when it comes time for Xcode 5, people will want a better Xcode, not a replacement for Xcode.

The Trend Against Skeuomorphic Textures and Effects in User Interface Design

John Gruber:

They work on sub-retina displays because sub-retina displays are so crude. On retina displays, as with high quality print output, these techniques are revealed for what they truly are: an assortment of parlor tricks that fool our eyes into thinking we see something that looks good on a display that is technically incapable of rendering graphic design that truly looks good.

Blocks, Operations, and Retain Cycles

Conrad Stoll (via Jonathan Penn):

What we had to do is just make the operation referenced by the block into a weak reference. That way, the block isn’t holding onto the operation, it just has a weak reference to it. It’s worth pointing out that pre-ARC, __block was sufficient to prevent a retain cycle. But with ARC, __block no longer carries the same meaning and __weak must be used to prevent a retain cycle. When the operation is finished and gets released by the operation queue, it will go away. That will then release the block, which releases the image and graphics contexts just like we see it’s supposed to in the sample above. That resulted in dramatically improved memory performance and completely normal memory behavior. Literally just that 2 line fix there.

It seems like NSBlockOperation shouldn’t provide access to its -executionBlocks; then it could release them as they complete or when it’s canceled. (Alas, the API uses “cancelled” while nearly everywhere else Apple uses the single-l form.)

Apple Pulls 500px’s Mobile Apps

Sarah Perez (via Andrew Wooster):

“The app was in the App Store for 16 months – since October 2011. Can you imagine that?” Tchebotarev exclaims. The app was updated in November with a gorgeous new interface, but no changes were made which would make it easier to find nude images.

Programmer Interrupted

Chris Parnin (via Jon Trainer):

But it is only so long before interruption finds a way to pierce my protective bubble. Like you, I am programmer, interrupted. Unfortunately, our understanding of interruption and remedies for them are not too far from homeopathic cures and bloodletting leeches.

A Month With Apple’s Fusion Drive

Anand Lal Shimpi:

It seems that Fusion Drive is really made for the user who doesn’t necessarily have a ton of applications/data, but does have a reasonable sized media collection. For that user, Fusion Drive should be a reasonable approximation of a well managed SSD/HDD setup with your big media files going to the HDD and everything that you launch frequently living on the SSD. I’m always going to ask for a larger cache, but I do believe that 128GB is a good size for most client workloads and usage models today.

Managing Books in iTunes

Michael E. Cohen:

With the major overhaul that Apple gave to the look and feel of iTunes in iTunes 11, Apple had a chance to revamp the Get Info interface to handle the different kinds of media that iTunes manages more fluidly and accurately. Instead, Apple left Get Info virtually unchanged, so that you have to guess that authors are really artists, that categories are really genres, and that books don’t have anything corresponding to Beats Per Minute (yes, you can set that field in Get Info for a book, though why you would want to do that – or why iTunes even allows you to do it — beats me).

More sadly, Apple has done little in iBooks to provide readers with the ability to see or to search through their books by any metadata beyond titles, categories, or authors, nor has Apple provided any organizing tools in iBooks other than those I described earlier. For the only ebook-reading software that Apple provides on any of its platforms, the lack of basic organizing tools in iBooks is embarrassing.

Google Button Colors

Daniele Gobbetti:

Check out the speech by Jon Wiley on this page. He explains the design decisions made by google in the past months. In the video he makes a lot of examples, for instance why the “compose” button is red while the “search” button is blue etc. etc.

It was a mystery to me.

E-mail Clients: Fast, Fluid, Ineffective

Christopher Breen:

You’d think that there would be solid alternatives, but you’d be wrong. And you’d be wrong because email clients are no longer focused on the power user.

That shouldn’t be surprising. Purchase any new computer or iOS or Android device and you get a free email client that satisfies the needs of the vast majority of users who demand little more than to send and retrieve messages through common email services. What sort of market does that leave for someone wishing to build a truly powerful email client (something, I understand, that is both difficult and time consuming)?

These days I find Apple Mail—combined with plug-ins, AppleScripts, and EagleFiler—to be the least bad option. However, I’ve been following the development of MailMate with interest. At least one other developer has a power-user e-mail client in the works.

NS: Poor Man’s Namespacing for Objective-C

Jonathan Rentzsch:

I’ve been successfully using a nine-line preprocessor hack for a few years now that effectively works-around the problem.

Define your classes using his simple macro, and you can easily prefix their names at compile-time.

NetflixGraph Memory Optimization

Drew Koszewnik:

The relationships between objects in our directed graph were generally represented with HashMaps, where HashSets of “to” objects were keyed by “from” objects.

This was a lot of objects and a lot of 64-bit pointers. In the new design:

Our data structure maintains two arrays. One is an integer array, and the other is a byte array. Each object’s connections are encoded into the byte array as delta-encoded variable-byte integers (more on this in the next paragraph). The integer array contains offsets into the byte array, such that the connections for the object represented by some ordinal are encoded starting at the byte indicated by offsetArray[ordinal].

This reduced the memory footprint by 90%.

Location Services Access Requires Outgoing Connections

Ole Begemann:

If your sandboxed Mac app requires access to Location Services, make sure to also request the entitlement for outgoing internet connections, whether your app needs it for other features or not. It might save you an unnecessary rejection by the app review team.

FirmTek miniSwap/U3

Bare Feats (via Paul Haddad):

The FirmTek miniSwap/U3 is the fastest USB 3.0 device we have tested to date. For that matter it’s the fastest bus powered storage device we’ve tested to date regardless of the interface type (including Thunderbolt).

It’s a relatively compact, fanless enclosure that can easily swap bare 2.5-inch drives. The price hasn’t been announced yet.

Dylan Programming Guide

Open Dylan (via Hacker News):

The Dylan Programming Guide has been updated to use our new documentation format. As a result it is now available in PDF and ePub formats as well as much improved HTML.

There were a lot of good ideas in Apple’s Dylan language. For example:

C and C++ macros are text substitutions, performed by a preprocessor. The preprocessor has no understanding of the language; it simply splices together text fragments to create replacement phrases.

Dylan macros are written in terms of Dylan language elements; the macros choose their transformation by pattern matching, and they substitute program fragments.

Language-based macros are more powerful than — and avoid a number of common pitfalls of — text-substitution macros.

Update (2013-02-17): The Hacker News thread.

Why Was “~” Chosen to Represent the Home Directory?

pbm quotes Wikipedia (via Hacker News):

This practice derives from the Lear-Siegler ADM-3A terminal in common use during the 1970s, which happened to have the tilde symbol and the word “Home” (for moving the cursor to the upper left) on the same key.

Where to Archive Your Tweets

Manton Reece:

Both of my apps — Tweet Library for iOS and Watermark for the web — can now import the .zip file you receive from Twitter. This file contains your full archive of tweets and retweets. Both apps can load the file directly from Dropbox, making it as simple as possible to get the tweets imported. And both apps are smart about only importing tweets that haven’t been stored yet, so you don’t have to worry about duplicates.

JATemplate

Jens Ayton’s JATemplate offers a replacement for Cocoa’s printf()-style format strings:

So, is this a horrible hack? Well, by the standards of typical day-to-day code, probably. But in the correct frame of reference, which is “compared to printf()-style formatting”, no.

When Is id Promoted to instancetype?

Steven Fisher:

This is straight from Clang Language Extensions:

  • the first word is “alloc” or “new”, and the method is a class method, or
  • the first word is “autorelease”, “init”, “retain”, or “self”, and the method is an instance method.

What It’s Really Like Working With Steve Jobs

Glenn Reid (via Kontra):

I can still remember some of those early meetings, with 3 or 4 of us in a locked room somewhere on Apple campus, with a lot of whiteboards, talking about what iMovie should be (and should not be). It was as pure as pure gets, in terms of building software. Steve would draw a quick vision on the whiteboard, we’d go work on it for a while, bring it back, find out the ways in which it sucked, and we’d iterate, again and again and again. That’s how it always went. Iteration. It’s the key to design, really. Just keep improving it until you have to ship it.

His blog has a 1998 e-mail exchange with Jobs from before he was hired to create iMovie:

I’m guessing, from talking with Sina and Will Stein, that what you’re after is the Democratization of Video Editing, the simplest and most obvious tool yet for doing basic editing. It seems like it could be done.

He also created iPhoto. Here’s a blog post from 2008 with the idea for something like Photo Stream:

I should be able to just push a button on my iPhone and have [the photos] bluetooth’ed or 3G’d or even emailed back to my mothership. […] Or, even better, automatically sync them to a special place on MobileMe where I can get them at my leisure later (not necessarily publish them, but sync them and allow me to make them public/visible or not).

How to Pair Socks Efficiently

amit (via Jason Kottke):

Given a pile of n pairs of socks, containing 2n elements (assume each sock has exactly one matching pair), what is the best way to pair them up efficiently with up to logarithmic extra space?

I like this answer from Srinivas, although it assumes that each sock has more than one pair:

I use pigeon hole principle to pair exactly one from the laundry pile. I have 3 different colors of socks (Red, Blue and Green) and 2 pairs of each color. I pick up 4 number of socks each time and I always make up a pair and get to work.

Introduction to Garbage Collection

nari (translated by Chris White) (via Jonathan Rentzsch):

It seems as though the majority opinion about garbage collection is “As long as everything works okay behind the scenes I’m all okay.” However garbage collection is one of the taken for granted features that is built into a good number of language processors. It would not hurt as a programmer to properly understand the structure and internal implementation of garbage collection.

He starts off with some bookshelf examples and then explains how Ruby’s garbage collector works.

Friday, January 18, 2013

Optimizing the Netflix API

Ben Christensen (via Mark Christian):

Due to the generic and granular nature of the original REST-based Netflix API, each call returns only a portion of functionality for a given user experience, requiring client applications to make multiple calls that need to be assembled in order to render a single user experience.

Wednesday, January 16, 2013

MacStories Interviews: John Siracusa

John Siracusa:

The look of an app is important, and there I think Ive can help by bringing his much more subdued sense of style to Apple’s apps. But the design problems are much deeper than an ugly texture here or an awkward control there. Contacts isn’t bad because fake book apps are ugly. It’s bad because using it to do the things you do with contacts is a pain. Some of that pain is caused by slavish devotion to the book metaphor, but some is carried over from the old non-skeuomorphic version.

He also doesn’t want the Finder to be overhauled because he fears it would only get worse.

Quora Compilation Book

David Cole (via Anne K. Halsall):

As you may have already heard, one thank-you gift we sent this year’s Top Writers was a book with some of the best writing on Quora from 2010 through 2012. Over a hundred answers and four hundred pages of the best answers across 18 different categories.

As the welcome packages are beginning to hit doorsteps this week, we are happy to make the book available to everyone via PDF.

Tuesday, January 15, 2013

__attribute__

Mattt Thompson:

Using nonnull encodes expectations about values into an explicit contract, which can help catch any NULL pointer bugs lurking in any calling code. Remember: compile-time errors ≫ run-time errors.

Here’s the GCC reference for function attributes and the list of attributes supported by the Clang Static Analyzer.

1Password for iOS 4.1 URL Schemes

Federico Viticci:

The URL scheme for opening websites is far more useful for me. You can prepend “op” to a normal Safari URL (so it’ll look something like “ophttp://”) to open it directly into 1Password. For instance, typing ophttp://google.com in Safari will launch Google in 1Password’s browser. Therefore, I made a bookmarklet that you can click in Safari to open the current website in 1Password even faster; simply create a bookmarklet with this code:

javascript:window.location='op'+(window.location.href);

Yes, Learn Basic Programming

Derek Sivers:

If you heard someone say, “I have this idea for a song. But I’m not musical, so I need to find someone who will write, perform, and record it for me.” - you’d probably advise them to just take some time to sit down with a guitar or piano and learn enough to turn their ideas into reality.

RAW’s Advantages Over JPEG?

Jon Rista:

Just about everything in the shot above appears blown. The background, which was roughly an even midtone in real life, looks completely white. Imagine my surprise when I decided to at least give some exposure and highlight recovery a try. After -4 EV of exposure recovery and about 60% highlight recovery, I was shocked to see this[…]

Friday, January 11, 2013

Screenshot Lightning

Daniel Jalkut:

I plan to build more iOS software in the future, and something like this will undoubtedly be a lifesaver when I have significant screenshots to generate. My only existing iOS app, Shush, only has 4 screenshots in one language, and I still found it tedious enough to re-generate screenshots that I hesitated to improve the UI because of the work of another round of, ahem, bitsplitting.

He’s referring to Kent Sutherland’s technique of building screen-capturing code directly into the app.

Text Substitution

Clark Goble:

Once you find the character you want you probably don’t want to have to bring up the character viewer each time. Click on the Text tab in the pref pane. Apple has a very simple text substitution system akin to TextExpander or Quickeys. It doesn’t handle macros but it will replace any string with an other string. It’s useful for common misspellings like “teh” or the like. It also handles displaying unicode fractions so 1/4 becomes ¼. What I use if for though are other special characters I want to type.

He puts a semicolon in front of short abbreviations to make them unambiguous. I would use Language & Text substitutions a lot more except that at least half of the times I try to use them they never expand. I end up going into BBEdit and grabbing the same text from its clippings.

Mach Exception Handlers

Landon Fuller:

There are some significant advantages of the Mach API over signal handlers, including the ability to forward exceptions out-of-process, and handle all exceptions on a completely different stack—something that can be useful when handling an exception triggered by a stack overflow on the target thread.

Safari’s Keynote

Don Melton:

Everyone was clapping that Apple embraced open source. Happy, happy, happy. And they were just certain what was coming next. Then Steve moved a new slide onto the screen. With only one word, “KHTML” — six-foot-high white letters on a blue background.

If you listen to that video I posted, notice that no one applauds here. Why? I’m guessing confusion and complete lack of recognition.

I found my second post about Safari, and it’s a shame that so many of the linked pages have disappeared. (My first post was about how to remove the brushed metal.) At this point I should retract my comment that “the SnapBack feature is actually useful.” It seemed like a great idea at the time, but I stopped using it long ago.

Thursday, January 10, 2013

Apple’s Next Battleground

John Gruber:

A big area where iCloud is falling short is for third-party developers. The tip of the iceberg is the out-of-the-box experience — the iCloud features supported by the apps built into iOS. Calendar, Mail, contact syncing, Safari tab and bookmark syncing. And that stuff actually works very well.

The stuff that works is either using open protocols or is heavily dogfooded. Calendar and Contacts use Core Data internally, but they don’t use it for syncing; they use CalDAV and CardDAV. Mail uses IMAP. Safari tab syncing uses NSUbiquitousKeyValueStore, which has its problems such as not reporting success or errors, but it is comparatively simple and has been used by iBooks and other services for a long time. Third-party developers need to use NSDocument or Core Data syncing, which are newer and less used by Apple itself. The APIs are not well designed, and the services behind them are unreliable. They’re just much less mature. Brent Simmons calls Core Data syncing “the worst thing possible.”

Wednesday, January 9, 2013

USB Power Integrated Into AC Wall Outlets

Dan Wood examines several options for modifying your wall outlet to charge USB devices. I didn’t do this because it didn’t look like the outlet would fit in my electrical box and because I was concerned about the lack of surge protection. I ended up getting an exterior rotatable charger from Belkin; Wood found a slimmer one from XTG Technology.

Tuesday, January 8, 2013

Firefox 18

Firefox now supports Retina displays for the main page content (but not favicons). Many of the images in the user interface are not high-resolution. This makes it even more obvious that Firefox doesn’t have a fully native Mac interface. The Advanced toolbar button in the Preferences window would have been high-resolution if the developers had used NSImageNameAdvanced instead of their own image, and likewise for the standard help button image and the back/forward arrows in the bookmarks list.

ImageOptim Case Study

ImageOptim could have reduced the size of Tweetbot’s images from 26 MB to 9 MB (via Dan Wood):

Although Xcode optimisation is assumed to improve decoding speed of PNG images, testing on an actual device disproves that […] Xcode-optimized images were significantly slower to display. Decoding speed appears to be correlated to image file size more than anything else (most likely savings on byteswapping are negligible compared to additional disk I/O and extra data to decompress.)

“Endgame: Syria” Rejected From the App Store

Liat Clark:

Apple’s App Store has rejected a game that allows users to explore the different factions, consequences and outcomes of Syria’s ongoing civil war, because it deals with a “real entity.”

U.K. game developer Auroch Digital launched Endgame: Syria as part of its Game The News project, which aims to get the public interacting with and reconsidering the concept of gaming, with politically and socially relevant topics infiltrating a medium usually reserved purely for fiction. The latter, says Auroch Digital’s creative director Tomas Rawlings, is a trend that we should not be afraid to challenge.

This seems to be in line with the current App Store Review Guidelines, although I think these types of apps should be allowed.

Patent Trolling for Fun and Profit

Paul Kafasis:

There are many ridiculous patents out there, but most are used defensively. Apparently, however, someone has patented the idea of scanning a document for emailing and is using it offensively. When patent trolls came calling for license fees on their absurd patents, one small business owner chose to fight. Good on you, Steve Vicinanza.

Monday, January 7, 2013

Dependency Injection Is a Virtue

Marcel Weiher rebuts David Heinemeier Hansson:

Having hard-coded class-names like in the example Time.now is effectively the same as communicating via global variables. DHH’s suggestion of stubbing out the Time class’s now is selling us mutable global variables as the solution to global variables. Or more precisely: passing an argument to a method by modifying a global variable that the method reads out and restoring the state of the global variable afterward.

Mac App Store: Year Two

Federico Viticci:

A full year after that post, I believe it’s safe to say one word epitomizes Apple’s 2012 with the Mac App Store: uncertainty.

The biggest surprises for me are that “App Store” app itself remains unreliable and that there’s still no way to gift apps. We still don’t really know the full effect of mandatory sandboxing because so many apps in the store remain unsandboxed.

Should Error Messages Apologize?

There’s now a User Experience Stack Exchange (via Joel Spolsky):

We are having a discussion on our team about an error message that says “Sorry, you do not have permission to access this feature. Please contact your administrator for assistance.”

Is it appropriate to use language of “apology” in this instance? The rationale against it is that it would be more appropriate to “apologize” for something that would be considered solely the “fault” of the application such as downtime (“Sorry but our site is currently unavailable…please try again later”).

Geofencing in Flickr

Dr. Drang:

Because I have this pseudonymous presence on the ’net, my reason for keeping certain location data hidden is obvious: I take a lot of photos at home and at work, and although I often want the photos themselves to be public, I don’t want those locations known. And even if you use your real name in your blog or on social media sites, that doesn’t mean you want everyone who sees you photos to know exactly where you live. Geofencing is the solution.

Flickr lets you draw circles on the map to designate areas for which your photos’ location data should be hidden. However, you’ll also need to make sure that you don’t allow the public to download your originals, as the location data is also in the EXIF.

Sunday, January 6, 2013

OCMock Examples

Ash Furrow:

Next, we create a mock connection, just like last time, except now we tell it to also expect a call to cancel.

In addition to calling start, we’re also going to manually invoke the NSURLConnectionDataDelegate method connection:didReceiveResponse:. This means we’ll need a response to pass in as the second parameter. That’s where the mockResponse object comes in. We’ll create a mock NSHTTPURLResponse that returns 404 when ask for its status code. This is how we will simulate the connection failure.

@property(weak) Isn’t KVO-Compliant

Mike Abdullah:

By declaring a @property as weak, it’s now impossible for it to be KVO-compliant. Weak properties are implemented simply by marking the underlying ivar as weak. If it gets cleared out to nil, that is handled directly by the runtime, without any sort of notification. Callers of the property will correctly start to receive nil, but none of your code know precisely it happened. Thus there’s no good way for a KVO notification to be posted at the time.

It seems like NSKeyValueObserving is due for a redesign.

Friday, January 4, 2013

How to Create Retina-Caliber Favicons

John Gruber:

The app I found that works best is Icon Slate, by Kodlian. It costs $5 in the Mac App Store and is worth every penny. It’s very simple. First, create your 16 × 16 and 32 × 32 px icons in the image editing application of your choice — Acorn, Pixelmator, or Photoshop probably. Export each icon size to its own PNG file.

Icon Slate worked well for me, too.

Transitioning QTKit Code to AV Foundation

Apple TN2300 (via Peter Hosey):

AV Foundation is the recommended framework for all new development involving time-based audiovisual media on iOS and OS X. AV Foundation is also recommended for transitioning existing apps based on QTKit. Introduced in OS X 10.4, QTKit provides a set of Objective-C classes and methods designed to handle the basic tasks of playback, editing, export, audio/video capture and recording, in addition to a number of other multimedia capabilities.

This document describes the mapping of the QTKit classes and methods to the newer AV Foundation classes to help you get started working with AV Foundation objects and their associated methods to accomplish a variety of tasks.

It seems like just yesterday that QTKit was the new hotness replacing NSMovieView and the QuickTime C APIs.

Parcoa: Objective-C Parser Combinators

Parcoa sounds great:

Parcoa is a collection of parsers and parser combinators for Objective-C inspired by Haskell’s Parsec package and Python’s Parcon library.

TICoreDataSync

TICoreDataSync (via Clark Goble) is the open-source syncing engine that allows MoneyWell to sync via Dropbox. Here’s an overview of how it works:

TICoreDataSync adds synchronization capabilities to Core Data applications by tracking changes made to synchronized managed objects. These changes are pushed out to other clients during the sync process, and conflicts are handled on a “rolling sync” basis.

It seems to work pretty much the way you’d expect.

Page Weight Matters

Chris Zacharias (via Paul Kafasis):

I had decreased the total page weight and number of requests to a tenth of what they were previously and somehow the numbers were showing that it was taking LONGER for videos to load on Feather. This could not be possible. Digging through the numbers more and after browser testing repeatedly, nothing made sense. I was just about to give up on the project, with my world view completely shattered, when my colleague discovered the answer: geography.

Apple's False Ad Suit Over Amazon Appstore

Joe Mullin:

But Judge Hamilton found those examples unconvincing and has thrown out Apple’s false advertising claim. “Apple has presented no evidence of any Amazon website or advertisement that attempts to mimic Apple’s site or advertising,” she wrote.

I understand that Apple needs to defend its trademarks, but it seems like this suit went over the line.

Keeping Safari a Secret

Don Melton:

Not only was I tasked by Scott Forstall with building a browser and building a team to build that browser, I had to keep the whole damn project a secret. Which, by the way, really complicated the shit out of hiring most of the original team since I couldn’t tell them what they were working on until they took the job.

He also has some interesting comments at Hacker News.

I would love to claim the foresight of planning for the iPhone all along. Alas, that was not the case. :) For any of us.

We built our own browser because we didn’t want to depend on another company for a critical application.

We built our own browser engine because we wanted to use the technology in more things than a browser.

We built that engine small and fast because Bertrand Serlet would have shot me if I had done otherwise. :)

You have to remember that Mac OS X itself was smaller in those days. Not iOS small, but considerably smaller that it is now.

After the initial success of Mac Safari, there was a time when I was second-guessed by some for choosing KHTML and KJS as the basis for WebKit. When we decided to do the iPhone, I was suddenly a genius again. :)

Commenter lgg (Louis Gerbarg?):

To drive home Don’s point about how secret Alexander was: I was given official access to Marklar months before Alexander. Since there was no Rosetta at that time the Intel builds of OS X had no bundled web browser (and porting Chimera or Mozilla were clearly nowhere on that team’s priority list at the time, for obvious reasons). I was eventually given access to Alexander largely because I was doing enough Intel related work that it was necessary to have access to a browser on my Intel machines.

Thursday, January 3, 2013

Seven Deadly Sins of Modern Objective-C

Ash Furrow (via Brent Simmons):

I don’t understand what is wrong with the Objective-C community that it continuously eschews any form of automated testing. It’s a serious, systemic problem.

OMNI Magazine Archive

David Wharton (via Dan Frakes):

Focusing on both science and science fiction, Omni enjoyed a long and venerable run, first published in October 1978. The print version lasted until Winter 1995, and while a digital version continued through 1997, eventually that, too, folded. That’s a damn shame, but what an amazingly cool treat that the entire run of the magazine is available for our perusal at the Internet Archive. Some days I really love the internet.

Do Not Disturb Bug

Dan Frakes:

The problem—for some people, at least—is that come New Year’s Day 2013, Do Not Disturb apparently forgot to set its own alarm (or anthropomorphically slept right through it). These users awoke to see the familiar crescent-moon icon in the status bar, meaning that Do Not Disturb mode was still active, hours after it was scheduled to disappear. A Macworld editor, for example, discovered that Do Not Disturb was still enabled at 10:30am, even though it was scheduled to turn off at 8:25am.

John Gruber notes that New Year’s bugs are becoming an iOS tradition.

Apple’s TS4510 indicates that Apple knows about the bug, but rather than fix it is simply waiting for it to stop manifesting:

Do Not Disturb scheduling feature will resume normal functionality after January 7, 2013. Before this date, you should manually turn the Do Not Disturb feature on or off.

Jacqui Cheng speculates that the bug is due to using the wrong case in the ICU format string:

What’s perplexing is that Apple points out this common mistake in its own date formatting documentation for developers. YYYY specifies the week of the year (ISO) while yyyy specifies the calendar year (Gregorian). “In most cases, yyyy and YYYY yield the same number, however they may be different. Typically you should use the calendar year,” writes Apple.

Noah Sussman (via Erik Schwiebert):

I have repeatedly been confounded to discover just how many mistakes in both test and application code stem from misunderstandings or misconceptions about time. By this I mean both the interesting way in which computers handle time, and the fundamental gotchas inherent in how we humans have constructed our calendar — daylight savings being just the tip of the iceberg.

In fact I have seen so many of these misconceptions crop up in other people’s (and my own) programs that I thought it would be worthwhile to collect a list of the more common problems here.

Update (2013-01-04): Patrick McKenzie has a related post, Falsehoods Programmers Believe About Names (via Dave Dribin).