Ad Blockers vs Publishers

Unless you’ve been living under a rock for the past few months you’ve noticed the war that publishers have declared on ad blockers.

On one side, this is fairly reasonable – ads bring in money and money pays for thing like writers and designers etc.

On the other side ads bring trackers, malware occasionally and also slow things down terribly. Oha nd they annoy people. And that’s just the ads we notice.

I just visted Wired and got asked to turn off my ad blocker or subscribe to read content.

Do we seriously need that much junk?

I count about 6 ad services there, several analytics services and a whole bunch of other stuff that i don’t know what it is.

(Try loading this page in full over a 3G connection, I dare you…..)

With the ad blocker on, pages load quckly and fast and I’m not annoyed by ads. With it off, the page loads slower and I’m annoyed by those ads I actually notice.

You might argue that this is a result of the Internet’s obession with free stuff. The contrary is actually true. I pay for The New Yorker and The Times of London. I pay for Feedly Pro.

If I read wired every single day, it would make a subscription worth it. I read The Times every morning and I read the New Yorker every weekend.

A while back it was suggested (by dDave Winer, if memory serves) that we have micropayments set up such that we’d pay by the article read. There are too many issues to this apprach (at what point do you consider an article read?) and its too easy to game.

The best approach, I think is the New York Times. They give you 10 free articles a month and after that you need a digital subscription. I can’t think of a single month I’ve run into that limit. And they don’t ask me to turn off my ad blocker.

Cause being asked to turn off my ad blocker gets my goat and turns me off the site.

And when I do, it feels wrong.

What I Learned from buying an NFL Gamepass

I can’t recall a week where some content provider didn’t raise my hackles by geo-blocking content.

Every. Single. Week.

This week, it was the venerable BBC. Even though I pay the license fee that funds the BBC (ergo, paid for BBC content already), I still can’t watch BBC iPlayer in Spain where I’m currently on holiday. I can’t even stream the international version of BBC News 24.

Then the rest of the time, various US-based content providers block things such as Jon Olivers Last Week Tonight, or The Daily Show…. etc.

(others, like The Tonight Show with Jimmy Fallon, post short clips and excerpts – which leave you really wanting to watch the full show)

Now. I’m an NFL fan in general (and SeaHawks in particular). The BBC and Channel 4 don’t show the games anymore. And Sky (the satelite broadcaster) is inconvienent to stream to any device other than your set-top box.

(to be fair to Sky, I can stream thier internaltional news channel)

Does the NFL, with content worth billions, care where I am? No. I can stream every game live here in Spain with my AppleTV and my NFL Gamepass that I paid in blood for.

For that matter, does the AppleTv care where I am? No I can stream all my iTunes content.

So. Why can’t all content be like this? I suspect its because content licensing is still in the dark ages of the 20th century – deals were inked before the full forces of the internet were unleashed, or perhaps inked after that fact, but without fully understanding the full scope of the changes being wrought.

Is advertising a part of this puzzle? Theres no reason for ad-supported content not to continue to be ad-supported no matter where its being shown – and show the relevant advertising for that geolocation. This is, after all, how it happens now in the traditonal media – When I’m watching Big Bang Theory on my local TV UK station- I get local ads.

This mnight be a contraversial statement to make, but I don’t mind ads because I know that the ads are helping pay for the content. (What I do mind is Channel 4 showing me 4 minutes of pre-roll ads and 4 minutes of ads at the half)

The point is that content is still not taking full advatange of the digital age – you can’t take full advantage of the digitial age and the digital market place, while trying to impose traditional restrictions and mores on that marketplace.

I’m not calling on content to be free (or be fleeced for that content), but let us stream content here, there and everywhere. If the NFL can do it, anyone can.

The revolution will not only be televised, tweeted, blogged, and instagrammed, but also streamed.

Paul Ford: What is Code?

Both Phil Haack and Jon Gruber linked to this post today.

And with good reason. Its exquisite, sublime (in the OED sense of the word not the IDE), faciniating and insightful in ways that only reading it will adequately communicate.

Paul Ford’s Magnum Opus – What is Code?

It should be required reading for anyone involved in anything to do with Software.

PS – Took me 107 minutes (and two cups of tea) to read all 38000 words

Update for Windows Azure Backup for Windows Server Essentials 2012

I’ve been running Windows Home Server since its second beta – away back in 2007. Man, how the time flies!

Last year I moved over to Windows Server 2012 Essentials running on a nice new Dell box with some oopmh.

In October I decided to enable Windows Azure Backup as an experiment – mainly to see the price. I was never going to be able to afford all 5Tb of data being in the cloub, so I started with just 300Gb.

It seems to be about £45 a month, tho its been both more and less.

Starting April 1st ( no joke) the pricing structure has been changed. It should now be cheaper to store the same amount of data. Based on the Windows Azure Pricing Calculator my bill should be cut in half, almost.

However – there is a catch – you have to update the Microsoft Azure Recovery Agent to take full advantage of the lower prices.

When I ran the update, I got this:

The Microsoft Azure Recovery Services Agent installation has failed.

Error : Failed to install Microsoft Azure Recovery Services Agent.

Problem : 1603:Fatal error during installation

The accepted solution seems to be to uninstall Microsoft Azure Recovery Services Agent and then re-install.

But, if you’re using the Add-In, it gets a bit more complicated than that.

So….

Make sure that you have the Backup Vault certificate from Azure dashboard, and the Certificate that was originally generated when you first installed the agent. And make sure that you remember your 16 charecter pass phrase. Aditionally, go to the Azure dashboard and make sure you allow your server to re-register,

  1. Remove the Addin using the dashboard – make sure the box to remove the agent is also ticked.
  2. Reboot
  3. Re install the Addin using the dashboard. This will also reinstall the old agent, but will leave your server unregistered.
  4. Install the updated agent and follow the instructions in the wizard.
  5. Check in the Dashboard that it is recieving infomation from the new Agent

And you should be done. The new agent will magically remember the previous configuration of your protected files, retention policy and so on.

Entity Framework Tip of the Day

esterday, I was doing so some work with EF and ran into something unusual – my navigational properties weren’t being populated.

I rechecked my model and the DB schema and eerything was normal.

So it turns out that my entity object had just been inserted earlier in the procedure. This makes sense becuase EF usually does the navigational property population when you pull an entity directly from the DB.

So – either I find a solution or re-write my method to pull down the recently inserted entity again after insertion.

It turns out there is a single line of code that will fix everything:

Entities.Entry(item).Reference(c => c.NavgationProperty).Load();

This forces EF to load the property using the defined FK – and then using that navigational property works as expected. You’ll have to do this for each property that needs to be populated.

Hope someone finds this useful.

Microsoft Translate API Errors

ike any good dev, I have side projects. And like any good busy dev, I don’t get enough time to finish them properly.

So this time of the year is always productive as i try and get stuff done before returning to work.

Today I needed to translate a whole bunch of resource strings into a bunch of other languages. So I thought the Bing Translate Api would be a good fit. So off I went to Azure Marketplace to add the service to my Azure subscription.

And right away I started running into problems – its nowhere to be found.

To cut a long story short – it seems to have been superceded by the Microsoft Translator API.

Now. Signing up and adding it to my existing subscription is simplicity itself.

And when you get to the dashboard for the service, you get something that looks like this:

The proxy class is nice and compact and excellent and saves the hassle of adding a full blown service reference to your VS2013 project.

Then they give you this small code snippit to use the proxy class:

var client = new TranslatorContainer(new Uri("https://api.datamarket.azure.com/Data.ashx/Bing/MicrosoftTranslator/v1/"));
client.Credentials = new NetworkCredential("accountKey", "Insert Account Key");
var marketData = client.Translate(
"hello",
"nl",
null
).Execute();

(obviously you need to swap “Insert Account Key” with your actual account key)

One thing to note here is that this is using V1 of the API – and its just for OData (tho this doesn’t preclude you from calling it from javascript). This API is fairly basic. There is a more powerful V2 API floating about that requires a bit more elaborate authentication.

(The difference between the two versions caught me out for a while.)

Now, when I went to use the proxy class right out of the box, I got an entity mismatch error:

"There is a type mismatch between the client and the service. Type 'Microsoft.Translation' is not an entity type, but the type in the response payload represents an entity type. Please ensure that types defined on the client match the data model of the service, or update the service reference on the client."

Now if you open Fiddler and allow HTTP decryption, you’ll see that the request actually suceeds. So the error is not in the call, or the authentication (as I initially thought), but in parsing the response.

And if we look at the error text, we see that it spells out eaxtly what the issue is – ‘Microsoft.Translation’ is not an entity type

Of course, being the doofus that I occasonally am, I missed that completely at first.

Once I noticed that, it hit me – I simply need to tell the DataServiceContext that Microsoft.Translation is an entity type.

And how do you do that?

Enter the [DataServiceEntity] attribute.

So. Open up the proxy class you downloaded from the Azure dashboard page and decorate the TranslationLanguage and DetectedLanguage classes with [DataServiceEntity] and you’re good to go.

Your code should look like this:

[DataServiceEntity]
public partial class Translation {
    
    private String _Text;
    
    public String Text {
        get {
            return this._Text;
        }
        set {
            this._Text = value;
        }
    }
}
[DataServiceEntity]
public partial class Language {
    
    private String _Code;
    
    public String Code {
        get {
            return this._Code;
        }
        set {
            this._Code = value;
        }
    }
}

[DataServiceEntity]
public partial class DetectedLanguage {
    
    private String _Code;
    
    public String Code {
        get {
            return this._Code;
        }
        set {
            this._Code = value;
        }
    }
}

And if anyone knows anyone at Microsoft, hopefully the proxy class file can be updated.

Holiday Reading List 2014

As has become a bit of a tradition for me, I’m posting my holiday reading list for my December holidays this year.

I used to lug a bag full of dead tree books around with me – but international air travel and hand luggage being what it is, I travel with just my iPad these days.

So with out further ado:

Non-Fiction

  • Making of the Atomic Bomb – Richard Rhodes
  • Dark Sun – The Making of the Hydrogen Bomb – Richard Rhodes
  • Wings in Orbit – Scientific and Engineering Legacies of the Space Shuttle – Richard N. Spires, et al
  • Wings in Orbit – Supplement – Richard N. Spires, et al
  • A Small Matter of Programming – Prerspectives on End User Computing – Bonnie A. Nardi

Fiction

  • Starfire – Dale Brown
  • Tom Clancy’s Support and Defend – Mark Greaney
  • Tom Clancy’s Full Force and Effect Mark Greaney

Honourable Mention: Command and Control by Eric Schlosser, which I read a few weeks ago, lead me to the two books by Richard Rhodes above. Its very much worth a read as well.