Archive for September 2, 2014

Tuesday, September 2, 2014

“Use Cellular Data For” Switch Doesn’t Work


You can also enable or disable cellular data for certain iOS apps and features from this setting.

Choose Settings > Cellular to view the cellular data usage for each app. Tap to turn off cellular data for an app.

Unfortunately, this feature seems to have stopped working with iOS 7.1.2. I went over my 200 MB bandwidth limit in both July and August—having never done so before. Apps such as OmniFocus and Overcast, which I’ve always set to not use cellular data, used tens of MB of data each month.

Omni seems to have received other reports of this problem and explained how I could turn off automatic syncing in OmniFocus. I think this helped, but the app has still used 5 MB of data in the last four days, when it shouldn’t have used any at all.

Update (2014-09-18): My initial impression is that iOS 8 fixes this bug, although it continually pops up alerts telling me that cellular data is turned off.

Announcing the Textbundle Format

Brett Terpstra:

The Textbundle format is very simple. A folder containing a plain text file, a JSON data file, and an assets sub-folder. An app, such as Ulysses, can write a Textbundle out and pass it to Marked, and all of the necessary components are automatically included. Images, additional text files, and any metadata needed are all there and safe from sandboxing restrictions.

Sandboxing is the primary motivation, and Textbundle solves the major issue of referencing external files in Markdown.

LaunchBar’s New Staging Area

Norbert Heger:

LaunchBar collects items that participate in a multiple selection in a so called staging area. You can add or remove (stage or unstage) items with a few keystrokes.


Once you’ve staged multiple items, you can act on these items pretty much the same way as you do with single items. Press ↩ to open them, press ⇥ to send them to an action, move them to a folder, and so on.


You can quickly show a list with all currently staged items by pressing ⇧→.


While this list of staged items is visible, you can press ⌫ to remove items from the staging area. And you can press ⌥↑ or ⌥↓ to rearrange items in the list. This is useful when the order of items is relevant, e.g. in case of songs (when you wish to play them in a particular order) or contacts (when you want a recipient to be first in the To-field of an email).

Protocols and Assumptions

Airspeed Velocity:

So what’s the solution – should RangeReplaceableCollectionType mandate the kind of index validity behaviour our remove algorithm relies on? Or are the assumptions invalid and we need a better algorithm? (of which more in a later article) The Swift standard library is still evolving rapidly with each beta so it’s possibly a little early to tell. For now, be careful about the assumptions you make – just because all the current implementations of a particular protocol work a certain way doesn’t mean other implementations will.

What “Coder” Means

Dave Winer:

The act of turning the English words into Morse code is coding.

That is what coder means. Someone who encodes things.

There was a time when you’d write your code on big sheets of paper, and then sit down at a machine called a keypunch, and transfer the instructions from paper to 80-column cards with holes, that machines could read. It would be fair to call this coding. But we haven’t done development that way for a very long time!

Developing software involves a lot of thinking, and trial and error, learning, experimenting, listening to users, getting feedback and trying new approaches. The coding part of it, if we still did it, which we don’t, would be a relatively insignificant part of the job.

I doubt that most people think that’s what “coder” means today. They just use it as a shorter word for “programmer.” Leslie Lamport seems to see coding as translating a (perhaps implicit) specification into code. We understand that writing is primarily thinking (or researching, etc.), not typing. So it is for people who write code rather than prose. Do people really not understand this?

A lot of managers think that programming is a menial job, and hire people accordingly. They value subservience. That’s where the word coder comes from, and why it’s so bad.

If there is a problem, I think the solution would be to educate about what coders actually do, not to come up with a fancier title. If “writer” works—and I think it does—I have no problem with “coder.” That said, I tend to describe myself as a “developer” because I do lots of non-coding/code-thinking work such as customer support, documentation, and business and server stuff.

Discourse Reaches 1.0, Without RSS

Jeff Atwood:

Version numbers are arbitrary, yes, but V1 does signify something in public. We believe Discourse is now ready for wide public use.

That’s not to say Discourse can’t be improved – I have a mile-long list of things we still want to do. But products that are in perpetual beta are a cop-out. Eventually you have to ditch the crutch of the word “beta” and be brave enough to say, yes, we’re ready.

Jeff Atwood (via John Gordon):

I am of the belief that RSS is kind of a semi-dead format at the moment.

However if someone submitted a GitHub pull request that added proper RSS support, I wouldn't turn it down!

I loved the idea of Discourse, but I remain unimpressed with it so far. In my view, the current design is user-hostile, to the point where I avoid forums that use it. I prefer to visit sites that use any number of low-tech forums from before Web 2.0. Not including RSS support seems to underscore that their vision for what the product should be is radically different from mine.

TextExpander Snippet Expansion Comes to Every App in iOS 8

Smile Software (via Federico Viticci):

Prior to iOS 8, only apps which implemented the TextExpander touch SDK could expand snippets directly.

Under iOS 8, the TextExpander keyboard will work system-wide and reliably share snippets with the TextExpander app. The keyboard will also include full VoiceOver accessibility support.

Update (2014-09-02): Clark Goble:

The keyboard I’m most looking forward to myself is SwipeSelection. Apple even changed the keyboard API to make keyboards like SwipeSelection possible in iOS 8. If TextExpander including sensical cursor movement in their keyboard ala SwipeSelection I’d probably get it immediately. Although it should be a selectable option.

It’s what’s possible now, but it seems like a custom keyboard is not really the best way to integrate TextExpander into iOS. Why should I have to use their keyboard user interface (and forego other custom keyboards) just to get their code to see what I’m typing?

The Poisoned NUL Byte, 2014 Edition

Chris Evans:

The effect of all these command line arguments is to bloat both the stack (which grows down) and the heap (which grows up) until they crash into each other. In response to this collision, the next heap allocations actually go above the stack, in the small space between the upper address of the stack and the kernel space at 0xc0000000. We use just enough command line arguments so that we hit this collision, and allocate heap space above the stack, but do not quite run out of virtual address space -- this would halt our exploit!


The main point of going to all this effort is to steer industry narrative away from quibbling about whether a given bug might be exploitable or not. In this specific instance, we took a very subtle memory corruption with poor levels of attacker control over the overflow, poor levels of attacker control over the heap state, poor levels of attacker control over important heap content and poor levels of attacker control over program flow.

Yet still we were able to produce a decently reliable exploit! And there’s a long history of this over the evolution of exploitation: proclamations of non-exploitability that end up being neither advisable nor correct. Furthermore, arguments over exploitability burn time and energy that could be better spent protecting users by getting on with shipping fixes.

Swift Default Protocol Implementations

Mattt Thompson:

All of this highlights a significant tension between methods and functions in Swift.

The Object-Oriented paradigm is based around the concept of objects that encapsulate both state and behavior. However, in Swift, it’s simply impossible to implement certain generic functions as methods on the struct or class itself.


Because of the constraint on the element of the sequence generator being Equatable, this cannot be declared on a generic container, without thereby requiring elements in that collection to conform to Equatable.

Relegating behavior like contains, advance, or partition to top-level functions does a disservice to the standard library. Not only does it hide functionality from method autocompletion, but it fragments the API across a Object-Oriented and Functional paradigms.

Photo Security Tips

Christopher Breen:

If you’d disabled photo sharing from your iPhone to your iCloud account those pictures would have remained on your phone. Although the horse has left the barn, here’s what you might have done.

Sriram Krishnan:

First, you deserve an apology from all of us who work in tech. This should be easier and more bullet-proof but it isn’t. We keep working on making it better.

Second, the title of this post is a lie. Nothing is ever completely safe unless you prefer to only use computers in an underground bunker disconnected from any wires. And even that may be insecure. The below are reasonable practices which will hopefully keep you safe while not making your normal usage of technology and gadgets impossible. Sadly, the only way to make sure something never falls into the wrong hands is probably to never have it in a digital form. This is especially true for those of you who get more attention from the bad guys than the rest of us - they’re always going to be trying to find the weakest link in.

I don’t actually want my photos to be in the cloud, with the last 1,000 taking up space on each of my iOS devices. But the alternative is to use a much less efficient workflow. I’d prefer it the photos were automatically transferred directly to my Mac, either over Wi-Fi or USB, without having to open Aperture, pick a project, initiate the import, delete the photos after importing, and then quit Aperture.