January 4, 2017

Fantastical 2 vs BusyCal

I recently began using a Mac full-time in a corporate environment again (yay Amazon!), which is to say that I’m using it to talk to a Microsoft Exchange server for both email and calendar events. Of course, I have a copy of Microsoft Outlook on my Mac, and that has some excellent features - for instance, it has a good understanding of rooms vs people as meeting attendees, and also has a great room-finder feature for when you’re setting up new meetings. However, I found its interface for general-purpose email use really slow. I was pretty surprised, as I’ve been using Outlook on Windows for the last 3 years, and it actually works relatively well (as long as you install something like XKeymacs to get working Emacs-like keybindings, like Ctrl-E to go to the end-of-line). Thus, I returned to Mail.app and Calendar.app (which used to be known as iCal). Mail.app works really well - better than I’d remembered, actually, and there are some really excellent plugins for it that add a lot of functionality to make it solidly a better email client than Outlook (there may be similar plugins for Outlook, I don’t know). For reference, check out Mail Act-On and MailTags, and anything else from SmallCubed.

However, the Calendar app Apple provides is, well… I think “basic” is the kindest way of putting it. It can talk to an Exchange server and display things… mostly. It is unable to understand event categories, preferring to force users to move events between multiple calendars to get any sort of organization. They do it smoothly enough that it would almost be an acceptable solution EXCEPT that once you move an event out of the main Exchange calendar—even to another calendar on the same account on the same Exchange server—that event will no longer receive updates (e.g. if the organizer change the room). That’s clearly unacceptable, so the search was on for a replacement! (Many people have experienced other problems with Apple’s Calendar app, such as not receiving updates or deleting entries unexpectedly - I didn’t use it long enough to have such issues.)

If you look around, there are several calendar apps out there, but two stand out as the most comprehensive, full-featured programs for a Mac (as of October 2016):

  1. Flexbits Fantastical 2
  2. BusyMac BusyCal

They both cost $50 for the full version (which might be steep, but keep in mind you’re using this tool daily). To decide for yourself which you prefer, you can download both of them for free and use them unhindered for 30 days, which is exactly what I did. And, honestly, I think they’re both pretty close. Both are MUCH better than iCal, and the level of quality and the feature-sets are fairly similar. I think I’d be happy with either one.

After spending 30 days with both (first one, then the other), I prefer Fantastical by a hair. It’s a bit prettier, and it has a strict sense of what a week is, so when I have it display the “week” view (which is my standard), I get a sense of progression through the week. (It sounds minor, but for a tool you use all the time, minor things matter.) Flexbits makes a lot of hay out of their “natural language event adding”—they did it first (BusyCal has something similar now), and they do it best (BusyCal mis-parses things sometimes, whereas Fantastical’s parser is nearly magical). Fantastical can also modify which calendars get displayed/enabled based on your location, which is a neat trick that probably most folks won’t care about. In general, Fantastical seems to have slightly more engagement with the latest and greatest MacOS features (for example, they pull your account information from the system database, whereas BusyCal requires you to enter that information again).

BusyCal is slightly more configurable (e.g. you can select between several appearance styles, beyond just changing the font), and it has a more flexible way of handling a large number of calendars (if you don’t have or don’t like having large numbers of calendars, this is just clutter rather than a benefit). BusyCal also has a dedicated panel for showing the details of events and editing them, whereas this requires a double-click in Fantastical (or hovering with a couple keys pressed, in their latest update), and that’s rather convenient. It has some features that Fantastical doesn’t that I consider mostly useless (like showing the weather for the next few days). However, it refuses to enforce a 1-week view, but rather simply displays a 5- or 7-day view. Some people would probably find that very helpful, because it provides a 5- or 7-day view into the future regardless of where you are in the week. I find it annoying.

Both display data from Gmail/Exchange/iCloud/etc. and seem to speak Exchange natively (whereas Apple’s Calendar.app speaks Exchange with a thick accent and a limited vocabulary, if that makes sense), and both support event categories/tags (e.g. changing the color of an event without changing the calendar). Both also handle reminders/todos along with events, which is handy for those of us who are mostly satisfied with basic reminders—but neither’s featureset on that front will wow anyone who is used to a dedicated GTD-type app. Both also have companion iOS apps—I haven’t tried them, but they exist. Both also have highly detailed calendar menu widgets—which, if you don’t want to have the calendar app window open all the time, is a huge improvement over Apple’s Calendar. Fantastical actually started as a menu-only calendar, but grew a full-featured app. BusyCal went the other direction, but both have ended up in a similar position.

They both also have similar drawbacks. Neither have the “Find a Room” feature that Outlook has, which is a real shame. And neither one has a really good “small month” view that can be displayed along with the reminders. Fantastical will display a very pretty and relatively useful small “month” view along with a list of upcoming events, but if you want to display reminders that will replace the month view (I’d rather it just replaced the list of upcoming events). BusyCal will display a tiny, nearly useless “month” view (equivalent to the cal program on the terminal), but puts it under the (unnecessary, imho) list of the various calendars I’m subscribed to, so that showing both it and the Todo (Reminders) list scrunches the main display, thereby making events harder to read. This month view is so small, they could have put it elsewhere, to take real-estate from something else that can tolerate losing space better (like the reminders list). Also, both seem to have a slightly higher lag time (minutes) in displaying changes on the Exchange server than Outlook does - something I haven’t yet figured out, given that they all use Exchange push notification. Maybe Outlook updates the calendar on email pushes as well as calendar pushes explains the difference, I don’t know.

Anyway, hopefully that review helps someone. I ended up purchasing Fantastical 2, and after four months, I haven’t regretted that decision even once.

October 26, 2016

Google, DKIM, and SpamAssassin

Google, once again, is doing something unfortunate with DKIM (see earlier posts on related subjects). This one is a little less their fault, just unfortunate.

Specifically, Google Groups scan for spam and add a header to indicate which Group scanned for spam (perhaps they do this to avoid redundant spam scans?). This header is X-Spam-Checked-In-Group. Once the email passes through the group and is distributed outside of Google (e.g. to Yahoo email addresses), they do the responsible thing and sign their email with a DKIM signature. This DKIM signature obeys all the rules, and includes in the signature the X-Spam-Checked-In-Group header.

Now enter the recipient. If the recipient uses SpamAssassin to do their own spam filtering, something very unhelpful will happen. According to SpamAssassin’s documentation:

Note: before header modification and addition, all headers beginning with X-Spam- are removed to prevent spammer mischief and also to avoid potential problems caused by prior invocations of SpamAssassin.

Thus, SpamAssassin removes the header that Google added, and in so doing, invalidates the DKIM signature.

This is not a problem as long as one of the following is true:

  • DKIM Validation is done before SpamAssassin filtering is done AND the email will not need to have that signature re-validate (e.g. it is not forwarded or retrieved by any other DKIM-aware system)
  • SpamAssassin is not permitted to modify the content of the email (e.g. it is being used as a boolean test OR the headers it generates are being saved and applied to the email afterward)

However, there are lots of ways in which this may not be true. For example, some people forward their email on to other systems, or have their email fetched into other systems (e.g. via fetchmail or via Gmail’s POP3 fetching service).

The choice of header name is the unfortunate thing. If SpamAssassin had chosen to use X-SpamAssassin- or some other more specific header prefix, or if Google had chosen a Google-specific prefix such as X-Gmail-Spam-Checked-In-Group, this could all have been avoided. But… here we are.

August 7, 2016

Noodler Black Inks

I have been learning about fountain pens for a little while now, ever since being turned on to them by my parents and friends. My first fountain pen was a bit of a disappointing disaster, and I nearly wrote-off fountain pens entirely as a result (pun intended). I really like super-fine-tip pens for note-taking, which is most of what I do when I’m writing things out by hand. I like pens like the Pilot Precise V5 and similar needle-nose rollerball pens, because they’re fine-tipped and smooth, reliable writers. However, those pens can have problems with line quality - sometimes they leak a little too much ink on the paper, or sometimes when you’re writing quickly the line gets unusually thin or even skips, and so forth. What really impressed me about good fountain pens, when I finally found a fountain pen I love (a Pilot Namiki Vanishing Point with an extra-fine nib) is the line quality: very thin, and extremely consistent line width. And now that I’ve used it, I’m spoiled, and the tiniest inconsistencies that I get from other pens now annoy me. It’s like if you’ve gotten used to a 60Hz refresh-rate on your monitor; when you go back to a 30Hz refresh rate, the flicker is noticeable and annoying! Anyway, now that I have a pen I really love, I set about the next process of learning: ink!

Before we talk about ink, though, lets take a short detour into paper. Paper varies in quality a lot. Paper is generally made of some combination of plant pulp (e.g. wood pulp), cotton (or similar plant fiber), clay and other binding agents. Since the heart of paper is the fiber, which generally comes from plants, the main chemical component of paper is cellulose. The length of the fibers affects many of the important properties of the paper: short fibers are easier to come by (use more wood pulp, which helps make the paper inexpensive), but are more likely to get pulled out of the paper by a super-fine-tip pen or by a very wet ink (which makes the fiber swell a little and detach from their neighbors). Long fibers (e.g. with more cotton or similar) stay in the paper and generally make the paper tougher, but are more expensive to make (cotton is pricier than wood pulp). The clay and other binding agents help with the smoothness and brightness of the paper, and have an effect on ink penetration and propagation through the paper (they can limit it). Long-fiber paper is common when you need something more durable (e.g. many checks use long-fibers) or when you expect to use very fine-tip pens (e.g. it’s standard note-paper in places like Japan), whereas short-fiber paper is common when you don’t need the durability and want something a bit less expensive (it’s common in standard copy-paper, especially in the United States). This is why many fountain-pen fans often have strong opinions on the kind of paper they want to use, or will choose ink knowing what kind of paper they will use.

The first thing many people look for in ink is the color, and preferences are all personal. I really prefer black ink. There’s a formality and universality about it that I really like. However, not all black inks are created equal. There are all manner of considerations that I would not have initially thought of before I started educating myself. For example:

  • Blackness: Some vary from black to dark-grey, and this can be affected by the flow of the pen, the width of the nib, as well as the properties of the paper. You can even get blacks that have a little of some other color, like a blue-black or a green-black, to give your writing a subtle (or not-so-subtle) hint of being “special”.
  • Flow: This was one of the problems with my first fountain pen. The ink flow wasn’t consistent - sometimes it was quite wet and wrote well, sometimes it was dry and I had to tap and shake the darn thing to coax the ink to the tip of the nib. Pens that don’t consistently write when you want them to are really frustrating! I also once got a cheap fountain pen as a freebie that had the opposite problem: the ink would occasionally come out in a big droplet for no particular reason (I think this was mostly the pen’s fault, not the ink’s fault, though). Inks have an impact here, based on their viscosity, how much they stick to the inside of the pen, their surface tension (which affects wicking), and so forth. So-called “dry” inks often have a lower surface tension, which means they don’t wick as well. In practice, that means you can use-up the ink in the tip of the pen and it doesn’t draw more ink down to the tip. “Wet” inks have a higher surface tension, and so wick more readily. Which type of ink is better depends on your pen and your writing velocity.
  • Feathering: when ink enters the paper, it soaks into the paper. Depending on its viscosity and chemical reactions with the paper, it can wick along the fibers of the paper. The result somewhat depends on the paper - sometimes this means just a thicker line than you expected (common in short-fiber paper), sometimes it means that there are teeny tiny black lines stretching away from what you wrote (the length of these lines depends on the length of the fibers). It’s the latter that gives the effect the name “feathering”, but essentially it’s referring to the ink going someplace other than where you put it. Feathering goes in three dimensions as well - when it goes down into the paper, it’s sometimes called penetration or “bleeding”. The properties that cause feathering are often the properties that improve ink flow - the better the ink wicks to the tip of the pen, usually the better it soaks into the paper.
  • Drying time: This is of extra importance to left-handed writers, because they’re often dragging their hand across the page, but inks that take a while to dry result in smears for all kinds of reasons, or even mean they’ll soak into paper that’s laid on top of what you wrote (i.e. when you turn the page). Faster drying inks also tend to be thinner in viscosity, which means they often tend to feather more.
  • Permanence: how long will this color stay this color? Does it fade over time (e.g. does the pigment oxidize)? Lots of older inks turn grey or brown when left alone for a few decades. Does it fade in sunlight? Lots of inks are intended for writing in notebooks, and as such will be obliterated or altered by intense sunlight, such as on a sign or if you leave your notebook open on the windowsill.
  • Immutability: Can this ink be removed from the paper? For instance, if I spilled water on it, will the ink run off? Or, if someone was trying to wipe your ink off of a check, e.g. with bleach, isopropyl alcohol, acetone, or some other method, how successful would they be? Bleach is a common tool for so-called “check-washers”, and it’s remarkably good at removing a lot of inks, as if they had never been there.
  • Viscosity: Thicker inks may not flow as quickly, especially in a thin-tipped pen. This may be desirable, though, in a wide-tipped pen. Viscous inks may also take longer to dry, and viscosity can also reduce feathering or penetration of the paper. Also, viscosity can be used to keep the color very vibrant, by allowing you to lay down a thick layer of ink. Viscous inks have their place - the key is finding just the right balance for what you want to use it for.
  • Acidity: Acidic inks can often be more immutable, because they eat into the paper a little to thoroughly bond with it. However, acidic inks can also cause staining or even cause the paper to fall apart over the long term, which makes acidic ink unsuitable for archival purposes. Additionally, acidic ink can corrode the internals of the pen, including the nib. Most older inks, and even some modern inks, are at least a little acidic - that’s one reason quality fountain pen nibs are often made with (or are plated with) gold or stainless steel. Corrosion of the nib and the other metal pieces of a pen is a big consideration if you’re looking at buying older (used) fountain pens. Also, it can slowly degrade the rubber and soft plastic, like the cap seal or the ink bladder (in ink-bladder pens).
  • Lubrication: This affects several things, from how the pen “glides” over the paper to how smoothly the piston slides in the ink well of the pen (if you have a piston-based refill mechanism). The glide can be more of a personal preference thing - some people like their pen to glide over the paper like oil, some prefer a little bit (or a lot) of tactile feedback when writing. Personally, I used to be a fan of very smooth gliding over paper, but my fountain pen has just a little bit of tactile feedback and I’ve really grown to like that. I find it gives me just that little extra bit of control over the pen, and I miss it when using rollerball pens now.

The first ink I used in a fountain pen was Levenger Black, which came with the fountain pen I bought from them (an L-Tech 3.0). I really didn’t like the ink and pen combination - it had flow problems, as I mentioned (this was not the only thing I didn’t like about the pen, but was the least forgivable), and I got rid of the pen so quickly, I didn’t really test the other properties of the ink. I replaced it, by the way, with an L-Tech 3.0 rollerball, which has a nice needlenose tip refill that I really liked… until I fell for fountain pens. When I got my current (and favorite) pen, I used the Pilot ink that came with it: Pilot Namiki Blue. I refilled it with Pilot Namiki Black ink. Both of those inks work really nicely in that pen - excellent flow, very reliable, decent color. I don’t think I would have grown to like fountain pens nearly so much if that ink hadn’t been such nice ink.

But then, out of curiosity and because some of my friends had other inks, I began to investigate the options. Many pen companies (Waterman, Levenger, Pilot, Pelikan, Sailor, etc. etc.) all make inks as well, and folks have their favorites (Pelikan Blue, for instance, is a classic, well-regarded ink). There are also companies that only make ink: Diamine, J. Herbin, Private Reserve, and such. If you focus on black ink, though, you will inevitably come across one name: Noodler.

Noodler is purely an ink company, 100% made in the USA, all archival-quality (i.e. pH-neutral) and focused on value: they fill their ink bottles up to the tippy top, use whatever the cheapest glass bottle they can find is (so the bottle shapes tend to change from time to time), and even use their own ink for all of their labels. They’re quite popular among fountain-pen fans, and have a solid reputation for quality (can you tell I’m a fan?). When I started looking into them, I was bewildered by the breadth of colors they have, in particular, they have a bunch of different “black” inks, with almost no obvious explanation of why or what the differences are between them:
- Bulletproof Black (or simply “Black”)
- Heart of Darkness
- Borealis Black
- X-Feather
- Old Manhattan
- Bad Black Moccasin
- Black Eel
- Dark Matter
- El Lawrence
- Bernanke Black
- Polar Black
- Blackerase

That’s twelve different black inks! So, to help out the next guy looking at buying Noodler’s ink, here’s what I’ve gleaned - please correct me if I’ve gotten anything wrong.

Noodler’s Bulletproof Black

To my knowledge, this is the original Noodler ink. As you can read here they use the term “Bulletproof” to describe the ink’s immutability: it is water-proof, bleach-proof, UV-light-proof, etc. They use the term “Eternal” to describe the ink’s permanence: it doesn’t oxidize, and it doesn’t fade in UV light. This ink is designed to react with the cellulose in the paper, much like the way people die clothing, and as such is extremely immutable. All of their ink is pH-neutral, which means (among other things) it’s an archival-quality ink. This ink is also quite black, flows nicely, and raised eyebrows with how little it feathers, even on low-quality paper. It can seem to sit on top of the paper, rather than soak into it, which helps reduce the feathering. This ink is what, to my knowledge, Noodler built their reputation on. They even had an open challenge (for $1000) for a while, to see if anyone could find a way of erasing this ink from the page! (More on this in a moment.) As a result, the permanence and immutability of this ink is quite well-studied. It is sometimes regarded as THE benchmark for black inks, it is that consistent and that popular.

Noodler’s Heart of Darkness

As Noodler was making their name with their Black ink, some folks, inevitably, wanted it a bit darker. So, the brain behind Noodler set out to make an ink that was as dark black as he could possibly make it, while still being both Bulletproof (immutable) and Eternal (permanent). This is that ink: as black as could be engineered (at the time, anyway), and just as Bulletproof (immutable) and Eternal (permanent) as the original Black. Let’s not kid around: this is VERY black ink. It is a relatively quick-drying ink, and penetrates the paper more than the standard Bulletproof Black - which means it works better on shinier paper than Bulletproof Black, but also means it can feather or bleed more if you lay down a lot of ink. The feathering depends heavily on the paper and the wetness - in my experience (with an extra-fine nib), it feathers much less than the Pilot Namiki Black, and some find it feathers similarly to Bulletproof Black, but your experience will depend heavily on the nib/paper combination. It also flows quite well, which is important in extra-fine nibs. It’s my current favorite black ink. Its permanence and immutability isn’t as well-studied as Bulletproof Black, but is believed to be the same.

Noodler’s Borealis Black

This ink is the absolute blackest Noodler could make. It’s fashioned after traditional 1950’s inks that are EXTREMELY black. According to Goulet Pens, this was made to emulate an ink by the Aurora ink company, “Aurora Black”. In any event, it’s so black that multiple layers of the ink are just as black as a single layer. However, sacrifices had to be made to achieve this level of light-absorption (i.e. blackness). This ink is somewhat water-resistant, but is neither Bulletproof nor Eternal. It’s a “wet” writing ink, and takes a little longer to dry (so could be a bit “smeary” in practice). It also feathers more than the basic Bulletproof Black. However, if you want as absolutely black as possible, this is the ink you want.

Noodler’s X-Feather Black

This ink is specifically designed to feather as little as possible, even on very absorptive paper. Really, it’s Noodler showing off their mastery of the chemical properties of ink, because even their Bulletproof Black doesn’t feather much, and this feathers even less! It is more viscous than their other black inks, which makes it flow less well in particularly fine nibs (depends on the pen), and so is more popular for use with dip pens. It also dries quite slowly, comparatively speaking. It is fairly dark black - about the same as Bulletproof Black - and is also both Bulletproof and Eternal. However, because of the anti-feathering properties, this ink can be laid down quick thickly (or in multiple layers) to become VERY VERY black without becoming messy. As a result, this ink is particularly popular with calligraphers, who typically use pens that are quite wet (i.e. a very broad nib). If you don’t lay it down thickly, it is merely a very solid black.

Noodler’s Old Manhattan

This is an ink that Noodler doesn’t sell themselves - it’s exclusively made for a website called The Fountain Pen Hospital. This ink is reputed to be even blacker than Heart of Darkness, but not quite as black as Borealis Black (apparently being super super black is somewhat at odds with being bulletproof). It is supposed to be both Bulletproof and Eternal, however it likely makes a tradeoff in terms of its other properties (flow, feathering, etc.) to reach that additional level of blackness. Some have noted that this ink has sediment in it, and you need to shake it up before filling your pens. This sediment is bonded with the paper when it dries, but also bonds with your pen and may need a proper cleaning (with a cleaning solution, not just rinsing with water) to get it out again.

Noodler’s Bad Black Moccasin

I mentioned that there was a competition to try to erase the Bulletproof Black ink. A Yale scholar, Nicholas Masluk, actually found a way to do it, using carefully controlled lasers to blast it off of the cellulose in the paper (I believe this technique depends on knowing the precise makeup of the ink, so you use the exactly right wavelength of laser). This potential problem, naturally, needed a response, and this ink is that response. It is even MORE permanent than the standard Bulletproof Black, being impervious to lasers as well, and is essentially the same color. It dries more slowly than the standard Bulletproof Black, but flows faster. As a result, it feathers a bit more than Bulletproof Black. Actually, Noodler has created an entire line of laser-proof inks, all with a name beginning with “Bad” (e.g. Bad Belted Kingfisher, which is a green ink). Noodler calls this line of inks the “Warden” series. These inks are intended to be state-of-the-art in anti-forgery technology, so, among other things, they’re purposefully mixed with a slightly different recipe in every single bottle, to make it that much harder to forge and that much harder to remove (because the forger can’t know exactly what’s in it ahead of time).

Noodler’s Black Eel

This ink is in Noodler’s “eel” line, also sometimes referred to as Black American Eel, and is identical to Noodler’s Black with lubrication added in. This lubrication is intended to lubricate the piston in piston-refill pens, which would otherwise need to be dismantled and lubed on occasion. Many cartridge converters also use a piston design, and it’s good for that too. It is considered Bulletproof and Eternal, takes longer to dry as a result of the lube, but is otherwise identical to Bulletproof Black. The lube also affects the writing performance: it feels smoother going on the page. As I understand it, longer dry time doesn’t seem to increase the feathering of this ink relative to the Bulletproof Black, which is somewhat interesting.

Noodler’s Dark Matter

This is an ink that was formulated to replicate a special ink that was used by scientists at Los Alamos, New Mexico on all of their government documents during the Manhattan Project. The man behind Noodler was provided a bottle of the original ink and asked to replicate it, which he did, although he made the ink pH-neutral, and out of modern ingredients. It’s not really a black ink; more of a very dark grey (dark enough to be mistaken for black in thin lines). It’s also not considered Bulletproof or Eternal (it’s replicating a very old ink!), but is is water-resistant. In case you’re curious, part of the reason there was a special ink for Los Alamos during the Manhattan Project was so that the ink could be identified, authenticated, and traced if it showed up in random documents somewhere it shouldn’t have been (e.g. in the possession of Russian spies).

Noodler’s El Lawrence

This is another ink that Noodler doesn’t sell themselves - it’s exclusively made for a company called Goulet Pens. This ink has the color more of used motor oil: not quite black, a little bit green, a little bit brown. It is also a unique color because it fluoresces under UV light. It is considered Bulletproof and Eternal, but tends to stick to the pen a bit more, and so requires a bit more cleaning of the pen, especially when you change inks. I don’t know much about the flow or feathering of this ink.

Noodler’s Bernanke Black

This is a fast-drying ink (the label makes a point about needing to print money especially quickly without smearing). It achieves this by absorbing into the paper quickly, which means it’s quite “wet”, has really excellent flow, and consequently, that means it feathers quite readily, especially when laid on thickly. The color is about the same as Bulletproof Black.

Noodler’s Polar Black

The Noodler “Polar” line of inks is intended to work in extremely cold temperatures (i.e. less water content, and the ink won’t freeze unless it gets extremely cold). All of the “Polar” inks are based on “Eel” inks (lubricated inks), but with anti-freeze added as well as lube. Accordingly, this ink is based on Black Eel, which was based on Bulletproof Black. The anti-freeze thins the ink a bit, which means that, partially because of the lube-induced longer drying time, this ink feathers a bit, similar to Bernanke Black. It is considered Bulletproof and Eternal, and is the same color as the Bulletproof Black.

Noodler’s Blackerase

This is part of Noodler’s “erase” line of inks, which is intended to work on wet-erase whiteboards. It was originally done as an experiment, but has been popular enough to stick around. Essentially, it goes on, dries, and can be completely removed with a wet rag. It is a relatively “wet” ink, in that it penetrates well (it’s intended for being used in a felt-tip marker), and as a result feathers a fair bit. It is neither Bulletproof nor Eternal (obviously), but it is very black. It’s not recommended for use on paper, though of course you can.

If you poke around the internet, you will likely find people who have different impressions of the properties (flow, feathering, blackness, etc.) of these inks. I am sure that their experiences are accurate; the thing to keep in mind is this: everyone’s experience will be somewhat different because of variations in pen and paper. Additionally, Noodler’s ink is all handcrafted, so there can be slight variations in the effective properties of each ink from batch to batch (of course, they try to minimize these differences, except in the Warden series, but it happens). What I’m trying to explain here is why these inks were made, so you can understand what the purpose of each is, and what their key properties are.

That said, if you’re looking for a solid, well-behaved, very black, very permanent ink, Bulletproof Black is an excellent starting point.

As I see it (this is just my opinion), the mainstays of Noodler’s black ink offerings are their Bulletproof Black, the Heart of Darkness, and X-Feather. They’re all Bulletproof, they’re all Eternal, they’re all popular and generally well-behaved inks. Heart of Darkness flows faster and dries quickly and so is good for finer pens, drier pens or lefties, while X-Feather is good for very wet, wide pens, and Bulletproof Black is halfway in between - a good “all around” black ink. All three are very black; Heart of Darkness was intended to be the blackest, but the darkness you achieve depends on your paper and how much ink you lay down. They have some “special” inks that are intended to re-create special inks and very specific hues, like El Lawrence and Dark Matter. Then there are the inks that are designed to have specific unique properties - Bernanke Black dries extra fast, Bad Black Moccasin is even more Bulletproof than the rest (more than most people would realistically need), Black American Eel is specially lubricated (for those that want a smoother ink or that have problems with older, finicky piston pens), Polar Black won’t freeze (for those that need to operate in those conditions), Borealis Black is for pitch-black extremophiles, and Blackerase is for wet-erase markers. To achieve those special properties they have made sacrifices in the other properties of the ink (e.g. usability, permanence, and/or immutability), but that’s just the price you pay for those special properties. In practice, however, ALL of these inks are excellent, and with the exception of Dark Matter, are all very black inks. If they work well for you, in your pen and on the paper you use, there’s no reason not to use them. I wouldn’t necessarily recommend, for example, that someone using Bad Black Moccasin start using some other ink unless it was behaving in a way they didn’t like.

Personally, I use an extra-fine nib and I tend to write very quickly, so things like flow are very important considerations, while feathering is less likely (simply because my lines use so little ink). Because of that, and because I was attracted to the ultra-black intent, I started with the Heart of Darkness and I’ve been very happy - it works very well for me. It flows very well, dries quickly, and doesn’t bleed much at all, even on absorptive paper. For example, I use Levenger note cards for things like Todo lists. In my experience, Pilot Namiki Black feathered pretty badly on those cards: my nice thin lines doubled in width on those cards. Heart of Darkness, on the other hand, hardly feathers at all there. And on most paper Heart of Darkness looks a touch blacker than the Pilot ink, which I like (not that I was upset with the blackness of the Pilot ink!). However, some people find that Heart of Darkness bleeds too much for them - these people are likely using wider-nibs or wetter pens than I am, but maybe it’s different paper, or maybe they write more slowly than I do, or maybe they just have a super-low tolerance for feathering. In any event, if that is you, I would suggest that you go try Bulletproof Black or even X-Feather, because they have a reputation for not feathering. You could try others, like Bad Black Moccasin or Black American Eel, but they would likely feather just as much (maybe more) and those inks make trade-offs in other ways that might end up being just as annoying to work with. On the other hand, if you are interested in particular ink qualities, for instance if you’re particularly concerned about anti-forgery and want the extra protection that Bad Black Moccasin provides, then you really don’t have much of a choice: there’s only one black ink in Noodler’s arsenal that provides that property.

If what you’re after is simply the blackest ink Noodler makes, get Borealis Black. If you want the absolute blackest Bulletproof ink they make, get Old Manhattan. To get that black, though, you have to sacrifice something, such as permanence, immutability, feathering, drying time, or what-have-you.

It’s worth noting, in closing, that there are other inks out there that provide some of the properties that Noodler’s has made famous. For instance, Private Reserve Invincible Black is supposed to be “Bulletproof” as well, using a similar cellulose-reaction technology that Noodler’s Bulletproof inks do, and some people like various things about it better (e.g. its a little bit more lubricated, and so a little bit smoother - along the lines of Black American Eel - but the exact shade of black is likely different). Noodler’s is far from the only game in town. I’m not advocating Noodler’s exclusively, just trying to explain what I’ve learned about their multitude of black inks.

November 4, 2015

Exception Handling

If you google “Exceptions Considered Harmful”, you’ll find several folks who have a bone to pick with exceptions. The best arguments (in my opinion) are these:

  1. Exception handling introduces a hidden, “out-of-band” control-flow possibility at essentially every line of code. Such a hidden control transfer possibility is all too easy for programmers to overlook – even experts. When such an oversight occurs, and an exception is then thrown, program state can quickly become corrupt, inconsistent and/or difficult to predict (think about an exception unexpectedly being thrown part way through modifying a large data structure, for example). (Jason Robert Carey Peterson)
  2. Exception handling does not fit well with most of the highly parallel programming models currently in use or being explored (fork/join, thread pools and task queues, the CSP/actor model etc), because exception handling essentially advocates a kind of single-threaded “rollback” approach to error handling, where the path of execution – implicitly a single path – is traversed in reverse by unwinding the call stack to find the appropriate error handling code. (Jason Robert Carey Peterson)
  3. Exceptions create hard-to-debug code. Every marginally important error condition in code that relies on exceptions is, and in fact has to be, treated as a potentially fatal error. This creates a situation that can be dubbed “exception spam”, which is especially problematic when code is reused across multiple contexts, and the severity assumptions of certain errors are not true in all contexts. Exceptions just keep coming (and being handled) on all sorts of seemingly innocent occasions. The problem is, once the “break on exceptions” debugger functionality is off the table due to exception spam, you are relegated to manual code analysis to find where things are breaking and why. For example, consider the standard-looking code snippet:
    std::ifstream file(“accounts.db”);
    Normally, errors are handled via an if (!file.exists()) conditional afterward. But if ifstream were to throw an exception on error, there would possibly be no if clause afterwards to check for that exception because it may well be handled a few call frames above, by the client code at some distant level of abstraction. You can’t set a breakpoint on a line of code that doesn’t exist, which means it becomes extremely difficult to track down where that exception came from. In order to figure out what’s going on, you have to disable the “break on exceptions” feature of your debugger, and go find the bug the old-fashioned way OR wrap every function call in its own unique try/catch block. (Dennis Gurzhii)
  4. Exceptions are invisible in the source code. Looking at a block of code, including functions which may or may not throw exceptions, there is no way to see which exceptions might be thrown and from where. This means that even careful code inspection doesn’t reveal potential bugs. (Joel on Software)
  5. Exceptions create too many possible exit points for a function. To write correct code, you really have to think about every possible path through your function. Every time you call a function that can raise an exception (a fact which may be hard to know, per the previous point) and don’t catch it on the spot, you create opportunities for surprise bugs caused by functions that terminated abruptly, leaving data in an inconsistent state (think data structures), or other code paths you didn’t think about. (Joel on Software)

But if not exceptions, then what? To quote Joel on Software (a really smart fellow), back in 2003:

A better alternative is to have your functions return error values when things go wrong, and to deal with these explicitly, no matter how verbose it might be. It is true that what should be a simple 3 line program often blossoms to 48 lines when you put in good error checking, but that’s life, and papering it over with exceptions does not make your program more robust. I think the reason programmers in C/C++/Java style languages have been attracted to exceptions is simply because the syntax does not have a concise way to call a function that returns multiple values, so it’s hard to write a function that either produces a return value or returns an error. (The only languages I have used extensively that do let you return multiple values nicely are ML and Haskell.) In C/C++/Java style languages one way you can handle errors is to use the real return value for a result status, and if you have anything you want to return, use an OUT parameter to do that. This has the unfortunate side effect of making it impossible to nest function calls, so result = f(g(x)) must become:

T tmp;
if (ERROR  g(x,tmp))
    errorhandling;
if (ERROR  f(tmp, result))
    errorhandling;

This is ugly and annoying but it’s better than getting magic unexpected gotos sprinkled throughout your code at unpredictable places.

It’s important to recognize and understand that the error-code methodology does have drawbacks! The error codes don’t contain much information (what was the filename you couldn’t read?), and (as Joel points out) checking them all the time is ugly and annoying. But that’s what good programming means: checking for, and handling, errors! Doing the same thing with exceptions doesn’t make the need go away, just less ugly with a harder to follow error-handling path. Take for example, the following code:

class Foo {
public:
    Foo();
    ~Foo();
private:
    Bar *a;
    Baz *b;
};	

Foo::Foo() :
  a(new Bar),
  b(new Baz)
{}

Foo::~Foo()
{
    delete a;
    delete b;
}

Can you see the memory leak? If new Baz throws an exception, the destructor for Bar is never invoked, so a is leaked. The alternative, proposed by exception advocates and C++ experts (namely, Fabrizio Oddone) is:

Foo::Foo() :
  a(NULL),
  b(NULL)
{
    std::auto_ptr<Bar> exceptionSafeBar(new Bar);
    std::auto_ptr<Baz> exceptionSafeBaz(new Baz);
    a = exceptionSafeBar.release();
    b = exceptionSafeBaz.release();
}

If the Baz allocation fails, the auto_ptr destructor WILL be called (you knew that, right? it’s because while Bar didn’t go out of scope, exceptionSafeBar does go out of scope as the result of an exception), which will call the Bar destructor. Then you can “release” those pointers, which is a non-throwing operation (can you tell by looking at them that they cannot throw an exception?). Nice and clean, right?

An alternative proposed by C programmers would be this:

struct Foo *f = malloc(sizeof(struct Foo));
if (f == NULL) {
    return NULL;
}
f.a = malloc(sizeof(struct Bar));
f.b = malloc(sizeof(struct Baz));
if (!f.a || !f.b) {
    if (f.a) free(f.a);
    if (f.b) free(f.b);
    free(f);
    return NULL;
}

The one with exceptions is a lot fewer lines of code, but which one do you find easier to understand? Which would be easier to debug? Which would you have thought of?

But that’s just memory allocation – and the proposed exception-friendly solution is, essentially, a form of garbage collection. And what about complex data structures, or some other thing where a potential failure can come part-way through a change? The basic C++ answer to this is the same: hide the cleanup in destructors of custom error-handling classes that are created on a per-operation basis. It’s like a dead-man switch: successful execution has to disarm the bomb (er, I mean, “disarm the clean-up variables”) whose purpose is to destroy everything in the case of unexpected death (er, “an exception”). That’s what the call to release() did, among other things. Now ask yourself: what happens if a destructor encounters an exception? How familiar are you with the rules governing destructor ordering in exceptional cases and how to work around it when necessary? How much implicit behavior do you want to rely on for your error-handling?

The strength of exception handling is also its greatest weakness: the fact that it’s hidden. The big benefit is that your “happy path” through the code is clean and obvious. The big downside is that the error paths (both the sources of errors and the handling of errors) are largely invisible. (And that’s in addition to the challenges when doing threaded code.)

Creative Commons License
This weblog is licensed under a Creative Commons License.
Powered by
Movable Type 3.34