Wednesday, November 2, 2016

Stephen Colbert Is In For a Big Ratings Failure on Election Night, and it's Not His Fault

Colbert moved to CBS with a big younger-than-35 audience, one that is the lion's share of the "Cable Cutters" category. That means they watch online. And if you don't give them a simple way to watch it, they'll download it. Whichever's easier.

Tired media companies somehow fail to grasp this after a decade of online streaming. And in the latest demonstration they're putting Colbert's Election Special on Showtime, via Hulu. Hulu recently got rid of its free streaming options, so you'll need a $7.99/mo Hulu subscription just to get to the door. Showtime isn't part of that subscription though, so you'll then need a Showtime subscription for $8.99/mo on top of the Hulu subscription, to actually watch.

That means someone used to watching free online has to leap through each of these hoops, probably spending time trying to scrounge up a password for these paywalls. All to watch a live show they've missed half of, while the friends they had over for election night sat and watched someone attempting to win a fight with a computer.

Most people will probably drop it and download it for free the next day. And the ones who do leap those hurdles are not going to be happy with it.

In a further sign media companies have no concept of their audience or the decade we currently reside in, they're running a ton of press about the episode, with no link to where to watch it. If this were a marketing campaign aware of the internet - for example, someone selling a product online - distributing all this press without a link to the product would get even a low-level marketer fired.

Get it together media companies. Colbert's a great comedian and he runs a great show. Enough burying content under all these pompous layers. BitTorrent should not be the easiest way to watch.

Saturday, June 28, 2014

Is ProtonMail Actually Secure?

The service is described as having 2 passwords: One you use to access your inbox (basically a list of encrypted emails), and a second password to decrypt your emails. The second detail makes it unlikely, perhaps impossible, that your email is unreadable by ProtonMail, and therefore vulnerable to hacks on their servers and legal orders.

Encryption is based on computers holding a "key," which they use to encrypt/decrypt data. So suppose 2 friends, Bob and Sue, send email to you. Bob would encrypt his email with his key, and then it's sent through ProtonMail and on to you. How would you possibly read it, unless, either:

  1. You had the same key as Bob, or
  2. Bob had his own key, and ProtonMail was translating from one to the other, by decrypting the mail Bob sent, then encrypting it with your key to pass on to you.

(Technical note: Often there's a keypair, rather than a simple key, but it doesn't change the problems discussed here.)

So let's explore scenario 1, which sounds OK when it's just you and Bob. Now you email Sue. In order for her to read your email, the 2 of you need to have the same key once again. If we continue to expand your number of friends, we find everyone on ProtonMail has to use the same key in Scenario 1. In Scenario 1, it only takes one person's mail being compromised to compromise everyone's email on all computers. Scenario 1, not so secure.

In Scenario 2, the ProtonMail service itself has to decrypt everyone's emails that pass through it and re-encrypt them in the recipient's key and pass it along. That means everyone has separate keys, but ProtonMail has everyone's keys, and so they're available to hackers and legal orders. They're even available to ProtonMail to sell the contents of to the highest-bidder if they so-choose.

It's possible that every connection you make generates a new set of keys, and ProtonMail helps the 2 of you connect, but then gets out of the transaction, allowing you to work out what your set of keys will be amongst yourselves - never touching the ProtonMail servers as you do. But they never describe such a process anywhere on their site or in the press they've been getting, so I'm really going out on a limb offering that third scenario.

Or is there something I'm not seeing here?

Monday, December 23, 2013

Stop Writing Press Releases

A number of our clients ask us to publish Press Releases. In the past, we've quietly questioned the value of this activity while proceeding with the task. Going forward, we're telling clients: Don't publish Press Releases.

You should stop too.

The Press Release originates in a 1906 train wreck - no joke. The Pennsylvania Railroad knew they had a PR disaster on their hands, so they wrote their own happier version of what happened. They brought in journalists and photographers to a cleaned-up scene to try to beat legitimate reporting about the event to the punch. It worked. It expanded in the 1930s, when the first Political Consultants published a book detailing how to run a political campaign. This evangelized their campaigning services, including press release publishing. They saw that most news organizations were small, underfunded and desperate for stories, and knew that by taking payment from their clients, they could write stories and hand them directly to papers for free. The papers, desperate to fill their paper with something on slow news days, would often take the bait.

Now let's fast forward to today's internet, where confused Press Releases continue to be published by the thousands. What were the factors that made Press Releases successful in the 1930s, and how does today relate?

Limited Supply of Stories
This is a major difference between today's internet and 1930s print. Old papers had to actually go and get their news by real reporting, or by rewording another paper's story. But today we have the AP and Reuters, who any news organization can cheaply pay to backfill when their reporters have nothing to turn in. They can even run no news of their own and just run a slanted cherry-picked series of news items from these same sources that suit their narrative (as Fox News and Huffington Post do). They don't need your Press Release.

Fixed Length of Publication
Older newspapers had to be roughly the same length each day to meet ad buy requirements and customer expectations. Companies still need revenue, but they can get that revenue in many ways today besides picking up a free story to run. For one, they can get paid to run a paid-for article that masquerades as a legitimate one, a more modern (and more pricey) version of a Press Release. Web publications don't need to be the same length on big and slow news days, and can backfill missing revenue without adding your unpaid press release.

Many niche news outlets are focused on their own small market niche audience, topic, or narrative - like cherry-picking the news for "the government is out to ruin your day." It's fairly unlikely many niche news outlets suit a single press release. That said, it is possible you could submit a normal story, rewritten to match the narrative bent of each of several small niche outlets. This however is fairly distant from a lazy Press Release written once and sent out for free to see what sticks to the wall, and has less reach at greater expense.

Less Direct Publishing
The 1900s included much less direct publishing, which meant that when a story was published, it was much harder for a small minority of informed readers to point out its inaccuracies (for the blunt: lies). This made exaggerating your successes and understating your failures more effective, with less blowback. There are now many famous cases where the exact opposite has happened online - a company or politician is caught in a bold-faced lie and an online campaign mounts to penalize that entity far worse than what the lie would have gained them. Given their original purpose was to whitewash a tragic event or overstate an accomplishment, the benefit of a press release is more limited online than it was in the 1930s.

Direct Lobbying of Publishers
Many companies today will simply put a press release online and say, "I've just published it worldwide." Well yes, the internet is worldwide; but there's so much published to it, if you don't actively push your message in front of users, graffiti on the sidewalk will get more readership than something you tossed up onto your website. The days of "This is one of the few things online, so it will get free press" are over. The original strategy of a Press Release came with direct, active lobbying of news organizations, so simply publishing a Press Release to your website and calling it a day not only makes little sense by today's standards - it doesn't even make sense by 1906 standards. In addition, pay-for content now has many more explicit (including some illegal but prominent) channels - and news organizations are more universally desperate for cash than content.

A Shift in Legitimacy
In the 1900s it was common to choose names that sounded like an official bureau, perhaps of the government, like "General Motors," "General Mills," "Standard Oil" - a bit like the names today's SuperPACs use. The 1930s political consulting press release company was named the "California Feature Service." They'd use that official-sounding name to submit to newspapers and get those stories in. The name generated an implicit trust in American culture then. These kinds of dry names bring less trust and authority today than they did back then, for many reasons like a decrease in trust in government, an increase in direct publishing as mentioned above, an increase in "friendly" brands that tweet back to you on social media rather than acting as stoic authorities, and others. An increase in skepticism reduces the potential benefit of a press release.

So, my conclusion: Do not publish Press Releases. The idea is a hundred years old, for a news industry that has seen massive change. They make your brand look old and out of touch. Who is picking up this Adobe press release and excitedly sharing it with others? A Press Release is craven in the best light, corrupt in the worst light, and whether craven behavior is something your company will entertain or not, it can hurt your brand. At best it can have no impact. At worst a misleading statement in it will result in a grassroots online campaign against you, backed by a damning screenshot of the statement on your own company website. If you find yourself writing something that begins "FOR IMMEDIATE RELEASE," your next step should be to click Delete.

Stop publishing Press Releases. The world has changed a lot since 1906. So should your company.

Friday, September 27, 2013

How to Revert Chrome's New Tab Page

How to Solve It

If you just want to solve this, here you go. If you don't know what the problem is, jump down to Chrome's Bad New Tab Page Update below.


Visit chrome://flags

Ctrl+F for "Instant"

Set both "Instant..." settings to Disabled

Chrome asks you to Relaunch it. Do so.

Chrome's Bad New Tab Page Update

Chrome used to have a great New Tab page: the top 8 sites you visit appeared every time you'd open a new window or tab, with nice big buttons scaled to whatever size screen you were on. For those of us who used it, rather than having as our homepage - Google appears to have decided we must be mistaken, and has turned the New Tab page into the homepage. The top 8 sites are now stuffed into a tiny area below - on small screens they end up below the fold, and on large screens they're miniscule compared to their former selves.

There's also no undo/disable/revert clearly visible. But it turns out there is a way to fix it buried in Chrome.

Tuesday, September 17, 2013

Getting Formulas to Stick in Google Spreadsheets

I admit I overuse Google Spreadsheets - I use it for all my estimates, tracking tasks, many things I should use much better task-specific tools for.

With that admission out of the way, my overuse leads me to frequently setting up a spreadsheet like this, where some number of columns are being summed into row 2. The obvious way to sum something like that is:


Then hope you never hit 1000 rows. Smart spreadsheeters will note you can do better than hope with a bit of a weirdo syntax:


Which sums everything from B3 down, infinitely. But that still doesn't solve the problem I run into: Someone, sometimes me, adds a row to the top of the spreadsheet, right at row 3, and Google Spreadsheets unhelpfully, silently, "fixes" my formula for me:


My sum is now off by just a little, and if it's a big spreadsheet I am not going to notice. Terrible things have come of this. Strangely Google Spreadsheets even screws up attempts to prevent this, like =sum(B$3:B) - it still "fixes" the range when you add a row, breaking the range. So, to solve it, you basically have to trick Google Spreadsheets into not trying to be smart, with an indirect function:


By stuffing the cell range into a string and then using indirect to pass that to sum, you can add rows to the top all you like, and the B3:B range holds. Take that Spreadsheets.

Wednesday, August 7, 2013

Windows 8 Review

I have Windows 8 (a forced decision due to a tragic red wine incident). If others are on the fence about getting it, here's my summary:

Windows 8 is like someone sat down to add functionality like touch to Windows 7, then half-way through they just got up and left, and never came back.

This concludes my review of Windows 8.

Wednesday, June 12, 2013

.Net's Built-In JPEG Encoder: Convenient and Terrible

Those coding in .Net may not have discovered the System.Drawing namespace, which lets you load up an image in any popular web format (gif, jpg, png) without writing any extra code, manipulate it in as elaborate a way as you'd like, and save it back out to any of those web formats.

If you have discovered this you may also have noticed that the jpg codec is just terrible. For my task I was loading up a picture and drawing something geometric on it - the picture being the motivation to save it out as a jpeg. But for these examples I'll just use a blue background and a yellow box. I realize something that plain and geometric is terrible on jpeg (png would be preferred), but if it were a picture in the background png would be a poor choice, and the jpeg results from this bad codec would be no better.

This is a development blog so if you're wondering how to draw a yellow rectangle on a blue background, here's the code:

using System.Drawing;
using System.Drawing.Imaging;


var image = new Bitmap(400, 400);
var g = Graphics.FromImage(image);
g.FillRectangle(new SolidBrush(Color.FromArgb(0xa2, 0xbf, 0xdf)), 0, 0, 400, 400);
g.DrawRectangle(new Pen(Color.FromArgb(0xf2, 0x9a, 0x02), 19), 40, 40, 100, 100);

var jpegCodec = ImageCodecInfo.GetImageEncoders().First(enc => enc.FormatID == ImageFormat.Jpeg.Guid);
var jpegParams = new EncoderParameters(1);
jpegParams.Param = new[] { new EncoderParameter(Encoder.Quality, 100L) };
image.Save(App.AppRoot + @"\test.jpg", jpegCodec, jpegParams);

App.AppRoot is a class I include in all my apps - how you decide where to write files is up to you, but you can determine the project root here.

Note: Blogger isn't a very good blogging platform, and amongst its flaws is the fact it reencodes images and adds an annoying white border to them, as you'll see in the images below. Each will also be linked to the actual output file, which I've uploaded separately outside of Blogger. You can also see a lossless PNG with all 6 here.

.Net 4.5 Windows, JPEG 60% quality

Terrible, so let's get rid of all the compression artifacts by turning quality up to 100%.

.Net 4.5 Windows, JPEG 100% quality

Still pretty bad, and really not acceptable for "100% quality" given that's the max you can possibly ask for. You can easily see the edges of the box are still blurry, and there are still noticeable artifacts inside the box itself. Were we using a photo background instead, artifacts might be less noticeable in the photo - but the photo would likely worsen the artifacts in the box itself. This would be fine if this were the 60% or 80% setting, but 100% should sacrifice file size to get you as close to the original image as possible.

But perhaps the problem is the JPEG format itself. Here's Photoshop:

Photoshop CS5 60%

Photoshop CS5 100%

So clearly the JPEG standard is not the issue - you can render a standard JPEG that's nearly identical to the original. It's also worth noting that Photoshop's 100% comes out at 6.3k, while .Net's comes out at 7.3k, despite the quality disparity.

But that's closed source and it's clear Adobe's invested heavily in their JPEG encoder. How about an open source JPEG encoder with a rag tag bunch of open source coders working on it?

Gimp 2.8 60%

Gimp 2.8 100%

.Net's default JPEG encoder is so bad that Gimp's 60% effort is about equivalent to the top quality level .Net can deliver. If Microsoft were to just use Gimp's codec as-is (available cross-platform including on Windows), that would be a major step up in quality.

I experimented with other encoder implementations; ArpanJpegEncoder is an OK reference project, but as quality goes it's barely better than the built-in .Net encoder. LibJpeg, one of the most popular encoders on the Linux side, has been partially converted to pure C# and is available for free at BitMiracle. Its output is substantially better, and closer to the Gimp output above. Unsurprising given Gimp appears to use the C++ version of LibJpeg. However, BitMiracle's high-level API forces using LowDetail Chroma Subsampling. I forked the code to add support for HighDetail at the top JpegImage level.

By far the best implementation I've been able to get working is unfortunately not C# at all - Magick.Net. You can install it via NuGet pretty easily - you want the AnyCPU q8 version if you feel unsure. And, it requires not just one but 2 special installs on any server you use it on, both from the Visual Studio SDKs - see the docs. Because it's just a wrapper around the famous ImageMagick C++ project you likely won't be making many improvements yourself, but it is able to deliver relatively high-quality, low-filesize images (Photoshop still beats it though, more for some images than others for some reason).