Affinity Photo — First Impressions

Affinity Photo in action

Note: if you’re interested in using Affinity Photo for processing RAW photos (i.e. its “non-destructive workflow”) you’re probably going to be horribly disappointed. See my followup article.

Affinity Photo has just come out of beta and is being sold for a discounted price of $40 (its regular price will be $50). As with Affinity Designer, it’s well-presented, with an attractive icon and a dark interface that is reminiscent of late model Adobe Creative Cloud and Apple Pro software. So, where does it fit in the pantheon of would-be Photoshop alternatives?

In terms of core functionality, it appears to fit in above Acorn and below Photoline. In particular, Photoline supports HDR as well as 16-bit and LAB color, while Affinity Photo lacks support for HDR editing. Unless you work with HDR (and clearly not many people do) then Affinity Designer is both less expensive than Photoline, and far more polished in terms of the features it does support.

Affinity Designer supports non-destructive import of RAW files. When you open a RAW file you enter “Develop” mode where you can perform adjustments to exposure, curves, noise, and so forth on the RAW data before it gets converted to 8- or 16-bit RGB. Once you leave Develop mode, you can return and second-guess your adjustments (on a layer-by-layer basis). This alone is worth the price of admission, and leaves Acorn, Pixelmator, and Photoline in the dust.

In essence you get the non-destructive workflow of Lightroom and the pixel-manipulation capabilities of Photoshop in a single package, with the ability to move from one to the other at any point in your workflow. Let me repeat that — you can “develop” your raw, go mess with pixels in the resulting image, then go back and second-guess your “develop” settings (while retaining your pixel-level manipulations) and so on.

This feature isn’t quite perfect. E.g. you can’t go back and second-guess a crop, and vector layer operations, such as text overlays, get reduced to a “pixel” layer if you go back to develop mode. But it’s a big step in the right direction and for a lot of purposes it’s just dandy.

This is just my first impressions, but there are some things that could be better.

Affinity Photo provides adjustment layers, live filter layers, filters, and layer effects — in many cases providing multiple versions of the same filter in different places. Aside from having functionality scattered and in arbitrary buckets, you get several different user interfaces. This is a mess, and it is a direct result of copying Photoshop’s crazy UI (accumulated over decades of accumulated functionality) rather than having a consolidated, unified approach the way Acorn does.

At first I thought Affinity Photo didn’t support layer styles, but it does. Unfortunately you can’t simply copy and paste layer styles (the way you can in Photoshop and Acorn), so the workflow is a bit more convoluted (you need to create a style from a selection and then apply it elsewhere — often you just want to copy a style from A to B without creating a reusable (or linked) style so this is a bit unfortunate).

I really like the fact that the RGB histogram gives a quick “approximate” view but shows a little warning symbol on it. When you click it, it does a per-pixel histogram (quite quickly, at least on my 24MP images).

I don’t see any support for stitching images, so if that’s important to you (and it’s certainly very important to landscape photographers) then you’ll need to stick with Adobe, or specialized plugins or software.

It also seems to lack smart resize and smart delete or Photoshop’s new motion blur removal functions. (Photoline also does smart delete and smart resize.)

Anyway, it’s a great first release, and definitely fulfills the promise of the public betas. It seems to me that it’s a more solid overall effort than Affinity Designer was when first released, and I’m probably a more demanding user of Photoshop-like programs than I am of Illustrator-like programs. I can understand the desire to provide a user interface familiar to Adobe products even at the cost of making them unnecessarily confusing and poorly organized, but I hope that sanity prevails in the long run.

Bottom line: a more complete and attractive package than either Photoline or Acorn (its most credible competitors) and better in some ways than Photoshop.

Email E. Neumann

Email E. NeumannHow stupid is email?

Actually, email is great. It’s robust, widely-supported, and highly accessible (in the 508 and economic senses of the word). The problem is email clients.


A colleague of mine and I once considered starting up a business around a new email client. The problem though, is that it works best when someone send emails using your email client to someone else using your email client. E.g. you can easily implement PGP encryption:

  • if you’ve previously exchanged email, you both have each others’ keys — snap you’re done;
  • if you haven’t, your client asks whether you want it sent insecurely or asks you for authentication information (something you know about the person that a man-in-the-middle probably doesn’t, or an out-of-band mechanism for authentication such as calling you on the phone; and then sends an email initiating a secure authentication process OR allowing them to contact you and opt to receive insecure communication; all this can happen pretty seamlessly if the recipient is using your email client — they get asked the question and if they answer correctly keys get sent).

It’s relatively easy to create a secure encryption system if you (a) opt out of email, and (b) have a trusted middleman (e.g. if both parties trust a specific website and https then you’re done — even a simple forum will work). But then you lose the universality of email, which is kind of important.

The obvious goal was to create a transparently secure email client. The benefits are huge — e.g. spam can be dealt with more easily (even insecure email can be sent with authentication) and then you can add all the low-hanging fruit. But it’s the low-hanging fruit I really care about. After all, I figure if the NSA can hack my storage device’s firmware, my network card’s firmware, and subvert https, encryption standards, and TOR — and that’s just stuff we know about — the only paths to true security are anonymity (think of it as “personal steganography”) or extreme paranoia. When dealing with anyone other than the NSA, Google, China, Iran, etc. you can probably use ordinary caution.

Well, how come Windows Mail / Outlook and Apple Mail don’t do exactly what I’ve just said and automatically handshake, exchange keys and authentication questions, and make email between their own email clients secure? If it’s that easy (and really, it is that easy) why the hell? Oddly enough, Apple has done exactly this (using a semi-trusted middleman — itself) with Messages. Why not Mail?

OK, set all that aside.


  • Why can’t I conveniently send a new message the way I send a reply (i.e. “Reply with new subject and empty body” or “Reply all with new subject and empty body”)? When using an email client most people probably use Reply / Reply All most, then create new message and copy/paste email addresses from some other message second, and create a new message and type in the email address or use some kind of autocomplete last. Furthermore, many replies are actually intended to be new emails to the sender or sender and recipients. Yet no email client I know of supports the second — very frequent usage.
  • Why does my email client start me in the subject line? Here’s an idea: when you create a new email you start in the body. As you type the body the email client infers the subject from what you type (let’s say using the first sentence if it’s short, or the first clause with an ellipsis if that works, or a reasonable chunk of it with an ellipsis otherwise).
  • Why does my OS treat email, IMs, and SMSs as completely separate things? Studies show grown-ups use email and hardly SMS. Younger people use SMS and hardly use email. Both probably need to communicate with each other, and both are generally sending short messages to a person, not a phone number or an email address.
  • (While I’m at it, why does an iPhone treat email and IMs as different buckets? How come they had the nous to merge IMs and SMSs, and even allow semi-transparent switching between secure and free iMessages and less secure and not-necessarily-free SMSs based on whether the recipient was using an Apple device or not? I don’t ask why Android (or heaven forfend Windows) does this because (a) Android generally hasn’t even integrated mailboxes, and (b) don’t expect real UI innovation from Google; they can imitate, but when they originate it tends to be awful — aside from Google’s home page which remains one of the most brilliant UI decisions in history.
  • Oh yeah, and voicemail.


Now imagine a Contacts app that did all this stuff. I’d suggest it needs to be built into email because email is the richest of these things in terms of complexity and functionality, but let’s call it Contact. Consider the nirvana it would lead to:

  • Instantly, four icons on your iPhone merge into one (Mail, Phone, Messages, Contacts (the existence of the last has always bothered me, now it would make sense). Three of those are likely on your home screen; now you have more space.
  • You no longer have to check for messages in four different places (e.g. if you have a voicemail system that emails you transcripts of voicemails, you can mark them both as read in one place, or possibly even have them linked automatically.)
  • Similarly, when you reply to a given message, you can decide how to do so. (Is it urgent? Are they online? Is it the middle of the night? What is your preferred method of communicating with this person?) Maybe even multiple linked channels.
  • Message threads can cross message domains (imagine if you reply to an email with a phone call and Contacts knows this and attaches the record of the call to the thread containing the emails, SMSs, iMessages, voicemails, and so on). Some of this would require cleverness (e.g. Apple owns iMessages, so it could do things like add subject threads to messages on the side, but SMSs are severely constrained and would lose their thread context).
  • Oh, and you can use the same transparent encryption implementation across whichever bands make sense.
  • Obviously some of these things won’t work with some message channels e.g. you can’t do much with SMS because the messages aren’t big enough, but MMS, which is what most of us are using, works fine, similarly Visual Voicemail could support metadata but doing it with legacy voicemail systems isn’t going to happen.

Consider for a moment how much rocket science was involved in getting Continuity to work on iOS and OS X devices. To begin with it requires hardware that isn’t on older Macs and iOS devices. And what it does is pretty magical — I am working on a Keynote presentation, walk over to my Mac and automagically I am working on the same document in the same place. But really, how useful is this really and how often? Usually when I switch devices I am also switching tasks. Maybe that’s because I grew up in a world without Continuity.

Now consider how this stuff would require almost no rocket science and how often it would be useful.



DuckDuckGo vs. Google

DuckDuckGo Bang!

I think it’s safe to say that DuckDuckGo is not quite as good as Google when it comes to search. But it’s not bad at all.

But it’s a lot cleverer than Google. It’s almost as though, rather than working on cloning Facebook, making creepy glasses, or trying to beat Apple by acquihiring a bunch of ex-Apple guys they’ve actually been trying to make a better search engine. To begin with, if you set DDG as your default search engine (on Safari this actually means installing an extension, since Apple doesn’t let you add it the obvious way) your address bar becomes a command line, with special (and very convenient) commands.

For example, if you want to use Google, you simply prefix your search with !g. So there’s that. If you want to use Bing, you can use !b, and !i for Google Image search. If you want to search for something on Amazon it’s !a. Stackoverflow !so. That’s actually enough — right now, DDG wins. Here’s a link to all the bang commands.

Now of course the main argument for DuckDuckGo is that it makes its money comparatively honestly by selling search terms without tracking its users. Well, it claims not to track its users, but even if it does it’s probably advantageous to not have your email, searches, and ad-clicks all being tracked by one entity, right? At least make them work for a living.


Screen Shot 2014-01-07 at 4.46.16 PM
Chocolat is an ambitious programmer’s text editor, but it falls short (at least right now) in lots of little ways. E.g. integrating web-based documentation is a nice touch, but what about jQuery?

I discovered Chocolat by accident a month or so back. I can’t exactly remember how I learned about it — I saw a reference to it when reading the documentation of another product I use (I think it might have been Ulysses III) and so I gave it a spin. There was — and remains — a terrible problem with the way Chocolat identifies symbols in Javascript files, and I got into a bit of an argument with one of the developers on github over it, and set it aside. The thing is, Chocolat is an opinionated piece of software, and the downside of that is that one might not like all the opinions. E.g. in their FAQ is the question “will you add a minimap?” the answer to which is “Never!” That said, I like most of Chocolat’s opinions.

Well, there’s a new MacHeist “nano” bundle out and it’s particularly interesting for developers since it includes Hype (the would-be HTML5-based Flash replacement), Chocolat (a new programmer’s text editor which has a lot of potential), and — if some unknown number of people buy the bundle — PaintCode. I should mention that I bought the bundle for PaintCode and then realized it wasn’t actually included. Grrr. Oh well, Chocolat for $20 is actually a pretty good deal.

Here’s what differentiates Chocolat from my two favorite text editors (BBEdit and Sublime) right now:

Chocolat's symbol map is great when it works.
Chocolat’s symbol map is great when it works.
Chocolat tries to show a "symbol map" of your source file, but can't cope with code modules wrapped in anonymous functions (which unfortunately means most well-written Javascript library code). Note the empty rectangle where symbols should be.
Sadly, Chocolat can’t cope with code modules wrapped in anonymous functions (which unfortunately means most well-written Javascript library code). Apparently there are no functions in this source file.
  • Chocolat displays a symbol map (i.e. a list of object and function definitions you can use for quickly navigating source files) — the map is nice, but functionally it’s inferior to BBEdit (which can find symbols declared inside anonymous functions). Espresso remains the best in this respect, since it not only finds all the symbols you could ask for, it displays a nice symbol map too.

Screen Shot 2014-01-07 at 5.03.38 PM

  • Rather than giving you the choice of viewing two files side-by-side or one file, Chocolat lets you look at as many files as you care to side-by-side simply by selecting them.
  • Chocolat attempts to autocomplete Javascript (and does a pretty good job of it, including inferring the expected types for function parameters, and allowing you to tab around auto-inserted method calls TextMate-style). The only downside is that only works on currently open files. I imagine it’s even better with Obj-C (but haven’t tried).

Screen Shot 2014-01-07 at 5.07.14 PM

  • Chocolat attempts to integrate Safari (complete with debugging tools) by displaying it side-by-side with your code. This works pretty well.
  • Chocolat attempts to provide integrated documentation (e.g. select queryGetSelectorAll in a Javascript file and hit Command-Shift-J and it will look it up on MDN and show the documentation side-by-side with your code.
  • Chocolat does not attempt to integrate source control (git, hg, svn, p4, etc.) — I actually like this because I don’t want my text editor to do source control.


8 errors. Thanks.
8 errors. Um, ok. Thanks, I guess.


  • Chocolat is scriptable via Node.js. (Sublime is scriptable via Python, which is awesome too, but doesn’t happen to be the language I code in every day.) So far the available “mixins” seem pretty primitive (e.g. the jshint mixin tells me that there are “12 errors” in a file, but gives me no clue where or what they are).

For a while I thought Chocolat was a bit sluggish, so I started checking for signs of bloat. I did a quick comparison and BBEdit is actually the leanest of the three editors at 26MB on disk; Sublime 2 is 27MB, Sublime 3 is 28MB, and Chocolat is 34MB. Espresso, incidentally, is 18MB. But it turns out that the problem is I was using a “slow monitor” (i.e. my third monitor which is hooked up using one of those USB dongles). After comparing Chocolat, BBEdit, and Sublime on this display I concluded that BBEdit is even more awesome than I realized (because it appears to do minimal screen updates when scrolling), Chocolat is not bad at all, and Sublime is actually the worst. Again — avoid using USB-powered displays for editing text and you won’t care.

So here’s how it looks right now: Chocolat has the potential to become my favorite text editor since it’s heavily based on Javascript which means anything it doesn’t do well right now I can probably fix if I care to. BBEdit is the most polished, but the hardest to customize. Sublime remains — of course — the coolest, although given that Chocolat has support for both side-by-side editing, supports TextMate themes and snippets, and has “vim mode” it might take that crown, at least on Mac OS X.

But, Chocolat’s multi-file search is far inferior to BBEdit’s (it’s about on par with Sublime’s), its Regex support is also signficantly inferior to BBEdit’s, and it has no diff support (whereas BBEdit is my preferred tool for resolving differences between source files) — although I’m perfectly happy to use BBEdit as a dedicated diff front end, and do my text editing elsewhere.

Chocolat ★★★★ is $49 normally, currently available as part of Macheist Nanobundle 4 ($20).

I may review some of the other apps in the bundle later. In particular I have strong — mostly negative — opinions of Hype and Intensity Pro.

Making Blender Usable

Blender 2.69 in actionOne of the biggest changes in Blender over the last two years has been major changes and reorganization of its user interface. The goal was to address Blender’s glaring usability issues, and indeed many of them have been addressed. Yet Blender remains a dauntingly difficult program to use, and — worse — a difficult program to remember how to use. I’d say that to me (and I am hardly an expert user of any) Blender is now still somewhat harder to use and more disorganized than, say, Modo (I have Modo 601) or Cinema 4D (I have v11 XL) but that’s not saying much.

All serious 3D applications, and Blender unquestionably qualifies as a serious 3D application, are plagued by the intrinsic complexity of what they’re trying to do, combined with a lack of agreement on the “right way to do things”, and the fact that real technical improvements are constantly being made in 3D graphics, leading to proliferation of overlapping tools and terminology (consider that there are multiple implementations of subdivision surfaces — such as Catmull-Clarke and Stam-Loop — and it’s important for a 3D program to support as many as possible if it’s to be compatible with other 3D programs. Similarly, there are many different tools for modeling organic objects and curved surfaces, including NURBS, subdivision surfaces, deformation lattices, and multiple approaches to sculpting (including voxels and displacement).

The “Right Way” isn’t obvious

Wordperfect 5.1 for DOS (image from Note the F3 for help (F1 was more of a "standard"). While it has an Edit menu, "cut and paste" weren't supported (it had block and move functions instead). And bold was F6 rather than ctrl-B.
Wordperfect 5.1 for DOS (image from Note the F3 for help (F1 was more of a “standard”). While it has an Edit menu, “cut and paste” weren’t supported (it had block and move functions instead). And bold was F6 rather than ctrl-B.

If you go back to the era of DOS word-processors there was a similar lack of agreement — Word Perfect, for example, had a completely different paradigm for editing and formatting text than did Microsoft Word, and on the Mac side MacWrite and FullWrite used a “ruler” formatting paradigm while WriteNow and Microsoft Word used “styles” (but each wrapped them in a unique user interface and terminology). Pages and Microsoft Word, by comparison, are virtually identical in how they solve most problems, the differences coming down to nuances. The Mac toolbox (along with excellent free software such as MacPaint and MacWrite, and — eventually — written Human Interface Guidelines) standardized basic text editing operations (selection, inserting the caret, clipboard operations, and undo) but it took close to ten years for the world to settle on the next level of convention — word and paragraph styles with “spot” overrides. (And indeed, Windows still hasn’t quite settled on clipboard or text edit field behavior standards.)

And then let’s return for a moment to the point that — unlike with word-processing — almost every aspect of 3D technology is constantly churning. With word-processors and even page layout programs there have been some technical improvements to be sure (e.g. typefaces have become more sophisticated with things like multiple master fonts and automatic ligatures, there’s Unicode of course, and compositing has improved markedly) but these have been relatively simple changes conceptually, and in general they have just made things easier (e.g. instead of having to render a drop shadow in Photoshop, export it as EPS, and then embed a reference to it in Quark XPress, you can now perform the entire operation in a click or two in your page layout program or word-processor). Contrast this with the world of 3D which has seen  major new technologies emerge in pretty much every piece of core functionality from modeling to rigging to texture-mapping to lighting to rendering — and all these different technologies have to live side-by-side, inter-operate, and somehow fit into a single user interface.

As you’ll discover if you visit Blender’s website right now, Blender is now 20 years old, and that means it has 20 years worth of functionality clogging up its user interface. It supports NURBS and subdivision surfaces and multi-resolution displacement sculpting. Similarly it has support for rigging using bone envelopes, vertex-painting, and heat-mapping. It has three built-in renderers. It has two different node-based shader architectures (or is it three?). I’m sure you’re getting the picture.

Left-Click to Select

Blender remains unusually bad at a fundamental level because it refuses to adhere to such cross-application conventions as do exist. The most hilarious example is left-click to select. It’s almost impossible to find another application anywhere that uses left-click for something other than selection (unless there is no concept of selection at all). It’s simply bizarre. What’s worse, left click is used to position the 3d “cursor” object — which is actually a very clever concept — except that it’s a far less common operation than simple selection, and doing it by accident is really annoying.

(If you consider the behavior of a text cursor, clicking somewhere in a body of text positions the cursor rather than selecting anything. The cursor position determines where stuff you type will appear. This is the exact behavior of the Blender cursor. But it’s not the behavior of any 2D or 3D graphics program I’ve ever seen. But to select text you left-click and drag or double-click — this is definitely not how Blender works, so justifying Blender’s weirdness by analogy to text doesn’t get you very far.)

Now I need to note that Blender does allow you to make left-click into select as a preference, but the program really doesn’t work properly in this mode (and you need to reset the preference when you upgrade Blender) so that’s not a satisfying solution. Just to give you one example: there’s a shortcut in Blender to allow you to “lasso select” using ctrl+left-mouse (why left-mouse when selection is normally with the right mouse?) — this becomes ctrl+right-mouse if you’ve set left-click to select. What I want is to select stuff with the left mouse button. Not flip a ridiculous set of defaults and create a different ridiculous set of defaults. On the whole, I end up sticking with right-mouse to select simply because it means not having to reverse engineer every tutorial I find.

If it were up to me, selecting something (with the left mouse button) would also, by default, position the cursor at the selected object’s local origin (sometimes referred to as its “pivot”). You could explicitly position the cursor with the right mouse button (or perhaps setting the cursor could be a mode or tool), and there would also be an option to lock the cursor (many 3d programs effectively have a “cursor” locked at the origin). This would actually maximize the conceptual mapping between the 3d cursor and the text cursor — left clicking sets your insertion point – and not compromise users’ familiarity with programs other than Blender.

More Annoyances

There's a small + widget for disclosing the Tool Shelf and Properties panels in the 3D viewport.
There’s a small + widget for disclosing the Tool Shelf and Properties panels in the 3D viewport.
Once you've toggled a panel on, there's no widget to make it go away.
Once you’ve toggled a panel on, there’s no widget to make it go away.
So you either need to size the panel down to zero or learn the keyboard shortcuts (you won't learn the keyboard shortcut by hovering over the original widget though).
So you either need to size the panel down to zero or learn the keyboard shortcuts (you won’t learn the keyboard shortcut by hovering over the original widget though).

Blender’s improved user interface — and it is definitely improved! — has two more major annoyances from my point of view. First, contextual tool panes have been added to the 3D view (which is great) but the process of showing them and hiding them is asymmetric. To disclose them you click on a little + widget — which then disappears. To hide them you either need to learn the keyboard shortcut, or use the mouse to scale them down to nothing (which causes the little + widget to reappear).

Screen Shot 2014-01-05 at 12.59.55 PM
To switch the viewport mode to a rendered preview, first you need to switch renderers.


Then you'll need to change the viewport shading mode to Rendered.
Then you’ll need to change the viewport shading mode to Rendered.
The render preview looks terrific but no UI affordances show up except for the damn cursor.
The render preview looks terrific but no UI affordances show up except for the damn cursor.

Second, with the advent of the new Cycles renderer, to get a live-rendered viewport you need to switch to the Cycles renderer (one step) and then in a completely different place you need to set the viewport mode to Rendered. For your trouble you are rewarded with a wonderful live-rendered view that gives you no UI affordances (e.g. you can’t tell what’s selected) but remains live for editing purposes. Ugh. So to make this workable, you then need to create a new viewport and tweak its settings.

And unlike every other place in Blender, the render settings are at the top while preview is at the bottom (this is the subdivision modifier settings)
And unlike every other place in Blender, the render settings are at the top while preview is at the bottom (this is the subdivision modifier settings)
To alter the render preview quality you'll need to dive deep into the render tab to Sampling (which is not only near the bottom, but collapsed by default).
To alter the render preview quality you’ll need to dive deep into the render tab to Sampling (which is not only near the bottom, but collapsed by default).

Finally, to modify the quality of Cycles renders — and spent quite a bit of time googling to figure this out — you need to delve deep into the rendering panel and — slightly hilarious — the place where you determine how many samples to obtain for a render is the only place I know of in Blender’s interface where the preview settings are at the bottom and the final render settings are at the top. If you’re used to Blender’s “conventions” everywhere else (e.g. subdivision settings) it’s always the other way around.

New functionality is being added to Blender with a much higher standard of usability than the older stuff.
New functionality is being added to Blender with a much higher standard of usability than the older stuff.

These are most of the first order problems in Blender today (as of 2.69). Clutter and ambiguity are also first order problems — I’d suggest that a lot of that could be improved simply be making a decision as to which slabs of functionality to hide by default. I hope we can some day get to second order issues, but on the positive side most of the new stuff getting added to Blender seems to have a much higher standard of usability than older features. E.g. to do a physics simulation you simply click on the Dynamics tab, select your objects, assign them some properties (e.g. passive rigidbody) and then click the play button in the timeline panel and it just works. More of that please! Similarly, the node-based material system associated with Cycles is very easy to work with (indeed, you don’t really need to use the nodes at all) although right now it’s missing a lot of functionality.