Archive for May 2013

Friday, May 31, 2013

Jawbone ERA vs. BlueAnt Q3

Nicholas Riley compares these headsets for listening to podcasts. I’m very happy with my Jawbone ERA except that there’s no button (or tap) to pause/play the podcast or music. This only works for calls.

C Quiz

Mike Ash:

The C language is perhaps the most popular computer language in existence, but it’s also quite odd, and because of that often poorly understood. I’d like to give you a quiz to see how much you know about some of the odd but useful corners of the language.

The strangest one for me is that free(NULL) is defined as a no-op. I seem to remember reading or being taught early on that this was dangerous. CFRelease will indeed crash, although some variants like CGImageRelease will not.

Adobe Kuler 1.0

Daniel Jalkut:

Today, Adobe released an iOS app for capturing and tinkering with color palettes. The palettes can then be automatically saved for retrieval through the Kuler web site, or shared via email or Twitter.

Clear in the iCloud

Milen Dzhumerov (via Drew McCormack):

There has been a lot of talk about iCloud + CoreData (referred to as iCCD hereafter) over the past few months and I think it is a good time for me to share our journey in getting iCloud integrated in Clear. If you do not want to read through all the details: Clear uses a custom system built on top of iCloud File Storage and it works in a similar fashion to Operational Transformation. The post proceeds to cover the reasons for choosing iCloud, then explores iCCD and subsequently builds a synchronisation system from the ground up.

This is a good strategy, although iCloud file storage also has some issues. It’s important to note that both iCloud Core Data and and Operational Transformation involve syncing sets of changes, but they work at different levels of abstraction. Core Data syncs lower level database transactions, while OT works with higher-level user-oriented actions.

The Life and Death of Camino

Jordan Merrick:

Camino was my browser of choice during the early days of OS X and it was an incredible browser. It was the Mac’s first Gecko-driven Cocoa browser as Firefox was Carbon-based right up until 2008. Camino was the Google Chrome of its day - fast, slick and a great looking app.

Thomas Brand:

I am saddened that Camino must die in the effort to save Firefox, a browser that has gotten just a bloated as the Netscape Suite it once replaced. By losing Camino we will not only see the end of a browser that once made the Mac great, but the end of a development community focused solely on the advancement of a great Macintosh application.

Alas, though Chrome and Firefox have good rendering engines, they do not have fully native Mac user interfaces. Safari has both, but its engine has reliability and memory problems.

Thursday, May 30, 2013

Personal Hotspot Is Better Over Bluetooth

Matthew Guay:

Bluetooth tethering. It sounds archaic and slow, but actually worked out better. And it wasn’t slow, either: the speeds were essentially the same as I typically get through 3G already, or around 1.5Mb down and 1Mb up. Comically, it was faster to connect. I always seem to have a somewhat tricky time getting my iPhone’s Wifi hotspot to show up in areas with tons of Wifi networks, but connecting via Bluetooth literally took two seconds.

He also says that it uses less battery power than Wi-Fi.

Update (2015-05-27): I just tried Personal Hotspot over Bluetooth and found that it was much slower than over Wi-Fi.

Document-Based iCloud Problems

Max Seelemann:

The most problematic part for us was understanding Apple’s NSFileCoordinator APIs and the many issues we had with it. The thing is: it looks simple, the methods are certainly simple and the documentation is written in a simple way -- but it’s use is everything but simple. In retrospective, we get the impression that the whole system seems to have been tested for Apple’s standard use only. That is, a user-managed single layer of folders, with occasional opening, saving and renaming of a few monolithic files. Pages, Keynote, traditional document-based apps. However, while the underlying APIs are designed and documented for broader use and more advanced situations, they soon start to fail if being used like that.

Wednesday, May 29, 2013

Atomic Commit in SQLite

Jonathan Penn links to this great article about how SQLite works:

An important feature of transactional databases like SQLite is “atomic commit”. Atomic commit means that either all database changes within a single transaction occur or none of them occur. With atomic commit, it is as if many different writes to different sections of the database file occur instantaneously and simultaneously. Real hardware serializes writes to mass storage, and writing a single sector takes a finite amount of time. So it is impossible to truly write many different sectors of a database file simultaneously and/or instantaneously. But the atomic commit logic within SQLite makes it appear as if the changes for a transaction are all written instantaneously and simultaneously.

SQLite has the important property that transactions appear to be atomic even if the transaction is interrupted by an operating system crash or power failure.

Big Ice Cubes

I was hoping Dr. Drang would weigh in on this:

In some cases, they go beyond just saying that big cubes melt slower and also claim that they do so while cooling your drink just as much. These claims should be looked upon with a gimlet eye, because the cubes’ melting is what does the cooling.

No question, some of the cooling comes from raising the temperature of the ice from below freezing up to the melting point. But that’s small beer. The specific heat of ice (0.50 cal/g-K) is only about half that of water (and about equal to that of ethanol), so raising the temperature of ice does little to lower the temperature of your drink. The significant cooling comes from ice’s heat of fusion, which is a whopping 80 cal/g. This is what pulls heat out of your drink and lowers its temperature.

That said, I like the idea of The Sweethome.

Monday, May 27, 2013

Free

Dr. Drang:

I’m sure you’ve noticed the backlash against free internet services over the past couple of years. Not that there are fewer free services, just that a certain set of people have been arguing that we shouldn’t be using them. Their rallying cry is “If you’re not paying for the product, you are the product.” This is considered a deep truth among the anti-free set. It’s certainly true, but it isn’t deep, and I’m not convinced it makes free services bad.

How Fast Is USB 3.0 Really?

James Galbraith:

While you won’t see a tenfold increase in the transfer speed from USB 2.0 to USB 3.0 in real-world use, USB 3.0 is fast—about three times faster than USB 2.0 with a spinning hard drive, and three to five times faster with SSD. And using a hub doesn’t impact speeds, even with other (and slower) peripherals attached. USB 3.0 is also faster than FireWire 800, and it stacks up favorably against Thunderbolt.

Friday, May 24, 2013

The Macintosh Finder, Then and Now

John Siracusa illustrates how the Mac OS X Finder still doesn’t zoom windows properly.

Wednesday, May 22, 2013

OmniPresence 1.0

Exciting initial release from the OmniGroup:

OmniPresence is the best way to sync all of your documents across all of your devices. And it works on most web hosts, including OS X Server, which means you can store all of your data yourself.

Keep all of your documents in sync. Add any file or folder, and it’s automatically synced everywhere else with a small app that runs in the background.

There’s folder syncing via the Finder with the status in the menubar (like Dropbox), an API for developers (better than Dropbox’s), support for multiple users (unlike iCloud), and the files can be stored on Mac OS X Server or a host that supports WebDAV. Since it’s open-source and the files are directly accessible on the server, it should be much more debuggable than iCloud.

Update (2013-07-26): Unlike Dropbox, OmniPresence does not sync labels or extended attributes.

Getting Started With ReactiveCocoa

Ash Furrow:

ReactiveCocoa is a tool that programmers can use to make writing apps easier by removing state. However, even in a “completely reactive” app, you have to deal with non-ReactiveCocoa code. Things like table view delegate methods, for example. When you want to bridge the gulf between non-reactive and reactive worlds, use RACSubjects.

While subscriptions are useful and necessary for performing side-effects, be careful not to overuse them. They are like mutable variables – state – which ReactiveCocoa tries to avoid. Don’t use RACSubjects to manipulate application state where binding properties to mapped signals can work instead.

Tuesday, May 21, 2013

Wikipedia Corruption

Andrew Leonard (via John Gruber):

Qworty has destructively edited the pages of other writers. He has made numerous edits to his own page while obsessively hiding his true identity. And yet there have never been any significant consequences for his actions. For those of us who love Wikipedia, the ramifications of the Qworty saga are not comforting: If Qworty has been allowed to run free for so long — sabotaging the “truth” however he sees fit, writing his own postmodern novel — how many others are also creating spiteful havoc under the hood, where no one is watching?

Shorter Dropbox Public URLs

Matt Henderson shows how to use a custom subdomain to clean up the long dl.dropboxusercontent.com URLs.

New Flickr

Flickr:

We want Flickr to be the most amazing community and place for you to share your photos. So, we’re also revealing a beautiful new design that puts photos at the heart of your Flickr experience, where they should always be. Whether it’s a sweeping landscape or a family portrait, we want every photo to be at its most spectacular.

I think they went a bit too far, in that no matter how large your window you can no longer simultaneously view an individual photo and its metadata. But I like the general direction.

I was happy paying about $22/year for unlimited uploads and no ads. Now that the free account includes 1 TB of storage, removing the ads for $50/year doesn’t seem like a good deal.

Update (2013-05-22): You can cancel an old Pro account for a prorated refund. The statistics feature is only available with the old Pro account.

Monday, May 20, 2013

iTunes 11.0.3 MiniPlayer

Kirk McElhearn:

Apple released a minor update to iTunes last week (11.0.3), with, uncommonly, tweaks to a couple of features that are very welcome. The first I want to point out is the MiniPlayer[…]

The Tumblr Architecture

Todd Hoff:

Tumblr started as a fairly typical large LAMP application. The direction they are moving in now is towards a distributed services model built around Scala, HBase, Redis, Kafka, Finagle, and an intriguing cell based architecture for powering their Dashboard. Effort is now going into fixing short term problems in their PHP application, pulling things out, and doing it right using services.

How to Know When Apple Finally Gets iCloud Right

Gus Mueller:

Start with an assumption that it’s going to break, and break hard. Give developers tools to analyze and clean things up. Apple gives us pretty great tools for debugging and improving code running on our local machines. We need the server side equivalent of that.

Wednesday, May 15, 2013

E-Book Price-Fixing Lawsuit

The New York Times (via John Gruber):

After Random House finally agreed to a contract on Jan. 18, 2011, Eddy Cue, the Apple executive in charge of its e-books deals, sent an e-mail to Mr. Jobs attributing the publisher’s capitulation, in part, to “the fact that I prevented an app from Random House from going live in the app store,” the filing reads.

Dictionary of Numbers

Glen Chiacchieri (via Randall Munroe):

Dictionary of Numbers is an award-winning Google Chrome extension that tries to make sense of numbers you encounter on the web by giving you a description of that number in human terms. Because “8 million people” means nothing, but “population of New York City” means everything.

Ted’s iPad Setup

Ted Goranson sifts through iPad apps:

I assumed that the experience with the iPhone would make the setup on the iPad easy. It helped not at all. I still bought easily five or six apps for each one I settled on. I am happy with Apple overall, but the app evaluation process is severely broken.

Xcode Damages Nested Executables During Mac App Store Submission

Peter Maurer:

After the app passes validation and Xcode uploads it successfully, the upload is ultimately rejected based on the incorrect assertion that sandboxing is not enabled for the nested executable.

Apple’s New Objective-C-to-JavaScript Bridge in WebKit

Nigel Brooke (via John Siracusa):

A few month back, Apple quietly slipped a very nice Objective-C to Javascript bridge into WebKit. Since the first commit while we were busy celebrating New Year’s Eve, it has been fairly actively developed and improved. This new API supports straightforward embedding of the JavaScriptCore interpreter into native Objective-C projects, including reading and writing variables and object members with appropriate type coercion, calling methods on JavaScript objects, and directly binding Objective-C objects into JavaScript.

How Apple Decrypts iPhones

Quinn Mahoney (via John Gruber):

No, a signed ramdisk means the brute force is done on-device. The 10 attempt limit is enforced by iOS, ramdisk bypasses that.

Tuesday, May 14, 2013

The Terra Programming Language

Terra (via Hacker News):

Like C, Terra is a simple, statically-typed, compiled language with manual memory management. But unlike C, it is designed from the beginning to interoperate with Lua. Terra functions are first-class Lua values created using the terra keyword. When needed they are JIT-compiled to machine code.

Zachary DeVito:

You’re right that we designed Terra primarily to be an enviornment for generate low-level code. In particular, we want to be able to easily design and prototype DSLs and auto-tuners for high-performance programming applications. We explain this use-case in more detail in our upcoming PLDI paper.

Update (2013-05-15): The Lambda thread:

Monday, May 13, 2013

Reversible Javascript

Will Thimbleby:

A reversible interpreter provides some really interesting opportunities for exploration and learning programming. Reversibility makes it possible to scrub through the execution of algorithms, which you can see used to great effect in the Algorithm Wiki and in the depth-first traversal example below. The code that is highlighted on the left-hand side is the actual code that is running. Being able to scrub through the algorithm is not only fun, it transforms the experience of exploring the algorithm.

Cloud Mate

Matt Neuburg:

I have not yet explained how on earth Cloud Mate on iOS is able to show you a preview of the contents of an iCloud-based file, as well as handing that file off to various other apps and services. The answer is that Cloud Mate’s information about each cloud-based document includes not only its name, size, and modification date, but also the URL of its storage location at www.icloud.com. Thus, when you tap on the name of a document, Cloud Mate does effectively the same thing that Dropbox does when you tap on the name of a document in the Dropbox app — it downloads the document from iCloud!

The iOS app is possible because the companion Mac app is not sandboxed.

Saturday, May 11, 2013

True-Color GIF Example

phil.ipal.org (via Mathia Bynens):

While using more than 256 colors in GIF is in most cases a bad practice, and should be limited to certain technical cases where extreme size can be tolerated, a statement that the GIF image file format is limited to 256 colors is simply false.

DanBC:

I took a screenshot so interested people can see how badly images can be mangled by the proxies used by some mobile companies.

buddydvd says it’s slow in Safari because:

It’s actually more of a hack to deal with malformed GIFs and goes directly against spec. To address GIFs where each frame has a 0 frame delay, most GIF decoders implement a minimum frame delay value.

More In-Store iProduct Repairs

ifoAppleStore:

The workload of Apple retail store Genius Bars is scheduled for a huge increase later this year, after the company introduces a revamped AppleCare product that includes a longer list of iPhone, iPad and iPod problems that will repaired in-house. The changes will reportedly save the company $1 billion a year, but could also significantly lower customer satisfaction with time-consuming repairs, instead of being handled in five minutes with a swap-out.

The current swap policy is nice for those of us who don’t live near an Apple Store, but perhaps actual repairs will make addressing common hardware problems more affordable.

The CAP FAQ

Henry Robinson (via Hacker News):

No subject appears to be more controversial to distributed systems engineers than the oft-quoted, oft-misunderstood CAP theorem. The purpose of this FAQ is to explain what is known about CAP, so as to help those new to the theorem get up to speed quickly, and to settle some common misconceptions or points of disagreement.

(Hat tip to my mentor Nancy Lynch, who proved the theorem.)

Windows Kernel Performance

An anonymous Microsoft developer (via Romit Mehta):

Windows is indeed slower than other operating systems in many scenarios, and the gap is worsening. The cause of the problem is social. There’s almost none of the improvement for its own sake, for the sake of glory, that you see in the Linux world.

Granted, occasionally one sees naive people try to make things better. These people almost always fail. We can and do improve performance for specific scenarios that people with the ability to allocate resources believe impact business goals, but this work is Sisyphean. There’s no formal or informal program of systemic performance improvement. We started caring about security because pre-SP3 Windows XP was an existential threat to the business.

UbiquityStoreManager

Maarten Billemont presents a framework for working around Core Data iCloud bugs (via CocoaPods):

While Apple portrays iCloud integration as trivial, the contrary is certainly true. Especially for Core Data, there are many caveats, side-effects and undocumented behaviors that need to be handled to get a reliable implementation.

Unfortunately, Apple also has a bunch of serious bugs left to work out in this area, which can sometimes lead to cloud stores that become desynced or even irreparably broken. UbiquityStoreManager handles these situations as best as possible.

Friday, May 10, 2013

Spark Inspector 1.0.5

Spark Inspector for iOS apps (via Collin Allen):

Monitor your app and experiment in a way you never thought possible. Add our framework to your Xcode project, and the Spark Inspector will offer you an entirely new debugging perspective. With a three-dimensional view of your app’s interface and the ability to change view properties at runtime, Spark can help you craft the best apps on earth. Wiring your app together with notifications? Spark’s notification monitor shows you each NSNotification as it’s sent, complete with a stack trace, a list of recipients and invoked methods, and more. Understand app structure at a glance and debug smarter.

Thursday, May 9, 2013

Sharing Data Locally Between iOS Apps

Dillan Laughlin shows how to use a URL scheme and a private pasteboard to send data from one iOS app to another.

ArgumentParser

Chris Miller’s ArgumentParser is an Objective-C replacement for getopt_long (via Romain Briche).

Wednesday, May 8, 2013

Apple and Photos

Peter Nixey (via John Siracusa):

To be honest, I got a little confused at this point. Have I transferred them into iPhoto? I’m not sure I’ll check the photostream - ack, no, I remember you told me to delete photos off my photostream because there were too many. Hmmm, check the camera roll again. Hang on a minute - where are my videos?! Turns out photostreams don’t stream videos. Man, these things are not cool.

I didn’t realize how confusing Photo Stream could be until I tried explaining it to a friend. The mental model is so different from the rest of iCloud.

New OpenStreetMap Editor

OpenStreetMap:

The new editor, codenamed ‘iD’, boasts an intuitive interface and clear walk-throughs that make editing much easier for new mappers. By lowering the barrier to contributions, we believe that more people can contribute their local knowledge to the map – the crucial factor that sets OSM apart from closed-source commercial maps.

Common Misconceptions About Touch

Steven Hoober (via Lukas Mathis):

Text links are far too small to accurately target them. Some modern operating systems and browsers such as Google Chrome attempt to solve this problem by zooming in on small, ambiguous targets, to offer suitably large tappable areas.

Monday, May 6, 2013

Fireworks

Adobe:

While we are not planning further feature development for Fireworks, we will continue to sell Fireworks CS6 as well as make it available as part of the Creative Cloud. We will provide security updates as necessary and may provide bug fixes. We plan to update Fireworks to support the next major releases of both Mac OS X and Windows.

Crazy Linux Threading Bug

Joe Damato (via David Smith):

And so, MAP_32BIT will remain. A misnamed, strange looking wart that will probably be around forever to remind us that computers are hard.

Word 2011: Header Formatting Madness

Pierre Igot:

Apparently, this all has to do with a feature called “content controls” that was introduced in Word 2007 for Windows. Evidently, this feature was never introduced in the Mac version of Word, but Word for OS X has to be able to open and display Word documents created in Windows. Since these Word documents can contain such “content controls” but Word for OS X does not have a “content controls” feature, what does the MacBU do? It just pretends that the feature does not exist and displays content controls as regular text.

But of course if you start interacting with such text, you end up encountering issues such as the one I experienced the other day.

Yahoo Weather 1.0.2

I like the design of Yahoo’s new weather app. It combines photos from Flickr with easy access to hourly and daily forecasts (more days than Check the Weather), plus a narrative forecast with information about precipitation and wind. Unfortunately, it’s often unable to connect to the server and gets stuck showing stale data.

Sunday, May 5, 2013

Installing Xcode 3 on Mountain Lion

Jeff Johnson:

You may find yourself needing to install Xcode 3 on Mountain Lion. I did. Perhaps you need the Mac OS X 10.6 SDK. Perhaps you need to build PowerPC code. Or perhaps you just hate the Xcode 4 GUI. In any case, the Xcode 3 installer won’t allow you to install on Mountain Lion, and even if you force it with the environment variable COMMAND_LINE_INSTALL, your Mac will kernel panic on the next boot, because Xcode 3 installs some kernel extensions that are not compatible with Mountain Lion.

Friday, May 3, 2013

momcom: Experimental Core Data Model Compiler

Tom Harrington introduces momcom (the counterpart to momdec):

After writing momdec I realized I could probably compile models as well as decompile them. So, I wrote some code to do so. Twitter comments by John “Wolf” Rentzsch about how hard it might be may have spurred me on a bit. The code also fixes a bug I found in Xcode’s model compiler (rdar://problem/13677527 and http://openradar.appspot.com/radar?id=2948402).

Dealing With Core Data “Phantom Breakpoints”

Vincent Gable links to this great tip:

The condition will ignore any private Core Data exceptions (as determined by the class name being prefixed by _NSCoreData) that are used for control flow.

Acorn 4

Gus Mueller:

A brand new UI, non destructive filters and layer styles merged together in one great bag of awesome, curves, much improved vector tools, and speed. And that’s just some of the big stuff. There’s a ton of little things which when added all together make Acorn feel and work better than it ever has.

Update (2013-05-11): Gus Mueller:

I could set the release to May 3rd, and then when I was ready I could just push the release date back to May 1st! Since May 1st was already here (and gone in some time zones) Acorn 4 would roll out everywhere at the same time, which was exactly what I wanted.

Wednesday, May 1, 2013

PCalc 2.8

Dr. Drang:

A calculator isn’t necessarily the best tool for complicated analyses, but sometimes it’s the best tool that’s readily available. Because PCalc is in my phone, its capabilities—whatever they are—are always with me. The addition of user-defined functions allows me to do calculations away from my desk that I couldn’t do before.

Briefs Ships

Federico Viticci:

Briefs is meant for iOS designers and developers who, before handing image assets over to Xcode to start writing code, want to see whether their app idea is feasible in terms of design and user experience. Essentially, if design is Stage 1.0 of a development process and coding is Stage 2.0, Briefs is the 1.5 step in between. Briefs is a powerful tool for professionals who aren’t afraid of working with a Photoshop-like UI to connect image assets, distribute animations, transitions, and more.

Rob Rhyne:

The original setup for Briefs circa 2009 was to hand-write a script in a text editor, then package that script with a few images and find a way to get it onto the device to play in the Briefs iPhone app. In hindsight it wasn’t a good process and it was confusing. But most importantly it threw up red flags at Apple because they thought it was a programming language.

Briefs is now a Mac application that allows you to build briefs visually, the way designers and non-developer humans want to work. Then when you’re ready to see it on the device, you push the resulting document (called a brief) to Briefscase, our free iOS app.