diff --git a/test/test-pages/002/expected.html b/test/test-pages/002/expected.html index 7569594..4f858f9 100644 --- a/test/test-pages/002/expected.html +++ b/test/test-pages/002/expected.html @@ -1,5 +1,5 @@
-
+

For more than a decade the Web has used XMLHttpRequest (XHR) to achieve asynchronous requests in JavaScript. While very useful, XHR is not a very nice API. It suffers from lack of separation of concerns. The input, output and state are all managed by interacting with one object, and state is tracked using events. Also, the event-based model doesn’t play well with JavaScript’s recent focus on Promise- and generator-based asynchronous programming.

The Fetch API intends to fix most of these problems. It does this by introducing the same primitives to JS that are used in the HTTP protocol. In addition, it introduces a utility function fetch() that succinctly captures the intention of retrieving a resource from the network.

@@ -17,18 +17,19 @@ - +
fetch("/data.json").then(function(res) {
-      // res instanceof Response == true.
-      if (res.ok) {
-        res.json().then(function(data) {
-          console.log(data.entries);
-        });
-      } else {
-        console.log("Looks like the response wasn't perfect, got status", res.status);
-      }
-    }, function(e) {
-      console.log("Fetch failed!", e);
-    });
+
fetch("/data.json").then(function(res) {
+  // res instanceof Response == true.
+  if (res.ok) {
+    res.json().then(function(data) {
+      console.log(data.entries);
+    });
+  } else {
+    console.log("Looks like the response wasn't perfect, got status", res.status);
+  }
+}, function(e) {
+  console.log("Fetch failed!", e);
+});
@@ -38,57 +39,55 @@ - +
fetch("http://www.example.org/submit.php", {
-      method: "POST",
-      headers: {
-        "Content-Type": "application/x-www-form-urlencoded"
-      },
-      body: "firstName=Nikhil&favColor=blue&password=easytoguess"
-    }).then(function(res) {
-      if (res.ok) {
-        alert("Perfect! Your settings are saved.");
-      } else if (res.status == 401) {
-        alert("Oops! You are not authorized.");
-      }
-    }, function(e) {
-      alert("Error submitting form!");
-    });
+
fetch("http://www.example.org/submit.php", {
+  method: "POST",
+  headers: {
+    "Content-Type": "application/x-www-form-urlencoded"
+  },
+  body: "firstName=Nikhil&favColor=blue&password=easytoguess"
+}).then(function(res) {
+  if (res.ok) {
+    alert("Perfect! Your settings are saved.");
+  } else if (res.status == 401) {
+    alert("Oops! You are not authorized.");
+  }
+}, function(e) {
+  alert("Error submitting form!");
+});
-

The fetch() function’s arguments are the same as those passed to the -
Request() constructor, so you may directly pass arbitrarily complex requests to fetch() as discussed below.

+

The fetch() function’s arguments are the same as those passed to the
Request() constructor, so you may directly pass arbitrarily complex requests to fetch() as discussed below.

Headers

-

Fetch introduces 3 interfaces. These are Headers, Request and -
Response. They map directly to the underlying HTTP concepts, but have -
certain visibility filters in place for privacy and security reasons, such as -
supporting CORS rules and ensuring cookies aren’t readable by third parties.

+

Fetch introduces 3 interfaces. These are Headers, Request and
Response. They map directly to the underlying HTTP concepts, but have
certain visibility filters in place for privacy and security reasons, such as
supporting CORS rules and ensuring cookies aren’t readable by third parties.

The Headers interface is a simple multi-map of names to values:

- +
var content = "Hello World";
-    var reqHeaders = new Headers();
-    reqHeaders.append("Content-Type", "text/plain"
-    reqHeaders.append("Content-Length", content.length.toString());
-    reqHeaders.append("X-Custom-Header", "ProcessThisImmediately");
+
var content = "Hello World";
+var reqHeaders = new Headers();
+reqHeaders.append("Content-Type", "text/plain"
+reqHeaders.append("Content-Length", content.length.toString());
+reqHeaders.append("X-Custom-Header", "ProcessThisImmediately");
-

The same can be achieved by passing an array of arrays or a JS object literal -
to the constructor:

+

The same can be achieved by passing an array of arrays or a JS object literal
to the constructor:

- +
reqHeaders = new Headers({
-      "Content-Type": "text/plain",
-      "Content-Length": content.length.toString(),
-      "X-Custom-Header": "ProcessThisImmediately",
-    });
+
reqHeaders = new Headers({
+  "Content-Type": "text/plain",
+  "Content-Length": content.length.toString(),
+  "X-Custom-Header": "ProcessThisImmediately",
+});
@@ -98,46 +97,43 @@ - +
console.log(reqHeaders.has("Content-Type")); // true
-    console.log(reqHeaders.has("Set-Cookie")); // false
-    reqHeaders.set("Content-Type", "text/html");
-    reqHeaders.append("X-Custom-Header", "AnotherValue");
-     
-    console.log(reqHeaders.get("Content-Length")); // 11
-    console.log(reqHeaders.getAll("X-Custom-Header")); // ["ProcessThisImmediately", "AnotherValue"]
-     
-    reqHeaders.delete("X-Custom-Header");
-    console.log(reqHeaders.getAll("X-Custom-Header")); // []
+
console.log(reqHeaders.has("Content-Type")); // true
+console.log(reqHeaders.has("Set-Cookie")); // false
+reqHeaders.set("Content-Type", "text/html");
+reqHeaders.append("X-Custom-Header", "AnotherValue");
+ 
+console.log(reqHeaders.get("Content-Length")); // 11
+console.log(reqHeaders.getAll("X-Custom-Header")); // ["ProcessThisImmediately", "AnotherValue"]
+ 
+reqHeaders.delete("X-Custom-Header");
+console.log(reqHeaders.getAll("X-Custom-Header")); // []
-

Some of these operations are only useful in ServiceWorkers, but they provide -
a much nicer API to Headers.

-

Since Headers can be sent in requests, or received in responses, and have various limitations about what information can and should be mutable, Headers objects have a guard property. This is not exposed to the Web, but it affects which mutation operations are allowed on the Headers object. -
Possible values are:

+

Some of these operations are only useful in ServiceWorkers, but they provide
a much nicer API to Headers.

+

Since Headers can be sent in requests, or received in responses, and have various limitations about what information can and should be mutable, Headers objects have a guard property. This is not exposed to the Web, but it affects which mutation operations are allowed on the Headers object.
Possible values are:

-

The details of how each guard affects the behaviors of the Headers object are -
in the specification. For example, you may not append or set a “request” guarded Headers’ “Content-Length” header. Similarly, inserting “Set-Cookie” into a Response header is not allowed so that ServiceWorkers may not set cookies via synthesized Responses.

+

The details of how each guard affects the behaviors of the Headers object are
in the specification. For example, you may not append or set a “request” guarded Headers’ “Content-Length” header. Similarly, inserting “Set-Cookie” into a Response header is not allowed so that ServiceWorkers may not set cookies via synthesized Responses.

All of the Headers methods throw TypeError if name is not a valid HTTP Header name. The mutation operations will throw TypeError if there is an immutable guard. Otherwise they fail silently. For example:

- +
var res = Response.error();
-    try {
-      res.headers.set("Origin", "http://mybank.com");
-    } catch(e) {
-      console.log("Cannot pretend to be a bank!");
-    }
+
var res = Response.error();
+try {
+  res.headers.set("Origin", "http://mybank.com");
+} catch(e) {
+  console.log("Cannot pretend to be a bank!");
+}
@@ -149,143 +145,135 @@ - +
var req = new Request("/index.html");
-    console.log(req.method); // "GET"
-    console.log(req.url); // "http://example.com/index.html"
+
var req = new Request("/index.html");
+console.log(req.method); // "GET"
+console.log(req.url); // "http://example.com/index.html"
-

You may also pass a Request to the Request() constructor to create a copy. -
(This is not the same as calling the clone() method, which is covered in -
the “Reading bodies” section.).

+

You may also pass a Request to the Request() constructor to create a copy.
(This is not the same as calling the clone() method, which is covered in
the “Reading bodies” section.).

- +
var copy = new Request(req);
-    console.log(copy.method); // "GET"
-    console.log(copy.url); // "http://example.com/index.html"
+
var copy = new Request(req);
+console.log(copy.method); // "GET"
+console.log(copy.url); // "http://example.com/index.html"

Again, this form is probably only useful in ServiceWorkers.

-

The non-URL attributes of the Request can only be set by passing initial -
values as a second argument to the constructor. This argument is a dictionary.

+

The non-URL attributes of the Request can only be set by passing initial
values as a second argument to the constructor. This argument is a dictionary.

- +
var uploadReq = new Request("/uploadImage", {
-      method: "POST",
-      headers: {
-        "Content-Type": "image/png",
-      },
-      body: "image data"
-    });
+
var uploadReq = new Request("/uploadImage", {
+  method: "POST",
+  headers: {
+    "Content-Type": "image/png",
+  },
+  body: "image data"
+});

The Request’s mode is used to determine if cross-origin requests lead to valid responses, and which properties on the response are readable. Legal mode values are "same-origin", "no-cors" (default) and "cors".

-

The "same-origin" mode is simple, if a request is made to another origin with this mode set, the result is simply an error. You could use this to ensure that -
a request is always being made to your origin.

+

The "same-origin" mode is simple, if a request is made to another origin with this mode set, the result is simply an error. You could use this to ensure that
a request is always being made to your origin.

- +
var arbitraryUrl = document.getElementById("url-input").value;
-    fetch(arbitraryUrl, { mode: "same-origin" }).then(function(res) {
-      console.log("Response succeeded?", res.ok);
-    }, function(e) {
-      console.log("Please enter a same-origin URL!");
-    });
+
var arbitraryUrl = document.getElementById("url-input").value;
+fetch(arbitraryUrl, { mode: "same-origin" }).then(function(res) {
+  console.log("Response succeeded?", res.ok);
+}, function(e) {
+  console.log("Please enter a same-origin URL!");
+});

The "no-cors" mode captures what the web platform does by default for scripts you import from CDNs, images hosted on other domains, and so on. First, it prevents the method from being anything other than “HEAD”, “GET” or “POST”. Second, if any ServiceWorkers intercept these requests, they may not add or override any headers except for these. Third, JavaScript may not access any properties of the resulting Response. This ensures that ServiceWorkers do not affect the semantics of the Web and prevents security and privacy issues that could arise from leaking data across domains.

-

"cors" mode is what you’ll usually use to make known cross-origin requests to access various APIs offered by other vendors. These are expected to adhere to -
the CORS protocol. Only a limited set of headers is exposed in the Response, but the body is readable. For example, you could get a list of Flickr’s most interesting photos today like this:

+

"cors" mode is what you’ll usually use to make known cross-origin requests to access various APIs offered by other vendors. These are expected to adhere to
the CORS protocol. Only a limited set of headers is exposed in the Response, but the body is readable. For example, you could get a list of Flickr’s most interesting photos today like this:

- +
var u = new URLSearchParams();
-    u.append('method', 'flickr.interestingness.getList');
-    u.append('api_key', '<insert api key here>');
-    u.append('format', 'json');
-    u.append('nojsoncallback', '1');
-     
-    var apiCall = fetch('https://api.flickr.com/services/rest?' + u);
-     
-    apiCall.then(function(response) {
-      return response.json().then(function(json) {
-        // photo is a list of photos.
-        return json.photos.photo;
-      });
-    }).then(function(photos) {
-      photos.forEach(function(photo) {
-        console.log(photo.title);
-      });
-    });
+
var u = new URLSearchParams();
+u.append('method', 'flickr.interestingness.getList');
+u.append('api_key', '<insert api key here>');
+u.append('format', 'json');
+u.append('nojsoncallback', '1');
+ 
+var apiCall = fetch('https://api.flickr.com/services/rest?' + u);
+ 
+apiCall.then(function(response) {
+  return response.json().then(function(json) {
+    // photo is a list of photos.
+    return json.photos.photo;
+  });
+}).then(function(photos) {
+  photos.forEach(function(photo) {
+    console.log(photo.title);
+  });
+});
-

You may not read out the “Date” header since Flickr does not allow it via -
Access-Control-Expose-Headers.

+

You may not read out the “Date” header since Flickr does not allow it via
Access-Control-Expose-Headers.

- +
response.headers.get("Date"); // null
+
response.headers.get("Date"); // null
-

The credentials enumeration determines if cookies for the other domain are -
sent to cross-origin requests. This is similar to XHR’s withCredentials -
flag, but tri-valued as "omit" (default), "same-origin" and "include".

+

The credentials enumeration determines if cookies for the other domain are
sent to cross-origin requests. This is similar to XHR’s withCredentials
flag, but tri-valued as "omit" (default), "same-origin" and "include".

The Request object will also give the ability to offer caching hints to the user-agent. This is currently undergoing some security review. Firefox exposes the attribute, but it has no effect.

-

Requests have two read-only attributes that are relevant to ServiceWorkers -
intercepting them. There is the string referrer, which is set by the UA to be -
the referrer of the Request. This may be an empty string. The other is -
context which is a rather large enumeration defining what sort of resource is being fetched. This could be “image” if the request is from an <img>tag in the controlled document, “worker” if it is an attempt to load a worker script, and so on. When used with the fetch() function, it is “fetch”.

+

Requests have two read-only attributes that are relevant to ServiceWorkers
intercepting them. There is the string referrer, which is set by the UA to be
the referrer of the Request. This may be an empty string. The other is
context which is a rather large enumeration defining what sort of resource is being fetched. This could be “image” if the request is from an <img>tag in the controlled document, “worker” if it is an attempt to load a worker script, and so on. When used with the fetch() function, it is “fetch”.

Response

Response instances are returned by calls to fetch(). They can also be created by JS, but this is only useful in ServiceWorkers.

We have already seen some attributes of Response when we looked at fetch(). The most obvious candidates are status, an integer (default value 200) and statusText (default value “OK”), which correspond to the HTTP status code and reason. The ok attribute is just a shorthand for checking that status is in the range 200-299 inclusive.

headers is the Response’s Headers object, with guard “response”. The url attribute reflects the URL of the corresponding request.

-

Response also has a type, which is “basic”, “cors”, “default”, “error” or -
“opaque”.

+

Response also has a type, which is “basic”, “cors”, “default”, “error” or
“opaque”.

The “error” type results in the fetch() Promise rejecting with TypeError.

-

There are certain attributes that are useful only in a ServiceWorker scope. The -
idiomatic way to return a Response to an intercepted request in ServiceWorkers is:

+

There are certain attributes that are useful only in a ServiceWorker scope. The
idiomatic way to return a Response to an intercepted request in ServiceWorkers is:

- +
addEventListener('fetch', function(event) {
-      event.respondWith(new Response("Response body", {
-        headers: { "Content-Type" : "text/plain" }
-      });
-    });
+
addEventListener('fetch', function(event) {
+  event.respondWith(new Response("Response body", {
+    headers: { "Content-Type" : "text/plain" }
+  });
+});

As you can see, Response has a two argument constructor, where both arguments are optional. The first argument is a body initializer, and the second is a dictionary to set the status, statusText and headers.

-

The static method Response.error() simply returns an error response. Similarly, Response.redirect(url, status) returns a Response resulting in -
a redirect to url.

+

The static method Response.error() simply returns an error response. Similarly, Response.redirect(url, status) returns a Response resulting in
a redirect to url.

Dealing with bodies

Both Requests and Responses may contain body data. We’ve been glossing over it because of the various data types body may contain, but we will cover it in detail now.

A body is an instance of any of the following types.

@@ -311,11 +299,12 @@ - +
var form = new FormData(document.getElementById('login-form'));
-    fetch("/login", {
-      method: "POST",
-      body: form
-    })
+
var form = new FormData(document.getElementById('login-form'));
+fetch("/login", {
+  method: "POST",
+  body: form
+})
@@ -325,8 +314,9 @@ - +
var res = new Response(new File(["chunk", "chunk"], "archive.zip",
-                           { type: "application/zip" }));
+
var res = new Response(new File(["chunk", "chunk"], "archive.zip",
+                       { type: "application/zip" }));
@@ -338,16 +328,17 @@ - +
var res = new Response("one time use");
-    console.log(res.bodyUsed); // false
-    res.text().then(function(v) {
-      console.log(res.bodyUsed); // true
-    });
-    console.log(res.bodyUsed); // true
-     
-    res.text().catch(function(e) {
-      console.log("Tried to read already consumed Response");
-    });
+
var res = new Response("one time use");
+console.log(res.bodyUsed); // false
+res.text().then(function(v) {
+  console.log(res.bodyUsed); // true
+});
+console.log(res.bodyUsed); // true
+ 
+res.text().catch(function(e) {
+  console.log("Tried to read already consumed Response");
+});
@@ -359,20 +350,21 @@ - +
addEventListener('fetch', function(evt) {
-      var sheep = new Response("Dolly");
-      console.log(sheep.bodyUsed); // false
-      var clone = sheep.clone();
-      console.log(clone.bodyUsed); // false
-     
-      clone.text();
-      console.log(sheep.bodyUsed); // false
-      console.log(clone.bodyUsed); // true
-     
-      evt.respondWith(cache.add(sheep.clone()).then(function(e) {
-        return sheep;
-      });
-    });
+
addEventListener('fetch', function(evt) {
+  var sheep = new Response("Dolly");
+  console.log(sheep.bodyUsed); // false
+  var clone = sheep.clone();
+  console.log(clone.bodyUsed); // false
+ 
+  clone.text();
+  console.log(sheep.bodyUsed); // false
+  console.log(clone.bodyUsed); // true
+ 
+  evt.respondWith(cache.add(sheep.clone()).then(function(e) {
+    return sheep;
+  });
+});
@@ -382,7 +374,7 @@

You can contribute to the evolution of this API by participating in discussions on the WHATWG mailing list and in the issues in the Fetch and ServiceWorkerspecifications.

For a better web!

The author would like to thank Andrea Marchesini, Anne van Kesteren and Ben
- Kelly for helping with the specification and implementation.

+Kelly for helping with the specification and implementation.

-
+ \ No newline at end of file diff --git a/test/test-pages/blogger/expected.html b/test/test-pages/blogger/expected.html index c98c8dd..8e5af37 100644 --- a/test/test-pages/blogger/expected.html +++ b/test/test-pages/blogger/expected.html @@ -1,5 +1,5 @@
-
+

I've written a couple of posts in the past few months but they were all for

the blog at work

so I figured I'm long overdue for one on Silicon Exposed.

@@ -15,9 +15,7 @@ - + @@ -32,9 +30,7 @@
- -
SLG46620V block diagram (from device datasheet)
- + @@ -55,9 +51,7 @@
- -
Schematic from hell!
- + diff --git a/test/test-pages/breitbart/expected.html b/test/test-pages/breitbart/expected.html index b57dda8..d7f3be1 100644 --- a/test/test-pages/breitbart/expected.html +++ b/test/test-pages/breitbart/expected.html @@ -4,17 +4,14 @@
Supporters of Republican presidential nominee Donald Trump cheer during election night at the New York Hilton Midtown in New York on November 9, 2016.  / AFP / JIM WATSON        (Photo credit should read JIM WATSON/AFP/Getty Images)

JIM WATSON/AFP/Getty Images

- - - - +
-
+

SIGN UP FOR OUR NEWSLETTER

Snopes fact checker and staff writer David Emery posted to Twitter asking if there were “any un-angry Trump supporters?”

Emery, a writer for partisan “fact-checking” website Snopes.com which soon will be in charge of labelling “fake news” alongside ABC News and Politifact, retweeted an article by Vulture magazine relating to the protests of the Hamilton musical following the decision by the cast of the show to make a public announcement to Vice-president elect Mike Pence while he watched the performance with his family.

-
+

SIGN UP FOR OUR NEWSLETTER

The tweet from Vulture magazine reads, “#Hamilton Chicago show interrupted by angry Trump supporter.” Emery retweeted the story, saying, “Are there un-angry Trump supporters?”

@@ -23,4 +20,4 @@

Facebook believe that Emery, along with other Snopes writers, ABC News, and Politifact are impartial enough to label and silence what they believe to be “fake news” on social media.

Lucas Nolan is a reporter for Breitbart Tech covering issues of free speech and online censorship. Follow him on Twitter @LucasNolan_ or email him at lnolan@breitbart.com

-
+
\ No newline at end of file diff --git a/test/test-pages/bug-1255978/expected.html b/test/test-pages/bug-1255978/expected.html index b8d7d18..7b8103a 100644 --- a/test/test-pages/bug-1255978/expected.html +++ b/test/test-pages/bug-1255978/expected.html @@ -1,5 +1,5 @@
-
+

Most people go to hotels for the pleasure of sleeping in a giant bed with clean white sheets and waking up to fresh towels in the morning.

But those towels and sheets might not be as clean as they look, according to the hotel bosses that responded to an online thread about the things hotel owners don’t want you to know.

Zeev Sharon and Michael Forrest Jones both run hotel start-ups in the US. Forrest Jones runs the start-up Beechmont Hotels Corporation, a hotel operating company that consults with hotel owners on how they can improve their business. Sharon is the CEO of Hotelied, a start-up that allows people to sign up for discounts at luxury hotels.

@@ -64,7 +64,5 @@
  • More about:
  • Hotels
  • Hygiene
  • - - Reuse content -
    + Reuse content
    \ No newline at end of file diff --git a/test/test-pages/buzzfeed-1/expected.html b/test/test-pages/buzzfeed-1/expected.html index 8449f71..01c6839 100644 --- a/test/test-pages/buzzfeed-1/expected.html +++ b/test/test-pages/buzzfeed-1/expected.html @@ -1,35 +1,35 @@
    -
    -
    +
    +

    The mother of a woman who took suspected diet pills bought online has described how her daughter was “literally burning up from within” moments before her death.

    West Merica Police

    -
    +

    Eloise Parry, 21, was taken to Royal Shrewsbury hospital on 12 April after taking a lethal dose of highly toxic “slimming tablets”.

    “The drug was in her system, there was no anti-dote, two tablets was a lethal dose – and she had taken eight,” her mother, Fiona, said in a statement yesterday.

    “As Eloise deteriorated, the staff in A&E did all they could to stabilise her. As the drug kicked in and started to make her metabolism soar, they attempted to cool her down, but they were fighting an uphill battle.

    “She was literally burning up from within.”

    She added: “They never stood a chance of saving her. She burned and crashed.”

    -
    +
    -
    +

    Facebook

    -
    +

    Facebook

    -
    +

    West Mercia police said the tablets were believed to contain dinitrophenol, known as DNP, which is a highly toxic industrial chemical.

    “We are undoubtedly concerned over the origin and sale of these pills and are working with partner agencies to establish where they were bought from and how they were advertised,” said chief inspector Jennifer Mattinson from the West Mercia police.

    The Food Standards Agency warned people to stay away from slimming products that contained DNP.

    “We advise the public not to take any tablets or powders containing DNP, as it is an industrial chemical and not fit for human consumption,” it said in a statement.

    -
    +

    Fiona Parry issued a plea for people to stay away from pills containing the chemical.

    “[Eloise] just never really understood how dangerous the tablets that she took were,” she said. “Most of us don’t believe that a slimming tablet could possibly kill us.

    “DNP is not a miracle slimming pill. It is a deadly toxin.”

    diff --git a/test/test-pages/cnn/expected.html b/test/test-pages/cnn/expected.html index 273b08f..1edaee6 100644 --- a/test/test-pages/cnn/expected.html +++ b/test/test-pages/cnn/expected.html @@ -1,33 +1,27 @@
    -
    -
    -
    +
    +
    +
    -
    -
    +
    +
    -
    -
    +
    -

    The U.S. has long been heralded as a land of opportunity -- a place where anyone can succeed regardless of the economic class they were born into.

    But a new report released on Monday by Stanford University's Center on Poverty and Inequality calls that into question.

    The report assessed poverty levels, income and wealth inequality, economic mobility and unemployment levels among 10 wealthy countries with social welfare programs.

    -
    +
    -
    +
    -

    - Powered by SmartAsset.com -

    - -
    +

    Powered by SmartAsset.com

    @@ -53,4 +47,4 @@

    The report concluded that the American safety net was ineffective because it provides only half the financial help people need. Additionally, the levels of assistance in the U.S. are generally lower than in other countries.

    CNNMoney (New York) First published February 1, 2016: 1:28 AM ET

    -
    +
    \ No newline at end of file diff --git a/test/test-pages/daringfireball-1/expected.html b/test/test-pages/daringfireball-1/expected.html index 2ef3547..f8b1f37 100644 --- a/test/test-pages/daringfireball-1/expected.html +++ b/test/test-pages/daringfireball-1/expected.html @@ -1,11 +1,9 @@
    -
    -
    +
    +

    Daring Fireball is written and produced by John Gruber.

    -

    - Photograph of the author. -
    Portrait by George Del Barrio

    +

    Photograph of the author.
    Portrait by George Del Barrio

    Mac Apps

    • BBEdit
    • diff --git a/test/test-pages/ehow-1/expected-metadata.json b/test/test-pages/ehow-1/expected-metadata.json index 0299347..dfe10d2 100644 --- a/test/test-pages/ehow-1/expected-metadata.json +++ b/test/test-pages/ehow-1/expected-metadata.json @@ -1,6 +1,7 @@ { "title": "How to Build a Terrarium (with Pictures)", "byline": "Lucy Akins", + "dir": null, "excerpt": "How to Build a Terrarium. Glass cloche terrariums are not only appealing to the eye, but they also preserve a bit of nature in your home and serve as a simple, yet beautiful, piece of art. Closed terrariums are easy to care for, as they retain much of their own moisture and provide a warm environment with a consistent level of humidity. You...", "readerable": true } diff --git a/test/test-pages/ehow-1/expected.html b/test/test-pages/ehow-1/expected.html index d7963f6..05e2ade 100644 --- a/test/test-pages/ehow-1/expected.html +++ b/test/test-pages/ehow-1/expected.html @@ -4,13 +4,13 @@

      Glass cloche terrariums are not only appealing to the eye, but they also preserve a bit of nature in your home and serve as a simple, yet beautiful, piece of art. Closed terrariums are easy to care for, as they retain much of their own moisture and provide a warm environment with a consistent level of humidity. You won’t have to water the terrariums unless you see that the walls are not misting up. Small growing plants that don’t require a lot of light work best such as succulents, ferns, moss, even orchids.

      -
      Glass cloche terrariums
      +
      Glass cloche terrariums
      Glass cloche terrariums (Lucy Akins)
      -
      What You'll Need: +
      What You'll Need:
      • Cloche
      • Planter saucer, small shallow dish or desired platform
      • @@ -28,94 +28,96 @@
      -
      Step 1 +
      Step 1

      Measure the circumference of your cloche and cut the foam oasis about 3/4 inch (2 cm) smaller. Place the foam oasis into a container full of water and allow to soak until it sinks to the bottom. Dig out a hole on the oasis large enough to fit your plant, being careful not to pierce all the way through to the bottom.

      -
      Dig a hole in the oasis.
      +
      Dig a hole in the oasis.
      Dig a hole in the oasis. (Lucy Akins)
      -
      Step 2 +
      Step 2

      Insert your plant into the hole.

      -
      Orchid in foam oasis
      +
      Orchid in foam oasis
      Orchid in foam oasis (Lucy Akins)
      -
      Step 3 +
      Step 3

      You can add various plants if you wish.

      -
      Various foliage
      +
      Various foliage
      Various foliage (Lucy Akins)
      -
      Step 4 +
      Step 4

      Using floral pins, attach enough moss around the oasis to cover it.

      -
      Attach moss.
      +
      Attach moss.
      Attach moss. (Lucy Akins)
      -
      Step 5 +
      Step 5

      Gently place the cloche over the oasis. The glass may push some of the moss upward, exposing some of the foam.

      -
      Place cloche over oasis.
      +
      Place cloche over oasis.
      Place cloche over oasis. (Lucy Akins)
      -
      Step 6 +
      Step 6

      Simply pull down the moss with tweezers or insert more moss to fill in the empty spaces.

      -
      Rearrange moss.
      +
      Rearrange moss.
      Rearrange moss. (Lucy Akins)
      -
      Step 7 +
      Step 7

      You can use any platform you wish. In this case, a small saucer was used.

      -
      Place cloche on a platform to sit on.
      +
      Place cloche on a platform to sit on.
      Place cloche on a platform to sit on. (Lucy Akins)
      -
      Step 8 +
      Step 8

      This particular terrarium rests on a planter saucer and features a small white pumpkin.

      -
      Cloche placed on a terracotta saucer
      +
      Cloche placed on a terracotta saucer
      Cloche placed on a terracotta saucer (Lucy Akins)
      -
      Step 9 +
      Step 9

      This particular terrarium was placed on a wood slice and a little toy squirrel was placed inside to add a little whimsy.

      -
      Placed on a wooden slice
      +
      Placed on a wooden slice
      Placed on a wooden slice (Lucy Akins)
      -
      Finished Terrarium +
      Finished Terrarium

      Displayed alone or in a group, these pretty arrangements allow you to add a little nature to your decor or tablescape.

      -
      Cloche terrarium
      +
      Cloche terrarium
      Cloche terrarium (Lucy Akins)
      -
      +
      +

      Featured

      +
      -
      +
      \ No newline at end of file diff --git a/test/test-pages/ehow-2/expected-metadata.json b/test/test-pages/ehow-2/expected-metadata.json index 68b0560..eb5baa0 100644 --- a/test/test-pages/ehow-2/expected-metadata.json +++ b/test/test-pages/ehow-2/expected-metadata.json @@ -1,6 +1,7 @@ { "title": "How to Throw a Graduation Party on a Budget (with Pictures)", "byline": "Gina Roberts-Grey", + "dir": null, "excerpt": "How to Throw a Graduation Party on a Budget. Graduation parties are a great way to commemorate the years of hard work teens and college co-eds devote to education. They’re also costly for mom and dad.The average cost of a graduation party in 2013 was a whopping $1,200, according to Graduationparty.com; $700 of that was allocated for food....", "readerable": true } diff --git a/test/test-pages/ehow-2/expected.html b/test/test-pages/ehow-2/expected.html index f9ced9f..42719e7 100644 --- a/test/test-pages/ehow-2/expected.html +++ b/test/test-pages/ehow-2/expected.html @@ -1,32 +1,26 @@
      -
      +
      -
      - + - +
      + }"/>

      Follow

      -

      - -

      +

      -
      @@ -36,129 +30,103 @@

      The average cost of a graduation party in 2013 was a whopping $1,200, according to Graduationparty.com; $700 of that was allocated for food. However that budget was based on Midwestern statistics, and parties in urban areas like New York City are thought to have a much higher price tag.

      Thankfully, there are plenty of creative ways to trim a little grad party fat without sacrificing any of the fun or celebratory spirit.

      -
      - Graduation -
      -
      - (Mike Watson Images/Moodboard/Getty) -
      +
      Graduation
      +
      (Mike Watson Images/Moodboard/Getty)
      -
      - - - +
      -

      Parties hosted at restaurants, clubhouses and country clubs eliminate the need to spend hours cleaning up once party guests have gone home. But that convenience comes with a price tag. A country club may charge as much as $2,000 for room rental and restaurant food and beverage will almost always cost more than food prepped and served at home.

      -
      - Save money hosting the party at home. -
      -
      - Thomas Jackson/Digital Vision/Getty Images
      +
      +
      +
      +

      Parties hosted at restaurants, clubhouses and country clubs eliminate the need to spend hours cleaning up once party guests have gone home. But that convenience comes with a price tag. A country club may charge as much as $2,000 for room rental and restaurant food and beverage will almost always cost more than food prepped and served at home.

      +
      Save money hosting the party at home.
      +
      Thomas Jackson/Digital Vision/Getty Images
      - - + -

      Instead of hiring a DJ, use your iPod or Smartphone to spin the tunes. Both easily hook up to most speakers or mp3 compatible docks to play music from your music library. Or download Pandora, the free online radio app, and play hours of music for free.

      -

      Personalize the music with a playlist of the grad’s favorite songs or songs that were big hits during his or her years in school.

      -
      - Online radio can take the place of a hired DJ. -
      -
      - Spencer Platt/Getty Images News/Getty Images
      +
      +
      +
      +

      Instead of hiring a DJ, use your iPod or Smartphone to spin the tunes. Both easily hook up to most speakers or mp3 compatible docks to play music from your music library. Or download Pandora, the free online radio app, and play hours of music for free.

      +

      Personalize the music with a playlist of the grad’s favorite songs or songs that were big hits during his or her years in school.

      +
      Online radio can take the place of a hired DJ.
      +
      Spencer Platt/Getty Images News/Getty Images
      - - + -

      Avoid canned drinks, which guests often open, but don't finish. Serve pitchers of tap water with lemon and cucumber slices or sliced strawberries for an interesting and refreshing flavor. Opt for punches and non-alcoholic drinks for high school graduates that allow guests to dole out the exact amount they want to drink.

      -
      - Serve drinks in pitchers, not in cans. -
      -
      - evgenyb/iStock/Getty Images
      +
      +
      +
      +

      Avoid canned drinks, which guests often open, but don't finish. Serve pitchers of tap water with lemon and cucumber slices or sliced strawberries for an interesting and refreshing flavor. Opt for punches and non-alcoholic drinks for high school graduates that allow guests to dole out the exact amount they want to drink.

      +
      Serve drinks in pitchers, not in cans.
      +
      evgenyb/iStock/Getty Images
      - - - + -

      Instead of inviting everyone you – and the graduate – know or ever knew, scale back the guest list. Forgo inviting guests that you or your grad haven't seen for eons. There is no reason to provide provisions for people who are essentially out of your lives. Sticking to a small, but personal, guest list allows more time to mingle with loved ones during the party, too.

      -
      - Limit guests to those close to the graduate. -
      -
      - Kane Skennar/Photodisc/Getty Images
      +
      +
      +
      +

      Instead of inviting everyone you – and the graduate – know or ever knew, scale back the guest list. Forgo inviting guests that you or your grad haven't seen for eons. There is no reason to provide provisions for people who are essentially out of your lives. Sticking to a small, but personal, guest list allows more time to mingle with loved ones during the party, too.

      +
      Limit guests to those close to the graduate.
      +
      Kane Skennar/Photodisc/Getty Images
      - - + -

      See if your grad and his best friend, girlfriend or close family member would consider hosting a joint party. You can split some of the expenses, especially when the two graduates share mutual friends. You'll also have another parent to bounce ideas off of and to help you stick to your budget when you're tempted to splurge.

      -
      - Throw a joint bash for big savings. -
      -
      - Mike Watson Images/Moodboard/Getty
      +
      +
      +
      +

      See if your grad and his best friend, girlfriend or close family member would consider hosting a joint party. You can split some of the expenses, especially when the two graduates share mutual friends. You'll also have another parent to bounce ideas off of and to help you stick to your budget when you're tempted to splurge.

      +
      Throw a joint bash for big savings.
      +
      Mike Watson Images/Moodboard/Getty
      - + - -

      Skip carving stations of prime rib and jumbo shrimp as appetizers, especially for high school graduation parties. Instead, serve some of the graduate's favorite side dishes that are cost effective, like a big pot of spaghetti with breadsticks. Opt for easy and simple food such as pizza, finger food and mini appetizers.

      -

      Avoid pre-packaged foods and pre-made deli platters. These can be quite costly. Instead, make your own cheese and deli platters for less than half the cost of pre-made.

      -
      - Cost effective appetizers are just as satisfying as pre-made deli platters. -
      -
      - Mark Stout/iStock/Getty Images
      +
      +
      +
      +

      Skip carving stations of prime rib and jumbo shrimp as appetizers, especially for high school graduation parties. Instead, serve some of the graduate's favorite side dishes that are cost effective, like a big pot of spaghetti with breadsticks. Opt for easy and simple food such as pizza, finger food and mini appetizers.

      +

      Avoid pre-packaged foods and pre-made deli platters. These can be quite costly. Instead, make your own cheese and deli platters for less than half the cost of pre-made.

      +
      Cost effective appetizers are just as satisfying as pre-made deli platters.
      +
      Mark Stout/iStock/Getty Images
      - + - -

      Instead of an evening dinner party, host a grad lunch or all appetizers party. Brunch and lunch fare or finger food costs less than dinner. Guests also tend to consume less alcohol in the middle of the day, which keeps cost down.

      -
      - A brunch gathering will cost less than a dinner party. -
      -
      - Mark Stout/iStock/Getty Images
      +
      +
      +
      +

      Instead of an evening dinner party, host a grad lunch or all appetizers party. Brunch and lunch fare or finger food costs less than dinner. Guests also tend to consume less alcohol in the middle of the day, which keeps cost down.

      +
      A brunch gathering will cost less than a dinner party.
      +
      Mark Stout/iStock/Getty Images
      - - - + - -

      Decorate your party in the graduate's current school colors or the colors of the school he or she will be headed to next. Décor that is not specifically graduation-themed may cost a bit less, and any leftovers can be re-used for future parties, picnics and events.

      -
      - Theme the party by color without graduation-specific decor. -
      -
      - jethuynh/iStock/Getty Images
      +
      +
      +
      +

      Decorate your party in the graduate's current school colors or the colors of the school he or she will be headed to next. Décor that is not specifically graduation-themed may cost a bit less, and any leftovers can be re-used for future parties, picnics and events.

      +
      Theme the party by color without graduation-specific decor.
      +
      jethuynh/iStock/Getty Images
      - - -

      - Related Searches -

      - - +

      Related Searches

      Promoted By Zergnet

      -
      - - -
      +
      \ No newline at end of file diff --git a/test/test-pages/gmw/expected.html b/test/test-pages/gmw/expected.html index 0ae2e5d..08b5341 100644 --- a/test/test-pages/gmw/expected.html +++ b/test/test-pages/gmw/expected.html @@ -1,12 +1,10 @@
      -
      +

        翱翔于距地球数千公里的太空中,进入广袤漆黑的未知领域,是一项艰苦卓绝的工作。这让人感到巨大压力和极度恐慌。那么,为什么不能让宇航员来一杯“地球末日”鸡尾酒来放松一下?

        不幸的是,对于希望能喝上一杯的太空探险者,那些将他们送上太空的政府机构普遍禁止他们染指包括酒在内的含酒精饮料。

        但是,很快普通人都会有机会向人类“最终的边疆”出发——以平民化旅行的形式,去探索和殖民火星。确实,火星之旅将是一次令人感到痛苦的旅行,可能一去不复返并要几年时间才能完成,但是否应该允许参与者在旅程中痛饮一番?或至少携带能在火星上发酵自制酒精饮料的设备?

      -

      (Credit: Nasa)

      -

      -   图注:巴兹?奥尔德林(Buzz Aldrin)可能是第二个在月球上行走的人,但他是第一个在月球上喝酒的人 -

      +

      (Credit: Nasa)

      +

        图注:巴兹?奥尔德林(Buzz Aldrin)可能是第二个在月球上行走的人,但他是第一个在月球上喝酒的人

        事实是,历史上酒与太空探险有一种复杂的关系。让我们来看看喝了酒的航天员究竟会发生什么—— 如果我们开始给予进入太空的人类更大的自由度,又可能会发生什么。

        人们普遍认为,当一个人所处的海拔越高,喝醉后会越容易感到头昏。因此,人们自然地想到,当人身处地球轨道上时,饮酒会对人体有更强烈的致眩作用。但这种说法可能不是正确的。

        事实上,有证据表明,早在上世纪八十年代就澄清了这一传言。1985年,美国联邦航空管理局(UFAA)开展了一项研究,以验证人在不同的海拔高度饮酒,是否会影响执行复杂任务时的表现和酒精测定仪的读数。

      @@ -18,10 +16,8 @@

        所以,如果酒精对人体的物理效应与海拔高度无关,那么在国际空间站上睡前小饮一杯不应该是一个大问题,对吧?错了。

        美国宇航局约翰逊航天中心发言人丹尼尔·霍特(Daniel Huot)表示:“国际空间站上的宇航员不允许喝酒。在国际空间站上,酒精和其它挥发性化合物的使用受到控制,因为它们的挥发物可能对该站的水回收系统产生影响。”

        为此,国际空间站上的宇航员甚至没有被提供含有酒精的产品,例如漱口水、香水或须后水。如果在国际空间站上饮酒狂欢,溢出的啤酒也可能存在损坏设备的风险。

      -

      (Credit: iStock)

      -

      -   图注:测试表明,有关人在高空中喝酒更容易醉的传言是不正确的 -

      +

      (Credit: iStock)

      +

        图注:测试表明,有关人在高空中喝酒更容易醉的传言是不正确的

        然后是责任的问题。我们不允许汽车司机或飞机飞行员喝醉后驾驶,所以并不奇怪同样的规则适用于国际空间站上的宇航员。毕竟国际空间站的造价高达1500亿美元,而且在接近真空的太空中其运行速度达到了每小时27680公里。

        然而,2007年,美国宇航局(NASA)成立了一个负责调查宇航员健康状况的独立小组,称历史上该机构至少有两名宇航员在即将飞行前喝了大量的酒,但仍然被允许飞行。Nasa安全负责人随后的审查发现并没有证据支持这一指控。宇航员在飞行前12小时是严禁饮酒的,因为他们需要充分的思维能力和清醒的意识。

        出台这一规则的原因很清楚。在1985年UFAA开展的关于酒精在不同海拔高度影响的研究中,研究人员得出结论,酒精的影响与海拔高度无关。无论参与测试的人员在什么海拔高度喝酒,其酒精测量仪的读数都是一样的。他们的行为表现受到的影响也相同,但如果提供给测试人员的是安慰剂,则身处高空比身处海平面的行为表现要更差一些。这表明,无论是否摄入酒精,海拔高度可能对心理表现有轻微的影响。

      @@ -37,18 +33,13 @@

        因此,即使宇航员自己被禁止在地球轨道上饮酒,但他们正在做的工作可以提高在地上消费的酒的质量。

        相比之下,执行登陆火星任务的人将远离家乡几年,而不是几个月,因此可能会有人提出有关禁止饮酒的规定可以放松一些。

        然而,像戴夫?汉森这样的专家认为,继续禁止饮酒并没有什么害处。除了实际的安全问题,饮酒还可能有其它挑战。汉森认为,地球人存在许多社会文化方面的差异,而且人连续几年时间呆在一个狭小的空间里,很容易突然发怒,这些因素都使饮酒问题变得很棘手。

      -

      (Credit: David Frohman/Peachstate Historical Consulting Inc)

      -

      -   图注:奥尔德林的圣餐杯回到了地球上 -

      +

      (Credit: David Frohman/Peachstate Historical Consulting Inc)

      +

        图注:奥尔德林的圣餐杯回到了地球上

        他说:“这是一个政治问题,也是一个文化方面的问题,但不是一个科学上的问题。这将是未来一个可能产生冲突领域,因为人们具有不同的文化背景,他们对饮酒的态度不同。”他进一步指出,如果你与穆斯林、摩门教徒或禁酒主义者分配在同一间宿舍怎么办?面对未来人们可能在一个没有期限的时间内呆在一个有限的空间里,需要“尽早解决”如何协调不同文化观点的问题。

        所以,当宇航员在地球轨道上时,将还不得不满足于通过欣赏外面的景色来振作精神,而不要指望沉溺于烈酒中。我们留在地球上的人,则可以准备好适量的香槟酒,以迎接他们的归来。

        原标题:他晚于阿姆斯特朗登月 却是首个敢在月球喝酒的人

        出品︱网易科学人栏目组 胖胖

      -

        作者︱春春 - -

      - -

      [责任编辑:肖春芳]

      +

        作者︱春春

      +

      [责任编辑:肖春芳]

      -
      +
      \ No newline at end of file diff --git a/test/test-pages/herald-sun-1/expected-metadata.json b/test/test-pages/herald-sun-1/expected-metadata.json index 6c8b59b..53802a2 100644 --- a/test/test-pages/herald-sun-1/expected-metadata.json +++ b/test/test-pages/herald-sun-1/expected-metadata.json @@ -1,6 +1,7 @@ { "title": "Angry media won’t buckle over new surveillance laws\n\t\t\t\t\t\t| Herald Sun", "byline": "JOE HILDEBRAND", + "dir": null, "excerpt": "A HIGH-powered federal government team has been doing the rounds of media organisations in the past few days in an attempt to allay concerns about the impact of new surveillance legislation on press freedom. It failed.", "readerable": true } diff --git a/test/test-pages/herald-sun-1/expected.html b/test/test-pages/herald-sun-1/expected.html index 839bf2e..06ba127 100644 --- a/test/test-pages/herald-sun-1/expected.html +++ b/test/test-pages/herald-sun-1/expected.html @@ -2,8 +2,8 @@
      -
      A new Bill would require telecommunications service providers to store so-called ‘metadat
      -

      A new Bill would require telecommunications service providers to store so-called ‘metadata’ for two years. Source: +

      A new Bill would require telecommunications service providers to store so-called ‘metadat
      +

      A new Bill would require telecommunications service providers to store so-called ‘metadata’ for two years. Source: Supplied

      @@ -13,8 +13,8 @@

      The roadshow featured the Prime Minister’s national security adviser, Andrew Shearer, Justin Bassi, who advises Attorney-General George Brandis on crime and security matters, and Australian Federal Police Commissioner Andrew Colvin. Staffers from the office of Communications Minister Malcolm Turnbull also took part.

      They held meetings with executives from News Corporation and Fairfax, representatives of the TV networks, the ABC top brass and a group from the media union and the Walkley journalism foundation. I was involved as a member of the Walkley board.

      The initiative, from Tony Abbott’s office, is evidence that the Government has been alarmed by the strength of criticism from media of the Data Retention Bill it wants passed before Parliament rises in a fortnight. Bosses, journalists, even the Press Council, are up in arms, not only over this measure, but also over aspects of two earlier pieces of national security legislation that interfere with the ability of the media to hold government to account.

      -
      -
      +
      +

      The Bill would require telecommunications service providers to store so-called “metadata” — the who, where, when and how of a communication, but not its content — for two years so security and law enforcement agencies can access it without warrant. Few would argue against the use of such material to catch criminals or terrorists. But, as Parliament’s Joint Committee on Intelligence and Security has pointed out, it would also be used “for the purpose of determining the identity of a journalist’s sources”.

      And that should ring warning bells for anyone genuinely concerned with the health of our democracy. Without the ability to protect the identity of sources, journalists would be greatly handicapped in exposing corruption, dishonesty, waste, incompetence and misbehaviour by public officials.

      The Press Council is concerned the laws would crush investigative journalism.

      @@ -33,4 +33,4 @@
      -
      +
      \ No newline at end of file diff --git a/test/test-pages/ietf-1/expected.html b/test/test-pages/ietf-1/expected.html index 9473384..ace8e9d 100644 --- a/test/test-pages/ietf-1/expected.html +++ b/test/test-pages/ietf-1/expected.html @@ -1,8 +1,5 @@ -
      [Docs] [txt|pdf] [Tracker] [Email] [Diff1] [Diff2] [Nits] -
      -
      Versions: 00 01 02 03 04 -
      -
      INTERNET DRAFT                                      Michiel B. de Jong
      +
      [Docs] [txt|pdf] [Tracker] [Email] [Diff1] [Diff2] [Nits]

      Versions: 00 01 02 03 04

      +
      INTERNET DRAFT                                      Michiel B. de Jong
       Document: draft-dejong-remotestorage-04                   IndieHosters
                                                                    F. Kooman
       Intended Status: Proposed Standard                       (independent)
      @@ -55,7 +52,8 @@ Copyright Notice
       
       
       de Jong                                                         [Page 1]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -105,7 +103,8 @@ Table of Contents
       
       
       de Jong                                                         [Page 2]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -155,7 +154,8 @@ Table of Contents
       
       
       de Jong                                                         [Page 3]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -205,7 +205,8 @@ Table of Contents
       
       
       de Jong                                                         [Page 4]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -255,7 +256,8 @@ Table of Contents
       
       
       de Jong                                                         [Page 5]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -305,7 +307,8 @@ Table of Contents
       
       
       de Jong                                                         [Page 6]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -355,7 +358,8 @@ Table of Contents
       
       
       de Jong                                                         [Page 7]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -405,7 +409,8 @@ Table of Contents
       
       
       de Jong                                                         [Page 8]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -455,7 +460,8 @@ Table of Contents
       
       
       de Jong                                                         [Page 9]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -505,7 +511,8 @@ Table of Contents
       
       
       de Jong                                                        [Page 10]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -555,7 +562,8 @@ Table of Contents
       
       
       de Jong                                                        [Page 11]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -605,7 +613,8 @@ Table of Contents
       
       
       de Jong                                                        [Page 12]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -655,7 +664,8 @@ motestorage-04",
       
       
       de Jong                                                        [Page 13]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -705,7 +715,8 @@ XjzzzHNjkd1CJxoQubA1o%3D&token_type=bearer&state=
       
       
       de Jong                                                        [Page 14]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -755,7 +766,8 @@ ntent-Type, Origin, X-Requested-With, If-Match, If-None-Match
       
       
       de Jong                                                        [Page 15]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -805,7 +817,8 @@ e.io/spec/modules/myfavoritedrinks/drink"}
       
       
       de Jong                                                        [Page 16]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -855,7 +868,8 @@ charset=UTF-8","Content-Length":106}}}
       
       
       de Jong                                                        [Page 17]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -905,7 +919,8 @@ charset=UTF-8","Content-Length":106}}}
       
       
       de Jong                                                        [Page 18]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -955,7 +970,8 @@ charset=UTF-8","Content-Length":106}}}
       
       
       de Jong                                                        [Page 19]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
      @@ -999,82 +1015,84 @@ charset=UTF-8","Content-Length":106}}}
       
       17.1. Normative References
       
      -    [WORDS]
      +    [WORDS]
               Bradner, S., "Key words for use in RFCs to Indicate Requirement
               Levels", BCP 14, RFC 2119, March 1997.
       
       
       de Jong                                                        [Page 20]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
       
      -    [IRI]
      +    [IRI]
               Duerst, M., "Internationalized Resource Identifiers (IRIs)",
               RFC 3987, January 2005.
       
      -    [WEBFINGER]
      +    [WEBFINGER]
               Jones, P., Salguerio, G., Jones, M, and Smarr, J.,
               "WebFinger", RFC7033, September 2013.
       
      -    [OAUTH]
      +    [OAUTH]
               "Section 4.2: Implicit Grant", in: Hardt, D. (ed), "The OAuth
               2.0 Authorization Framework", RFC6749, October 2012.
       
       17.2. Informative References
       
      -    [HTTPS]
      +    [HTTPS]
               Rescorla, E., "HTTP Over TLS", RFC2818, May 2000.
       
      -    [HTTP]
      +    [HTTP]
               Fielding et al., "Hypertext Transfer Protocol (HTTP/1.1):
               Semantics and Content", RFC7231, June 2014.
       
      -    [COND]
      +    [COND]
               Fielding et al., "Hypertext Transfer Protocol (HTTP/1.1):
               Conditional Requests", RFC7232, June 2014.
       
      -    [RANGE]
      +    [RANGE]
               Fielding et al., "Hypertext Transfer Protocol (HTTP/1.1):
               Conditional Requests", RFC7233, June 2014.
       
      -    [SPDY]
      +    [SPDY]
               Mark Belshe, Roberto Peon, "SPDY Protocol - Draft 3.1", http://
               www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1,
               September 2013.
       
      -    [JSON-LD]
      +    [JSON-LD]
               M. Sporny, G. Kellogg, M. Lanthaler, "JSON-LD 1.0", W3C
               Proposed Recommendation,
               http://www.w3.org/TR/2014/REC-json-ld-20140116/, January 2014.
       
      -    [CORS]
      +    [CORS]
               van Kesteren, Anne (ed), "Cross-Origin Resource Sharing --
               W3C Candidate Recommendation 29 January 2013",
       
       
       de Jong                                                        [Page 21]
      -
       
      +
      +
       
       Internet-Draft              remoteStorage                  December 2014
       
       
               http://www.w3.org/TR/cors/, January 2013.
       
      -    [MANIFEST]
      +    [MANIFEST]
               Mozilla Developer Network (ed), "App manifest -- Revision
               330541", https://developer.mozilla.org/en-
               US/Apps/Build/Manifest$revision/566677, April 2014.
       
      -    [DATASTORE]
      +    [DATASTORE]
               "WebAPI/DataStore", MozillaWiki, retrieved May 2014.
               https://wiki.mozilla.org/WebAPI/DataStore#Manifest
       
      -    [KERBEROS]
      +    [KERBEROS]
               C. Neuman et al., "The Kerberos Network Authentication Service
               (V5)", RFC4120, July 2005.
       
      -    [BEARER]
      +    [BEARER]
               M. Jones, D. Hardt, "The OAuth 2.0 Authorization Framework:
               Bearer Token Usage", RFC6750, October 2012.
       
      @@ -1106,7 +1124,6 @@ charset=UTF-8","Content-Length":106}}}
       
       de Jong                                                        [Page 22]
       
      -
      -
      Html markup produced by rfcmarkup 1.111, available from +

      Html markup produced by rfcmarkup 1.111, available from https://tools.ietf.org/tools/rfcmarkup/
      \ No newline at end of file diff --git a/test/test-pages/keep-images/expected.html b/test/test-pages/keep-images/expected.html index c89b25d..3a8a5ea 100644 --- a/test/test-pages/keep-images/expected.html +++ b/test/test-pages/keep-images/expected.html @@ -4,156 +4,156 @@
      -
      -
      +
      +
      -

      Welcome to DoctorX’s Barcelona lab, where the drugs you bought online are tested for safety and purity. No questions asked.

      -
      -
      +

      Welcome to DoctorX’s Barcelona lab, where the drugs you bought online are tested for safety and purity. No questions asked.

      +
      +
      -

      Standing at a table in a chemistry lab in Barcelona, Cristina Gil Lladanosa tears open a silver, smell-proof protective envelope. She slides out a transparent bag full of crystals. Around her, machines whir and hum, and other researchers mill around in long, white coats.

      -

      She is holding the lab’s latest delivery of a drug bought from the “deep web,” the clandestine corner of the internet that isn’t reachable by normal search engines, and is home to some sites that require special software to access. Labeled as MDMA (the street term is ecstasy), this sample has been shipped from Canada. Lladanosa and her colleague Iván Fornís Espinosa have also received drugs, anonymously, from people in China, Australia, Europe and the United States.

      -

      “Here we have speed, MDMA, cocaine, pills,” Lladanosa says, pointing to vials full of red, green, blue and clear solutions sitting in labeled boxes.

      +

      Standing at a table in a chemistry lab in Barcelona, Cristina Gil Lladanosa tears open a silver, smell-proof protective envelope. She slides out a transparent bag full of crystals. Around her, machines whir and hum, and other researchers mill around in long, white coats.

      +

      She is holding the lab’s latest delivery of a drug bought from the “deep web,” the clandestine corner of the internet that isn’t reachable by normal search engines, and is home to some sites that require special software to access. Labeled as MDMA (the street term is ecstasy), this sample has been shipped from Canada. Lladanosa and her colleague Iván Fornís Espinosa have also received drugs, anonymously, from people in China, Australia, Europe and the United States.

      +

      “Here we have speed, MDMA, cocaine, pills,” Lladanosa says, pointing to vials full of red, green, blue and clear solutions sitting in labeled boxes.

      -
      -
      +
      +
      Cristina Gil Lladanosa, at the Barcelona testing lab | photo by Joan Bardeletti
      -

      Since 2011, with the launch of Silk Road, anybody has been able to safely buy illegal drugs from the deep web and have them delivered to their door. Though the FBI shut down that black market in October 2013, other outlets have emerged to fill its role. For the last 10 months the lab at which Lladanosa and Espinosa work has offered a paid testing service of those drugs. By sending in samples for analysis, users can know exactly what it is they are buying, and make a more informed decision about whether to ingest the substance. The group, called Energy Control, which has being running “harm reduction” programs since 1999, is the first to run a testing service explicitly geared towards verifying those purchases from the deep web.

      -

      Before joining Energy Control, Lladanosa briefly worked at a pharmacy, whereas Espinosa spent 14 years doing drug analysis. Working at Energy Control is “more gratifying,” and “rewarding” than her previous jobs, Lladanosa told me. They also receive help from a group of volunteers, made up of a mixture of “squatters,” as Espinosa put it, and medical students, who prepare the samples for testing.

      -

      After weighing out the crystals, aggressively mixing it with methanol until dissolved, and delicately pouring the liquid into a tiny brown bottle, Lladanosa, a petite woman who is nearly engulfed by her lab coat, is now ready to test the sample. She loads a series of three trays on top of a large white appliance sitting on a table, called a gas chromatograph (GC). A jungle of thick pipes hang from the lab’s ceiling behind it.

      +

      Since 2011, with the launch of Silk Road, anybody has been able to safely buy illegal drugs from the deep web and have them delivered to their door. Though the FBI shut down that black market in October 2013, other outlets have emerged to fill its role. For the last 10 months the lab at which Lladanosa and Espinosa work has offered a paid testing service of those drugs. By sending in samples for analysis, users can know exactly what it is they are buying, and make a more informed decision about whether to ingest the substance. The group, called Energy Control, which has being running “harm reduction” programs since 1999, is the first to run a testing service explicitly geared towards verifying those purchases from the deep web.

      +

      Before joining Energy Control, Lladanosa briefly worked at a pharmacy, whereas Espinosa spent 14 years doing drug analysis. Working at Energy Control is “more gratifying,” and “rewarding” than her previous jobs, Lladanosa told me. They also receive help from a group of volunteers, made up of a mixture of “squatters,” as Espinosa put it, and medical students, who prepare the samples for testing.

      +

      After weighing out the crystals, aggressively mixing it with methanol until dissolved, and delicately pouring the liquid into a tiny brown bottle, Lladanosa, a petite woman who is nearly engulfed by her lab coat, is now ready to test the sample. She loads a series of three trays on top of a large white appliance sitting on a table, called a gas chromatograph (GC). A jungle of thick pipes hang from the lab’s ceiling behind it.

      -
      -
      +
      +
      Photo by Joan Bardeletti
      -

      “Chromatography separates all the substances,” Lladanosa says as she loads the machine with an array of drugs sent from the deep web and local Spanish users. It can tell whether a sample is pure or contaminated, and if the latter, with what.

      -

      Rushes of hot air blow across the desk as the gas chromatograph blasts the sample at 280 degrees Celsius. Thirty minutes later the machine’s robotic arm automatically moves over to grip another bottle. The machine will continue cranking through the 150 samples in the trays for most of the work week.

      +

      “Chromatography separates all the substances,” Lladanosa says as she loads the machine with an array of drugs sent from the deep web and local Spanish users. It can tell whether a sample is pure or contaminated, and if the latter, with what.

      +

      Rushes of hot air blow across the desk as the gas chromatograph blasts the sample at 280 degrees Celsius. Thirty minutes later the machine’s robotic arm automatically moves over to grip another bottle. The machine will continue cranking through the 150 samples in the trays for most of the work week.

      -
      -
      +
      +
      Photo by Joan Bardeletti
      -

      To get the drugs to Barcelona, a user mails at least 10 milligrams of a substance to the offices of the Asociación Bienestar y Desarrollo, the non-government organization that oversees Energy Control. The sample then gets delivered to the testing service’s laboratory, at the Barcelona Biomedical Research Park, a futuristic, seven story building sitting metres away from the beach. Energy Control borrows its lab space from a biomedical research group for free.

      -

      The tests cost 50 Euro per sample. Users pay, not surprisingly, with Bitcoin. In the post announcing Energy Control’s service on the deep web, the group promised that “All profits of this service are set aside of maintenance of this project.”

      -

      About a week after testing, those results are sent in a PDF to an email address provided by the anonymous client.

      -

      “The process is quite boring, because you are in a routine,” Lladanosa says. But one part of the process is consistently surprising: that moment when the results pop up on the screen. “Every time it’s something different.” For instance, one cocaine sample she had tested also contained phenacetin, a painkiller added to increase the product’s weight; lidocaine, an anesthetic that numbs the gums, giving the impression that the user is taking higher quality cocaine; and common caffeine.

      -
      -
      +

      To get the drugs to Barcelona, a user mails at least 10 milligrams of a substance to the offices of the Asociación Bienestar y Desarrollo, the non-government organization that oversees Energy Control. The sample then gets delivered to the testing service’s laboratory, at the Barcelona Biomedical Research Park, a futuristic, seven story building sitting metres away from the beach. Energy Control borrows its lab space from a biomedical research group for free.

      +

      The tests cost 50 Euro per sample. Users pay, not surprisingly, with Bitcoin. In the post announcing Energy Control’s service on the deep web, the group promised that “All profits of this service are set aside of maintenance of this project.”

      +

      About a week after testing, those results are sent in a PDF to an email address provided by the anonymous client.

      +

      “The process is quite boring, because you are in a routine,” Lladanosa says. But one part of the process is consistently surprising: that moment when the results pop up on the screen. “Every time it’s something different.” For instance, one cocaine sample she had tested also contained phenacetin, a painkiller added to increase the product’s weight; lidocaine, an anesthetic that numbs the gums, giving the impression that the user is taking higher quality cocaine; and common caffeine.

      +
      +
      -

      The deep web drug lab is the brainchild of Fernando Caudevilla, a Spanish physician who is better known as “DoctorX” on the deep web, a nickname given to him by his Energy Control co-workers because of his earlier writing about the history, risks and recreational culture of MDMA. In the physical world, Caudevilla has worked for over a decade with Energy Control on various harm reduction focused projects, most of which have involved giving Spanish illegal drug users medical guidance, and often writing leaflets about the harms of certain substances.

      +

      The deep web drug lab is the brainchild of Fernando Caudevilla, a Spanish physician who is better known as “DoctorX” on the deep web, a nickname given to him by his Energy Control co-workers because of his earlier writing about the history, risks and recreational culture of MDMA. In the physical world, Caudevilla has worked for over a decade with Energy Control on various harm reduction focused projects, most of which have involved giving Spanish illegal drug users medical guidance, and often writing leaflets about the harms of certain substances.

      -
      -
      +
      +
      Fernando Caudevilla, AKA DoctorX. Photo: Joseph Cox
      -

      Caudevilla first ventured into Silk Road forums in April 2013. “I would like to contribute to this forum offering professional advice in topics related to drug use and health,” he wrote in an introductory post, using his DoctorX alias. Caudevilla offered to provide answers to questions that a typical doctor is not prepared, or willing, to respond to, at least not without a lecture or a judgment. “This advice cannot replace a complete face-to-face medical evaluation,” he wrote, “but I know how difficult it can be to talk frankly about these things.”

      -

      The requests flooded in. A diabetic asked what effect MDMA has on blood sugar; another what the risks of frequent psychedelic use were for a young person. Someone wanted to know whether amphetamine use should be avoided during lactation. In all, Fernando’s thread received over 50,000 visits and 300 questions before the FBI shut down Silk Road.

      -

      “He’s amazing. A gift to this community,” one user wrote on the Silk Road 2.0 forum, a site that sprang up after the original. “His knowledge is invaluable, and never comes with any judgment.” Up until recently, Caudevilla answered questions on the marketplace “Evolution.” Last week, however, the administrators of that site pulled a scam, shutting the market down and escaping with an estimated $12 million worth of Bitcoin.

      -

      Caudevilla’s transition from dispensing advice to starting up a no-questions-asked drug testing service came as a consequence of his experience on the deep web. He’d wondered whether he could help bring more harm reduction services to a marketplace without controls. The Energy Control project, as part of its mandate of educating drug users and preventing harm, had already been carrying out drug testing for local Spanish users since 2001, at music festivals, night clubs, or through a drop-in service at a lab in Madrid.

      -

      “I thought, we are doing this in Spain, why don’t we do an international drug testing service?” Caudevilla told me when I visited the other Energy Control lab, in Madrid. Caudevilla, a stocky character with ear piercings and short, shaved hair, has eyes that light up whenever he discusses the world of the deep web. Later, via email, he elaborated that it was not a hard sell. “It was not too hard to convince them,” he wrote me. Clearly, Energy Control believed that the reputation he had earned as an unbiased medical professional on the deep web might carry over to the drug analysis service, where one needs to establish “credibility, trustworthiness, [and] transparency,” Caudevilla said. “We could not make mistakes,” he added.

      +

      Caudevilla first ventured into Silk Road forums in April 2013. “I would like to contribute to this forum offering professional advice in topics related to drug use and health,” he wrote in an introductory post, using his DoctorX alias. Caudevilla offered to provide answers to questions that a typical doctor is not prepared, or willing, to respond to, at least not without a lecture or a judgment. “This advice cannot replace a complete face-to-face medical evaluation,” he wrote, “but I know how difficult it can be to talk frankly about these things.”

      +

      The requests flooded in. A diabetic asked what effect MDMA has on blood sugar; another what the risks of frequent psychedelic use were for a young person. Someone wanted to know whether amphetamine use should be avoided during lactation. In all, Fernando’s thread received over 50,000 visits and 300 questions before the FBI shut down Silk Road.

      +

      “He’s amazing. A gift to this community,” one user wrote on the Silk Road 2.0 forum, a site that sprang up after the original. “His knowledge is invaluable, and never comes with any judgment.” Up until recently, Caudevilla answered questions on the marketplace “Evolution.” Last week, however, the administrators of that site pulled a scam, shutting the market down and escaping with an estimated $12 million worth of Bitcoin.

      +

      Caudevilla’s transition from dispensing advice to starting up a no-questions-asked drug testing service came as a consequence of his experience on the deep web. He’d wondered whether he could help bring more harm reduction services to a marketplace without controls. The Energy Control project, as part of its mandate of educating drug users and preventing harm, had already been carrying out drug testing for local Spanish users since 2001, at music festivals, night clubs, or through a drop-in service at a lab in Madrid.

      +

      “I thought, we are doing this in Spain, why don’t we do an international drug testing service?” Caudevilla told me when I visited the other Energy Control lab, in Madrid. Caudevilla, a stocky character with ear piercings and short, shaved hair, has eyes that light up whenever he discusses the world of the deep web. Later, via email, he elaborated that it was not a hard sell. “It was not too hard to convince them,” he wrote me. Clearly, Energy Control believed that the reputation he had earned as an unbiased medical professional on the deep web might carry over to the drug analysis service, where one needs to establish “credibility, trustworthiness, [and] transparency,” Caudevilla said. “We could not make mistakes,” he added.

      -
      -
      +
      +
      Photo: Joseph Cox
      -
      -
      +
      +
      -

      While the Energy Control lab in Madrid lab only tests Spanish drugs from various sources, it is the Barcelona location which vets the substances bought in the shadowy recesses of of the deep web. Caudevilla no longer runs it, having handed it over to his colleague Ana Muñoz. She maintains a presence on the deep web forums, answers questions from potential users, and sends back reports when they are ready.

      -

      The testing program exists in a legal grey area. The people who own the Barcelona lab are accredited to experiment with and handle drugs, but Energy Control doesn’t have this permission itself, at least not in writing.

      -

      “We have a verbal agreement with the police and other authorities. They already know what we are doing,” Lladanosa tells me. It is a pact of mutual benefit. Energy Control provides the police with information on batches of drugs in Spain, whether they’re from the deep web or not, Espinosa says. They also contribute to the European Monitoring Centre for Drugs and Drug Addiction’s early warning system, a collaboration that attempts to spread information about dangerous drugs as quickly as possible.

      -

      By the time of my visit in February, Energy Control had received over 150 samples from the deep web and have been receiving more at a rate of between 4 and 8 a week. Traditional drugs, such as cocaine and MDMA, make up about 70 percent of the samples tested, but the Barcelona lab has also received samples of the prescription pill codeine, research chemicals and synthetic cannabinoids, and even pills of Viagra.

      +

      While the Energy Control lab in Madrid lab only tests Spanish drugs from various sources, it is the Barcelona location which vets the substances bought in the shadowy recesses of of the deep web. Caudevilla no longer runs it, having handed it over to his colleague Ana Muñoz. She maintains a presence on the deep web forums, answers questions from potential users, and sends back reports when they are ready.

      +

      The testing program exists in a legal grey area. The people who own the Barcelona lab are accredited to experiment with and handle drugs, but Energy Control doesn’t have this permission itself, at least not in writing.

      +

      “We have a verbal agreement with the police and other authorities. They already know what we are doing,” Lladanosa tells me. It is a pact of mutual benefit. Energy Control provides the police with information on batches of drugs in Spain, whether they’re from the deep web or not, Espinosa says. They also contribute to the European Monitoring Centre for Drugs and Drug Addiction’s early warning system, a collaboration that attempts to spread information about dangerous drugs as quickly as possible.

      +

      By the time of my visit in February, Energy Control had received over 150 samples from the deep web and have been receiving more at a rate of between 4 and 8 a week. Traditional drugs, such as cocaine and MDMA, make up about 70 percent of the samples tested, but the Barcelona lab has also received samples of the prescription pill codeine, research chemicals and synthetic cannabinoids, and even pills of Viagra.

      -
      -
      +
      +
      Photo by Joan Bardeletti
      -

      So it’s fair to make a tentative judgement on what people are paying for on the deep web. The verdict thus far? Overall, drugs on the deep web appear to be of much higher quality than those found on the street.

      -

      “In general, the cocaine is amazing,” says Caudevilla, saying that the samples they’ve seen have purities climbing towards 80 or 90 percent, and some even higher. To get an idea of how unusual this is, take a look at the United Nations Office on Drugs and Crime World Drug Report 2014, which reports that the average quality of street cocaine in Spain is just over 40 percent, while in the United Kingdom it is closer to 30 percent.“We have found 100 percent [pure] cocaine,” he adds. “That’s really, really strange. That means that, technically, this cocaine has been purified, with clandestine methods.”

      -

      Naturally, identifying vendors who sell this top-of-the-range stuff is one of the reasons that people have sent samples to Energy Control. Caudevilla was keen to stress that, officially, Energy Control’s service “is not intended to be a control of drug quality,” meaning a vetting process for identifying the best sellers, but that is exactly how some people have been using it.

      -

      As one buyer on the Evolution market, elmo666, wrote to me over the site’s messaging system, “My initial motivations were selfish. My primary motivation was to ensure that I was receiving and continue to receive a high quality product, essentially to keep the vendor honest as far as my interactions with them went.”

      -

      Vendors on deep web markets advertise their product just like any other outlet does, using flash sales, gimmicky giveaways and promises of drugs that are superior to those of their competitors. The claims, however, can turn out to be empty: despite the test results that show that deep web cocaine vendors typically sell product that is of a better quality than that found on the street, in plenty of cases, the drugs are nowhere near as pure as advertised.

      -

      “You won’t be getting anything CLOSE to what you paid for,” one user complained about the cocaine from ‘Mirkov’, a vendor on Evolution. “He sells 65% not 95%.”

      +

      So it’s fair to make a tentative judgement on what people are paying for on the deep web. The verdict thus far? Overall, drugs on the deep web appear to be of much higher quality than those found on the street.

      +

      “In general, the cocaine is amazing,” says Caudevilla, saying that the samples they’ve seen have purities climbing towards 80 or 90 percent, and some even higher. To get an idea of how unusual this is, take a look at the United Nations Office on Drugs and Crime World Drug Report 2014, which reports that the average quality of street cocaine in Spain is just over 40 percent, while in the United Kingdom it is closer to 30 percent.“We have found 100 percent [pure] cocaine,” he adds. “That’s really, really strange. That means that, technically, this cocaine has been purified, with clandestine methods.”

      +

      Naturally, identifying vendors who sell this top-of-the-range stuff is one of the reasons that people have sent samples to Energy Control. Caudevilla was keen to stress that, officially, Energy Control’s service “is not intended to be a control of drug quality,” meaning a vetting process for identifying the best sellers, but that is exactly how some people have been using it.

      +

      As one buyer on the Evolution market, elmo666, wrote to me over the site’s messaging system, “My initial motivations were selfish. My primary motivation was to ensure that I was receiving and continue to receive a high quality product, essentially to keep the vendor honest as far as my interactions with them went.”

      +

      Vendors on deep web markets advertise their product just like any other outlet does, using flash sales, gimmicky giveaways and promises of drugs that are superior to those of their competitors. The claims, however, can turn out to be empty: despite the test results that show that deep web cocaine vendors typically sell product that is of a better quality than that found on the street, in plenty of cases, the drugs are nowhere near as pure as advertised.

      +

      “You won’t be getting anything CLOSE to what you paid for,” one user complained about the cocaine from ‘Mirkov’, a vendor on Evolution. “He sells 65% not 95%.”

      -
      -
      +
      +
      Photo by Joan Bardeletti
      -
      -
      +
      +
      -

      Despite the prevalence of people using the service to gauge the quality of what goes up their nose, many users send samples to Energy Control in the spirit of its original mission: keeping themselves alive and healthy. The worst case scenario from drugs purchased on the deep web is, well the worst case. That was the outcome when Patrick McMullen, a 17-year-old Scottish student, ingested half a gram of MDMA and three tabs of LSD, reportedly purchased from the Silk Road. While talking to his friends on Skype, his words became slurred and he passed out. Paramedics could not revive him. The coroner for that case, Sherrif Payne, who deemed the cause of death ecstasy toxicity, told The Independent “You never know the purity of what you are taking and you can easily come unstuck.”

      -

      ScreamMyName, a deep web user who has been active since the original Silk Road, wants to alert users to the dangerous chemicals that are often mixed with drugs, and is using Energy Control as a means to do so.

      -

      “We’re at a time where some vendors are outright sending people poison. Some do it unknowingly,” ScreamMyName told me in an encrypted message. “Cocaine production in South America is often tainted with either levamisole or phenacetine. Both poison to humans and both with severe side effects.”

      -

      In the case of Levamisole, those prescribing it are often not doctors but veterinarians, as Levamisole is commonly used on animals, primarily for the treatment of worms. If ingested by humans it can lead to cases of extreme eruptions of the skin, as documented in a study from researchers at the University of California, San Francisco. But Lladanosa has found Levamisole in cocaine samples; dealers use it to increase the product weight, allowing them to stretch their batch further for greater profit — and also, she says, because Levamisole has a strong stimulant effect.

      -

      “It got me sick as fuck,” Dr. Feel, an Evolution user, wrote on the site’s forums after consuming cocaine that had been cut with 23 percent Levamisole, and later tested by Energy Control. “I was laid up in bed for several days because of that shit. The first night I did it, I thought I was going to die. I nearly drove myself to the ER.”

      -

      “More people die because of tainted drugs than the drugs themselves,” Dr. Feel added. “It’s the cuts and adulterants that are making people sick and killing them.”

      +

      Despite the prevalence of people using the service to gauge the quality of what goes up their nose, many users send samples to Energy Control in the spirit of its original mission: keeping themselves alive and healthy. The worst case scenario from drugs purchased on the deep web is, well the worst case. That was the outcome when Patrick McMullen, a 17-year-old Scottish student, ingested half a gram of MDMA and three tabs of LSD, reportedly purchased from the Silk Road. While talking to his friends on Skype, his words became slurred and he passed out. Paramedics could not revive him. The coroner for that case, Sherrif Payne, who deemed the cause of death ecstasy toxicity, told The Independent “You never know the purity of what you are taking and you can easily come unstuck.”

      +

      ScreamMyName, a deep web user who has been active since the original Silk Road, wants to alert users to the dangerous chemicals that are often mixed with drugs, and is using Energy Control as a means to do so.

      +

      “We’re at a time where some vendors are outright sending people poison. Some do it unknowingly,” ScreamMyName told me in an encrypted message. “Cocaine production in South America is often tainted with either levamisole or phenacetine. Both poison to humans and both with severe side effects.”

      +

      In the case of Levamisole, those prescribing it are often not doctors but veterinarians, as Levamisole is commonly used on animals, primarily for the treatment of worms. If ingested by humans it can lead to cases of extreme eruptions of the skin, as documented in a study from researchers at the University of California, San Francisco. But Lladanosa has found Levamisole in cocaine samples; dealers use it to increase the product weight, allowing them to stretch their batch further for greater profit — and also, she says, because Levamisole has a strong stimulant effect.

      +

      “It got me sick as fuck,” Dr. Feel, an Evolution user, wrote on the site’s forums after consuming cocaine that had been cut with 23 percent Levamisole, and later tested by Energy Control. “I was laid up in bed for several days because of that shit. The first night I did it, I thought I was going to die. I nearly drove myself to the ER.”

      +

      “More people die because of tainted drugs than the drugs themselves,” Dr. Feel added. “It’s the cuts and adulterants that are making people sick and killing them.”

      -
      -
      +
      +
      Photo by Joan Bardeletti
      -

      The particular case of cocaine cut with Levamisole is one of the reasons that ScreamMyName has been pushing for more drug testing on the deep web markets. “I recognize that drug use isn’t exactly healthy, but why exacerbate the problem?” he told me when I contacted him after his post. “[Energy Control] provides a way for users to test the drugs they’ll use and for these very users to know what it is they’re putting in their bodies. Such services are in very short supply.”

      -

      After sending a number of Energy Control tests himself, ScreamMyName started a de facto crowd-sourcing campaign to get more drugs sent to the lab, and then shared the results, after throwing in some cash to get the ball rolling. He set up a Bitcoin wallet, with the hope that users might chip in to fund further tests. At the time of writing, the wallet has received a total of 1.81 bitcoins; around $430 at today’s exchange rates.

      -

      In posts to the Evolution community, ScreamMyName pitched this project as something that will benefit users and keep drug dealer honest. “When the funds build up to a point where we can purchase an [Energy Control] test fee, we’ll do a US thread poll for a few days and try to cohesively decide on what vendor to test,” he continued.

      +

      The particular case of cocaine cut with Levamisole is one of the reasons that ScreamMyName has been pushing for more drug testing on the deep web markets. “I recognize that drug use isn’t exactly healthy, but why exacerbate the problem?” he told me when I contacted him after his post. “[Energy Control] provides a way for users to test the drugs they’ll use and for these very users to know what it is they’re putting in their bodies. Such services are in very short supply.”

      +

      After sending a number of Energy Control tests himself, ScreamMyName started a de facto crowd-sourcing campaign to get more drugs sent to the lab, and then shared the results, after throwing in some cash to get the ball rolling. He set up a Bitcoin wallet, with the hope that users might chip in to fund further tests. At the time of writing, the wallet has received a total of 1.81 bitcoins; around $430 at today’s exchange rates.

      +

      In posts to the Evolution community, ScreamMyName pitched this project as something that will benefit users and keep drug dealer honest. “When the funds build up to a point where we can purchase an [Energy Control] test fee, we’ll do a US thread poll for a few days and try to cohesively decide on what vendor to test,” he continued.

      -
      -
      +
      +
      Photo by Joan Bardeletti
      -

      Other members of the community have been helping out, too. PlutoPete, a vendor from the original Silk Road who sold cannabis seeds and other legal items, has provided ScreamMyName with packaging to safely send the samples to Barcelona. “A box of baggies, and a load of different moisture barrier bags,” PlutoPete told me over the phone. “That’s what all the vendors use.”

      -

      It’s a modest program so far. ScreamMyName told me that so far he had gotten enough public funding to purchase five different Energy Control tests, in addition to the ten or so he’s sent himself so far. “The program created is still in its infancy and it is growing and changing as we go along but I have a lot of faith in what we’re doing,” he says.

      -

      But the spirit is contagious: elmo666, the other deep web user testing cocaine, originally kept the results of the drug tests to himself, but he, too, saw a benefit to distributing the data. “It is clear that it is a useful service to other users, keeping vendors honest and drugs (and their users) safe,” he told me. He started to report his findings to others on the forums, and then created a thread with summaries of the test results, as well as comments from the vendors if they provided it. Other users were soon basing their decisions on what to buy on elmo666‘s tests.

      -

      “I’m defo trying the cola based on the incredibly helpful elmo and his energy control results and recommendations,” wrote user jayk1984. On top of this, elmo666 plans to launch an independent site on the deep web that will collate all of these results, which should act as a resource for users of all the marketplaces.

      -

      As word of elmo666's efforts spread, he began getting requests from drug dealers who wanted him to use their wares for testing. Clearly, they figured that a positive result from Energy Control would be a fantastic marketing tool to draw more customers. They even offered elmo666 free samples. (He passed.)

      -

      Meanwhile, some in the purchasing community are arguing that those running markets on the deep web should be providing quality control themselves. PlutoPete told me over the phone that he had been in discussions about this with Dread Pirate Roberts, the pseudonymous owner of the original Silk Road site. “We [had been] talking about that on a more organized basis on Silk Road 1, doing lots of anonymous buys to police each category. But of course they took the thing [Silk Road] down before we got it properly off the ground,” he lamented.

      -

      But perhaps it is best that the users, those who are actually consuming the drugs, remain in charge of shaming dealers and warning each other. “It’s our responsibility to police the market based on reviews and feedback,” elmo666 wrote in an Evolution forum post. It seems that in the lawless space of the deep web, where everything from child porn to weapons are sold openly, users have cooperated in an organic display of self-regulation to stamp out those particular batches of drugs that are more likely to harm users.

      -

      “That’s always been the case with the deep web,” PlutoPete told me. Indeed, ever since Silk Road, a stable of the drug markets has been the review system, where buyers can leave a rating and feedback for vendors, letting others know about the reliability of the seller. But DoctorX’s lab, rigorously testing the products with scientific instruments, takes it a step further.

      +

      Other members of the community have been helping out, too. PlutoPete, a vendor from the original Silk Road who sold cannabis seeds and other legal items, has provided ScreamMyName with packaging to safely send the samples to Barcelona. “A box of baggies, and a load of different moisture barrier bags,” PlutoPete told me over the phone. “That’s what all the vendors use.”

      +

      It’s a modest program so far. ScreamMyName told me that so far he had gotten enough public funding to purchase five different Energy Control tests, in addition to the ten or so he’s sent himself so far. “The program created is still in its infancy and it is growing and changing as we go along but I have a lot of faith in what we’re doing,” he says.

      +

      But the spirit is contagious: elmo666, the other deep web user testing cocaine, originally kept the results of the drug tests to himself, but he, too, saw a benefit to distributing the data. “It is clear that it is a useful service to other users, keeping vendors honest and drugs (and their users) safe,” he told me. He started to report his findings to others on the forums, and then created a thread with summaries of the test results, as well as comments from the vendors if they provided it. Other users were soon basing their decisions on what to buy on elmo666‘s tests.

      +

      “I’m defo trying the cola based on the incredibly helpful elmo and his energy control results and recommendations,” wrote user jayk1984. On top of this, elmo666 plans to launch an independent site on the deep web that will collate all of these results, which should act as a resource for users of all the marketplaces.

      +

      As word of elmo666's efforts spread, he began getting requests from drug dealers who wanted him to use their wares for testing. Clearly, they figured that a positive result from Energy Control would be a fantastic marketing tool to draw more customers. They even offered elmo666 free samples. (He passed.)

      +

      Meanwhile, some in the purchasing community are arguing that those running markets on the deep web should be providing quality control themselves. PlutoPete told me over the phone that he had been in discussions about this with Dread Pirate Roberts, the pseudonymous owner of the original Silk Road site. “We [had been] talking about that on a more organized basis on Silk Road 1, doing lots of anonymous buys to police each category. But of course they took the thing [Silk Road] down before we got it properly off the ground,” he lamented.

      +

      But perhaps it is best that the users, those who are actually consuming the drugs, remain in charge of shaming dealers and warning each other. “It’s our responsibility to police the market based on reviews and feedback,” elmo666 wrote in an Evolution forum post. It seems that in the lawless space of the deep web, where everything from child porn to weapons are sold openly, users have cooperated in an organic display of self-regulation to stamp out those particular batches of drugs that are more likely to harm users.

      +

      “That’s always been the case with the deep web,” PlutoPete told me. Indeed, ever since Silk Road, a stable of the drug markets has been the review system, where buyers can leave a rating and feedback for vendors, letting others know about the reliability of the seller. But DoctorX’s lab, rigorously testing the products with scientific instruments, takes it a step further.

      -
      -
      +
      +
      Photo by Joan Bardeletti
      -

      “In the white market, they have quality control. In the dark market, it should be the same,” Cristina Gil Lladanosa says to me before I leave the Barcelona lab.

      -

      A week after I visit the lab, the results of the MDMA arrive in my inbox: it is 85 percent pure, with no indications of other active ingredients. Whoever ordered that sample from the digital shelves of the deep web, and had it shipped to their doorstep in Canada, got hold of some seriously good, and relatively safe drugs. And now they know it.

      -
      -
      +

      “In the white market, they have quality control. In the dark market, it should be the same,” Cristina Gil Lladanosa says to me before I leave the Barcelona lab.

      +

      A week after I visit the lab, the results of the MDMA arrive in my inbox: it is 85 percent pure, with no indications of other active ingredients. Whoever ordered that sample from the digital shelves of the deep web, and had it shipped to their doorstep in Canada, got hold of some seriously good, and relatively safe drugs. And now they know it.

      +
      +
      -

      Top photo by Joan Bardeletti

      -

      Follow Backchannel: Twitter |Facebook

      +

      Top photo by Joan Bardeletti

      +

      Follow Backchannel: Twitter |Facebook

      diff --git a/test/test-pages/lemonde-1/expected.html b/test/test-pages/lemonde-1/expected.html index a603a11..d7b091e 100644 --- a/test/test-pages/lemonde-1/expected.html +++ b/test/test-pages/lemonde-1/expected.html @@ -1,14 +1,10 @@
      -

      Le Monde | - • Mis à jour le - | +

      Le Monde | • Mis à jour le | Par

      -
      -

      - -

      +
      +

      Les députés ont, sans surprise, adopté à une large majorité (438 contre 86 et 42 abstentions) le projet de loi sur le renseignement défendu par le gouvernement lors d’un vote solennel, mardi 5 mai. Il sera désormais examiné par le Sénat, puis le Conseil constitutionnel, prochainement saisi par 75 députés. Dans un souci d'apaisement, François Hollande avait annoncé par avance qu'il saisirait les Sages.

      Revivez le direct du vote à l’Assemblée avec vos questions.

      Ont voté contre : 10 députés socialistes (sur 288), 35 UMP (sur 198), 11 écologistes (sur 18), 11 UDI (sur 30), 12 députés Front de gauche (sur 15) et 7 non-inscrits (sur 9). Le détail est disponible sur le site de l'Assemblée nationale.

      diff --git a/test/test-pages/liberation-1/expected.html b/test/test-pages/liberation-1/expected.html index dd075f9..e61354c 100644 --- a/test/test-pages/liberation-1/expected.html +++ b/test/test-pages/liberation-1/expected.html @@ -1,15 +1,13 @@
      -
      +
      -
      +

      Un troisième Français a été tué dans le tremblement de terre samedi au Népal, emporté par une avalanche, a déclaré jeudi le ministre des Affaires étrangères. Les autorités françaises sont toujours sans nouvelles «d’encore plus de 200» personnes. «Pour certains d’entre eux on est très interrogatif», a ajouté Laurent Fabius. Il accueillait à Roissy un premier avion spécial ramenant des rescapés. L’Airbus A350 affrété par les autorités françaises s’est posé peu avant 5h45 avec à son bord 206 passagers, dont 12 enfants et 26 blessés, selon une source du Quai d’Orsay. Quasiment tous sont français, à l’exception d’une quinzaine de ressortissants allemands, suisses, italiens, portugais ou encore turcs. Des psychologues, une équipe médicale et des personnels du centre de crise du Quai d’Orsay les attendent.

      L’appareil, mis à disposition par Airbus, était arrivé à Katmandou mercredi matin avec 55 personnels de santé et humanitaires, ainsi que 25 tonnes de matériel (abris, médicaments, aide alimentaire). Un deuxième avion dépêché par Paris, qui était immobilisé aux Emirats depuis mardi avec 20 tonnes de matériel, est arrivé jeudi à Katmandou, dont le petit aéroport est engorgé par le trafic et l’afflux d’aide humanitaire. Il devait lui aussi ramener des Français, «les plus éprouvés» par la catastrophe et les «plus vulnérables (blessés, familles avec enfants)», selon le ministère des Affaires étrangères.

      2 209 Français ont été localisés sains et saufs tandis que 393 n’ont pas encore pu être joints, selon le Quai d’Orsay. Environ 400 Français ont demandé à être rapatriés dans les vols mis en place par la France.

      Le séisme a fait près de 5 500 morts et touche huit des 28 millions d’habitants du Népal. Des dizaines de milliers de personnes sont sans abri.

      -

      - -

      +


      diff --git a/test/test-pages/links-in-tables/expected.html b/test/test-pages/links-in-tables/expected.html index 5948bd1..a819e99 100644 --- a/test/test-pages/links-in-tables/expected.html +++ b/test/test-pages/links-in-tables/expected.html @@ -1,5 +1,5 @@
      -
      +

      Posted by Andrew Hayden, Software Engineer on Google Play

      Android users are downloading tens of billions of apps and games on Google Play. We're also seeing developers update their apps frequently in order to provide users with great content, improve security, and enhance the overall user experience. It takes a lot of data to download these updates and we know users care about how much data their devices are using. Earlier this year, we announced that we started using the bsdiff algorithm (by @@ -13,9 +13,7 @@ patching. App Updates using File-by-File patching are, on a patching

      Android apps are packaged as APKs, which are ZIP files with special conventions. Most of the content within the ZIP files (and APKs) is compressed using a technology called Deflate. Deflate is really good at compressing data but it has a drawback: it makes identifying changes in the original (uncompressed) content really hard. Even a tiny change to the original content (like changing one word in a book) can make the compressed output of deflate look completely different. Describing the differences between the original content is easy, but describing the differences between the compressed content is so hard that it leads to inefficient patches.

      Watch how much the compressed text on the right side changes from a one-letter change in the uncompressed text on the left:

      -
      - -
      +

      File-by-File therefore is based on detecting changes in the uncompressed data. To generate a patch, we first decompress both old and new files before computing the delta (we still use bsdiff here). Then to apply the patch, we decompress the old file, apply the delta to the uncompressed content and then recompress the new file. In doing so, we need to make sure that the APK on your device is a perfect match, byte for byte, to the one on the Play Store (see APK Signature Schema v2 for why).

      When recompressing the new file, we hit two complications. First, Deflate has a number of settings that affect output; and we don't know which settings were used in the first place. Second, many versions of deflate exist and we need to know whether the version on your device is suitable.

      @@ -53,7 +51,7 @@ Patching?

    - -
    Example labeling for a subset of the netlist and device graphs
    - +

    71.1 MB

    @@ -67,7 +65,7 @@ Patching?

    - +

    32.7 MB

    @@ -81,7 +79,7 @@ Patching?

    - +

    17.8 MB

    @@ -95,7 +93,7 @@ Patching?

    - +

    18.9 MB

    @@ -109,7 +107,7 @@ Patching?

    - +

    52.4 MB

    @@ -123,7 +121,7 @@ Patching?

    - +

    16.2 MB

    @@ -137,7 +135,7 @@ Patching?

    -


    Disclaimer: if you see different patch sizes when you press "update" +

    Disclaimer: if you see different patch sizes when you press "update" manually, that is because we are not currently using File-by-file for interactive updates, only those done in the background.

    Saving data and making our @@ -147,9 +145,7 @@ users (& developers!) happy

    project where you can find information, including the source code. Yes, File-by-File patching is completely open-source!

    As a developer if you're interested in reducing your APK size still further, here are some general tips on reducing APK size.

    -
    - -
    \ No newline at end of file diff --git a/test/test-pages/medium-1/expected.html b/test/test-pages/medium-1/expected.html index ecb483f..09b8866 100644 --- a/test/test-pages/medium-1/expected.html +++ b/test/test-pages/medium-1/expected.html @@ -1,122 +1,114 @@
    -

    Open Journalism Project:

    -

    Better Student Journalism

    -

    We pushed out the first version of the Open Journalism site in January. Our goal is for the site to be a place to teach students what they should know about journalism on the web. It should be fun too.

    -

    Topics like mapping, security, command line tools, and open source are all concepts that should be made more accessible, and should be easily understood at a basic level by all journalists. We’re focusing on students because we know student journalism well, and we believe that teaching maturing journalists about the web will provide them with an important lens to view the world with. This is how we got to where we are now.

    -

    Circa 2011

    -

    In late 2011 I sat in the design room of our university’s student newsroom with some of the other editors: Kate Hudson, Brent Rose, and Nicholas Maronese. I was working as the photo editor then—something I loved doing. I was very happy travelling and photographing people while listening to their stories.

    -

    Photography was my lucky way of experiencing the many types of people my generation seemed to avoid, as well as many the public spends too much time discussing. One of my habits as a photographer was scouring sites like Flickr to see how others could frame the world in ways I hadn’t previously considered.

    -
    -
    +

    Open Journalism Project:

    +

    Better Student Journalism

    +

    We pushed out the first version of the Open Journalism site in January. Our goal is for the site to be a place to teach students what they should know about journalism on the web. It should be fun too.

    +

    Topics like mapping, security, command line tools, and open source are all concepts that should be made more accessible, and should be easily understood at a basic level by all journalists. We’re focusing on students because we know student journalism well, and we believe that teaching maturing journalists about the web will provide them with an important lens to view the world with. This is how we got to where we are now.

    +

    Circa 2011

    +

    In late 2011 I sat in the design room of our university’s student newsroom with some of the other editors: Kate Hudson, Brent Rose, and Nicholas Maronese. I was working as the photo editor then—something I loved doing. I was very happy travelling and photographing people while listening to their stories.

    +

    Photography was my lucky way of experiencing the many types of people my generation seemed to avoid, as well as many the public spends too much time discussing. One of my habits as a photographer was scouring sites like Flickr to see how others could frame the world in ways I hadn’t previously considered.

    +
    +
    topleftpixel.com
    -

    I started discovering beautiful things the web could do with images: things not possible with print. Just as every generation revolts against walking in the previous generations shoes, I found myself questioning the expectations that I came up against as a photo editor. In our newsroom the expectations were built from an outdated information world. We were expected to fill old shoes.

    -

    So we sat in our student newsroom—not very happy with what we were doing. Our weekly newspaper had remained essentially unchanged for 40+ years. Each editorial position had the same requirement every year. The big change happened in the 80s when the paper started using colour. We’d also stumbled into having a website, but it was updated just once a week with the release of the newspaper.

    -

    Information had changed form, but the student newsroom hadn’t, and it was becoming harder to romanticize the dusty newsprint smell coming from the shoes we were handed down from previous generations of editors. It was, we were told, all part of “becoming a journalist.”

    -
    -
    +

    I started discovering beautiful things the web could do with images: things not possible with print. Just as every generation revolts against walking in the previous generations shoes, I found myself questioning the expectations that I came up against as a photo editor. In our newsroom the expectations were built from an outdated information world. We were expected to fill old shoes.

    +

    So we sat in our student newsroom—not very happy with what we were doing. Our weekly newspaper had remained essentially unchanged for 40+ years. Each editorial position had the same requirement every year. The big change happened in the 80s when the paper started using colour. We’d also stumbled into having a website, but it was updated just once a week with the release of the newspaper.

    +

    Information had changed form, but the student newsroom hadn’t, and it was becoming harder to romanticize the dusty newsprint smell coming from the shoes we were handed down from previous generations of editors. It was, we were told, all part of “becoming a journalist.”

    +
    +
    -

    We don’t know what we don’t know

    -

    We spent much of the rest of the school year asking “what should we be doing in the newsroom?”, which mainly led us to ask “how do we use the web to tell stories?” It was a straightforward question that led to many more questions about the web: something we knew little about. Out in the real world, traditional journalists were struggling to keep their jobs in a dying print world. They wore the same design of shoes that we were supposed to fill. Being pushed to repeat old, failing strategies and blocked from trying something new scared us.

    -

    We had questions, so we started doing some research. We talked with student newsrooms in Canada and the United States, and filled too many Google Doc files with notes. Looking at the notes now, they scream of fear. We annotated our notes with naive solutions, often involving scrambled and immature odysseys into the future of online journalism.

    -

    There was a lot we didn’t know. We didn’t know how to build a mobile app. We didn’t know if we should build a mobile app. We didn’t know how to run a server. We didn’t know where to go to find a server. We didn’t know how the web worked. We didn’t know how people used the web to read news. We didn’t know what news should be on the web. If news is just information, what does that even look like?

    -

    We asked these questions to many students at other papers to get a consensus of what had worked and what hadn’t. They reported similar questions and fears about the web but followed with “print advertising is keeping us afloat so we can’t abandon it”.

    -

    In other words, we knew that we should be building a newer pair of shoes, but we didn’t know what the function of the shoes should be.

    -

    Common problems in student newsrooms (2011)

    -

    Our questioning of other student journalists in 15 student newsrooms brought up a few repeating issues.

    +

    We don’t know what we don’t know

    +

    We spent much of the rest of the school year asking “what should we be doing in the newsroom?”, which mainly led us to ask “how do we use the web to tell stories?” It was a straightforward question that led to many more questions about the web: something we knew little about. Out in the real world, traditional journalists were struggling to keep their jobs in a dying print world. They wore the same design of shoes that we were supposed to fill. Being pushed to repeat old, failing strategies and blocked from trying something new scared us.

    +

    We had questions, so we started doing some research. We talked with student newsrooms in Canada and the United States, and filled too many Google Doc files with notes. Looking at the notes now, they scream of fear. We annotated our notes with naive solutions, often involving scrambled and immature odysseys into the future of online journalism.

    +

    There was a lot we didn’t know. We didn’t know how to build a mobile app. We didn’t know if we should build a mobile app. We didn’t know how to run a server. We didn’t know where to go to find a server. We didn’t know how the web worked. We didn’t know how people used the web to read news. We didn’t know what news should be on the web. If news is just information, what does that even look like?

    +

    We asked these questions to many students at other papers to get a consensus of what had worked and what hadn’t. They reported similar questions and fears about the web but followed with “print advertising is keeping us afloat so we can’t abandon it”.

    +

    In other words, we knew that we should be building a newer pair of shoes, but we didn’t know what the function of the shoes should be.

    +

    Common problems in student newsrooms (2011)

    +

    Our questioning of other student journalists in 15 student newsrooms brought up a few repeating issues.

      -
    • Lack of mentorship
    • -
    • A news process that lacked consideration of the web
    • -
    • No editor/position specific to the web
    • -
    • Little exposure to many of the cool projects being put together by professional newsrooms
    • -
    • Lack of diverse skills within the newsroom. Writers made up 95% of the personnel. Students with other skills were not sought because journalism was seen as “a career with words.” The other 5% were designers, designing words on computers, for print.
    • -
    • Not enough discussion between the business side and web efforts
    • +
    • Lack of mentorship
    • +
    • A news process that lacked consideration of the web
    • +
    • No editor/position specific to the web
    • +
    • Little exposure to many of the cool projects being put together by professional newsrooms
    • +
    • Lack of diverse skills within the newsroom. Writers made up 95% of the personnel. Students with other skills were not sought because journalism was seen as “a career with words.” The other 5% were designers, designing words on computers, for print.
    • +
    • Not enough discussion between the business side and web efforts
    -
    -
    +
    +
    From our 2011 research
    -

    Common problems in student newsrooms (2013)

    -

    Two years later, we went back and looked at what had changed. We talked to a dozen more newsrooms and weren’t surprised by our findings.

    +

    Common problems in student newsrooms (2013)

    +

    Two years later, we went back and looked at what had changed. We talked to a dozen more newsrooms and weren’t surprised by our findings.

      -
    • Still no mentorship or link to professional newsrooms building stories for the web
    • -
    • Very little control of website and technology
    • -
    • The lack of exposure that student journalists have to interactive storytelling. While some newsrooms are in touch with what’s happening with the web and journalism, there still exists a huge gap between the student newsroom and its professional counterpart
    • -
    • No time in the current news development cycle for student newsrooms to experiment with the web
    • -
    • Lack of skill diversity (specifically coding, interaction design, and statistics)
    • -
    • Overly restricted access to student website technology. Changes are primarily visual rather than functional.
    • -
    • Significantly reduced print production of many papers
    • -
    • Computers aren’t set up for experimenting with software and code, and often locked down
    • +
    • Still no mentorship or link to professional newsrooms building stories for the web
    • +
    • Very little control of website and technology
    • +
    • The lack of exposure that student journalists have to interactive storytelling. While some newsrooms are in touch with what’s happening with the web and journalism, there still exists a huge gap between the student newsroom and its professional counterpart
    • +
    • No time in the current news development cycle for student newsrooms to experiment with the web
    • +
    • Lack of skill diversity (specifically coding, interaction design, and statistics)
    • +
    • Overly restricted access to student website technology. Changes are primarily visual rather than functional.
    • +
    • Significantly reduced print production of many papers
    • +
    • Computers aren’t set up for experimenting with software and code, and often locked down
    -

    Newsrooms have traditionally been covered in copies of The New York Times or Globe and Mail. Instead newsrooms should try spend at 20 minutes each week going over the coolest/weirdest online storytelling in an effort to expose each other to what is possible. “Hey, what has the New York Times R&D lab been up to this week?

    -

    Instead of having computers that are locked down, try setting aside a few office computers that allow students to play and “break”, or encourage editors to buy their own Macbooks so they’re always able to practice with code and new tools on their own.

    -

    From all this we realized that changing a student newsroom is difficult. It takes patience. It requires that the business and editorial departments of the student newsroom be on the same (web)page. The shoes of the future must be different from the shoes we were given.

    -

    We need to rethink how long the new shoe design will be valid. It’s more important that we focus on the process behind making footwear than on actually creating a specific shoe. We shouldn’t be building a shoe to last 40 years. Our footwear design process will allow us to change and adapt as technology evolves. The media landscape will change, so having a newsroom that can change with it will be critical.

    -

    We are building a shoe machine, not a shoe.

    -

    A train or light at the end of the tunnel: are student newsrooms changing for the better?

    -

    In our 2013 research we found that almost 50% of student newsrooms had created roles specifically for the web. This sounds great, but is still problematic in its current state.

    -
    -
    +

    Newsrooms have traditionally been covered in copies of The New York Times or Globe and Mail. Instead newsrooms should try spend at 20 minutes each week going over the coolest/weirdest online storytelling in an effort to expose each other to what is possible. “Hey, what has the New York Times R&D lab been up to this week?

    +

    Instead of having computers that are locked down, try setting aside a few office computers that allow students to play and “break”, or encourage editors to buy their own Macbooks so they’re always able to practice with code and new tools on their own.

    +

    From all this we realized that changing a student newsroom is difficult. It takes patience. It requires that the business and editorial departments of the student newsroom be on the same (web)page. The shoes of the future must be different from the shoes we were given.

    +

    We need to rethink how long the new shoe design will be valid. It’s more important that we focus on the process behind making footwear than on actually creating a specific shoe. We shouldn’t be building a shoe to last 40 years. Our footwear design process will allow us to change and adapt as technology evolves. The media landscape will change, so having a newsroom that can change with it will be critical.

    +

    We are building a shoe machine, not a shoe.

    +

    A train or light at the end of the tunnel: are student newsrooms changing for the better?

    +

    In our 2013 research we found that almost 50% of student newsrooms had created roles specifically for the web. This sounds great, but is still problematic in its current state.

    +
    +
    We designed many of these slides to help explain to ourselves what we were doing
    -

    When a newsroom decides to create a position for the web, it’s often with the intent of having content flow steadily from writers onto the web. This is a big improvement from just uploading stories to the web whenever there is a print issue. However…

    +

    When a newsroom decides to create a position for the web, it’s often with the intent of having content flow steadily from writers onto the web. This is a big improvement from just uploading stories to the web whenever there is a print issue. However…

      -
    1. The handoff -
      Problems arise because web editors are given roles that absolve the rest of the editors from thinking about the web. All editors should be involved in the process of story development for the web. While it’s a good idea to have one specific editor manage the website, contributors and editors should all play with and learn about the web. Instead of “can you make a computer do XYZ for me?”, we should be saying “can you show me how to make a computer do XYZ?”
    2. -
    3. Not just social media
      A web editor could do much more than simply being in charge of the social media accounts for the student paper. Their responsibility could include teaching all other editors to be listening to what’s happening online. The web editor can take advantage of live information to change how the student newsroom reports news in real time.
    4. -
    5. Web (interactive) editor
      The goal of having a web editor should be for someone to build and tell stories that take full advantage of the web as their medium. Too often the web’s interactivity is not considered when developing the story. The web then ends up as a resting place for print words.
    6. +
    7. The handoff
      Problems arise because web editors are given roles that absolve the rest of the editors from thinking about the web. All editors should be involved in the process of story development for the web. While it’s a good idea to have one specific editor manage the website, contributors and editors should all play with and learn about the web. Instead of “can you make a computer do XYZ for me?”, we should be saying “can you show me how to make a computer do XYZ?”
    8. +
    9. Not just social media
      A web editor could do much more than simply being in charge of the social media accounts for the student paper. Their responsibility could include teaching all other editors to be listening to what’s happening online. The web editor can take advantage of live information to change how the student newsroom reports news in real time.
    10. +
    11. Web (interactive) editor
      The goal of having a web editor should be for someone to build and tell stories that take full advantage of the web as their medium. Too often the web’s interactivity is not considered when developing the story. The web then ends up as a resting place for print words.
    -

    Editors at newsrooms are still figuring out how to convince writers of the benefit to having their content online. There’s still a stronger draw to writers seeing their name in print than on the web. Showing writers that their stories can be told in new ways to larger audiences is a convincing argument that the web is a starting point for telling a story, not its graveyard.

    -

    When everyone in the newsroom approaches their website with the intention of using it to explore the web as a medium, they all start to ask “what is possible?” and “what can be done?” You can’t expect students to think in terms of the web if it’s treated as a place for print words to hang out on a web page.

    -

    We’re OK with this problem, if we see newsrooms continue to take small steps towards having all their editors involved in the stories for the web.

    -
    -
    +

    Editors at newsrooms are still figuring out how to convince writers of the benefit to having their content online. There’s still a stronger draw to writers seeing their name in print than on the web. Showing writers that their stories can be told in new ways to larger audiences is a convincing argument that the web is a starting point for telling a story, not its graveyard.

    +

    When everyone in the newsroom approaches their website with the intention of using it to explore the web as a medium, they all start to ask “what is possible?” and “what can be done?” You can’t expect students to think in terms of the web if it’s treated as a place for print words to hang out on a web page.

    +

    We’re OK with this problem, if we see newsrooms continue to take small steps towards having all their editors involved in the stories for the web.

    +
    +
    The current Open Journalism site was a few years in the making. This was an original launch page we use in 2012
    -

    What we know

    +

    What we know

      -
    • New process -
      Our rough research has told us newsrooms need to be reorganized. This includes every part of the newsroom’s workflow: from where a story and its information comes from, to thinking of every word, pixel, and interaction the reader will have with your stories. If I was a photo editor that wanted to re-think my process with digital tools in mind, I’d start by asking “how are photo assignments processed and sent out?”, “how do we receive images?”, “what formats do images need to be exported in?”, “what type of screens will the images be viewed on?”, and “how are the designers getting these images?” Making a student newsroom digital isn’t about producing “digital manifestos”, it’s about being curious enough that you’ll want to to continue experimenting with your process until you’ve found one that fits your newsroom’s needs.
    • -
    • More (remote) mentorship -
      Lack of mentorship is still a big problem. Google’s fellowship program is great. The fact that it only caters to United States students isn’t. There are only a handful of internships in Canada where students interested in journalism can get experience writing code and building interactive stories. We’re OK with this for now, as we expect internships and mentorship over the next 5 years between professional newsrooms and student newsrooms will only increase. It’s worth noting that some of that mentorship will likely be done remotely.
    • -
    • Changing a newsroom culture -
      Skill diversity needs to change. We encourage every student newsroom we talk to, to start building a partnership with their school’s Computer Science department. It will take some work, but you’ll find there are many CS undergrads that love playing with web technologies, and using data to tell stories. Changing who is in the newsroom should be one of the first steps newsrooms take to changing how they tell stories. The same goes with getting designers who understand the wonderful interactive elements of the web and students who love statistics and exploring data. Getting students who are amazing at design, data, code, words, and images into one room is one of the coolest experience I’ve had. Everyone benefits from a more diverse newsroom.
    • +
    • New process
      Our rough research has told us newsrooms need to be reorganized. This includes every part of the newsroom’s workflow: from where a story and its information comes from, to thinking of every word, pixel, and interaction the reader will have with your stories. If I was a photo editor that wanted to re-think my process with digital tools in mind, I’d start by asking “how are photo assignments processed and sent out?”, “how do we receive images?”, “what formats do images need to be exported in?”, “what type of screens will the images be viewed on?”, and “how are the designers getting these images?” Making a student newsroom digital isn’t about producing “digital manifestos”, it’s about being curious enough that you’ll want to to continue experimenting with your process until you’ve found one that fits your newsroom’s needs.
    • +
    • More (remote) mentorship
      Lack of mentorship is still a big problem. Google’s fellowship program is great. The fact that it only caters to United States students isn’t. There are only a handful of internships in Canada where students interested in journalism can get experience writing code and building interactive stories. We’re OK with this for now, as we expect internships and mentorship over the next 5 years between professional newsrooms and student newsrooms will only increase. It’s worth noting that some of that mentorship will likely be done remotely.
    • +
    • Changing a newsroom culture
      Skill diversity needs to change. We encourage every student newsroom we talk to, to start building a partnership with their school’s Computer Science department. It will take some work, but you’ll find there are many CS undergrads that love playing with web technologies, and using data to tell stories. Changing who is in the newsroom should be one of the first steps newsrooms take to changing how they tell stories. The same goes with getting designers who understand the wonderful interactive elements of the web and students who love statistics and exploring data. Getting students who are amazing at design, data, code, words, and images into one room is one of the coolest experience I’ve had. Everyone benefits from a more diverse newsroom.
    -

    What we don’t know

    +

    What we don’t know

      -
    • Sharing curiosity for the web -
      We don’t know how to best teach students about the web. It’s not efficient for us to teach coding classes. We do go into newsrooms and get them running their first code exercises, but if someone wants to learn to program, we can only provide the initial push and curiosity. We will be trying out “labs” with a few schools next school year to hopefully get a better idea of how to teach students about the web.
    • -
    • Business -
      We don’t know how to convince the business side of student papers that they should invest in the web. At the very least we’re able to explain that having students graduate with their current skill set is painful in the current job market.
    • -
    • The future -
      We don’t know what journalism or the web will be like in 10 years, but we can start encouraging students to keep an open mind about the skills they’ll need. We’re less interested in preparing students for the current newsroom climate, than we are in teaching students to have the ability to learn new tools quickly as they come and go.
    • +
    • Sharing curiosity for the web
      We don’t know how to best teach students about the web. It’s not efficient for us to teach coding classes. We do go into newsrooms and get them running their first code exercises, but if someone wants to learn to program, we can only provide the initial push and curiosity. We will be trying out “labs” with a few schools next school year to hopefully get a better idea of how to teach students about the web.
    • +
    • Business
      We don’t know how to convince the business side of student papers that they should invest in the web. At the very least we’re able to explain that having students graduate with their current skill set is painful in the current job market.
    • +
    • The future
      We don’t know what journalism or the web will be like in 10 years, but we can start encouraging students to keep an open mind about the skills they’ll need. We’re less interested in preparing students for the current newsroom climate, than we are in teaching students to have the ability to learn new tools quickly as they come and go.
    -

    What we’re trying to share with others

    +

    What we’re trying to share with others

      -
    • A concise guide to building stories for the web -
      There are too many options to get started. We hope to provide an opinionated guide that follows both our experiences, research, and observations from trying to teach our peers.
    • +
    • A concise guide to building stories for the web
      There are too many options to get started. We hope to provide an opinionated guide that follows both our experiences, research, and observations from trying to teach our peers.
    -

    Student newsrooms don’t have investors to please. Student newsrooms can change their website every week if they want to try a new design or interaction. As long as students start treating the web as a different medium, and start building stories around that idea, then we’ll know we’re moving forward.

    -

    A note to professional news orgs

    -

    We’re also asking professional newsrooms to be more open about their process of developing stories for the web. You play a big part in this. This means writing about it, and sharing code. We need to start building a bridge between student journalism and professional newsrooms.

    -
    -
    +

    Student newsrooms don’t have investors to please. Student newsrooms can change their website every week if they want to try a new design or interaction. As long as students start treating the web as a different medium, and start building stories around that idea, then we’ll know we’re moving forward.

    +

    A note to professional news orgs

    +

    We’re also asking professional newsrooms to be more open about their process of developing stories for the web. You play a big part in this. This means writing about it, and sharing code. We need to start building a bridge between student journalism and professional newsrooms.

    +
    +
    2012
    -

    This is a start

    -

    We going to continue slowly growing the content on Open Journalism. We still consider this the beta version, but expect to polish it, and beef up the content for a real launch at the beginning of the summer.

    -

    We expect to have more original tutorials as well as the beginnings of what a curriculum may look like that a student newsroom can adopt to start guiding their transition to become a web first newsroom. We’re also going to be working with the Queen’s Journal and The Ubysseynext school year to better understand how to make the student newsroom a place for experimenting with telling stories on the web. If this sound like a good idea in your newsroom, we’re still looking to add 1 more school.

    -

    We’re trying out some new shoes. And while they’re not self-lacing, and smell a bit different, we feel lacing up a new pair of kicks can change a lot.

    -
    -
    +

    This is a start

    +

    We going to continue slowly growing the content on Open Journalism. We still consider this the beta version, but expect to polish it, and beef up the content for a real launch at the beginning of the summer.

    +

    We expect to have more original tutorials as well as the beginnings of what a curriculum may look like that a student newsroom can adopt to start guiding their transition to become a web first newsroom. We’re also going to be working with the Queen’s Journal and The Ubysseynext school year to better understand how to make the student newsroom a place for experimenting with telling stories on the web. If this sound like a good idea in your newsroom, we’re still looking to add 1 more school.

    +

    We’re trying out some new shoes. And while they’re not self-lacing, and smell a bit different, we feel lacing up a new pair of kicks can change a lot.

    +
    +
    -

    Let’s talk. Let’s listen.

    -

    We’re still in the early stages of what this project will look like, so if you want to help or have thoughts, let’s talk.

    -

    pippin@pippinlee.com

    -

    This isn’t supposed to be a manifesto™© +

    Let’s talk. Let’s listen.

    +

    We’re still in the early stages of what this project will look like, so if you want to help or have thoughts, let’s talk.

    +

    pippin@pippinlee.com

    +

    This isn’t supposed to be a manifesto™© we just think it’s pretty cool to share what we’ve learned so far, and hope you’ll do the same. We’re all in this together.

    \ No newline at end of file diff --git a/test/test-pages/medium-2/expected.html b/test/test-pages/medium-2/expected.html index 6fe4203..310acb4 100644 --- a/test/test-pages/medium-2/expected.html +++ b/test/test-pages/medium-2/expected.html @@ -2,33 +2,33 @@
    -
    -
    +
    +
    Words need defenders.
    -

    On Behalf of “Literally”

    -

    You either are a “literally” abuser or know of one. If you’re anything like me, hearing the word “literally” used incorrectly causes a little piece of your soul to whither and die. Of course I do not mean that literally, I mean that figuratively. An abuser would have said: “Every time a person uses that word, a piece of my soul literally withers and dies.” Which is terribly, horribly wrong.

    -

    For whatever bizarre reason, people feel the need to use literally as a sort of verbal crutch. They use it to emphasize a point, which is silly because they’re already using an analogy or a metaphor to illustrate said point. For example: “Ugh, I literally tore the house apart looking for my remote control!” No, you literally did not tear apart your house, because it’s still standing. If you’d just told me you “tore your house apart” searching for your remote, I would’ve understood what you meant. No need to add “literally” to the sentence.

    -

    Maybe I should define literally.

    -
    Literally means actually. When you say something literally happened, you’re describing the scene or situation as it actually happened.
    -

    So you should only use literally when you mean it. It should not be used in hyperbole. Example: “That was so funny I literally cried.” Which is possible. Some things are funny enough to elicit tears. Note the example stops with “literally cried.” You cannot literally cry your eyes out. The joke wasn’t so funny your eyes popped out of their sockets.

    -

    When in Doubt, Leave it Out

    -

    “I’m so hungry I could eat a horse,” means you’re hungry. You don’t need to say “I’m so hungry I could literally eat a horse.” Because you can’t do that in one sitting, I don’t care how big your stomach is.

    -

    “That play was so funny I laughed my head off,” illustrates the play was amusing. You don’t need to say you literally laughed your head off, because then your head would be on the ground and you wouldn’t be able to speak, much less laugh.

    -

    “I drove so fast my car was flying,” we get your point: you were speeding. But your car is never going fast enough to fly, so don’t say your car was literally flying.

    -

    Insecurities?

    -

    Maybe no one believed a story you told as a child, and you felt the need to prove that it actually happened. No really, mom, I literally climbed the tree. In efforts to prove truth, you used literally to describe something real, however outlandish it seemed. Whatever the reason, now your overuse of literally has become a habit.

    -

    Hard Habit to Break?

    -

    Abusing literally isn’t as bad a smoking, but it’s still an unhealthy habit (I mean that figuratively). Help is required in order to break it.

    -

    This is my version of an intervention for literally abusers. I’m not sure how else to do it other than in writing. I know this makes me sound like a know-it-all, and I accept that. But there’s no excuse other than blatant ignorance to misuse the word “literally.” So just stop it.

    -

    Don’t say “Courtney, this post is so snobbish it literally burned up my computer.” Because nothing is that snobbish that it causes computers to combust. Or: “Courtney, your head is so big it literally cannot get through the door.” Because it can, unless it’s one of those tiny doors from Alice in Wonderland and I need to eat a mushroom to make my whole body smaller.

    -

    No One’s Perfect

    -

    And I’m not saying I am. I’m trying to restore meaning to a word that’s lost meaning. I’m standing up for literally. It’s a good word when used correctly. People are butchering it and destroying it every day (figuratively speaking) and the massacre needs to stop. Just as there’s a coalition of people against the use of certain fonts (like Comic Sans and Papyrus), so should there be a coalition of people against the abuse of literally.

    -

    Saying it to Irritate?

    -

    Do you misuse the word “literally” just to annoy your know-it-all or grammar police friends/acquaintances/total strangers? If so, why? Doing so would be like me going outside when it’s freezing, wearing nothing but a pair of shorts and t-shirt in hopes of making you cold by just looking at me. Who suffers more?

    -

    Graphical Representation

    -

    Matthew Inman of “The Oatmeal” wrote a comic about literally. Abusers and defenders alike should check it out. It’s clear this whole craze about literally is driving a lot of us nuts. You literally abusers are killing off pieces of our souls. You must be stopped, or the world will be lost to meaninglessness forever. Figuratively speaking.

    +

    On Behalf of “Literally”

    +

    You either are a “literally” abuser or know of one. If you’re anything like me, hearing the word “literally” used incorrectly causes a little piece of your soul to whither and die. Of course I do not mean that literally, I mean that figuratively. An abuser would have said: “Every time a person uses that word, a piece of my soul literally withers and dies.” Which is terribly, horribly wrong.

    +

    For whatever bizarre reason, people feel the need to use literally as a sort of verbal crutch. They use it to emphasize a point, which is silly because they’re already using an analogy or a metaphor to illustrate said point. For example: “Ugh, I literally tore the house apart looking for my remote control!” No, you literally did not tear apart your house, because it’s still standing. If you’d just told me you “tore your house apart” searching for your remote, I would’ve understood what you meant. No need to add “literally” to the sentence.

    +

    Maybe I should define literally.

    +
    Literally means actually. When you say something literally happened, you’re describing the scene or situation as it actually happened.
    +

    So you should only use literally when you mean it. It should not be used in hyperbole. Example: “That was so funny I literally cried.” Which is possible. Some things are funny enough to elicit tears. Note the example stops with “literally cried.” You cannot literally cry your eyes out. The joke wasn’t so funny your eyes popped out of their sockets.

    +

    When in Doubt, Leave it Out

    +

    “I’m so hungry I could eat a horse,” means you’re hungry. You don’t need to say “I’m so hungry I could literally eat a horse.” Because you can’t do that in one sitting, I don’t care how big your stomach is.

    +

    “That play was so funny I laughed my head off,” illustrates the play was amusing. You don’t need to say you literally laughed your head off, because then your head would be on the ground and you wouldn’t be able to speak, much less laugh.

    +

    “I drove so fast my car was flying,” we get your point: you were speeding. But your car is never going fast enough to fly, so don’t say your car was literally flying.

    +

    Insecurities?

    +

    Maybe no one believed a story you told as a child, and you felt the need to prove that it actually happened. No really, mom, I literally climbed the tree. In efforts to prove truth, you used literally to describe something real, however outlandish it seemed. Whatever the reason, now your overuse of literally has become a habit.

    +

    Hard Habit to Break?

    +

    Abusing literally isn’t as bad a smoking, but it’s still an unhealthy habit (I mean that figuratively). Help is required in order to break it.

    +

    This is my version of an intervention for literally abusers. I’m not sure how else to do it other than in writing. I know this makes me sound like a know-it-all, and I accept that. But there’s no excuse other than blatant ignorance to misuse the word “literally.” So just stop it.

    +

    Don’t say “Courtney, this post is so snobbish it literally burned up my computer.” Because nothing is that snobbish that it causes computers to combust. Or: “Courtney, your head is so big it literally cannot get through the door.” Because it can, unless it’s one of those tiny doors from Alice in Wonderland and I need to eat a mushroom to make my whole body smaller.

    +

    No One’s Perfect

    +

    And I’m not saying I am. I’m trying to restore meaning to a word that’s lost meaning. I’m standing up for literally. It’s a good word when used correctly. People are butchering it and destroying it every day (figuratively speaking) and the massacre needs to stop. Just as there’s a coalition of people against the use of certain fonts (like Comic Sans and Papyrus), so should there be a coalition of people against the abuse of literally.

    +

    Saying it to Irritate?

    +

    Do you misuse the word “literally” just to annoy your know-it-all or grammar police friends/acquaintances/total strangers? If so, why? Doing so would be like me going outside when it’s freezing, wearing nothing but a pair of shorts and t-shirt in hopes of making you cold by just looking at me. Who suffers more?

    +

    Graphical Representation

    +

    Matthew Inman of “The Oatmeal” wrote a comic about literally. Abusers and defenders alike should check it out. It’s clear this whole craze about literally is driving a lot of us nuts. You literally abusers are killing off pieces of our souls. You must be stopped, or the world will be lost to meaninglessness forever. Figuratively speaking.

    - + \ No newline at end of file diff --git a/test/test-pages/medium-3/expected.html b/test/test-pages/medium-3/expected.html index 35b98bb..072e106 100644 --- a/test/test-pages/medium-3/expected.html +++ b/test/test-pages/medium-3/expected.html @@ -1,245 +1,230 @@
    -
    - -

    How to get shanked doing what people say they want

    -
    don’t preach to me
    Mr. integrity
    -

    (EDIT: removed the link to Samantha’s post, because the arments and the grubers and the rest of The Deck Clique got what they wanted: a non-proper person driven off the internet lightly capped with a dusting of transphobia along the way, all totally okay because the ends justify the means, and it’s okay when “good” people do it.)

    -

    First, I need to say something about this article: the reason I’m writing it infuriates me. Worse than installing CS 3 or Acrobat 7 ever did, and the former inspired comparisons to fecophile porn. I’m actually too mad to cuss. Well, not completely, but in this case, I don’t think the people I’m mad at are worth the creativity I try to put into profanity. This is about a brownfield of hypocrisy and viciously deliberate mischaracterization that “shame” cannot even come close to the shame those behind it should feel.

    -

    Now, read this post by Samantha Bielefeld: The Elephant in the Room. First, it is a well-written critical piece that raises a few points in a calm, rational, nonconfrontational fashion, exactly the kind of things the pushers of The Great Big Lie say we need more of, as opposed to the screaming that is the norm in such cases.

    -

    …sorry, I should explain “The Great Big Lie”. There are several, but in this case, our specific instance of “The Great Big Lie” is about criticism. Over and over, you hear from the very people I am not going to be nice to in this that we need “better” criticsm. Instead of rage and anger, volume and vitriol, we need in-depth rational criticism, that isn’t personal or ad hominem. That it should focus on points, not people.

    -

    That, readers, is “The Big Lie”. It is a lie so big that if one ponders the reality of it, as I am going to, one wonders why anyone would believe it. It is a lie and it is one we should stop telling.

    +

    How to get shanked doing what people say they want

    +
    don’t preach to me
    Mr. integrity
    +

    (EDIT: removed the link to Samantha’s post, because the arments and the grubers and the rest of The Deck Clique got what they wanted: a non-proper person driven off the internet lightly capped with a dusting of transphobia along the way, all totally okay because the ends justify the means, and it’s okay when “good” people do it.)

    +

    First, I need to say something about this article: the reason I’m writing it infuriates me. Worse than installing CS 3 or Acrobat 7 ever did, and the former inspired comparisons to fecophile porn. I’m actually too mad to cuss. Well, not completely, but in this case, I don’t think the people I’m mad at are worth the creativity I try to put into profanity. This is about a brownfield of hypocrisy and viciously deliberate mischaracterization that “shame” cannot even come close to the shame those behind it should feel.

    +

    Now, read this post by Samantha Bielefeld: The Elephant in the Room. First, it is a well-written critical piece that raises a few points in a calm, rational, nonconfrontational fashion, exactly the kind of things the pushers of The Great Big Lie say we need more of, as opposed to the screaming that is the norm in such cases.

    +

    …sorry, I should explain “The Great Big Lie”. There are several, but in this case, our specific instance of “The Great Big Lie” is about criticism. Over and over, you hear from the very people I am not going to be nice to in this that we need “better” criticsm. Instead of rage and anger, volume and vitriol, we need in-depth rational criticism, that isn’t personal or ad hominem. That it should focus on points, not people.

    +

    That, readers, is “The Big Lie”. It is a lie so big that if one ponders the reality of it, as I am going to, one wonders why anyone would believe it. It is a lie and it is one we should stop telling.

    -
    -

    Samantha’s points (I assume you read it, for you are smart people who know the importance of such things) are fairly clear:

    +

    Samantha’s points (I assume you read it, for you are smart people who know the importance of such things) are fairly clear:

      -
    1. With the release of Overcast 2.0, a product Samantha actually likes, Marco Arment moved to a patronage model that will probably be successful for him.
    2. -
    3. Arment’s insistence that “anyone can do this” while technically true, (anyone can in fact, implement this pricing model), also implies that “anyone” can have the kind of success that a developer with Marco’s history, financial status, and deep ties to the Apple News Web is expected to have. This is silly.
    4. -
    5. Marco Arment occupies a fairly unique position in the Apple universe, (gained by hard work and no small talent), and because of that, benefits from a set of privileges that a new developer or even one that has been around for a long time, but isn’t, well, Marco, not only don’t have, but have little chance of attaining anytime soon.
    6. -
    7. Marco has earned his success and is entitled to the benefits and privileges it brings, but he seems rather blind to all of that, and seems to still imagine himself as “two guys in a garage”. This is just not correct.
    8. -
    9. In addition, the benefits and privileges of the above ensure that by releasing Overcast 2 as a free app, with patronage pricing, he has, if not gutted, severely hurt the ability of folks actually selling their apps for an up-front price of not free to continue doing so. This has the effect of accelerating the “race to the bottom” in the podcast listening app segment, which hurts devs who cannot afford to work on a “I don’t really need this money, so whatever you feel like sending is okay” model.
    10. +
    11. With the release of Overcast 2.0, a product Samantha actually likes, Marco Arment moved to a patronage model that will probably be successful for him.
    12. +
    13. Arment’s insistence that “anyone can do this” while technically true, (anyone can in fact, implement this pricing model), also implies that “anyone” can have the kind of success that a developer with Marco’s history, financial status, and deep ties to the Apple News Web is expected to have. This is silly.
    14. +
    15. Marco Arment occupies a fairly unique position in the Apple universe, (gained by hard work and no small talent), and because of that, benefits from a set of privileges that a new developer or even one that has been around for a long time, but isn’t, well, Marco, not only don’t have, but have little chance of attaining anytime soon.
    16. +
    17. Marco has earned his success and is entitled to the benefits and privileges it brings, but he seems rather blind to all of that, and seems to still imagine himself as “two guys in a garage”. This is just not correct.
    18. +
    19. In addition, the benefits and privileges of the above ensure that by releasing Overcast 2 as a free app, with patronage pricing, he has, if not gutted, severely hurt the ability of folks actually selling their apps for an up-front price of not free to continue doing so. This has the effect of accelerating the “race to the bottom” in the podcast listening app segment, which hurts devs who cannot afford to work on a “I don’t really need this money, so whatever you feel like sending is okay” model.
    -

    None of this is incorrect. None of this is an ad hominem attack in any way. It is just pointing out that a developer of Arment’s stature and status lives in a very different world than someone in East Frog Balls, Arkansas trying to make a living off of App sales. Our dev in EFB doesn’t have the main sites on the Apple web falling all over themselves to review their app the way that Arment does. They’re not friends with the people being The Loop, Daring Fireball, SixColors, iMore, The Mac Observer, etc., yadda.

    -

    So, our hero, in a fit of well-meaning ignorance writes this piece (posted this morning, 14 Oct. 15) and of course, the response and any criticisms are just as reasonable and thoughtful.

    -

    If you really believe that, you are the most preciously ignorant person in the world, and can I have your seriously charmed life.

    +

    None of this is incorrect. None of this is an ad hominem attack in any way. It is just pointing out that a developer of Arment’s stature and status lives in a very different world than someone in East Frog Balls, Arkansas trying to make a living off of App sales. Our dev in EFB doesn’t have the main sites on the Apple web falling all over themselves to review their app the way that Arment does. They’re not friends with the people being The Loop, Daring Fireball, SixColors, iMore, The Mac Observer, etc., yadda.

    +

    So, our hero, in a fit of well-meaning ignorance writes this piece (posted this morning, 14 Oct. 15) and of course, the response and any criticisms are just as reasonable and thoughtful.

    +

    If you really believe that, you are the most preciously ignorant person in the world, and can I have your seriously charmed life.

    -
    -

    The response, from all quarters, including Marco, someone who is so sensitive to criticism that the word “useless” is enough to shut him down, who blocked a friend of mine for the high crime of pointing out that his review of podcasting mics centered around higher priced gear and ignored folks without the scratch, who might not be ready for such things, is, in a single word, disgusting. Vomitous even.

    -

    It’s an hours-long dogpile that beggars even my imagination, and I can imagine almost anything. Seriously, it’s all there in Samantha’s Twitter Feed. From what I can tell, she’s understandably shocked over it. I however was not. This one comment in her feed made me smile (warning, this wanders a bit…er…LOT. Twitter timelines are not easy to put together):

    -
    I can see why you have some reservations about publishing it, but my gut feeling is that he would take it better than Nilay.
    -

    Oh honey, bless your sweet, ignorant heart. Marco is one of the biggest pushers of The Big Lie, and one of the reasons it is such a lie.

    -

    But it gets better. First, you have the “hey, Marco earned his status!” lot. A valid point, and one Bielefeld explicitly acknowledges, here:

    -
    From his ground floor involvement in Tumblr (for which he is now a millionaire), to the creation and sale of a wildly successful app called Instapaper, he has become a household name in technology minded circles. It is this extensive time spent in the spotlight, the huge following on Twitter, and dedicated listeners of his weekly aired Accidental Tech Podcast, that has granted him the freedom to break from seeking revenue in more traditional manners.
    -

    and here:

    -
    I’m not knocking his success, he has put effort into his line of work, and has built his own life.
    -

    and here:

    -
    He has earned his time in the spotlight, and it’s only natural for him to take advantage of it.
    -

    But still, you get the people telling her something she already acknowledge:

    -
    I don’t think he’s blind. he’s worked to where he has gotten and has had failures like everyone else.
    -

    Thank you for restating something in the article. To the person who wrote it.

    -

    In the original article, Samantha talked about the money Marco makes from his podcast. She based that on the numbers provided by ATP in terms of sponsorship rates and the number of current sponsors the podcast has. Is this going to yield perfect numbers? No. But the numbers you get from it will at least be reasonable, or should be unless the published sponsorship rates are just fantasy, and you’re stupid for taking them seriously.

    -

    At first, she went with a simple formula:

    -
    $4K x 3 per episode = $12K x 52 weeks / 3 hosts splitting it.
    -

    That’s not someone making shit up, right? Rather quickly, someone pointed out that she’d made an error in how she calculated it:

    -
    That’s $4k per ad, no? So more like $12–16k per episode.
    -

    She’d already realized her mistake and fixed it.

    -
    which is actually wrong, and I’m correcting now. $4,000 per sponsor, per episode! So, $210,000 per year.
    -

    Again, this is based on publicly available data the only kind someone not part of ATP or a close friend of Arment has access to. So while her numbers may be wrong, if they are, there’s no way for her to know that. She’s basing her opinion on actual available data. Which is sadly rare.

    -

    This becomes a huge flashpoint. You name a reason to attack her over this, people do. No really. For example, she’s not calculating his income taxes correctly:

    -
    especially since it isn’t his only source of income thus, not an indicator of his marginal inc. tax bracket.
    -
    thus, guessing net income is more haphazard than stating approx. gross income.
    -

    Ye Gods. She’s not doing his taxes for him, her point is invalid?

    -

    Then there’s the people who seem to have not read anything past what other people are telling them:

    -
    Not sure what to make of your Marco piece, to be honest. You mention his fame, whatever, but what’s the main idea here?
    -

    Just how spoon-fed do you have to be? Have you no teeth?

    -

    Of course, Marco jumps in, and predictably, he’s snippy:

    -
    If you’re going to speak in precise absolutes, it’s best to first ensure that you’re correct.
    -

    If you’re going to be like that, it’s best to provide better data. Don’t get snippy when someone is going off the only data available, and is clearly open to revising based on better data.

    -

    Then Marco’s friends/fans get into it:

    -
    I really don’t understand why it’s anyone’s business
    -

    Samantha is trying to qualify for sainthood at this point:

    -
    It isn’t really, it was a way of putting his income in context in regards to his ability to gamble with Overcast.
    -

    Again, she’s trying to drag people back to her actual point, but no one is going to play. The storm has begun. Then we get people who are just spouting nonsense:

    -
    Why is that only relevant for him? It’s a pretty weird metric,especially since his apps aren’t free.
    -

    Wha?? Overcast 2 is absolutely free. Samantha points this out:

    -
    His app is free, that’s what sparked the article to begin with.
    -

    The response is literally a parallel to “How can there be global warming if it snowed today in my town?”

    -
    If it’s free, how have I paid for it? Twice?
    -

    She is still trying:

    -
    You paid $4.99 to unlock functionality in Overcast 1.0 and you chose to support him with no additional functionality in 2.0
    -

    He is having none of it. IT SNOWED! SNOWWWWWWW!

    -
    Yes. That’s not free. Free is when you choose not to make money. And that can be weaponized. But that’s not what Overcast does.
    -

    She however, is relentless:

    -
    No, it’s still free. You can choose to support it, you are required to pay $4.99 for Pocket Casts. Totally different model.
    -

    Dude seems to give up. (Note: allllll the people bagging on her are men. All of them. Mansplaining like hell. And I’d bet every one of them considers themselves a feminist.)

    -

    We get another guy trying to push the narrative she’s punishing him for his success, which is just…it’s stupid, okay? Stupid.

    -
    It also wasn’t my point in writing my piece today, but it seems to be everyone’s focus.
    -

    (UNDERSTATEMENT OF THE YEAR)

    -
    I think the focus should be more on that fact that while it’s difficult, Marco spent years building his audience.
    -
    It doesn’t matter what he makes it how he charges. If the audience be earned is willing to pay for it, awesome.
    -

    She tries, oh lord, she tries:

    -
    To assert that he isn’t doing anything any other dev couldn’t, is wrong. It’s successful because it’s Marco.
    -

    But no, HE KNOWS HER POINT BETTER THAN SHE DOES:

    -
    No, it’s successful because he busted his ass to make it so. It’s like any other business. He grew it.
    -

    Christ. This is like a field of strawmen. Stupid ones. Very stupid ones.

    -

    One guy tries to blame it all on Apple, another in a string of Wha??? moments:

    -
    the appropriate context is Apple’s App Store policies. Other devs aren’t Marco’s responsibility
    -

    Seriously? Dude, are you even trying to talk about what Samantha actually wrote? At this point, Samantha is clearly mystified at the entire thing:

    -
    Why has the conversation suddenly turned to focus on nothing more than ATP sponsorship income?
    -

    Because it’s a nit they can pick and allows them to ignore everything you wrote. That’s the only reason.

    -

    One guy is “confused”:

    -
    I see. He does have clout, so are you saying he’s too modest in how he sees himself as a dev?
    -
    Yes. He can’t be equated to the vast majority of other developers. Like calling Gruber, “just another blogger”.
    -
    Alright, that’s fair. I was just confused by the $ and fame angle at first.
    -

    Samantha’s point centers on the benefits Marco gains via his fame and background. HOW DO YOU NOT MENTION THAT? HOW IS THAT CONFUSING?

    -

    People of course are telling her it’s her fault for mentioning a salient fact at all:

    -
    Why has the conversation suddenly turned to focus on nothing more than ATP sponsorship income?
    -
    Maybe because you went there with your article?
    -
    As a way of rationalizing his ability to gamble with the potential for Overcast to generate income…not the norm at all.
    -

    Of course, had she not brought up those important points, she’d have been bagged on for “not providing proof”. Lose some, lose more. By now, she’s had enough and she just deletes all mention of it. Understandable, but sad she was bullied into doing that.

    -

    Yes, bullied. That’s all this is. Bullying. She didn’t lie, cheat, or exaagerate. If her numbers were wrong, they weren’t wrong in a way she had any ability to do anything about. But there’s blood in the water, and the comments and attacks get worse:

    -
    Because you decided to start a conversation about someone else’s personal shit. You started this war.
    -

    War. THIS. IS. WAR.

    -

    This is a bunch of nerds attacking someone for reasoned, calm, polite criticism of their friend/idol. Samantha is politely pushing back a bit:

    -
    That doesn’t explain why every other part of my article is being pushed aside.
    -

    She’s right. This is all nonsense. This is people ignoring her article completely, just looking for things to attack so it can be dismissed. It’s tribalism at its purest.

    -

    Then some of the other annointed get into it, including Jason Snell in one of the most spectactular displays of “I have special knowledge you can’t be expected to have, therefore you are totally off base and wrong, even though there’s no way for you to know this” I’ve seen in a while. Jason:

    -
    You should never use an ad rate card to estimate ad revenue from any media product ever.
    -
    I learned this when I started working for a magazine — rate cards are mostly fiction, like prices on new cars
    -

    How…exactly…in the name of whatever deity Jason may believe in…is Samantha or anyone not “in the biz” supposed to know this. Also, what exactly does a magazine on paper like Macworld have to do with sponsorships for a podcast? I have done podcasts that were sponsored, and I can retaliate with “we charged what the rate card said we did. Checkmate Elitests!

    -

    Samantha basically abases herself at his feet:

    -
    I understand my mistake, and it’s unfortunate that it has completely diluted the point of my article.
    -

    I think she should have told him where and how to stuff that nonsense, but she’s a nicer person than I am. Also, it’s appropriate that Jason’s twitter avatar has its nose in the air. This is some rank snobbery. It’s disgusting and if anyone pulled that on him, Jason would be very upset. But hey, one cannot criticize The Marco without getting pushback. By “pushback”, I mean “an unrelenting fecal flood”.

    -

    Her only mistake was criticizing one of the Kool Kids. Folks, if you criticize anyone in The Deck Clique, or their friends, expect the same thing, regardless of tone or point.

    -

    Another App Dev, seemingly unable to parse Samantha’s words, needs more explanation:

    -
    so just looking over your mentions, I’m curious what exactly was your main point? Ignoring the podcast income bits.
    -

    Oh wait, he didn’t even read the article. Good on you, Dev Guy, good. on. you. Still, she plays nice with someone who didn’t even read her article:

    -
    That a typical unknown developer can’t depend on patronage to generate revenue, and charging for apps will become a negative.
    -

    Marco comes back of course, and now basically accuses her of lying about other devs talking to her and supporting her point:

    -
    How many actual developers did you hear from, really? Funny how almost nobody wants to give a (real) name on these accusations.
    -

    Really? You’re going to do that? “There’s no name, so I don’t think it’s a real person.” Just…what’s the Joe Welch quote from the McCarthy hearings?

    -
    Let us not assassinate this lad further, Senator. You’ve done enough. Have you no sense of decency, sir? At long last, have you left no sense of decency?
    -

    That is what this is at this point: character assasination because she said something critical of A Popular Person. It’s disgusting. Depressing and disgusting. No one, none of these people have seriously discussed her point, heck, it looks like they barely bothered to read it, if they did at all.

    -

    Marco starts getting really petty with her (no big shock) and Samantha finally starts pushing back:

    -
    Glad to see you be the bigger person and ignore the mindset of so many developers not relating to you, good for you!
    -

    That of course, is what caused Marco to question the validity, if not the existence of her sources. (Funny how anonymous sources are totes okay when they convenience Marco et al, and work for oh, Apple, but when they are inconvenient? Ha! PROVIDE ME PROOF YOU INTEMPERATE WOMAN!)

    -

    Make no mistake, there’s some sexist shit going on here. Every tweet I’ve quoted was authored by a guy.

    -

    Of course, Marco has to play the “I’ve been around longer than you” card with this bon mot:

    -
    Yup, before you existed!
    -

    Really dude? I mean, I’m sorry about the penis, but really?

    -

    Mind you, when the criticism isn’t just bizarrely stupid, Samantha reacts the way Marco and his ilk claim they would to (if they ever got any valid criticism. Which clearly is impossible):

    -
    Not to get into the middle of this, but “income” is not the term you’re looking for. “Revenue” is.
    -
    lol. Noted.
    -
    And I wasn’t intending to be a dick, just a lot of people hear/say “income” when they intend “revenue”, and then discussion …
    -
    … gets derailed by a jedi handwave of “Expenses”. But outside of charitable donation, it is all directly related.
    -
    haha. Thank you for the clarification.
    -

    Note to Marco and the other…whatever they are…that is how one reacts to that kind of criticism. With a bit of humor and self-deprecation. You should try it sometime. For real, not just in your heads or conversations in Irish Pubs in S.F.

    -

    But now, the door has been cracked, and the cheap shots come out:

    -
    @testflight_app: Don’t worry guys, we process @marcoarment’s apps in direct proportion to his megabucks earnings. #fairelephant
    -

    (Note: testflight_app is a parody account. Please do not mess with the actual testflight folks. They are still cool.)

    -

    Or this…conversation:

    -
    -
    - - -
    +

    The response, from all quarters, including Marco, someone who is so sensitive to criticism that the word “useless” is enough to shut him down, who blocked a friend of mine for the high crime of pointing out that his review of podcasting mics centered around higher priced gear and ignored folks without the scratch, who might not be ready for such things, is, in a single word, disgusting. Vomitous even.

    +

    It’s an hours-long dogpile that beggars even my imagination, and I can imagine almost anything. Seriously, it’s all there in Samantha’s Twitter Feed. From what I can tell, she’s understandably shocked over it. I however was not. This one comment in her feed made me smile (warning, this wanders a bit…er…LOT. Twitter timelines are not easy to put together):

    +
    I can see why you have some reservations about publishing it, but my gut feeling is that he would take it better than Nilay.
    +

    Oh honey, bless your sweet, ignorant heart. Marco is one of the biggest pushers of The Big Lie, and one of the reasons it is such a lie.

    +

    But it gets better. First, you have the “hey, Marco earned his status!” lot. A valid point, and one Bielefeld explicitly acknowledges, here:

    +
    From his ground floor involvement in Tumblr (for which he is now a millionaire), to the creation and sale of a wildly successful app called Instapaper, he has become a household name in technology minded circles. It is this extensive time spent in the spotlight, the huge following on Twitter, and dedicated listeners of his weekly aired Accidental Tech Podcast, that has granted him the freedom to break from seeking revenue in more traditional manners.
    +

    and here:

    +
    I’m not knocking his success, he has put effort into his line of work, and has built his own life.
    +

    and here:

    +
    He has earned his time in the spotlight, and it’s only natural for him to take advantage of it.
    +

    But still, you get the people telling her something she already acknowledge:

    +
    I don’t think he’s blind. he’s worked to where he has gotten and has had failures like everyone else.
    +

    Thank you for restating something in the article. To the person who wrote it.

    +

    In the original article, Samantha talked about the money Marco makes from his podcast. She based that on the numbers provided by ATP in terms of sponsorship rates and the number of current sponsors the podcast has. Is this going to yield perfect numbers? No. But the numbers you get from it will at least be reasonable, or should be unless the published sponsorship rates are just fantasy, and you’re stupid for taking them seriously.

    +

    At first, she went with a simple formula:

    +
    $4K x 3 per episode = $12K x 52 weeks / 3 hosts splitting it.
    +

    That’s not someone making shit up, right? Rather quickly, someone pointed out that she’d made an error in how she calculated it:

    +
    That’s $4k per ad, no? So more like $12–16k per episode.
    +

    She’d already realized her mistake and fixed it.

    +
    which is actually wrong, and I’m correcting now. $4,000 per sponsor, per episode! So, $210,000 per year.
    +

    Again, this is based on publicly available data the only kind someone not part of ATP or a close friend of Arment has access to. So while her numbers may be wrong, if they are, there’s no way for her to know that. She’s basing her opinion on actual available data. Which is sadly rare.

    +

    This becomes a huge flashpoint. You name a reason to attack her over this, people do. No really. For example, she’s not calculating his income taxes correctly:

    +
    especially since it isn’t his only source of income thus, not an indicator of his marginal inc. tax bracket.
    +
    thus, guessing net income is more haphazard than stating approx. gross income.
    +

    Ye Gods. She’s not doing his taxes for him, her point is invalid?

    +

    Then there’s the people who seem to have not read anything past what other people are telling them:

    +
    Not sure what to make of your Marco piece, to be honest. You mention his fame, whatever, but what’s the main idea here?
    +

    Just how spoon-fed do you have to be? Have you no teeth?

    +

    Of course, Marco jumps in, and predictably, he’s snippy:

    +
    If you’re going to speak in precise absolutes, it’s best to first ensure that you’re correct.
    +

    If you’re going to be like that, it’s best to provide better data. Don’t get snippy when someone is going off the only data available, and is clearly open to revising based on better data.

    +

    Then Marco’s friends/fans get into it:

    +
    I really don’t understand why it’s anyone’s business
    +

    Samantha is trying to qualify for sainthood at this point:

    +
    It isn’t really, it was a way of putting his income in context in regards to his ability to gamble with Overcast.
    +

    Again, she’s trying to drag people back to her actual point, but no one is going to play. The storm has begun. Then we get people who are just spouting nonsense:

    +
    Why is that only relevant for him? It’s a pretty weird metric,especially since his apps aren’t free.
    +

    Wha?? Overcast 2 is absolutely free. Samantha points this out:

    +
    His app is free, that’s what sparked the article to begin with.
    +

    The response is literally a parallel to “How can there be global warming if it snowed today in my town?”

    +
    If it’s free, how have I paid for it? Twice?
    +

    She is still trying:

    +
    You paid $4.99 to unlock functionality in Overcast 1.0 and you chose to support him with no additional functionality in 2.0
    +

    He is having none of it. IT SNOWED! SNOWWWWWWW!

    +
    Yes. That’s not free. Free is when you choose not to make money. And that can be weaponized. But that’s not what Overcast does.
    +

    She however, is relentless:

    +
    No, it’s still free. You can choose to support it, you are required to pay $4.99 for Pocket Casts. Totally different model.
    +

    Dude seems to give up. (Note: allllll the people bagging on her are men. All of them. Mansplaining like hell. And I’d bet every one of them considers themselves a feminist.)

    +

    We get another guy trying to push the narrative she’s punishing him for his success, which is just…it’s stupid, okay? Stupid.

    +
    It also wasn’t my point in writing my piece today, but it seems to be everyone’s focus.
    +

    (UNDERSTATEMENT OF THE YEAR)

    +
    I think the focus should be more on that fact that while it’s difficult, Marco spent years building his audience.
    +
    It doesn’t matter what he makes it how he charges. If the audience be earned is willing to pay for it, awesome.
    +

    She tries, oh lord, she tries:

    +
    To assert that he isn’t doing anything any other dev couldn’t, is wrong. It’s successful because it’s Marco.
    +

    But no, HE KNOWS HER POINT BETTER THAN SHE DOES:

    +
    No, it’s successful because he busted his ass to make it so. It’s like any other business. He grew it.
    +

    Christ. This is like a field of strawmen. Stupid ones. Very stupid ones.

    +

    One guy tries to blame it all on Apple, another in a string of Wha??? moments:

    +
    the appropriate context is Apple’s App Store policies. Other devs aren’t Marco’s responsibility
    +

    Seriously? Dude, are you even trying to talk about what Samantha actually wrote? At this point, Samantha is clearly mystified at the entire thing:

    +
    Why has the conversation suddenly turned to focus on nothing more than ATP sponsorship income?
    +

    Because it’s a nit they can pick and allows them to ignore everything you wrote. That’s the only reason.

    +

    One guy is “confused”:

    +
    I see. He does have clout, so are you saying he’s too modest in how he sees himself as a dev?
    +
    Yes. He can’t be equated to the vast majority of other developers. Like calling Gruber, “just another blogger”.
    +
    Alright, that’s fair. I was just confused by the $ and fame angle at first.
    +

    Samantha’s point centers on the benefits Marco gains via his fame and background. HOW DO YOU NOT MENTION THAT? HOW IS THAT CONFUSING?

    +

    People of course are telling her it’s her fault for mentioning a salient fact at all:

    +
    Why has the conversation suddenly turned to focus on nothing more than ATP sponsorship income?
    +
    Maybe because you went there with your article?
    +
    As a way of rationalizing his ability to gamble with the potential for Overcast to generate income…not the norm at all.
    +

    Of course, had she not brought up those important points, she’d have been bagged on for “not providing proof”. Lose some, lose more. By now, she’s had enough and she just deletes all mention of it. Understandable, but sad she was bullied into doing that.

    +

    Yes, bullied. That’s all this is. Bullying. She didn’t lie, cheat, or exaagerate. If her numbers were wrong, they weren’t wrong in a way she had any ability to do anything about. But there’s blood in the water, and the comments and attacks get worse:

    +
    Because you decided to start a conversation about someone else’s personal shit. You started this war.
    +

    War. THIS. IS. WAR.

    +

    This is a bunch of nerds attacking someone for reasoned, calm, polite criticism of their friend/idol. Samantha is politely pushing back a bit:

    +
    That doesn’t explain why every other part of my article is being pushed aside.
    +

    She’s right. This is all nonsense. This is people ignoring her article completely, just looking for things to attack so it can be dismissed. It’s tribalism at its purest.

    +

    Then some of the other annointed get into it, including Jason Snell in one of the most spectactular displays of “I have special knowledge you can’t be expected to have, therefore you are totally off base and wrong, even though there’s no way for you to know this” I’ve seen in a while. Jason:

    +
    You should never use an ad rate card to estimate ad revenue from any media product ever.
    +
    I learned this when I started working for a magazine — rate cards are mostly fiction, like prices on new cars
    +

    How…exactly…in the name of whatever deity Jason may believe in…is Samantha or anyone not “in the biz” supposed to know this. Also, what exactly does a magazine on paper like Macworld have to do with sponsorships for a podcast? I have done podcasts that were sponsored, and I can retaliate with “we charged what the rate card said we did. Checkmate Elitests!

    +

    Samantha basically abases herself at his feet:

    +
    I understand my mistake, and it’s unfortunate that it has completely diluted the point of my article.
    +

    I think she should have told him where and how to stuff that nonsense, but she’s a nicer person than I am. Also, it’s appropriate that Jason’s twitter avatar has its nose in the air. This is some rank snobbery. It’s disgusting and if anyone pulled that on him, Jason would be very upset. But hey, one cannot criticize The Marco without getting pushback. By “pushback”, I mean “an unrelenting fecal flood”.

    +

    Her only mistake was criticizing one of the Kool Kids. Folks, if you criticize anyone in The Deck Clique, or their friends, expect the same thing, regardless of tone or point.

    +

    Another App Dev, seemingly unable to parse Samantha’s words, needs more explanation:

    +
    so just looking over your mentions, I’m curious what exactly was your main point? Ignoring the podcast income bits.
    +

    Oh wait, he didn’t even read the article. Good on you, Dev Guy, good. on. you. Still, she plays nice with someone who didn’t even read her article:

    +
    That a typical unknown developer can’t depend on patronage to generate revenue, and charging for apps will become a negative.
    +

    Marco comes back of course, and now basically accuses her of lying about other devs talking to her and supporting her point:

    +
    How many actual developers did you hear from, really? Funny how almost nobody wants to give a (real) name on these accusations.
    +

    Really? You’re going to do that? “There’s no name, so I don’t think it’s a real person.” Just…what’s the Joe Welch quote from the McCarthy hearings?

    +
    Let us not assassinate this lad further, Senator. You’ve done enough. Have you no sense of decency, sir? At long last, have you left no sense of decency?
    +

    That is what this is at this point: character assasination because she said something critical of A Popular Person. It’s disgusting. Depressing and disgusting. No one, none of these people have seriously discussed her point, heck, it looks like they barely bothered to read it, if they did at all.

    +

    Marco starts getting really petty with her (no big shock) and Samantha finally starts pushing back:

    +
    Glad to see you be the bigger person and ignore the mindset of so many developers not relating to you, good for you!
    +

    That of course, is what caused Marco to question the validity, if not the existence of her sources. (Funny how anonymous sources are totes okay when they convenience Marco et al, and work for oh, Apple, but when they are inconvenient? Ha! PROVIDE ME PROOF YOU INTEMPERATE WOMAN!)

    +

    Make no mistake, there’s some sexist shit going on here. Every tweet I’ve quoted was authored by a guy.

    +

    Of course, Marco has to play the “I’ve been around longer than you” card with this bon mot:

    +
    Yup, before you existed!
    +

    Really dude? I mean, I’m sorry about the penis, but really?

    +

    Mind you, when the criticism isn’t just bizarrely stupid, Samantha reacts the way Marco and his ilk claim they would to (if they ever got any valid criticism. Which clearly is impossible):

    +
    Not to get into the middle of this, but “income” is not the term you’re looking for. “Revenue” is.
    +
    lol. Noted.
    +
    And I wasn’t intending to be a dick, just a lot of people hear/say “income” when they intend “revenue”, and then discussion …
    +
    … gets derailed by a jedi handwave of “Expenses”. But outside of charitable donation, it is all directly related.
    +
    haha. Thank you for the clarification.
    +

    Note to Marco and the other…whatever they are…that is how one reacts to that kind of criticism. With a bit of humor and self-deprecation. You should try it sometime. For real, not just in your heads or conversations in Irish Pubs in S.F.

    +

    But now, the door has been cracked, and the cheap shots come out:

    +
    @testflight_app: Don’t worry guys, we process @marcoarment’s apps in direct proportion to his megabucks earnings. #fairelephant
    +

    (Note: testflight_app is a parody account. Please do not mess with the actual testflight folks. They are still cool.)

    +

    Or this…conversation:

    +
    +
    -

    Good job guys. Good job. Defend the tribe. Attack the other. Frederico attempts to recover from his stunning display of demeaning douchery: ‏@viticci: @s_bielefeld I don’t know if it’s an Italian thing, but counting other people’s money is especially weird for me. IMO, bad move in the post.

    -

    Samantha is clearly sick of his crap: ‏@s_bielefeld: @viticci That’s what I’m referring to, the mistake of ever having mentioned it. So, now, Marco can ignore the bigger issue and go on living.

    -

    Good for her. There’s being patient and being roadkill.

    -

    Samantha does put the call out for her sources to maybe let her use their names:

    -
    From all of you I heard from earlier, anyone care to go on record?
    -

    My good friend, The Angry Drunk points out the obvious problem:

    -
    Nobody’s going to go on record when they count on Marco’s friends for their PR.
    -

    This is true. Again, the sites that are Friends of Marco:

    -

    Daring Fireball

    -

    The Loop

    -

    SixColors

    -

    iMore

    -

    MacStories

    -

    A few others, but I want this post to end one day.

    -

    You piss that crew off, and given how petty rather a few of them have demonstrated they are, good luck on getting any kind of notice from them.

    -

    Of course, the idea this could happen is just craycray:

    -
    @KevinColeman .@Angry_Drunk @s_bielefeld @marcoarment Wow, you guys are veering right into crazy conspiracy theory territory. #JetFuelCantMeltSteelBeams
    -

    Yeah. Because a mature person like Marco would never do anything like that.

    -

    Of course, the real point on this is starting to happen:

    -
    you’re getting a lot of heat now but happy you are writing things that stir up the community. Hope you continue to be a voice!
    -
    I doubt I will.
    -

    See, they’ve done their job. Mess with the bull, you get the horns. Maybe you should find another thing to write about, this isn’t a good place for you. Great job y’all.

    -

    Some people aren’t even pretending. They’re just in full strawman mode:

    -
    @timkeller: Unfair to begrudge a person for leveraging past success, especially when that success is earned. No ‘luck’ involved.
    -
    @s_bielefeld: @timkeller I plainly stated that I don’t hold his doing this against him. Way to twist words.
    -

    I think she’s earned her anger at this point.

    -

    Don’t worry, Marco knows what the real problem is: most devs just suck —

    -
    -
    - - -
    +

    Good job guys. Good job. Defend the tribe. Attack the other. Frederico attempts to recover from his stunning display of demeaning douchery: ‏@viticci: @s_bielefeld I don’t know if it’s an Italian thing, but counting other people’s money is especially weird for me. IMO, bad move in the post.

    +

    Samantha is clearly sick of his crap: ‏@s_bielefeld: @viticci That’s what I’m referring to, the mistake of ever having mentioned it. So, now, Marco can ignore the bigger issue and go on living.

    +

    Good for her. There’s being patient and being roadkill.

    +

    Samantha does put the call out for her sources to maybe let her use their names:

    +
    From all of you I heard from earlier, anyone care to go on record?
    +

    My good friend, The Angry Drunk points out the obvious problem:

    +
    Nobody’s going to go on record when they count on Marco’s friends for their PR.
    +

    This is true. Again, the sites that are Friends of Marco:

    +

    Daring Fireball

    +

    The Loop

    +

    SixColors

    +

    iMore

    +

    MacStories

    +

    A few others, but I want this post to end one day.

    +

    You piss that crew off, and given how petty rather a few of them have demonstrated they are, good luck on getting any kind of notice from them.

    +

    Of course, the idea this could happen is just craycray:

    +
    @KevinColeman .@Angry_Drunk @s_bielefeld @marcoarment Wow, you guys are veering right into crazy conspiracy theory territory. #JetFuelCantMeltSteelBeams
    +

    Yeah. Because a mature person like Marco would never do anything like that.

    +

    Of course, the real point on this is starting to happen:

    +
    you’re getting a lot of heat now but happy you are writing things that stir up the community. Hope you continue to be a voice!
    +
    I doubt I will.
    +

    See, they’ve done their job. Mess with the bull, you get the horns. Maybe you should find another thing to write about, this isn’t a good place for you. Great job y’all.

    +

    Some people aren’t even pretending. They’re just in full strawman mode:

    +
    @timkeller: Unfair to begrudge a person for leveraging past success, especially when that success is earned. No ‘luck’ involved.
    +
    @s_bielefeld: @timkeller I plainly stated that I don’t hold his doing this against him. Way to twist words.
    +

    I think she’s earned her anger at this point.

    +

    Don’t worry, Marco knows what the real problem is: most devs just suck —

    +
    +
    -

    I have a saying that applies in this case: don’t place your head so far up your nethers that you go full Klein Bottle. Marco has gone full Klein Bottle. (To be correct, he went FKB some years ago.)

    -

    There are some bright spots. My favorite is when Building Twenty points out the real elephant in the room:

    -
    @BuildingTwenty: Both @s_bielefeld & I wrote similar critiques of @marcoarment’s pricing model yet the Internet pilloried only the woman. Who’d have guessed?
    -

    Yup.

    -

    Another bright spot are these comments from Ian Betteridge, who has been doing this even longer than Marco:

    -
    You know, any writer who has never made a single factual error in a piece hasn’t ever written anything worth reading.
    -
    I learned my job with the support of people who helped me. Had I suffered an Internet pile on for every error I wouldn’t have bothered.
    -

    To which Samantha understandably replies:

    -
    and it’s honestly something I’m contemplating right now, whether to continue…
    -

    Gee, I can’t imagine why. Why with comments like this from Chris Breen that completely misrepresent Samantha’s point, (who until today, I would have absolutely defended as being better than this, something I am genuinely saddened to be wrong about), why wouldn’t she want to continue doing this?

    -
    If I have this right, some people are outraged that a creator has decided to give away his work.
    -

    No Chris, you don’t have this right. But hey, who has time to find out the real issue and read an article. I’m sure your friends told you everything you need to know.

    -

    Noted Feminist Glenn Fleishman gets a piece of the action too:

    -
    -
    - - -
    +

    I have a saying that applies in this case: don’t place your head so far up your nethers that you go full Klein Bottle. Marco has gone full Klein Bottle. (To be correct, he went FKB some years ago.)

    +

    There are some bright spots. My favorite is when Building Twenty points out the real elephant in the room:

    +
    @BuildingTwenty: Both @s_bielefeld & I wrote similar critiques of @marcoarment’s pricing model yet the Internet pilloried only the woman. Who’d have guessed?
    +

    Yup.

    +

    Another bright spot are these comments from Ian Betteridge, who has been doing this even longer than Marco:

    +
    You know, any writer who has never made a single factual error in a piece hasn’t ever written anything worth reading.
    +
    I learned my job with the support of people who helped me. Had I suffered an Internet pile on for every error I wouldn’t have bothered.
    +

    To which Samantha understandably replies:

    +
    and it’s honestly something I’m contemplating right now, whether to continue…
    +

    Gee, I can’t imagine why. Why with comments like this from Chris Breen that completely misrepresent Samantha’s point, (who until today, I would have absolutely defended as being better than this, something I am genuinely saddened to be wrong about), why wouldn’t she want to continue doing this?

    +
    If I have this right, some people are outraged that a creator has decided to give away his work.
    +

    No Chris, you don’t have this right. But hey, who has time to find out the real issue and read an article. I’m sure your friends told you everything you need to know.

    +

    Noted Feminist Glenn Fleishman gets a piece of the action too:

    +
    +
    -

    I’m not actually surprised here. I watched Fleishman berate a friend of mine who has been an engineer for…heck, waaaaay too long on major software products in the most condescending way because she tried to point out that as a very technical woman, “The Magazine” literally had nothing to say to her and maybe he should fix that. “Impertinent” was I believe what he called her, but I may have the specific word wrong. Not the attitude mind you. Great Feminists like Glenn do not like uppity women criticizing Great Feminists who are their Great Allies.

    -

    Great Feminists are often tools.

    +

    I’m not actually surprised here. I watched Fleishman berate a friend of mine who has been an engineer for…heck, waaaaay too long on major software products in the most condescending way because she tried to point out that as a very technical woman, “The Magazine” literally had nothing to say to her and maybe he should fix that. “Impertinent” was I believe what he called her, but I may have the specific word wrong. Not the attitude mind you. Great Feminists like Glenn do not like uppity women criticizing Great Feminists who are their Great Allies.

    +

    Great Feminists are often tools.

    -
    -

    Luckily, I hope, the people who get Samantha’s point also started chiming in (and you get 100% of the women commenting here that I’ve seen):

    -
    I don’t think he’s wrong for doing it, he just discusses it as if the market’s a level playing field — it isn’t
    -
    This is a great article with lots of great points about the sustainability of iOS development. Thank you for publishing it.
    -
    Regardless of the numbers and your view of MA, fair points here about confirmation bias in app marketing feasibility http://samanthabielefeld.com/the-elephant-in-the-room …
    -
    thank you for posting this, it covers a lot of things people don’t like to talk about.
    -
    I’m sure you have caught untold amounts of flak over posting this because Marco is blind to his privilege as a developer.
    -
    Catching up on the debate, and agreeing with Harry’s remark. (Enjoyed your article, Samantha, and ‘got’ your point.)
    +

    Luckily, I hope, the people who get Samantha’s point also started chiming in (and you get 100% of the women commenting here that I’ve seen):

    +
    I don’t think he’s wrong for doing it, he just discusses it as if the market’s a level playing field — it isn’t
    +
    This is a great article with lots of great points about the sustainability of iOS development. Thank you for publishing it.
    +
    Regardless of the numbers and your view of MA, fair points here about confirmation bias in app marketing feasibility http://samanthabielefeld.com/the-elephant-in-the-room …
    +
    thank you for posting this, it covers a lot of things people don’t like to talk about.
    +
    I’m sure you have caught untold amounts of flak over posting this because Marco is blind to his privilege as a developer.
    +
    Catching up on the debate, and agreeing with Harry’s remark. (Enjoyed your article, Samantha, and ‘got’ your point.)
    -
    -

    I would like to say I’m surprised at the reaction to Samantha’s article, but I’m not. In spite of his loud declarations of support for The Big Lie, Marco Arment is as bad at any form of criticism that he hasn’t already approved as a very insecure tween. An example from 2011: http://www.businessinsider.com/marco-arment-2011-9

    -

    Marco is great with criticism as long as it never actually criticizes him. If it does, be prepared a flood of petty, petulant whining that a room full of bored preschoolers on a hot day would be hard-pressed to match.

    -

    Today has been…well, it sucks. It sucks because someone doing what all the Arments of the world claim to want was naive enough to believe what they were told, and found out the hard way just how big a lie The Big Lie is, and how vicious people are when you’re silly enough to believe anything they say about criticism.

    -

    And note again, every single condescending crack, misrepresentation, and strawman had an exclusively male source. Most of them have, at one point or another, loudly trumpted themselves as Feminist Allies, as a friend to women struggling with the sexism and misogyny in tech. Congratulations y’all on being just as bad as the people you claim to oppose.

    -

    Samantha has handled this better than anyone else could have. My respect for her as a person and a writer is off the charts. If she choses to walk away from blogging in the Apple space, believe me I understand. As bad as today was for her, I’ve seen worse. Much worse.

    -

    But I hope she doesn’t. I hope she stays, because she is Doing This Right, and in a corner of the internet that has become naught but an endless circle jerk, a cliquish collection, a churlish, childish cohort interested not in writing or the truth, but in making sure The Right People are elevated, and The Others put down, she is someone worth reading and listening to. The number people who owe her apologies goes around the block, and I don’t think she’ll ever see a one. I’m sure as heck not apologizing for them, I’ll not make their lives easier in the least.

    -

    All of you, all. of. you…Marco, Breen, Snell, Vittici, had a chance to live by your words. You were faced with reasoned, polite, respectful criticism and instead of what you should have done, you all dropped trou and sprayed an epic diarrheal discharge all over someone who had done nothing to deserve it. Me, I earned most of my aggro, Samantha did not earn any of the idiocy I’ve seen today. I hope you’re all proud of yourselves. Someone should be, it won’t be me. Ever.

    -

    So I hope she stays, but if she goes, I understand. For what it’s worth, I don’t think she’s wrong either way.

    +

    I would like to say I’m surprised at the reaction to Samantha’s article, but I’m not. In spite of his loud declarations of support for The Big Lie, Marco Arment is as bad at any form of criticism that he hasn’t already approved as a very insecure tween. An example from 2011: http://www.businessinsider.com/marco-arment-2011-9

    +

    Marco is great with criticism as long as it never actually criticizes him. If it does, be prepared a flood of petty, petulant whining that a room full of bored preschoolers on a hot day would be hard-pressed to match.

    +

    Today has been…well, it sucks. It sucks because someone doing what all the Arments of the world claim to want was naive enough to believe what they were told, and found out the hard way just how big a lie The Big Lie is, and how vicious people are when you’re silly enough to believe anything they say about criticism.

    +

    And note again, every single condescending crack, misrepresentation, and strawman had an exclusively male source. Most of them have, at one point or another, loudly trumpted themselves as Feminist Allies, as a friend to women struggling with the sexism and misogyny in tech. Congratulations y’all on being just as bad as the people you claim to oppose.

    +

    Samantha has handled this better than anyone else could have. My respect for her as a person and a writer is off the charts. If she choses to walk away from blogging in the Apple space, believe me I understand. As bad as today was for her, I’ve seen worse. Much worse.

    +

    But I hope she doesn’t. I hope she stays, because she is Doing This Right, and in a corner of the internet that has become naught but an endless circle jerk, a cliquish collection, a churlish, childish cohort interested not in writing or the truth, but in making sure The Right People are elevated, and The Others put down, she is someone worth reading and listening to. The number people who owe her apologies goes around the block, and I don’t think she’ll ever see a one. I’m sure as heck not apologizing for them, I’ll not make their lives easier in the least.

    +

    All of you, all. of. you…Marco, Breen, Snell, Vittici, had a chance to live by your words. You were faced with reasoned, polite, respectful criticism and instead of what you should have done, you all dropped trou and sprayed an epic diarrheal discharge all over someone who had done nothing to deserve it. Me, I earned most of my aggro, Samantha did not earn any of the idiocy I’ve seen today. I hope you’re all proud of yourselves. Someone should be, it won’t be me. Ever.

    +

    So I hope she stays, but if she goes, I understand. For what it’s worth, I don’t think she’s wrong either way.

    -
    + \ No newline at end of file diff --git a/test/test-pages/mozilla-1/expected.html b/test/test-pages/mozilla-1/expected.html index 0cab64d..bd42c28 100644 --- a/test/test-pages/mozilla-1/expected.html +++ b/test/test-pages/mozilla-1/expected.html @@ -1,55 +1,51 @@
    -
    -
    +
    +
    -

    It’s easier than ever to personalize Firefox and make it work the way you do. -
    No other browser gives you so much choice and flexibility.

    -
    +

    It’s easier than ever to personalize Firefox and make it work the way you do.
    No other browser gives you so much choice and flexibility.

    +
    -
    +
    -
    +

    Designed to
    be redesigned

    -

    Get fast and easy access to the features you use most in the new menu. Open the “Customize” panel to add, move or remove any button you want. Keep your favorite features — add-ons, private browsing, Sync and more — one quick click away.

    -
    +

    Get fast and easy access to the features you use most in the new menu. Open the “Customize” panel to add, move or remove any button you want. Keep your favorite features — add-ons, private browsing, Sync and more — one quick click away.

    +
    -
    -
    -
    +
    +
    +

    Themes

    -

    Make Firefox match your style. Choose from thousands of themes and dress up your browser with a single click.

    - Try it now -
    Learn more
    Next -
    Preview of the currently selected theme
    +

    Make Firefox match your style. Choose from thousands of themes and dress up your browser with a single click.

    Try it now
    Learn more
    Next +
    Preview of the currently selected theme
    -
    +
    -

    Add-ons

    Next +

    Add-ons

    Next

    Add-ons are like apps that you install to add features to Firefox. They let you compare prices, check the weather, listen to music, send a tweet and more.

    • Read the latest news & blogs
    • Manage your downloads
    • Watch videos & view photos
    • -
    Here are a few of our favorites -
    Learn more
    -
    + Here are a few of our favorites
    Learn more
    +
    -
    +
    -

    Awesome Bar

    Next -

    The Awesome Bar learns as you browse to make your version of Firefox unique. Find and return to your favorite sites without having to remember a URL.

    See what it can do for you
    -
    Firefox Awesome Bar
    +

    Awesome Bar

    Next +

    The Awesome Bar learns as you browse to make your version of Firefox unique. Find and return to your favorite sites without having to remember a URL.

    See what it can do for you
    +
    Firefox Awesome Bar
    -
    +
    - + \ No newline at end of file diff --git a/test/test-pages/nytimes-1/expected.html b/test/test-pages/nytimes-1/expected.html index 01fa8b4..d4bdcd2 100644 --- a/test/test-pages/nytimes-1/expected.html +++ b/test/test-pages/nytimes-1/expected.html @@ -1,16 +1,12 @@
    -
    - Photo -
    +
    Photo +
    - -
    -
    - United Nations peacekeepers at a refugee camp in Sudan on Monday. In exchange for the lifting of United States trade sanctions, Sudan has said it will improve access for aid groups, stop supporting rebels in neighboring South Sudan and cooperate with American intelligence agents. - - Credit Ashraf Shazly/Agence France-Presse — Getty Images +
    +
    United Nations peacekeepers at a refugee camp in Sudan on Monday. In exchange for the lifting of United States trade sanctions, Sudan has said it will improve access for aid groups, stop supporting rebels in neighboring South Sudan and cooperate with American intelligence agents. + Credit Ashraf Shazly/Agence France-Presse — Getty Images

    LONDON — After nearly 20 years of hostile relations, the American government plans to reverse its position on Sudan and lift trade sanctions, Obama administration officials said late Thursday.

    @@ -18,7 +14,7 @@

    On Friday, the Obama administration will announce a new Sudan strategy. For the first time since the 1990s, the nation will be able to trade extensively with the United States, allowing it to buy goods like tractors and spare parts and attract much-needed investment in its collapsing economy.

    In return, Sudan will improve access for aid groups, stop supporting rebels in neighboring South Sudan, cease the bombing of insurgent territory and cooperate with American intelligence agents.

    American officials said Sudan had already shown important progress on a number of these fronts. But to make sure the progress continues, the executive order that President Obama plans to sign on Friday, days before leaving office, will have a six-month review period. If Sudan fails to live up to its commitments, the embargo can be reinstated.

    -

    Analysts said good relations with Sudan could strengthen moderate voices within the country and give the Sudanese government incentives to refrain from the brutal tactics that have defined it for decades.

    +

    Analysts said good relations with Sudan could strengthen moderate voices within the country and give the Sudanese government incentives to refrain from the brutal tactics that have defined it for decades.

    In 1997, President Bill Clinton imposed a comprehensive trade embargo against Sudan and blocked the assets of the Sudanese government, which was suspected of sponsoring international terrorism. In the mid-1990s, Osama bin Laden lived in Khartoum, the capital, as a guest of Sudan’s government.

    In 1998, Bin Laden’s agents blew up the United States Embassies in Kenya and Tanzania, killing more than 200 people. In retaliation, Mr. Clinton ordered a cruise missile strike against a pharmaceutical factory in Khartoum.

    Since then, American-Sudanese relations have steadily soured. The conflict in Darfur, a vast desert region of western Sudan, was a low point. After rebels in Darfur staged an uprising in 2003, Sudanese security services and their militia allies slaughtered tens of thousands of civilians, leading to condemnation around the world, genocide charges at the International Criminal Court against Sudan’s president, Omar Hassan al-Bashir, and a new round of American sanctions.

    @@ -26,13 +22,12 @@

    Sales of military equipment will still be prohibited, and some Sudanese militia and rebel leaders will still face sanctions.

    But the Obama administration is clearly trying to open a door to Sudan. There is intense discontent across the country, and its economy is imploding. American officials have argued for years that it was time to help Sudan dig itself out of the hole it had created.

    Officials divulged Thursday that the Sudanese government had allowed two visits by American operatives to a restricted border area near Libya, which they cited as evidence of a new spirit of cooperation on counterterrorism efforts.

    -

    In addition to continuing violence in Darfur, several other serious conflicts are raging in southern and central Sudan, along with a civil war in newly independent South Sudan, which Sudan has been suspected of inflaming with covert arms shipments.

    +

    In addition to continuing violence in Darfur, several other serious conflicts are raging in southern and central Sudan, along with a civil war in newly independent South Sudan, which Sudan has been suspected of inflaming with covert arms shipments.

    Eric Reeves, one of the leading American academic voices on Sudan, said he was “appalled” that the American government was lifting sanctions.

    He said that Sudan’s military-dominated government continued to commit grave human rights abuses and atrocities, and he noted that just last week Sudanese security services killed more than 10 civilians in Darfur.

    “There is no reason to believe the guys in charge have changed their stripes,” said Mr. Reeves, a senior fellow at the François-Xavier Bagnoud Center for Health and Human Rights at Harvard University. “These guys are the worst of the worst.”

    Obama administration officials said that they had briefed President-elect Donald J. Trump’s transition team, but that they did not know if Mr. Trump would stick with a policy of warmer relations with Sudan.

    They said that Sudan had a long way to go in terms of respecting human rights, but that better relations could help increase American leverage.

    -

    Mr. Reeves said he thought that the American government was being manipulated and that the Obama administration had made a “deal with the devil.”

    Continue reading the main story -
    +

    Mr. Reeves said he thought that the American government was being manipulated and that the Obama administration had made a “deal with the devil.”

    Continue reading the main story
    - + \ No newline at end of file diff --git a/test/test-pages/nytimes-2/expected.html b/test/test-pages/nytimes-2/expected.html index 7f02455..fd685be 100644 --- a/test/test-pages/nytimes-2/expected.html +++ b/test/test-pages/nytimes-2/expected.html @@ -1,30 +1,23 @@
    -
    - Photo -
    - - +
    Photo +
    - -
    -
    - +
    +
    Credit Harry Campbell

    Yahoo’s $4.8 billion sale to Verizon is a complicated beast, showing how different acquisition structures can affect how shareholders are treated.

    First, let’s say what the Yahoo sale is not. It is not a sale of the publicly traded company. Instead, it is a sale of the Yahoo subsidiary and some related assets to Verizon.

    The sale is being done in two steps. The first step will be the transfer of any assets related to Yahoo business to a singular subsidiary. This includes the stock in the business subsidiaries that make up Yahoo that are not already in the single subsidiary, as well as the odd assets like benefit plan rights. This is what is being sold to Verizon. A license of Yahoo’s oldest patents is being held back in the so-called Excalibur portfolio. This will stay with Yahoo, as will Yahoo’s stakes in Alibaba Group and Yahoo Japan.

    -

    It is hard to overestimate how complex an asset sale like this is. Some of the assets are self-contained, but they must be gathered up and transferred. Employees need to be shuffled around and compensation arrangements redone. Many contracts, like the now-infamous one struck with the search engine Mozilla, which may result in a payment of up to a $1 billion, will contain change-of-control provisions that will be set off and have to be addressed. Tax issues always loom large.

    Continue reading the main story -
    +

    It is hard to overestimate how complex an asset sale like this is. Some of the assets are self-contained, but they must be gathered up and transferred. Employees need to be shuffled around and compensation arrangements redone. Many contracts, like the now-infamous one struck with the search engine Mozilla, which may result in a payment of up to a $1 billion, will contain change-of-control provisions that will be set off and have to be addressed. Tax issues always loom large.

    Continue reading the main story
    -

    In the second step, at the closing, Yahoo will sell the stock in the single subsidiary to Verizon. At that point, Yahoo will change its name to something without “Yahoo” in it. My favorite is simply Remain Co., the name Yahoo executives are using. Remain Co. will become a holding company for the Alibaba and Yahoo Japan stock. Included will also be $10 billion in cash, plus the Excalibur patent portfolio and a number of minority investments including Snapchat. Ahh, if only Yahoo had bought Snapchat instead of Tumblr (indeed, if only Yahoo had bought Google or Facebook when it had the chance).

    - -

    Because it is a sale of a subsidiary, the $4.8 billion will be paid to Yahoo. Its shareholders will not receive any money unless Yahoo pays it out in a dividend (after paying taxes). Instead, Yahoo shareholders will be left holding shares in the renamed company.

    +

    In the second step, at the closing, Yahoo will sell the stock in the single subsidiary to Verizon. At that point, Yahoo will change its name to something without “Yahoo” in it. My favorite is simply Remain Co., the name Yahoo executives are using. Remain Co. will become a holding company for the Alibaba and Yahoo Japan stock. Included will also be $10 billion in cash, plus the Excalibur patent portfolio and a number of minority investments including Snapchat. Ahh, if only Yahoo had bought Snapchat instead of Tumblr (indeed, if only Yahoo had bought Google or Facebook when it had the chance).

    +

    Because it is a sale of a subsidiary, the $4.8 billion will be paid to Yahoo. Its shareholders will not receive any money unless Yahoo pays it out in a dividend (after paying taxes). Instead, Yahoo shareholders will be left holding shares in the renamed company.

    Verizon’s Yahoo will then be run under the same umbrella as AOL. It is unclear whether there will be a further merger of the two businesses after the acquisition. Plans for Yahoo are still a bit in flux in part because of the abnormal sale process.

    As for Remain Co., it will become a so-called investment company. This is a special designation for a company that holds securities for investment but does not operate a working business. Investment companies are subject to special regulation under the Investment Company Act of 1940. Remain Co. will probably just sit there, returning cash to shareholders and waiting for Alibaba to buy it in a tax-free transaction. (Alibaba says it has no plans to do this, but most people do not believe this).

    The rights of Yahoo shareholders in this sale will be different from those in an ordinary sale, when an entire company is bought.

    @@ -32,14 +25,12 @@

    In either case, shareholders get a say. They either vote on the merger or decide whether to tender into the offer.

    In both cases, there would be appraisal rights if the buyer pays cash. This means that shareholders can object to the deal by not voting for it or not tendering into the offer and instead asking a court to value their shares – this is what happened in Dell’s buyout in 2013.

    The Yahoo deal, however, is not a sale of the public company. It is an asset sale, in which there is only a shareholder vote if there is a sale of “all” or “substantially all” of the assets of the company. Yahoo is not all of the assets or even “substantially all” – the Alibaba shares being left behind in Remain Co. are worth about $28 billion, or six times the value of the cash Verizon is paying for the Yahoo assets it is buying.

    - -

    The courts have held that the definition of “substantially all” includes a change of business in a company because of an asset sale where the assets are “qualitatively vital.” And that certainly applies here. So there will be a vote – indeed, Yahoo has no problem with a vote – and shareholders are desperate to sell at this point.

    +

    The courts have held that the definition of “substantially all” includes a change of business in a company because of an asset sale where the assets are “qualitatively vital.” And that certainly applies here. So there will be a vote – indeed, Yahoo has no problem with a vote – and shareholders are desperate to sell at this point.

    There will be no appraisal rights, however. Again, in an asset sale, there are no appraisal rights. So anyone who votes against the deal and thinks this is a bum price is out of luck.

    The different standards for voting and appraisal rights apply because the structure of the deal is a quirk of the law in Delaware, where Yahoo is incorporated, that allows lawyers to sometimes work around these issues simply by changing the way a deal is done.

    In Yahoo’s case, this is not deliberate, though. It is simply the most expedient way to get rid of the assets.

    Whether this is the most tax-efficient way is unclear to me as a nontax lawyer (email me if you know). Yahoo is likely to have a tax bill on the sale, possibly a substantial one. And I presume there were legal reasons for not using a Morris Trust structure, in which Yahoo would have been spun off and immediately sold to Verizon so that only Yahoo’s shareholders paid tax on the deal. In truth, the Yahoo assets being sold are only about 10 percent of the value of the company, so the time and logistics for such a sale when Yahoo is a melting ice cube may not have been worth it.

    Finally, if another bidder still wants to acquire Yahoo, it has time. The agreement with Verizon allows Yahoo to terminate the deal and accept a superior offer by paying a $144 million breakup fee to Verizon. And if Yahoo shareholders change their minds and want to stick with Yahoo’s chief executive, Marissa Mayer, and vote down the deal, there is a so-called naked no-vote termination fee of $15 million payable to Verizon to reimburse expenses.

    -

    All in all, this was as hairy a deal as they come. There was the procedural and logistical complications of selling a company when the chief executive wanted to stay. Then there was the fact that this was an asset sale, including all of the challenges that go with it. Throw in all of the tax issues and the fact that this is a public company, and it is likely that the lawyers involved will have nightmares for years to come.

    Continue reading the main story -
    +

    All in all, this was as hairy a deal as they come. There was the procedural and logistical complications of selling a company when the chief executive wanted to stay. Then there was the fact that this was an asset sale, including all of the challenges that go with it. Throw in all of the tax issues and the fact that this is a public company, and it is likely that the lawyers involved will have nightmares for years to come.

    Continue reading the main story
    - + \ No newline at end of file diff --git a/test/test-pages/pixnet/expected.html b/test/test-pages/pixnet/expected.html index 0f8552f..f20402e 100644 --- a/test/test-pages/pixnet/expected.html +++ b/test/test-pages/pixnet/expected.html @@ -1,8 +1,6 @@
    -
    -

    - 12-IMG_3886.jpg -

    +
    +

    12-IMG_3886.jpg

    一波波接續性低溫寒流報到 已將新竹尖石鄉後山一帶層層山巒披上嫣紅的彩衣

    玉峰道路一路上雲氣山嵐滯留山頭 順路下切蜿蜒道路後不久即抵達來到"玉峰國小" @@ -31,13 +29,9 @@

    每年12月向來是攝影班外拍的絕佳場所之一 楓紅期間入園費$50元

    園區給愛攝一族淨空場景而不是散搭帳蓬之下反而影響拍照畫面與構圖取景

    露營的話則須待中午過後再進場搭帳的彈性做法個人也相當支持這樣的權宜之計

    -

    - P1610088.jpg -

    +

    P1610088.jpg

    來到現場已是落葉飄飄堆疊滿地 不時隨著風吹雨襲而葉落垂地

    -

    - P1610069.jpg -

    +

    P1610069.jpg

    不忍踩過剛剛掉落的樹葉 沿著前人足跡踏痕輕踩而行

    雖然只是一廂情願的想法 終究還是不可避免地將會化為塵土

    02-P1610080.jpg

    @@ -77,15 +71,11 @@

    44-P1610283.jpg

    美樹民宿有開設餐廳 室內簡單佈置提供伙食餐飲

    -

    - P1610212.jpg -

    +

    P1610212.jpg

    這兩間是民宿房間 跟著民宿主人"簍信"聊起來還提到日後將改變成兩層木屋

    一樓則是咖啡飲料/賣店提供訪客來賓有個落腳席座之地 二樓才會是民宿房間

    心中有了計畫想法才會有日後的夢想藍圖 相信將會改變得更好的民宿露營環境

    -

    - P1610219.jpg -

    +

    P1610219.jpg

    民宿前這一大區楓香林為土質營位 大致區分前、後兩個營區

    前面這一區約可搭上十二帳/車/廳 後面那區也大約4~5帳/車/廳

    正前方小木屋即是衛浴區 男女分別以左右兩側分開(燒材鍋爐) @@ -112,7 +102,6 @@

    25-IMG_4152.jpg

    入夜前雨絲終於漸漸緩和下來 雖然氣溫很低卻沒感受到寒冷的跡象

    是山谷中少了寒氣還是美樹營區裡的人熱情洋溢暖化了不少寒意

    -

    IMG_4158.jpg

    聖誕前夕裝點些聖誕飾品 感受一下節慶的氛圍

    26-P1610261.jpg

    @@ -127,9 +116,7 @@

    29-IMG_4188.jpg

    隔日睡到很晚才起床 不用拍日出晨光的營地對我來說都是個幸福的睡眠

    哪怕是葉落飄零落滿地還是睡夢周公召見而去 起床的事~差點都忘記了

    -

    - IMG_4205.jpg -

    +

    IMG_4205.jpg

    昨天細雨紛飛依然打落了不少落葉中間這株整個都快變成枯枝了

    昨天依稀凋零稀疏的楓葉殘留今兒個完全不復存在(上周是最美的代名詞)

    33-IMG_4255.jpg

    @@ -145,9 +132,7 @@

    星期天早上趁著攝影團還沒入場先來人物場景特寫

    野馬家兩張新"座椅"就當作是試坐囉!拍謝哩

    38-IMG_4330.jpg

    -

    - P1610279.jpg -

    +

    P1610279.jpg

    難得有此無人美景在楓樹下的聖誕氛圍也一定要來一張才行

    37-IMG_4323.jpg

    三家合照(Hero也一定要入鏡的)

    @@ -187,4 +172,4 @@

    -
    +
    \ No newline at end of file diff --git a/test/test-pages/qq/expected.html b/test/test-pages/qq/expected.html index f4f7aa5..d1f580a 100644 --- a/test/test-pages/qq/expected.html +++ b/test/test-pages/qq/expected.html @@ -1,11 +1,10 @@
    -
    +
    -

    转播到腾讯微博

    DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶 -
    +

    转播到腾讯微博

    DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶

    TNW中文站 10月14日报道

    -

    谷歌(微博) 在2014年收购的人工智能公司DeepMind开发出一款能够用自己的记忆学习新知识并利用这些知识来回答问题的计算机。

    +

    谷歌(微博) 在2014年收购的人工智能公司DeepMind开发出一款能够用自己的记忆学习新知识并利用这些知识来回答问题的计算机。

    这款产品具有极其重要的意义,因为这意味着未来的人工智能技术可能不需要人类来教它就能回答人类提出的问题。

    DeepMind表示,这款名为DNC(可微神经计算机)的AI模型可以接受家谱和伦敦地铁网络地图这样的信息,还可以回答与那些数据结构中的不同项目之间的关系有关的复杂问题。

    例如,它可以回答“从邦德街开始,沿着中央线坐一站,环线坐四站,然后转朱比利线坐两站,你会到达哪个站?”这样的问题。

    @@ -18,7 +17,7 @@

    -
    +

    转播到腾讯微博

    @@ -29,4 +28,4 @@

    【美国The Next Web作品的中文相关权益归腾讯公司独家所有。未经授权,不得转载、摘编等。】

    -
    +
    \ No newline at end of file diff --git a/test/test-pages/reordering-paragraphs/expected.html b/test/test-pages/reordering-paragraphs/expected.html index f7c951b..cfbe15c 100644 --- a/test/test-pages/reordering-paragraphs/expected.html +++ b/test/test-pages/reordering-paragraphs/expected.html @@ -1,5 +1,4 @@
    -

    Regarding item# 11111, under sufficiently extreme conditions, quarks may become deconfined and exist as free particles. In the course of asymptotic freedom, the strong interaction becomes weaker at higher temperatures. Eventually, color confinement would be lost and an extremely hot plasma of freely moving quarks and gluons would be formed. This theoretical phase of matter is called quark-gluon plasma.[81] The exact conditions needed to give rise to this state are unknown and have been the subject of a great deal of speculation and experimentation.

    -

    Regarding item# 22222, under sufficiently extreme conditions, quarks may become deconfined and exist as free particles. In the course of asymptotic freedom, the strong interaction becomes weaker at higher temperatures. Eventually, color confinement would be lost and an extremely hot plasma of freely moving quarks and gluons would be formed. This theoretical phase of matter is called quark-gluon plasma.[81] The exact conditions needed to give rise to this state are unknown and have been the subject of a great deal of speculation and experimentation.

    -

    Regarding item# 33333, under sufficiently extreme conditions, quarks may become deconfined and exist as free particles. In the course of asymptotic freedom, the strong interaction becomes weaker at higher temperatures. Eventually, color confinement would be lost and an extremely hot plasma of freely moving quarks and gluons would be formed. This theoretical phase of matter is called quark-gluon plasma.[81] The exact conditions needed to give rise to this state are unknown and have been the subject of a great deal of speculation and experimentation.

    -
    \ No newline at end of file +

    Regarding item# 11111, under sufficiently extreme conditions, quarks may become deconfined and exist as free particles. In the course of asymptotic freedom, the strong interaction becomes weaker at higher temperatures. Eventually, color confinement would be lost and an extremely hot plasma of freely moving quarks and gluons would be formed. This theoretical phase of matter is called quark-gluon plasma.[81] The exact conditions needed to give rise to this state are unknown and have been the subject of a great deal of speculation and experimentation.

    +

    Regarding item# 22222, under sufficiently extreme conditions, quarks may become deconfined and exist as free particles. In the course of asymptotic freedom, the strong interaction becomes weaker at higher temperatures. Eventually, color confinement would be lost and an extremely hot plasma of freely moving quarks and gluons would be formed. This theoretical phase of matter is called quark-gluon plasma.[81] The exact conditions needed to give rise to this state are unknown and have been the subject of a great deal of speculation and experimentation.

    +

    Regarding item# 33333, under sufficiently extreme conditions, quarks may become deconfined and exist as free particles. In the course of asymptotic freedom, the strong interaction becomes weaker at higher temperatures. Eventually, color confinement would be lost and an extremely hot plasma of freely moving quarks and gluons would be formed. This theoretical phase of matter is called quark-gluon plasma.[81] The exact conditions needed to give rise to this state are unknown and have been the subject of a great deal of speculation and experimentation.


    \ No newline at end of file diff --git a/test/test-pages/svg-parsing/expected.html b/test/test-pages/svg-parsing/expected.html index d2f8f4d..f130e86 100644 --- a/test/test-pages/svg-parsing/expected.html +++ b/test/test-pages/svg-parsing/expected.html @@ -1,17 +1,12 @@

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    + + + + +

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    - - - - - - - - - -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    -
    +
    \ No newline at end of file diff --git a/test/test-pages/tmz-1/expected.html b/test/test-pages/tmz-1/expected.html index 3dafec2..95c8e03 100644 --- a/test/test-pages/tmz-1/expected.html +++ b/test/test-pages/tmz-1/expected.html @@ -1,20 +1,17 @@
    -
    +

    Lupita Nyong'o

    -

    $150K Pearl Oscar Dress ... STOLEN!!!!

    -
    - 2/26/2015 7:11 AM PST BY TMZ STAFF -
    +

    $150K Pearl Oscar Dress ... STOLEN!!!!

    +

    +
    2/26/2015 7:11 AM PST BY TMZ STAFF

    EXCLUSIVE

    -

    0225-lupita-nyongo-getty-01Lupita Nyong'o's now-famous Oscar dress -- adorned in pearls -- was stolen right out of her hotel room ... TMZ has learned.

    +

    0225-lupita-nyongo-getty-01Lupita Nyong'o's now-famous Oscar dress -- adorned in pearls -- was stolen right out of her hotel room ... TMZ has learned.

    Law enforcement sources tell TMZ ... the dress was taken out of Lupita's room at The London West Hollywood. The dress is made of pearls ... 6,000 white Akoya pearls. It's valued at $150,000.

    Our sources say Lupita told cops it was taken from her room sometime between 8 AM and 9 PM Wednesday ... while she was gone.  

    We're told there is security footage that cops are looking at that could catch the culprit right in the act. 

    -

    update_graphic_red_bar12:00 PM PT -- Sheriff's deputies were at The London Thursday morning.  We know they were in the manager's office and we're told they have looked at security footage to determine if they can ID the culprit.

    -

    0226-SUB-london-hotel-swipe-tmz-02

    - -
    +

    update_graphic_red_bar12:00 PM PT -- Sheriff's deputies were at The London Thursday morning.  We know they were in the manager's office and we're told they have looked at security footage to determine if they can ID the culprit.

    +

    0226-SUB-london-hotel-swipe-tmz-02

    \ No newline at end of file diff --git a/test/test-pages/tumblr/expected.html b/test/test-pages/tumblr/expected.html index e1274c0..01de998 100644 --- a/test/test-pages/tumblr/expected.html +++ b/test/test-pages/tumblr/expected.html @@ -1,11 +1,10 @@
    -
    +

    Minecraft 1.8 - The Bountiful Update

    + Added Granite, Andesite, and Diorite stone blocks, with smooth versions
    + Added Slime Block
    + Added Iron Trapdoor
    + Added Prismarine and Sea Lantern blocks
    + Added the Ocean Monument
    + Added Red Sandstone
    + Added Banners
    + Added Armor Stands
    + Added Coarse Dirt (dirt where grass won’t grow)
    + Added Guardian mobs, with item drops
    + Added Endermite mob
    + Added Rabbits, with item drops
    + Added Mutton and Cooked Mutton
    + Villagers will harvest crops and plant new ones
    + Mossy Cobblestone and Mossy Stone Bricks are now craftable
    + Chiseled Stone Bricks are now craftable
    + Doors and fences now come in all wood type variants
    + Sponge block has regained its water-absorbing ability and becomes wet
    + Added a spectator game mode (game mode 3)
    + Added one new achievement
    + Added “Customized” world type
    + Added hidden “Debug Mode” world type
    + Worlds can now have a world barrier
    + Added @e target selector for Command Blocks
    + Added /blockdata command
    + Added /clone command
    + Added /execute command
    + Added /fill command
    + Added /particle command
    + Added /testforblocks command
    + Added /title command
    + Added /trigger command
    + Added /worldborder command
    + Added /stats command
    + Containers can be locked in custom maps by using the “Lock” data tag
    + Added logAdminCommands, showDeathMessages, reducedDebugInfo, sendCommandFeedback, and randomTickSpeed game rules
    + Added three new statistics
    + Player skins can now have double layers across the whole model, and left/right arms/legs can be edited independently
    + Added a new player model with smaller arms, and a new player skin called Alex?
    + Added options for configuring what pieces of the skin that are visible
    + Blocks can now have custom visual variations in the resource packs
    + Minecraft Realms now has an activity chart, so you can see who has been online
    + Minecraft Realms now lets you upload your maps
    * Difficulty setting is saved per world, and can be locked if wanted
    * Enchanting has been redone, now costs lapis lazuli in addition to enchantment levels
    * Villager trading has been rebalanced
    * Anvil repairing has been rebalanced
    * Considerable faster client-side performance
    * Max render distance has been increased to 32 chunks (512 blocks)
    * Adventure mode now prevents you from destroying blocks, unless your items have the CanDestroy data tag
    * Resource packs can now also define the shape of blocks and items, and not just their textures
    * Scoreboards have been given a lot of new features
    * Tweaked the F3 debug screen
    * Block ID numbers (such as 1 for stone), are being replaced by ID names (such as minecraft:stone)
    * Server list has been improved
    * A few minor changes to village and temple generation
    * Mob heads for players now show both skin layers
    * Buttons can now be placed on the ceiling
    * Lots and lots of other changes
    * LOTS AND LOTS of other changes
    - Removed Herobrine

    -
    -
    +
    \ No newline at end of file diff --git a/test/test-pages/webmd-1/expected.html b/test/test-pages/webmd-1/expected.html index 3581471..f749e4e 100644 --- a/test/test-pages/webmd-1/expected.html +++ b/test/test-pages/webmd-1/expected.html @@ -1,5 +1,5 @@
    -
    +

    Feb. 23, 2015 -- Life-threatening peanut allergies have mysteriously been on the rise in the past decade, with little hope for a cure.

    But a groundbreaking new study may offer a way to stem that rise, while another may offer some hope for those who are already allergic.

    Parents have been told for years to avoid giving foods containing peanuts to babies for fear of triggering an allergy. Now research shows the opposite is true: Feeding babies snacks made with peanuts before their first birthday appears to prevent that from happening.

    @@ -8,8 +8,7 @@

    “I think this study is an astounding and groundbreaking study, really,” says Katie Allen, MD, PhD. She's the director of the Center for Food and Allergy Research at the Murdoch Children’s Research Institute in Melbourne, Australia. Allen was not involved in the research.

    Experts say the research should shift thinking about how kids develop food allergies, and it should change the guidance doctors give to parents.

    Meanwhile, for children and adults who are already allergic to peanuts, another study presented at the same meeting held out hope of a treatment.

    -

    A new skin patch called Viaskin allowed people with peanut allergies to eat tiny amounts of peanuts after they wore it for a year.

    - +

    A new skin patch called Viaskin allowed people with peanut allergies to eat tiny amounts of peanuts after they wore it for a year.

    A Change in Guidelines?

    Allergies to peanuts and other foods are on the rise. In the U.S., more than 2% of people react to peanuts, a 400% increase since 1997. And reactions to peanuts and other tree nuts can be especially severe. Nuts are the main reason people get a life-threatening problem called anaphylaxis.

    diff --git a/test/test-pages/webmd-2/expected.html b/test/test-pages/webmd-2/expected.html index 08ae667..a72a225 100644 --- a/test/test-pages/webmd-2/expected.html +++ b/test/test-pages/webmd-2/expected.html @@ -1,10 +1,9 @@
    -
    +

    April 17, 2015 -- Imagine being sick in the hospital with a bacterial infection and doctors can't stop it from spreading. This so-called "superbug" scenario is not science fiction. It's an urgent, worldwide worry that is prompting swift action.

    Every year, about 2 million people get sick from a superbug, according to the CDC. About 23,000 die. Earlier this year, an outbreak of CRE (carbapenem-resistant enterobacteriaceae) linked to contaminated medical tools sickened 11 people at two Los-Angeles area hospitals. Two people died, and more than 200 others may have been exposed.

    The White House recently released a comprehensive plan outlining steps to combat drug-resistant bacteria. The plan identifies three "urgent" and several "serious" threats. We asked infectious disease experts to explain what some of them are and when to worry.

    - - +

    But First: What's a Superbug?

    It's a term coined by the media to describe bacteria that cannot be killed using multiple antibiotics. "It resonates because it's scary," says Stephen Calderwood, MD, president of the Infectious Diseases Society of America. "But in fairness, there is no real definition."

    Instead, doctors often use phrases like "multidrug-resistant bacteria." That's because a superbug isn't necessarily resistant to all antibiotics. It refers to bacteria that can't be treated using two or more, says Brian K. Coombes, PhD, of McMaster University in Ontario.

    diff --git a/test/test-pages/wikipedia/expected.html b/test/test-pages/wikipedia/expected.html index 2d18b23..b6c78f2 100644 --- a/test/test-pages/wikipedia/expected.html +++ b/test/test-pages/wikipedia/expected.html @@ -1,28 +1,28 @@
    -
    -

    Mozilla is a free-software community, created in 1998 by members of Netscape. The Mozilla community uses, develops, spreads and supports Mozilla products, thereby promoting exclusively free software and open standards, with only minor exceptions.[1] The community is supported institutionally by the Mozilla Foundation and its tax-paying subsidiary, the Mozilla Corporation.[2]

    +
    +

    Mozilla is a free-software community, created in 1998 by members of Netscape. The Mozilla community uses, develops, spreads and supports Mozilla products, thereby promoting exclusively free software and open standards, with only minor exceptions.[1] The community is supported institutionally by the Mozilla Foundation and its tax-paying subsidiary, the Mozilla Corporation.[2]

    Mozilla produces many products such as the Firefox web browser, Thunderbird e-mail client, Firefox Mobile web browser, Firefox OS mobile operating system, Bugzilla bug tracking system and other projects.

    -

    History[edit] +

    History[edit]

    -

    On January 23, 1998, Netscape made two announcements: first, that Netscape Communicator will be free; second, that the source code will also be free.[3] One day later, Jamie Zawinski from Netscape registered mozilla.org.[4] The project was named Mozilla after the original code name of the Netscape Navigator browser which is a blending of "Mosaic and Godzilla"[5] and used to co-ordinate the development of the Mozilla Application Suite, the open source version of Netscape's internet software, Netscape Communicator.[6][7] Jamie Zawinski says he came up with the name "Mozilla" at a Netscape staff meeting.[8][9] A small group of Netscape employees were tasked with coordination of the new community.

    -

    Originally, Mozilla aimed to be a technology provider for companies, such as Netscape, who would commercialize their open source code.[10] When AOL (Netscape's parent company) greatly reduced its involvement with Mozilla in July 2003, the Mozilla Foundation was designated the legal steward of the project.[11] Soon after, Mozilla deprecated the Mozilla Suite in favor of creating independent applications for each function, primarily the Firefox web browser and the Thunderbird email client, and moved to supply them directly to the public.[12]

    -

    Recently, Mozilla's activities have expanded to include Firefox on mobile platforms (primarily Android),[13] a mobile OS called Firefox OS,[14] a web-based identity system called Mozilla Persona and a marketplace for HTML5 applications.[15]

    -

    In a report released in November 2012, Mozilla reported that their total revenue for 2011 was $163 million, which was up 33% from $123 million in 2010. Mozilla noted that roughly 85% of their revenue comes from their contract with Google.[16]

    -

    At the end of 2013, Mozilla announced a deal with Cisco Systems whereby Firefox would download and use a Cisco-provided binary build of an open source[17] codec to play the proprietary H.264 video format.[18][19] As part of the deal, Cisco would pay any patent licensing fees associated with the binaries that it distributes. Mozilla's CTO, Brendan Eich, acknowledged that this is "not a complete solution" and isn't "perfect".[20] An employee in Mozilla's video formats team, writing in an unofficial capacity, justified[21] it by the need to maintain their large user base, which would be necessary in future battles for truly free video formats.

    -

    In December 2013, Mozilla announced funding for the development of non-free games[22] through its Game Creator Challenge. However, even those games that may be released under a non-free software or open source license must be made with open web technologies and Javascript as per the work criteria outlined in the announcement.

    -

    Eich CEO promotion controversy[edit] +

    On January 23, 1998, Netscape made two announcements: first, that Netscape Communicator will be free; second, that the source code will also be free.[3] One day later, Jamie Zawinski from Netscape registered mozilla.org.[4] The project was named Mozilla after the original code name of the Netscape Navigator browser which is a blending of "Mosaic and Godzilla"[5] and used to co-ordinate the development of the Mozilla Application Suite, the open source version of Netscape's internet software, Netscape Communicator.[6][7] Jamie Zawinski says he came up with the name "Mozilla" at a Netscape staff meeting.[8][9] A small group of Netscape employees were tasked with coordination of the new community.

    +

    Originally, Mozilla aimed to be a technology provider for companies, such as Netscape, who would commercialize their open source code.[10] When AOL (Netscape's parent company) greatly reduced its involvement with Mozilla in July 2003, the Mozilla Foundation was designated the legal steward of the project.[11] Soon after, Mozilla deprecated the Mozilla Suite in favor of creating independent applications for each function, primarily the Firefox web browser and the Thunderbird email client, and moved to supply them directly to the public.[12]

    +

    Recently, Mozilla's activities have expanded to include Firefox on mobile platforms (primarily Android),[13] a mobile OS called Firefox OS,[14] a web-based identity system called Mozilla Persona and a marketplace for HTML5 applications.[15]

    +

    In a report released in November 2012, Mozilla reported that their total revenue for 2011 was $163 million, which was up 33% from $123 million in 2010. Mozilla noted that roughly 85% of their revenue comes from their contract with Google.[16]

    +

    At the end of 2013, Mozilla announced a deal with Cisco Systems whereby Firefox would download and use a Cisco-provided binary build of an open source[17] codec to play the proprietary H.264 video format.[18][19] As part of the deal, Cisco would pay any patent licensing fees associated with the binaries that it distributes. Mozilla's CTO, Brendan Eich, acknowledged that this is "not a complete solution" and isn't "perfect".[20] An employee in Mozilla's video formats team, writing in an unofficial capacity, justified[21] it by the need to maintain their large user base, which would be necessary in future battles for truly free video formats.

    +

    In December 2013, Mozilla announced funding for the development of non-free games[22] through its Game Creator Challenge. However, even those games that may be released under a non-free software or open source license must be made with open web technologies and Javascript as per the work criteria outlined in the announcement.

    +

    Eich CEO promotion controversy[edit]

    -

    On March 24, 2014, Mozilla promoted Brendan Eich to the role of CEO. This led to boycotts and protests from the LGBT community and its supporters, as Eich previously donated US$1,000[23] in 2008 in support of California's Proposition 8, a California ballot proposition and state constitutional amendment in opposition to same-sex marriage.[24] Eich's donation first became public knowledge in 2012, while he was Mozilla’s chief technical officer, leading to angry responses on Twitter—including the use of the hashtag "#wontworkwithbigots".[25]

    -

    Protests also emerged in 2014 following the announcement of Eich's appointment as CEO of Mozilla. U.S. companies OkCupid and CREDO Mobile received media coverage for their objections, with the former asking its users to boycott the browser,[26] while Credo amassed 50,000 signatures for a petition that called for Eich's resignation

    -

    Due to the controversy, Eich voluntarily stepped down on April 3, 2014[27] and Mitchell Baker, executive chairwoman of Mozilla Corporation, posted a statement on the Mozilla blog: "We didn’t move fast enough to engage with people once the controversy started. Mozilla believes both in equality and freedom of speech. Equality is necessary for meaningful speech. And you need free speech to fight for equality."[28] Eich's resignation promoted a larger backlash from conservatives who felt he had been forced out of the company internally.[citation needed]

    -

    OkCupid co-founder and CEO Sam Yagan had also donated $500[29] to Republican candidate Chris Cannon who proceeded to vote for multiple measures viewed as "anti-gay", including the banning of same-sex marriage.[30][31][32][33] Yagan claims he did not know about Cannon's stance on gay rights and that his contribution was due to the candidate being the ranking Republican participating in the House subcommittee that oversaw Internet and Intellectual Property matters.[34][35][36][37][38]

    -

    Reader comments on articles that were published close to the events were divided between support for OkCupid's actions and opposition to them. Supporters claimed the boycott was justified and saw OkCupid's actions as a firm statement of opposition to intolerance towards the gay community. Opponents saw OkCupid's actions as hypocritical, since Eich is also the inventor of JavaScript, which is still required to browse OkCupid's website, and felt that users should not be punished for the actions of Mozilla and suspected that OkCupid's actions were a publicity stunt.[36][39]

    -

    Values[edit] +

    On March 24, 2014, Mozilla promoted Brendan Eich to the role of CEO. This led to boycotts and protests from the LGBT community and its supporters, as Eich previously donated US$1,000[23] in 2008 in support of California's Proposition 8, a California ballot proposition and state constitutional amendment in opposition to same-sex marriage.[24] Eich's donation first became public knowledge in 2012, while he was Mozilla’s chief technical officer, leading to angry responses on Twitter—including the use of the hashtag "#wontworkwithbigots".[25]

    +

    Protests also emerged in 2014 following the announcement of Eich's appointment as CEO of Mozilla. U.S. companies OkCupid and CREDO Mobile received media coverage for their objections, with the former asking its users to boycott the browser,[26] while Credo amassed 50,000 signatures for a petition that called for Eich's resignation

    +

    Due to the controversy, Eich voluntarily stepped down on April 3, 2014[27] and Mitchell Baker, executive chairwoman of Mozilla Corporation, posted a statement on the Mozilla blog: "We didn’t move fast enough to engage with people once the controversy started. Mozilla believes both in equality and freedom of speech. Equality is necessary for meaningful speech. And you need free speech to fight for equality."[28] Eich's resignation promoted a larger backlash from conservatives who felt he had been forced out of the company internally.[citation needed]

    +

    OkCupid co-founder and CEO Sam Yagan had also donated $500[29] to Republican candidate Chris Cannon who proceeded to vote for multiple measures viewed as "anti-gay", including the banning of same-sex marriage.[30][31][32][33] Yagan claims he did not know about Cannon's stance on gay rights and that his contribution was due to the candidate being the ranking Republican participating in the House subcommittee that oversaw Internet and Intellectual Property matters.[34][35][36][37][38]

    +

    Reader comments on articles that were published close to the events were divided between support for OkCupid's actions and opposition to them. Supporters claimed the boycott was justified and saw OkCupid's actions as a firm statement of opposition to intolerance towards the gay community. Opponents saw OkCupid's actions as hypocritical, since Eich is also the inventor of JavaScript, which is still required to browse OkCupid's website, and felt that users should not be punished for the actions of Mozilla and suspected that OkCupid's actions were a publicity stunt.[36][39]

    +

    Values[edit]

    -

    According to Mozilla's manifesto,[40] which outlines goals, principles, and a pledge, "The Mozilla project uses a community-based approach to create world-class open source software and to develop new types of collaborative activities". Mozilla's manifesto mentions only its beliefs in regards to the Internet and Internet privacy, and has no mention of any political or social viewpoints.

    -

    Pledge[edit] +

    According to Mozilla's manifesto,[40] which outlines goals, principles, and a pledge, "The Mozilla project uses a community-based approach to create world-class open source software and to develop new types of collaborative activities". Mozilla's manifesto mentions only its beliefs in regards to the Internet and Internet privacy, and has no mention of any political or social viewpoints.

    +

    Pledge[edit]

    -

    According to the Mozilla Foundation:[41]

    +

    According to the Mozilla Foundation:[41]

    The Mozilla Foundation pledges to support the Mozilla Manifesto in its activities. Specifically, we will:

      @@ -33,112 +33,102 @@
    • Promote the Mozilla Manifesto principles in public discourse and within the Internet industry.
    -

    Software[edit] +

    Software[edit]

    -
    - -
    +
    -

    Firefox[edit] +

    Firefox[edit]

    -

    Firefox is a web browser, and is Mozilla's flagship software product. It is available in both desktop and mobile versions. Firefox uses the Gecko layout engine to render web pages, which implements current and anticipated web standards.[42] As of late 2015[update], Firefox has approximately 10-11% of worldwide usage share of web browsers, making it the 4th most-used web browser.[43][44][45]

    -

    Firefox began as an experimental branch of the Mozilla codebase by Dave Hyatt, Joe Hewitt and Blake Ross. They believed the commercial requirements of Netscape's sponsorship and developer-driven feature creep compromised the utility of the Mozilla browser.[46] To combat what they saw as the Mozilla Suite's software bloat, they created a stand-alone browser, with which they intended to replace the Mozilla Suite.

    -

    Firefox was originally named Phoenix but the name was changed so as to avoid trademark conflicts with Phoenix Technologies. The initially-announced replacement, Firebird, provoked objections from the Firebird project community.[47][48] The current name, Firefox, was chosen on February 9, 2004.[49]

    -

    Firefox Mobile[edit] +

    Firefox is a web browser, and is Mozilla's flagship software product. It is available in both desktop and mobile versions. Firefox uses the Gecko layout engine to render web pages, which implements current and anticipated web standards.[42] As of late 2015[update], Firefox has approximately 10-11% of worldwide usage share of web browsers, making it the 4th most-used web browser.[43][44][45]

    +

    Firefox began as an experimental branch of the Mozilla codebase by Dave Hyatt, Joe Hewitt and Blake Ross. They believed the commercial requirements of Netscape's sponsorship and developer-driven feature creep compromised the utility of the Mozilla browser.[46] To combat what they saw as the Mozilla Suite's software bloat, they created a stand-alone browser, with which they intended to replace the Mozilla Suite.

    +

    Firefox was originally named Phoenix but the name was changed so as to avoid trademark conflicts with Phoenix Technologies. The initially-announced replacement, Firebird, provoked objections from the Firebird project community.[47][48] The current name, Firefox, was chosen on February 9, 2004.[49]

    +

    Firefox Mobile[edit]

    Firefox Mobile (codenamed Fennec) is the build of the Mozilla Firefox web browser for devices such as smartphones and tablet computers.

    -

    Firefox Mobile uses the same Gecko layout engine as Mozilla Firefox. For example, version 1.0 used the same engine as Firefox 3.6, and the following release, 4.0, shared core code with Firefox 4.0. Its features include HTML5 support, Firefox Sync, add-ons support and tabbed browsing.[50]

    -

    Firefox Mobile is currently available for Android 2.2 and above devices with an ARMv7 or ARMv6 CPU.[51] The x86 architecture is not officially supported.[52] Tristan Nitot, president of Mozilla Europe, has said that it's unlikely that an iPhone or a BlackBerry version will be released, citing Apple's iTunes Store application approval policies (which forbid applications competing with Apple's own, and forbid engines which run downloaded code) and BlackBerry's limited operating system as the reasons.[53]

    -

    Firefox OS[edit] +

    Firefox Mobile uses the same Gecko layout engine as Mozilla Firefox. For example, version 1.0 used the same engine as Firefox 3.6, and the following release, 4.0, shared core code with Firefox 4.0. Its features include HTML5 support, Firefox Sync, add-ons support and tabbed browsing.[50]

    +

    Firefox Mobile is currently available for Android 2.2 and above devices with an ARMv7 or ARMv6 CPU.[51] The x86 architecture is not officially supported.[52] Tristan Nitot, president of Mozilla Europe, has said that it's unlikely that an iPhone or a BlackBerry version will be released, citing Apple's iTunes Store application approval policies (which forbid applications competing with Apple's own, and forbid engines which run downloaded code) and BlackBerry's limited operating system as the reasons.[53]

    +

    Firefox OS[edit]

    -

    Firefox OS (project name: Boot to Gecko also known as B2G) is an open source operating system in development by Mozilla that aims to support HTML5 apps written using "open Web" technologies rather than platform-specific native APIs. The concept behind Firefox OS is that all user-accessible software will be HTML5 applications, that use Open Web APIs to access the phone's hardware directly via JavaScript.[54]

    -

    Some devices using this OS include[55] Alcatel One Touch Fire, ZTE Open, LG Fireweb.

    -

    Thunderbird[edit] +

    Firefox OS (project name: Boot to Gecko also known as B2G) is an open source operating system in development by Mozilla that aims to support HTML5 apps written using "open Web" technologies rather than platform-specific native APIs. The concept behind Firefox OS is that all user-accessible software will be HTML5 applications, that use Open Web APIs to access the phone's hardware directly via JavaScript.[54]

    +

    Some devices using this OS include[55] Alcatel One Touch Fire, ZTE Open, LG Fireweb.

    +

    Thunderbird[edit]

    Thunderbird is a free, open source, cross-platform email and news client developed by the volunteers of the Mozilla Community.

    -

    On July 16, 2012, Mitchell Baker announced that Mozilla's leadership had come to the conclusion that on-going stability was the most important thing for Thunderbird and that innovation in Thunderbird was no longer a priority for Mozilla. In that update Baker also suggested that Mozilla had provided a pathway for community to innovate around Thunderbird if the community chooses.[56]

    -

    SeaMonkey[edit] +

    On July 16, 2012, Mitchell Baker announced that Mozilla's leadership had come to the conclusion that on-going stability was the most important thing for Thunderbird and that innovation in Thunderbird was no longer a priority for Mozilla. In that update Baker also suggested that Mozilla had provided a pathway for community to innovate around Thunderbird if the community chooses.[56]

    +

    SeaMonkey[edit]

    -
    - -
    +

    SeaMonkey (formerly the Mozilla Application Suite) is a free and open source cross platform suite of Internet software components including a web browser component, a client for sending and receiving email and USENET newsgroup messages, an HTML editor (Mozilla Composer) and the ChatZilla IRC client.

    -

    On March 10, 2005, the Mozilla Foundation announced that it would not release any official versions of Mozilla Application Suite beyond 1.7.x, since it had now focused on the standalone applications Firefox and Thunderbird.[57] SeaMonkey is now maintained by the SeaMonkey Council, which has trademarked the SeaMonkey name with help from the Mozilla Foundation.[58] The Mozilla Foundation provides project hosting for the SeaMonkey developers.

    -

    Bugzilla[edit] +

    On March 10, 2005, the Mozilla Foundation announced that it would not release any official versions of Mozilla Application Suite beyond 1.7.x, since it had now focused on the standalone applications Firefox and Thunderbird.[57] SeaMonkey is now maintained by the SeaMonkey Council, which has trademarked the SeaMonkey name with help from the Mozilla Foundation.[58] The Mozilla Foundation provides project hosting for the SeaMonkey developers.

    +

    Bugzilla[edit]

    -
    - -
    +
    -

    Bugzilla is a web-based general-purpose bug tracking system, which was released as open source software by Netscape Communications in 1998 along with the rest of the Mozilla codebase, and is currently stewarded by Mozilla. It has been adopted by a variety of organizations for use as a bug tracking system for both free and open source software and proprietary projects and products, including the Mozilla Foundation, the Linux kernel, GNOME, KDE, Red Hat, Novell, Eclipse and LibreOffice.[59]

    -

    Components[edit] +

    Bugzilla is a web-based general-purpose bug tracking system, which was released as open source software by Netscape Communications in 1998 along with the rest of the Mozilla codebase, and is currently stewarded by Mozilla. It has been adopted by a variety of organizations for use as a bug tracking system for both free and open source software and proprietary projects and products, including the Mozilla Foundation, the Linux kernel, GNOME, KDE, Red Hat, Novell, Eclipse and LibreOffice.[59]

    +

    Components[edit]

    -

    NSS[edit] +

    NSS[edit]

    Network Security Services (NSS) comprises a set of libraries designed to support cross-platform development of security-enabled client and server applications. NSS provides a complete open-source implementation of crypto libraries supporting SSL and S/MIME. NSS was previously tri-licensed under the Mozilla Public License 1.1, the GNU General Public License, and the GNU Lesser General Public License, but upgraded to GPL-compatible MPL 2.0.

    AOL, Red Hat, Sun Microsystems/Oracle Corporation, Google and other companies and individual contributors have co-developed NSS and it is used in a wide range of non-Mozilla products including Evolution, Pidgin, and Apache OpenOffice.

    -

    SpiderMonkey[edit] +

    SpiderMonkey[edit]

    -

    SpiderMonkey is the original JavaScript engine developed by Brendan Eich when he invented JavaScript in 1995 as a developer at Netscape. It became part of the Mozilla product family when Mozilla inherited Netscape's code-base in 1998. In 2011, Eich transferred the nominal ownership of the SpiderMonkey code and project to Dave Mandelin.[60]

    -

    SpiderMonkey is a cross-platform engine written in C++ which implements ECMAScript, a standard developed from JavaScript.[60][61] It comprises an interpreter, several just-in-time compilers, a decompiler and a garbage collector. Products which embed SpiderMonkey include Firefox, Thunderbird, SeaMonkey, and many non-Mozilla applications.[62]

    -

    Rhino[edit] +

    SpiderMonkey is the original JavaScript engine developed by Brendan Eich when he invented JavaScript in 1995 as a developer at Netscape. It became part of the Mozilla product family when Mozilla inherited Netscape's code-base in 1998. In 2011, Eich transferred the nominal ownership of the SpiderMonkey code and project to Dave Mandelin.[60]

    +

    SpiderMonkey is a cross-platform engine written in C++ which implements ECMAScript, a standard developed from JavaScript.[60][61] It comprises an interpreter, several just-in-time compilers, a decompiler and a garbage collector. Products which embed SpiderMonkey include Firefox, Thunderbird, SeaMonkey, and many non-Mozilla applications.[62]

    +

    Rhino[edit]

    -

    Rhino is an open source JavaScript engine managed by the Mozilla Foundation. It is developed entirely in Java. Rhino converts JavaScript scripts into Java classes. Rhino works in both compiled and interpreted mode.[63]

    -

    Gecko[edit] +

    Rhino is an open source JavaScript engine managed by the Mozilla Foundation. It is developed entirely in Java. Rhino converts JavaScript scripts into Java classes. Rhino works in both compiled and interpreted mode.[63]

    +

    Gecko[edit]

    Gecko is a layout engine that supports web pages written using HTML, SVG, and MathML. Gecko is written in C++ and uses NSPR for platform independence. Its source code is licensed under the Mozilla Public License.

    Firefox uses Gecko both for rendering web pages and for rendering its user interface. Gecko is also used by Thunderbird, SeaMonkey, and many non-Mozilla applications.

    -

    Rust[edit] +

    Rust[edit]

    Rust is a compiled programming language being developed by Mozilla Research. It is designed for safety, concurrency, and performance. Rust is intended for creating large and complex software which needs to be both safe against exploits and fast.

    -

    Rust is being used in an experimental layout engine, Servo, which is developed by Mozilla and Samsung. Servo is not used in any consumer-oriented browsers yet. However, the Servo project developers plan for parts of the Servo source code to be merged into Gecko, and Firefox, incrementally.[64][65]

    -

    XULRunner[edit] +

    Rust is being used in an experimental layout engine, Servo, which is developed by Mozilla and Samsung. Servo is not used in any consumer-oriented browsers yet. However, the Servo project developers plan for parts of the Servo source code to be merged into Gecko, and Firefox, incrementally.[64][65]

    +

    XULRunner[edit]

    XULRunner is a software platform and technology experiment by Mozilla, that allows applications built with the same technologies used by Firefox extensions (XPCOM, Javascript, HTML, CSS, XUL) to be run natively as desktop applications, without requiring Firefox to be installed on the user's machine. XULRunner binaries are available for the Windows, GNU/Linux and OS X operating systems, allowing such applications to be effectively cross platform.

    -

    pdf.js[edit] +

    pdf.js[edit]

    Pdf.js is a library developed by Mozilla that allows in-browser rendering of pdf documents using the HTML5 Canvas and Javascript. It is included by default in recent versions of Firefox, allowing the browser to render pdf documents without requiring an external plugin; and it is available separately as an extension named "PDF Viewer" for Firefox for Android, SeaMonkey, and the Firefox versions which don't include it built-in. It can also be included as part of a website's scripts, to allow pdf rendering for any browser that implements the required HTML5 features and can run Javascript.

    -

    Shumway[edit] +

    Shumway[edit]

    Shumway is an open source replacement for the Adobe Flash Player, developed by Mozilla since 2012, using open web technologies as a replacement for Flash technologies. It uses Javascript and HTML5 Canvas elements to render Flash and execute Actionscript. It is included by default in Firefox Nightly and can be installed as an extension for any recent version of Firefox. The current implementation is limited in its capabilities to render Flash content outside simple projects.

    -

    Other activities[edit] +

    Other activities[edit]

    -

    Mozilla VR[edit] +

    Mozilla VR[edit]

    -

    Mozilla VR is a team focused on bringing Virtual reality tools, specifications, and standards to the open Web.[66] Mozilla VR maintains A-Frame (VR), a web framework for building VR experiences, and works on advancing WebVR support within web browsers.

    -

    Mozilla Persona[edit] +

    Mozilla VR is a team focused on bringing Virtual reality tools, specifications, and standards to the open Web.[66] Mozilla VR maintains A-Frame (VR), a web framework for building VR experiences, and works on advancing WebVR support within web browsers.

    +

    Mozilla Persona[edit]

    -

    Mozilla Persona is a secure, cross-browser website authentication mechanism which allows a user to use a single username and password (or other authentication method) to log in to multiple sites.[67] Mozilla Persona will be shutting down on November 30, 2016.[68]

    -

    Mozilla Location Service[edit] +

    Mozilla Persona is a secure, cross-browser website authentication mechanism which allows a user to use a single username and password (or other authentication method) to log in to multiple sites.[67] Mozilla Persona will be shutting down on November 30, 2016.[68]

    +

    Mozilla Location Service[edit]

    This open source crowdsourced geolocation service was started by Mozilla in 2013 and offers a free API.

    -

    Webmaker[edit] +

    Webmaker[edit]

    -

    Mozilla Webmaker is Mozilla's educational initiative, Webmaker's goal is to "help millions of people move from using the web to making the web." As part of Mozilla’s non-profit mission, Webmaker aims "to help the world increase their understanding of the web, take greater control of their online lives, and create a more web literate planet."[69][70][70]

    -

    Mozilla Developer Network[edit] +

    Mozilla Webmaker is Mozilla's educational initiative, Webmaker's goal is to "help millions of people move from using the web to making the web." As part of Mozilla’s non-profit mission, Webmaker aims "to help the world increase their understanding of the web, take greater control of their online lives, and create a more web literate planet."[69][70][70]

    +

    Mozilla Developer Network[edit]

    -

    Mozilla maintains a comprehensive developer documentation website called the Mozilla Developer Network which contains information about web technologies including HTML, CSS, SVG, JavaScript, as well Mozilla-specific information. In addition, Mozilla publishes a large number of videos about web technologies and the development of Mozilla projects on the Air Mozilla website.[71][72]

    +

    Mozilla maintains a comprehensive developer documentation website called the Mozilla Developer Network which contains information about web technologies including HTML, CSS, SVG, JavaScript, as well Mozilla-specific information. In addition, Mozilla publishes a large number of videos about web technologies and the development of Mozilla projects on the Air Mozilla website.[71][72]

    [edit]

    -

    The Mozilla Community consists of over 40,000 active contributors from across the globe[citation needed]. It includes both paid employees and volunteers who work towards the goals set forth[40] in the Mozilla Manifesto. Many of the sub-communities in Mozilla have formed around localization efforts for Mozilla Firefox, and the Mozilla web properties.

    -

    Local communities[edit] +

    The Mozilla Community consists of over 40,000 active contributors from across the globe[citation needed]. It includes both paid employees and volunteers who work towards the goals set forth[40] in the Mozilla Manifesto. Many of the sub-communities in Mozilla have formed around localization efforts for Mozilla Firefox, and the Mozilla web properties.

    +

    Local communities[edit]

    -
    - -
    +

    There are a number of sub-communities that exist based on their geographical locations, where contributors near each other work together on particular activities, such as localization, marketing, PR and user support.

    -

    Mozilla Reps[edit] +

    Mozilla Reps[edit]

    -
    - -
    +

    The Mozilla Reps program aims to empower and support volunteer Mozillians who want to become official representatives of Mozilla in their region/locale.

    The program provides a simple framework and a specific set of tools to help Mozillians to organize and/or attend events, recruit and mentor new contributors, document and share activities, and support their local communities better.

    @@ -151,13 +141,12 @@
  • Support and mentor future Mozilla Reps
  • Document clearly all their activities
  • -

    Conferences and events[edit] +

    Conferences and events[edit]

    -

    Mozilla Festival[edit] +

    Mozilla Festival[edit]

    -
    - +

    Speakers from the

    Knight Foundation

    discuss the future of news at the 2011 Mozilla Festival in London.

    @@ -166,13 +155,13 @@

    The Mozilla Festival is an annual event where hundreds of passionate people explore the Web, learn together and make things that can change the world. With the emphasis on making—the mantra of the Festival is "less yack, more hack." Journalists, coders, filmmakers, designers, educators, gamers, makers, youth and anyone else, from all over the world, are encouraged to attend, with attendees from more than 40 countries, working together at the intersection between freedom, the Web, and that years theme.

    The event revolves around design challenges which address key issues based on the chosen theme for that years festival. In previous years the Mozilla Festival has focused on Learning, and Media, with the 2012 festival being based around making. The titles of the festival revolve around the main theme, freedom (as in freedom of speech not free beer), and the Web.

    -

    MozCamps[edit] +

    MozCamps[edit]

    MozCamps are the critical part of the Grow Mozilla initiative which aims to grow the Mozilla Community. These camps aim to bring core contributors from around the world together. They are intensive multi-day summits that include keynote speeches by Mozilla leadership, workshops and breakout sessions (led by paid and unpaid staff), and fun social outings. All of these activities combine to reward contributors for their hard work, engage them with new products and initiatives, and align all attendees on Mozilla's mission.

    -

    Mozilla Summit[edit] +

    Mozilla Summit[edit]

    Mozilla Summit are the global event with active contributors and Mozilla employees to develop a shared understanding of Mozilla's mission together. Over 2,000 people representing 90 countries and 114 languages gathered in Santa Clara, Toronto and Brussels in 2013. Mozilla has since its last summit in 2013 replaced summits with all-hands where both employees and volunteers come together to collaborate the event is a scaled down version of Mozilla Summit.

    -

    See also[edit] +

    See also[edit]

    -

    References[edit] +

    References[edit]

      -
    1. ^ For exceptions, see "Values" section below
    2. -
    3. ^ "About the Mozilla Corporation". Mozilla Foundation.  +
    4. ^ For exceptions, see "Values" section below
    5. +
    6. ^ "About the Mozilla Corporation". Mozilla Foundation. 
    7. -
    8. ^ "Freeing the Source: The Story of Mozilla". Open Sources: Voices from the Open Source Revolution. Retrieved 2016-05-01.  +
    9. ^ "Freeing the Source: The Story of Mozilla". Open Sources: Voices from the Open Source Revolution. Retrieved 2016-05-01. 
    10. -
    11. ^ "Mozilla.org WHOIS, DNS, & Domain Info". DomainTools. Retrieved 1 May 2016.  +
    12. ^ "Mozilla.org WHOIS, DNS, & Domain Info". DomainTools. Retrieved 1 May 2016. 
    13. -
    14. ^ Payment, S. (2007). Marc Andreessen and Jim Clark: The Founders of Netscape. Rosen Publishing Group. ISBN 9781404207196.  +
    15. ^ Payment, S. (2007). Marc Andreessen and Jim Clark: The Founders of Netscape. Rosen Publishing Group. ISBN 9781404207196. 
    16. -
    17. ^ "Netscape Announces mozilla.org, a Dedicated Team and Web Site Supporting Development of Free Client Source Code". Netscape. Archived from the original on October 4, 2002. Retrieved 2012-08-21.  +
    18. ^ "Netscape Announces mozilla.org, a Dedicated Team and Web Site Supporting Development of Free Client Source Code". Netscape. Archived from the original on October 4, 2002. Retrieved 2012-08-21. 
    19. -
    20. ^ "Mac vendors ponder Netscape gambit.". Macworld. 1 May 1998. Retrieved 2012-08-19.  +
    21. ^ "Mac vendors ponder Netscape gambit.". Macworld. 1 May 1998. Retrieved 2012-08-19. 
    22. -
    23. ^ Zawinski, Jamie (1996). "nscp dorm". Retrieved 2007-10-12.  +
    24. ^ Zawinski, Jamie (1996). "nscp dorm". Retrieved 2007-10-12. 
    25. -
    26. ^ Dave Titus with assistance from Andrew Wong. "How was Mozilla born".  +
    27. ^ Dave Titus with assistance from Andrew Wong. "How was Mozilla born". 
    28. -
    29. ^ "Introduction to Mozilla Source Code". Mozilla. Retrieved 2012-08-18. However, mozilla.org wants to emphasize that these milestones are being produced for testing purposes only.  +
    30. ^ "Introduction to Mozilla Source Code". Mozilla. Retrieved 2012-08-18. However, mozilla.org wants to emphasize that these milestones are being produced for testing purposes only. 
    31. -
    32. ^ "mozilla.org Announces Launch of the Mozilla Foundation to Lead Open-Source Browser Efforts". Retrieved 2012-08-18.  +
    33. ^ "mozilla.org Announces Launch of the Mozilla Foundation to Lead Open-Source Browser Efforts". Retrieved 2012-08-18. 
    34. -
    35. ^ Eich, Brendan; David Hyatt (April 2, 2003). "mozilla development roadmap". Mozilla. Retrieved 2009-08-02.  +
    36. ^ Eich, Brendan; David Hyatt (April 2, 2003). "mozilla development roadmap". Mozilla. Retrieved 2009-08-02. 
    37. -
    38. ^ "Better Browsing on Your Android Smartphone". AllThingsD. Retrieved 2012-08-18.  +
    39. ^ "Better Browsing on Your Android Smartphone". AllThingsD. Retrieved 2012-08-18. 
    40. -
    41. ^ "Mozilla Releases Test Version of Firefox OS". PC Magazine. Retrieved 2012-08-18.  +
    42. ^ "Mozilla Releases Test Version of Firefox OS". PC Magazine. Retrieved 2012-08-18. 
    43. -
    44. ^ "Mozilla Marketplace is live, lets you run web apps like desktop programs". Engadget. Retrieved 2012-08-18.  +
    45. ^ "Mozilla Marketplace is live, lets you run web apps like desktop programs". Engadget. Retrieved 2012-08-18. 
    46. -
    47. ^ Lardinois, Frederic (November 15, 2012). "Mozilla Releases Annual Report For 2011: Revenue Up 33% To $163M, Majority From Google". techcrunch.com.  +
    48. ^ Lardinois, Frederic (November 15, 2012). "Mozilla Releases Annual Report For 2011: Revenue Up 33% To $163M, Majority From Google". techcrunch.com. 
    49. -
    50. ^ "cisco/openh264 · GitHub". github.com. Retrieved 2014-04-05.  +
    51. ^ "cisco/openh264 · GitHub". github.com. Retrieved 2014-04-05. 
    52. -
    53. ^ "Mozilla will add H.264 to Firefox as Cisco makes eleventh-hour push for WebRTC's future — Tech News and Analysis". gigaom.com. Retrieved 2014-04-05.  +
    54. ^ "Mozilla will add H.264 to Firefox as Cisco makes eleventh-hour push for WebRTC's future — Tech News and Analysis". gigaom.com. Retrieved 2014-04-05. 
    55. -
    56. ^ "Cisco to release open-source H.264 codec, Mozilla makes tactical retreat - TechRepublic". techrepublic.com. Retrieved 2014-04-05.  +
    57. ^ "Cisco to release open-source H.264 codec, Mozilla makes tactical retreat - TechRepublic". techrepublic.com. Retrieved 2014-04-05. 
    58. -
    59. ^ "Video Interoperability on the Web Gets a Boost From Cisco's H.264 Codec". Of course, this is not a not a complete solution. In a perfect world, codecs, like other basic Internet technologies such as TCP/IP, HTTP, and HTML, would be fully open and free  +
    60. ^ "Video Interoperability on the Web Gets a Boost From Cisco's H.264 Codec". Of course, this is not a not a complete solution. In a perfect world, codecs, like other basic Internet technologies such as TCP/IP, HTTP, and HTML, would be fully open and free 
    61. -
    62. ^ "Comments on Cisco, Mozilla, and H.264". By endorsing Cisco's plan, there's no getting around the fact that we've caved on our principles. That said, principles can't replace being in a practical position to make a difference in the future.  - Christopher Montgomery wrote in a personal capacity but works for Mozilla in their codecs team +
    63. ^ "Comments on Cisco, Mozilla, and H.264". By endorsing Cisco's plan, there's no getting around the fact that we've caved on our principles. That said, principles can't replace being in a practical position to make a difference in the future.  - Christopher Montgomery wrote in a personal capacity but works for Mozilla in their codecs team
    64. -
    65. ^ "Game Creator Challenge -Contest Terms and Conditions".  - submissions to the "amateur" category have to be released as free software, but not for the other two categories +
    66. ^ "Game Creator Challenge -Contest Terms and Conditions".  - submissions to the "amateur" category have to be released as free software, but not for the other two categories
    67. -
    68. ^ "Los Angeles Times - Brendan Eich contribution to Proposition 8". latimes.com. Retrieved 2014-07-01.  +
    69. ^ "Los Angeles Times - Brendan Eich contribution to Proposition 8". latimes.com. Retrieved 2014-07-01. 
    70. -
    71. ^ "Gay Firefox developers boycott Mozilla to protest CEO hire [Updated] | Ars Technica". arstechnica.com. Retrieved 2014-04-05.  +
    72. ^ "Gay Firefox developers boycott Mozilla to protest CEO hire [Updated] | Ars Technica". arstechnica.com. Retrieved 2014-04-05. 
    73. -
    74. ^ Kelly Faircloth (9 April 2012). "Tech Celeb Makes Prop-8 Donation; Internet Goes Berserk". BetaBeat. BetaBeat. Retrieved 2014-04-28.  +
    75. ^ Kelly Faircloth (9 April 2012). "Tech Celeb Makes Prop-8 Donation; Internet Goes Berserk". BetaBeat. BetaBeat. Retrieved 2014-04-28. 
    76. -
    77. ^ "Screenshot of OkCupid's statement towards Firefox users". huffingtonpost.com. Retrieved 2014-07-01.  +
    78. ^ "Screenshot of OkCupid's statement towards Firefox users". huffingtonpost.com. Retrieved 2014-07-01. 
    79. -
    80. ^ "FAQ on CEO Resignation". The Mozilla Blog. Retrieved 2015-04-20.  +
    81. ^ "FAQ on CEO Resignation". The Mozilla Blog. Retrieved 2015-04-20. 
    82. -
    83. ^ Baker, Mitchell (3 April 2014). "Brendan Eich Steps Down as Mozilla CEO". mozilla blog. Mozilla. Retrieved 2014-04-04.  +
    84. ^ Baker, Mitchell (3 April 2014). "Brendan Eich Steps Down as Mozilla CEO". mozilla blog. Mozilla. Retrieved 2014-04-04. 
    85. -
    86. ^ "opensecrets.org listing of Sam Yagan's contributions to political candidates". opensecrets.org. Retrieved 2014-07-01.  +
    87. ^ "opensecrets.org listing of Sam Yagan's contributions to political candidates". opensecrets.org. Retrieved 2014-07-01. 
    88. -
    89. ^ "ontheissues.org listing of votes cast by Chris Cannon". ontheissues.org. Retrieved 2014-07-01.  +
    90. ^ "ontheissues.org listing of votes cast by Chris Cannon". ontheissues.org. Retrieved 2014-07-01. 
    91. -
    92. ^ "ontheissues.org listing of votes cast on the permanency of the Patriot Act". ontheissues.org. Retrieved 2014-07-01.  +
    93. ^ "ontheissues.org listing of votes cast on the permanency of the Patriot Act". ontheissues.org. Retrieved 2014-07-01. 
    94. -
    95. ^ "ontheissues.org: Chris Cannon on Homeland Security". ontheissues.org. Retrieved 2014-07-01.  +
    96. ^ "ontheissues.org: Chris Cannon on Homeland Security". ontheissues.org. Retrieved 2014-07-01. 
    97. -
    98. ^ "ontheissues.org: Chris Cannon on Abortion". ontheissues.org. Retrieved 2014-07-01.  +
    99. ^ "ontheissues.org: Chris Cannon on Abortion". ontheissues.org. Retrieved 2014-07-01. 
    100. -
    101. ^ Levintova, Hannah (7 April 2014). "OkCupid's CEO Donated to an Anti-Gay Campaign Once, Too". Hanna Levintova article on motherjones.com. motherjones.com. Retrieved 2014-07-01.  +
    102. ^ Levintova, Hannah (7 April 2014). "OkCupid's CEO Donated to an Anti-Gay Campaign Once, Too". Hanna Levintova article on motherjones.com. motherjones.com. Retrieved 2014-07-01. 
    103. -
    104. ^ Lee, Stephanie M. (8 April 2014). "OKCupid CEO once donated to anti-gay politician". Stephanie M. Lee's blog on sfgate.com. sfgate.com. Retrieved 2014-07-01.  +
    105. ^ Lee, Stephanie M. (8 April 2014). "OKCupid CEO once donated to anti-gay politician". Stephanie M. Lee's blog on sfgate.com. sfgate.com. Retrieved 2014-07-01. 
    106. -
    107. ^ a b "The Hypocrisy Of Sam Yagan & OkCupid". uncrunched.com blog. uncrunched.com. 6 April 2014. Retrieved 2014-07-01.  +
    108. ^ a b "The Hypocrisy Of Sam Yagan & OkCupid". uncrunched.com blog. uncrunched.com. 6 April 2014. Retrieved 2014-07-01. 
    109. -
    110. ^ Bellware, Kim (31 March 2014). "OKCupid Publicly Rips Mozilla: 'We Wish Them Nothing But Failure'". Kim Bellware article on huffingtonpost.com. huffingtonpost.com. Retrieved 2014-07-01.  +
    111. ^ Bellware, Kim (31 March 2014). "OKCupid Publicly Rips Mozilla: 'We Wish Them Nothing But Failure'". Kim Bellware article on huffingtonpost.com. huffingtonpost.com. Retrieved 2014-07-01. 
    112. -
    113. ^ "Mozilla's Appointment Of Brendan Eich As CEO Sparks Controversy After Prop 8 Donation News Re-Emerges". huffingtonpost.com article. huffingtonpost.com. 27 March 2014. Retrieved 2014-07-01.  +
    114. ^ "Mozilla's Appointment Of Brendan Eich As CEO Sparks Controversy After Prop 8 Donation News Re-Emerges". huffingtonpost.com article. huffingtonpost.com. 27 March 2014. Retrieved 2014-07-01. 
    115. -
    116. ^ Eidelson, Josh (4 April 2014). "OkCupid's gay rights stunt has its limits: Taking a deeper look at the savvy ploy". Josh Eidelson article on salon.com. salon.com. Retrieved 2014-07-01.  +
    117. ^ Eidelson, Josh (4 April 2014). "OkCupid's gay rights stunt has its limits: Taking a deeper look at the savvy ploy". Josh Eidelson article on salon.com. salon.com. Retrieved 2014-07-01. 
    118. -
    119. ^ a b "Mozilla Manifesto". Mozilla.org. Retrieved 2012-03-21.  +
    120. ^ a b "Mozilla Manifesto". Mozilla.org. Retrieved 2012-03-21. 
    121. -
    122. ^ "The Mozilla Manifesto". Retrieved 24 July 2015.  +
    123. ^ "The Mozilla Manifesto". Retrieved 24 July 2015. 
    124. -
    125. ^ "Gecko Layout Engine". download-firefox.org. July 17, 2008. Archived from the original on 2010-11-28. Retrieved 2012-05-10.  +
    126. ^ "Gecko Layout Engine". download-firefox.org. July 17, 2008. Archived from the original on 2010-11-28. Retrieved 2012-05-10. 
    127. -
    128. ^ "Web Browser Market Share Trends". W3Counter. Awio Web Services LLC. Retrieved 2012-05-10.  +
    129. ^ "Web Browser Market Share Trends". W3Counter. Awio Web Services LLC. Retrieved 2012-05-10. 
    130. -
    131. ^ "Top 5 Browsers". StatCounter Global Stats. StatCounter. Retrieved 2012-05-10.  +
    132. ^ "Top 5 Browsers". StatCounter Global Stats. StatCounter. Retrieved 2012-05-10. 
    133. -
    134. ^ "Web browsers (Global marketshare)". Clicky. Roxr Software Ltd. Retrieved 2012-05-10.  +
    135. ^ "Web browsers (Global marketshare)". Clicky. Roxr Software Ltd. Retrieved 2012-05-10. 
    136. -
    137. ^ Goodger, Ben (February 6, 2006). "Where Did Firefox Come From?". Inside Firefox. Archived from the original on 2011-06-23. Retrieved 2012-01-07.  +
    138. ^ Goodger, Ben (February 6, 2006). "Where Did Firefox Come From?". Inside Firefox. Archived from the original on 2011-06-23. Retrieved 2012-01-07. 
    139. -
    140. ^ "Mozilla browser becomes Firebird". IBPhoenix. Archived from the original on 2007-09-14. Retrieved 2013-06-10. We at IBPhoenix think that having a browser and a database with the same name in the same space will confuse the market, especially as browsers and databases are often used in the same applications  +
    141. ^ "Mozilla browser becomes Firebird". IBPhoenix. Archived from the original on 2007-09-14. Retrieved 2013-06-10. We at IBPhoenix think that having a browser and a database with the same name in the same space will confuse the market, especially as browsers and databases are often used in the same applications 
    142. -
    143. ^ Festa, Paul (May 6, 2003). "Mozilla's Firebird gets wings clipped". CNET. Retrieved 2007-01-30.  +
    144. ^ Festa, Paul (May 6, 2003). "Mozilla's Firebird gets wings clipped". CNET. Retrieved 2007-01-30. 
    145. -
    146. ^ Festa, Paul (February 9, 2004). "Mozilla holds 'fire' in naming fight". CNET News. Retrieved 2007-01-24.  +
    147. ^ Festa, Paul (February 9, 2004). "Mozilla holds 'fire' in naming fight". CNET News. Retrieved 2007-01-24. 
    148. -
    149. ^ "Mobile features". Mozilla. Retrieved 2012-06-26.  +
    150. ^ "Mobile features". Mozilla. Retrieved 2012-06-26. 
    151. -
    152. ^ "Mobile System Requirements".  +
    153. ^ "Mobile System Requirements". 
    154. -
    155. ^ "Firefox Mobile supported devices".  +
    156. ^ "Firefox Mobile supported devices". 
    157. -
    158. ^ "Mozilla rules out Firefox for iPhone and BlackBerry".  +
    159. ^ "Mozilla rules out Firefox for iPhone and BlackBerry". 
    160. -
    161. ^ "Boot to Gecko Project". Mozilla. March 2012. Retrieved 2012-03-30.  +
    162. ^ "Boot to Gecko Project". Mozilla. March 2012. Retrieved 2012-03-30. 
    163. -
    164. ^ "Firefox OS - Devices & Availability". Mozilla. Retrieved 2015-12-30.  +
    165. ^ "Firefox OS - Devices & Availability". Mozilla. Retrieved 2015-12-30. 
    166. -
    167. ^ "Thunderbird: Stability and Community Innovation | Mitchell's Blog". blog.lizardwrangler.com. Retrieved 2015-04-20.  +
    168. ^ "Thunderbird: Stability and Community Innovation | Mitchell's Blog". blog.lizardwrangler.com. Retrieved 2015-04-20. 
    169. -
    170. ^ "Two discontinued browsers". LWN.net. 21 December 2005. Retrieved 2012-08-19.  +
    171. ^ "Two discontinued browsers". LWN.net. 21 December 2005. Retrieved 2012-08-19. 
    172. -
    173. ^ "SeaMonkey trademarks registered!". kairo.at. 2007-05-22. Retrieved 2013-06-10.  +
    174. ^ "SeaMonkey trademarks registered!". kairo.at. 2007-05-22. Retrieved 2013-06-10. 
    175. -
    176. ^ "Bugzilla Installation List". Retrieved 2014-09-18.  +
    177. ^ "Bugzilla Installation List". Retrieved 2014-09-18. 
    178. -
    179. ^ a b Eich, Brendan (21 June 2011). "New JavaScript Engine Module Owner". BrendanEich.com.  +
    180. ^ a b Eich, Brendan (21 June 2011). "New JavaScript Engine Module Owner". BrendanEich.com. 
    181. -
    182. ^ "Bug 759422 - Remove use of e4x in account creation". Bugzilla@Mozilla. 2012-08-17. Retrieved 2012-08-18.  +
    183. ^ "Bug 759422 - Remove use of e4x in account creation". Bugzilla@Mozilla. 2012-08-17. Retrieved 2012-08-18. 
    184. -
    185. ^ "SpiderMonkey". Mozilla Developer Network. 2012-08-15. Retrieved 2012-08-18.  +
    186. ^ "SpiderMonkey". Mozilla Developer Network. 2012-08-15. Retrieved 2012-08-18. 
    187. -
    188. ^ "Rhino History". Mozilla Foundation. Retrieved 2008-03-20.  +
    189. ^ "Rhino History". Mozilla Foundation. Retrieved 2008-03-20. 
    190. -
    191. ^ "Roadmap". Retrieved 10 May 2016.  +
    192. ^ "Roadmap". Retrieved 10 May 2016. 
    193. -
    194. ^ Larabel, Michael. "Servo Continues Making Progress For Shipping Components In Gecko, Browser.html". Phoronix.com. Retrieved 10 May 2016.  +
    195. ^ Larabel, Michael. "Servo Continues Making Progress For Shipping Components In Gecko, Browser.html". Phoronix.com. Retrieved 10 May 2016. 
    196. -
    197. ^ "Mozilla VR". Mozilla VR. Retrieved 2016-10-27.  +
    198. ^ "Mozilla VR". Mozilla VR. Retrieved 2016-10-27. 
    199. -
    200. ^ Persona, Mozilla  +
    201. ^ Persona, Mozilla 
    202. -
    203. ^ "Persona". Mozilla Developer Network. Retrieved 2016-10-27.  +
    204. ^ "Persona". Mozilla Developer Network. Retrieved 2016-10-27. 
    205. -
    206. ^ About Mozilla Webmaker, Mozilla  +
    207. ^ About Mozilla Webmaker, Mozilla 
    208. -
    209. ^ a b Alan Henry. "Mozilla Webmaker Teaches You to Build Web Sites, Apps, and More". Lifehacker. Gawker Media.  +
    210. ^ a b Alan Henry. "Mozilla Webmaker Teaches You to Build Web Sites, Apps, and More". Lifehacker. Gawker Media. 
    211. -
    212. ^ "Air Mozilla". Mozilla Wiki.  +
    213. ^ "Air Mozilla". Mozilla Wiki. 
    214. -
    215. ^ "Air Mozilla Reboot, Phase I".  +
    216. ^ "Air Mozilla Reboot, Phase I". 

    Constant downloads failure in firefox

    -

    External links[edit] +

    External links[edit]

    - +
    - - Wikimedia Commons has media related to Mozilla.
    diff --git a/test/test-pages/wordpress/expected.html b/test/test-pages/wordpress/expected.html index a4d4e61..d2c863c 100644 --- a/test/test-pages/wordpress/expected.html +++ b/test/test-pages/wordpress/expected.html @@ -1,17 +1,11 @@
    -
    +
    -

    - -

    +

    Stack Overflow published its analysis of 2017 hiring trends based on the targeting options employers selected when posting to Stack Overflow Jobs. The report, which compares data from 200 companies since 2015, ranks ReactJS, Docker, and Ansible at the top of the fastest growing skills in demand. When comparing the percentage change from 2015 to 2016, technologies like AJAX, Backbone.js, jQuery, and WordPress are less in demand.

    -

    - -

    +

    Stack Overflow also measured the demand relative to the available developers in different tech skills. The demand for backend, mobile, and database engineers is higher than the number of qualified candidates available. WordPress is last among the oversaturated fields with a surplus of developers relative to available positions.

    -

    - -

    +

    In looking at these results, it’s important to consider the inherent biases within the Stack Overflow ecosystem. In 2016, the site surveyed more than 56,000 developers but noted that the survey was “biased against devs who don’t speak English.” The average age of respondents was 29.6 years old and 92.8% of them were male.

    For two years running, Stack Overflow survey respondents have ranked WordPress among the most dreaded technologies that they would prefer not to use. This may be one reason why employers wouldn’t be looking to advertise positions on the site’s job board, which is the primary source of the data for this report.

    Many IT career forecasts focus more generally on job descriptions and highest paying positions. Stack Overflow is somewhat unique in that it identifies trends in specific tech skills, pulling this data out of how employers are tagging their listings for positions. It presents demand in terms of number of skilled developers relative to available positions, a slightly more complicated approach than measuring demand based on advertised salary. However, Stack Overflow’s data presentation could use some refining.

    @@ -23,4 +17,4 @@

    Regardless of how much credibility you give Stack Overflow’s analysis of hiring trends, the report’s recommendation for those working in technologies oversaturated with developers is a good one: “Consider brushing up on some technologies that offer higher employer demand and less competition.” WordPress’ code base is currently 59% PHP and 27% JavaScript. The percentage of PHP has grown over time, but newer features and improvements to core are also being built in JavaScript. These are both highly portable skills that are in demand on the web.

    -
    +
    \ No newline at end of file diff --git a/test/test-pages/yahoo-1/expected.html b/test/test-pages/yahoo-1/expected.html index 658df1f..28e2867 100644 --- a/test/test-pages/yahoo-1/expected.html +++ b/test/test-pages/yahoo-1/expected.html @@ -1,6 +1,6 @@
    -
    - diff --git a/test/test-pages/yahoo-2/expected.html b/test/test-pages/yahoo-2/expected.html index 4bf65e2..cfac4cc 100644 --- a/test/test-pages/yahoo-2/expected.html +++ b/test/test-pages/yahoo-2/expected.html @@ -1,6 +1,6 @@
    -
    -
    +
    +
    @@ -10,7 +10,8 @@

    In this photo dated Tuesday, Nov, 29, 2016 the Soyuz-FG rocket booster with the Progress MS-04 cargo ship is installed on a launch pad in Baikonur, Kazakhstan. The unmanned Russian cargo space ship Progress MS-04 broke up in the atmosphere over Siberia on Thursday Dec. 1, 2016, just minutes after the launch en route to the International Space Station due to an unspecified malfunction, the Russian space agency said.(Oleg Urusov/ Roscosmos Space Agency Press Service photo via AP)

    -
    +
    +
    @@ -30,4 +31,4 @@
    -
    +
    \ No newline at end of file diff --git a/test/test-pages/yahoo-3/expected.html b/test/test-pages/yahoo-3/expected.html index 4fa27e5..95fedfc 100644 --- a/test/test-pages/yahoo-3/expected.html +++ b/test/test-pages/yahoo-3/expected.html @@ -1,10 +1,10 @@
    -
    -
    +
    +

    'GMA' Cookie Search:

    -
    +
    @@ -12,7 +12,7 @@ -

    A photographer and Navy veteran is fighting back after a photo she posted to Facebook started an online backlash.

    +

    A photographer and Navy veteran is fighting back after a photo she posted to Facebook started an online backlash.

    Vanessa Hicks said she had no idea her photo would be considered controversial. The photo, from a military family’s newborn photo shoot, showed a newborn infant wrapped in an American flag held by his father, who was in his military uniform.

    Hicks, a Navy veteran herself and the wife of an active-duty Navy member, said her intention was to honor the flag as well as her clients, who wanted to incorporate their military service in the photo shoot.

    Pizza Man Making Special Delivery Pizza Delivery to Afghanistan During Super Bowl

    @@ -20,7 +20,7 @@

    Antarctica 'Penguin Post Office' Attracts Record Number of Applicants

    “This is what he was fighting for, his son wrapped in an American flag,” Hicks told ABC News. However, when she posted the image on her page, she started to get comments accusing her of desecrating the flag.

    On one Facebook page an unidentified poster put up her picture writing and wrote they found it was “disrespectful, rude, tacky, disgusting, and against the U.S. Flag Code.”

    -
    +

    View photo

    .
    Vanessa Hicks

    Vanessa Hicks

    @@ -39,6 +39,6 @@
    -
    -
    +
    +
    \ No newline at end of file diff --git a/test/test-pages/youth/expected.html b/test/test-pages/youth/expected.html index 3ffc069..ddf3c90 100644 --- a/test/test-pages/youth/expected.html +++ b/test/test-pages/youth/expected.html @@ -1,7 +1,7 @@
    -
    -
    +
    +

    海外留学生看两会:出国前后关注点大不同

    图为马素湘在澳大利亚悉尼游玩时的近影。

    @@ -35,4 +35,4 @@
    -
    +
    \ No newline at end of file