So finally you're testing your frontend JavaScript code? Great! The more you
write tests, the more confident you are with your code… but how much precisely?
That's where code coverage might
help.
@@ -15,9 +16,9 @@ help.
actually works…
Drinking game for web devs:
- (1) Think of a noun
- (2) Google "<noun>.js"
- (3) If a library with that name exists - drink
— Shay Friedman (@ironshay)
+ (1) Think of a noun
+ (2) Google "<noun>.js"
+ (3) If a library with that name exists - drink
Blanket.js is an easy to install, easy to configure,
@@ -105,13 +106,16 @@ describe("Cow", function() {
Notes:
-
Notice the data-cover attribute we added to the script tag
+
+
Notice the data-cover attribute we added to the script tag
loading the source of our library;
The HTML test file must be served over HTTP for the adapter to
be loaded.
-
Running the tests now gives us something like this:
+
+
Running the tests now gives us something like this:
-
+
+
As you can see, the report at the bottom highlights that we haven't actually
tested the case where an error is raised in case a target name is missing.
We've been informed of that, nothing more, nothing less. We simply know
diff --git a/test/test-pages/002/expected.html b/test/test-pages/002/expected.html
index 0525100..301628c 100644
--- a/test/test-pages/002/expected.html
+++ b/test/test-pages/002/expected.html
@@ -1,4 +1,6 @@
-
For more than a decade the Web has used XMLHttpRequest (XHR) to achieve
+
+
+
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
@@ -13,10 +15,12 @@
The Fetch specification, which
defines the API, nails down the semantics of a user agent fetching a resource.
This, combined with ServiceWorkers, is an attempt to:
-
Improve the offline experience.
+
+
Improve the offline experience.
Expose the building blocks of the Web to the platform as part of the
extensible web movement.
-
As of this writing, the Fetch API is available in Firefox 39 (currently
+
+
As of this writing, the Fetch API is available in Firefox 39 (currently
Nightly) and Chrome 42 (currently dev). Github has a Fetch polyfill.
The fetch() function’s arguments are the same as those passed
to the
- Request() constructor, so you may directly pass arbitrarily
+
+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,
+
+Response. They map directly to the underlying HTTP concepts,
but have
- certain visibility filters in place for privacy and security reasons,
+ certain visibility filters in place for privacy and security reasons,
such as
- supporting CORS rules and ensuring cookies aren’t readable by third parties.
+ supporting CORS rules and ensuring cookies aren’t readable by third parties.
Some of these operations are only useful in ServiceWorkers, but they provide
- a much nicer API to Headers.
+ 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:
-
“none”: default.
+ Possible values are:
+
+
“none”: default.
“request”: guard for a Headers object obtained from a Request (Request.headers).
“request-no-cors”: guard for a Headers object obtained from a Request
created
- with mode “no-cors”.
+ with mode “no-cors”.
“response”: naturally, for Headers obtained from Response (Response.headers).
“immutable”: Mostly used for ServiceWorkers, renders a Headers object
- read-only.
-
The details of how each guard affects the behaviors of the Headers object
+ read-only.
+
+
The details of how each guard affects the behaviors of the Headers object
are
- in the specification. For example,
+ 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.
@@ -137,7 +150,8 @@ console.log(reqHeaders.getAll(}catch(e){
console.log("Cannot pretend to be a bank!");}
-
+
+
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
+ (This is not the same as calling the clone() method, which
is covered in
- the “Reading bodies” section.).
+ the “Reading bodies” section.).
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.
+ values as a second argument to the constructor. This argument is a dictionary.
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)
@@ -181,7 +198,7 @@ console.log(copy.url);
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.
+ a request is always being made to your origin.
var arbitraryUrl = document.getElementById("url-input").value;
fetch(arbitraryUrl,{ mode:"same-origin"}).then(function(res){
@@ -189,7 +206,8 @@ fetch(arbitraryUrl,{ mode:},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”,
@@ -202,7 +220,7 @@ fetch(arbitraryUrl,{ mode:
"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.
+ 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
@@ -213,9 +231,9 @@ u.append('method','fl
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.
@@ -226,25 +244,29 @@ apiCall.then(function(respon
console.log(photo.title);});});
-
+
+
You may not read out the “Date” header since Flickr does not allow it
via
- Access-Control-Expose-Headers.
+
+Access-Control-Expose-Headers.
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".
+ 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
+ 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
+ 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
@@ -265,24 +287,26 @@ apiCall.then(function(respon
The url attribute reflects the URL of the corresponding request.
Response also has a type, which is “basic”, “cors”, “default”,
“error” or
- “opaque”.
-
"basic": normal, same origin response, with all headers exposed
+ “opaque”.
+
+
"basic": normal, same origin response, with all headers exposed
except
- “Set-Cookie” and “Set-Cookie2″.
"error": network error. No useful information describing
the error is available. The Response’s status is 0, headers are empty and
immutable. This is the type for a Response obtained from Response.error().
The “error” type results in the fetch() Promise rejecting with
+
+
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
+ idiomatic way to return a Response to an intercepted request in ServiceWorkers
is:
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.
+ a redirect to url.
Dealing with bodies
@@ -305,7 +330,8 @@ apiCall.then(function(respon
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.
FormData –
currently not supported by either Gecko or Blink. Firefox expects to ship
this in version 39 along with the rest of Fetch.
-
In addition, Request and Response both offer the following methods to
+
+
In addition, Request and Response both offer the following methods to
extract their body. These all return a Promise that is eventually resolved
with the actual content.
-
arrayBuffer()
+
+
arrayBuffer()
blob()
@@ -331,7 +359,8 @@ apiCall.then(function(respon
formData()
-
This is a significant improvement over XHR in terms of ease of use of
+
+
This is a significant improvement over XHR in terms of ease of use of
non-text data!
Request bodies can be set by passing body parameters:
@@ -340,12 +369,14 @@ fetch("/login",{
method:"POST",
body: form
})
-
+
+
Responses take the first argument as the body.
var res =new Response(new File(["chunk","chunk"],"archive.zip",{ type:"application/zip"}));
-
+
+
Both Request and Response (and by extension the fetch() function),
will try to intelligently determine the content type.
Request will also automatically set a “Content-Type” header if none is
@@ -363,11 +394,12 @@ res.text().then(log
This decision allows easing the transition to an eventual stream-based Fetch
API. The intention is to let applications consume data as it arrives, allowing
for JavaScript to deal with larger files like videos, and perform things
@@ -387,16 +419,17 @@ res.text().catch(log(sheep.bodyUsed);// falsevar 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;});});
-
+
+
Future improvements
@@ -409,7 +442,11 @@ res.text().catch(Fetch and
ServiceWorkerspecifications.
For a better web!
-
The author would like to thank Andrea Marchesini, Anne van Kesteren and Ben
+
The author would like to thank Andrea Marchesini, Anne van Kesteren and Ben
Kelly for helping with the specification and implementation.
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/test/test-pages/aclu/expected.html b/test/test-pages/aclu/expected.html
index 1580143..8efcda5 100644
--- a/test/test-pages/aclu/expected.html
+++ b/test/test-pages/aclu/expected.html
@@ -107,7 +107,7 @@
Opting out?
- Some advertisers claim that you can "opt out" of their targeted advertising, and even offer a centralized place meant to help you do so. However, my experience with these tools isn't a positive one. They don't appear to work all of the time. (In a recent experiment I conducted, two advertisers’ opt-out mechanisms failed to take effect.) And while advertisers claim to allow the user to opt out of "interest-based ads," it's not clear that the opt-outs govern data collection itself, rather than just the use of the collected data for displaying ads. Moreover, opting out on their terms requires the use of third-party cookies, thereby enabling another mechanism that other advertisers can then exploit.
+ Some advertisers claim that you can "opt out" of their targeted advertising, and even offer a centralized place meant to help you do so. However, my experience with these tools isn't a positive one. They don't appear to work all of the time. (In a recent experiment I conducted, two advertisers’ opt-out mechanisms failed to take effect.) And while advertisers claim to allow the user to opt out of "interest-based ads," it's not clear that the opt-outs govern data collection itself, rather than just the use of the collected data for displaying ads. Moreover, opting out on their terms requires the use of third-party cookies, thereby enabling another mechanism that other advertisers can then exploit.
It's also not clear how they function over time: How frequently do I need to take these steps? Do they expire? How often should I check back to make sure I’m still opted out? I'd much prefer an approach requiring me to opt in to surveillance and targeting.
diff --git a/test/test-pages/ars-1/expected.html b/test/test-pages/ars-1/expected.html
index 0aecf6e..30ab17d 100644
--- a/test/test-pages/ars-1/expected.html
+++ b/test/test-pages/ars-1/expected.html
@@ -1,6 +1,12 @@
-
-
A flaw in the wildly popular online game Minecraft makes it easy for just about anyone to crash the server hosting the game, according to a computer programmer who has released proof-of-concept code that exploits the vulnerability.
+
+
+
+
+
+
+
+
A flaw in the wildly popular online game Minecraft makes it easy for just about anyone to crash the server hosting the game, according to a computer programmer who has released proof-of-concept code that exploits the vulnerability.
"I thought a lot before writing this post," Pakistan-based developer Ammar Askar wrote in a blog post published Thursday, 21 months, he said, after privately reporting the bug to Minecraft developer Mojang. "On the one hand I don't want to expose thousands of servers to a major vulnerability, yet on the other hand Mojang has failed to act on it."
The bug resides in the networking internals of the Minecraft protocol. It allows the contents of inventory slots to be exchanged, so that, among other things, items in players' hotbars are displayed automatically after logging in. Minecraft items can also store arbitrary metadata in a file format known as Named Binary Tag (NBT), which allows complex data structures to be kept in hierarchical nests. Askar has released proof-of-concept attack code he said exploits the vulnerability to crash any server hosting the game. Here's how it works.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
@@ -17,11 +18,11 @@
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
diff --git a/test/test-pages/base-url-base-element/expected.html b/test/test-pages/base-url-base-element/expected.html
index 5037eb2..3bc1ab4 100644
--- a/test/test-pages/base-url-base-element/expected.html
+++ b/test/test-pages/base-url-base-element/expected.html
@@ -1,4 +1,5 @@
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
@@ -17,11 +18,11 @@
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
diff --git a/test/test-pages/base-url/expected.html b/test/test-pages/base-url/expected.html
index 36981e1..504b249 100644
--- a/test/test-pages/base-url/expected.html
+++ b/test/test-pages/base-url/expected.html
@@ -1,4 +1,5 @@
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
@@ -17,11 +18,11 @@
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
diff --git a/test/test-pages/bbc-1/expected.html b/test/test-pages/bbc-1/expected.html
index ca646fe..1e3c6d3 100644
--- a/test/test-pages/bbc-1/expected.html
+++ b/test/test-pages/bbc-1/expected.html
@@ -1,5 +1,6 @@
-
President Barack Obama has admitted that his failure to pass "common sense gun safety laws" in the US is the greatest frustration of his presidency.
In an interview with the BBC, Mr Obama said it was "distressing" not to have made progress on the issue "even in the face of repeated mass killings".
He vowed to keep trying, but the BBC's North America editor Jon Sopel said the president did not sound very confident.
However, Mr Obama said race relations had improved during his presidency.
Hours after the interview, a gunman opened fire at a cinema in the US state of Louisiana, killing two people and injuring several others before shooting himself.
In a wide-ranging interview, President Obama also said:
+
President Barack Obama has admitted that his failure to pass "common sense gun safety laws" in the US is the greatest frustration of his presidency.
In an interview with the BBC, Mr Obama said it was "distressing" not to have made progress on the issue "even in the face of repeated mass killings".
He vowed to keep trying, but the BBC's North America editor Jon Sopel said the president did not sound very confident.
However, Mr Obama said race relations had improved during his presidency.
Hours after the interview, a gunman opened fire at a cinema in the US state of Louisiana, killing two people and injuring several others before shooting himself.
In a wide-ranging interview, President Obama also said:
Mr Obama lands in Kenya later on Friday for his first visit since becoming president.
But with just 18 months left in power, he said gun control was the area where he has been "most frustrated and most stymied" since coming to power in 2009.
"If you look at the number of Americans killed since 9/11 by terrorism, it's less than 100. If you look at the number that have been killed by gun violence, it's in the tens of thousands," Mr Obama said.
Mr Obama lands in Kenya later on Friday for his first visit since becoming president.
But with just 18 months left in power, he said gun control was the area where he has been "most frustrated and most stymied" since coming to power in 2009.
"If you look at the number of Americans killed since 9/11 by terrorism, it's less than 100. If you look at the number that have been killed by gun violence, it's in the tens of thousands," Mr Obama said.
+
+
The president said he would continue fighting for greater gun control laws
-
"For us not to be able to resolve that issue has been something that is distressing," he added.
Mr Obama has pushed for stricter gun control throughout his presidency but has been unable to secure any significant changes to the laws.
After nine African-American churchgoers were killed in South Carolina in June, he admitted "politics in this town" meant there were few options available.
Analysis: Jon Sopel, BBC News, Washington
Nine months ago, the president seemed like a spent force, after taking a beating in the midterm elections, during which members of his own party were reluctant to campaign on his record.
But the man sat before me today was relaxed and confident, buoyed by a string of "wins" on healthcare, Cuba and Iran, after bitter and ongoing battles with his many critics.
There was a momentary flicker across the president's face as if to say "You think you got me?" before his smile returned and he proceeded to talk about how Congress would come round.
But notably, he did not give a direct answer to that question, which leaves me with the impression that he has persuaded precisely zero.
On race relations, Mr Obama said recent concerns around policing and mass incarcerations were "legitimate and deserve intense attention" but insisted progress had been made.
Children growing up during the eight years of his presidency "will have a different view of race relations in this country and what's possible," he said.
"There are going to be tensions that arise. But if you look at my daughters' generation, they have an attitude about race that's entirely different than even my generation."
Talking about how he was feeling after his recent successes, he said "every president, every leader has strengths and weaknesses".
"One of my strengths is I have a pretty even temperament. I don't get too high when it's high and I don't get too low when it's low," he said.
+
"For us not to be able to resolve that issue has been something that is distressing," he added.
Mr Obama has pushed for stricter gun control throughout his presidency but has been unable to secure any significant changes to the laws.
After nine African-American churchgoers were killed in South Carolina in June, he admitted "politics in this town" meant there were few options available.
Analysis: Jon Sopel, BBC News, Washington
Nine months ago, the president seemed like a spent force, after taking a beating in the midterm elections, during which members of his own party were reluctant to campaign on his record.
But the man sat before me today was relaxed and confident, buoyed by a string of "wins" on healthcare, Cuba and Iran, after bitter and ongoing battles with his many critics.
There was a momentary flicker across the president's face as if to say "You think you got me?" before his smile returned and he proceeded to talk about how Congress would come round.
But notably, he did not give a direct answer to that question, which leaves me with the impression that he has persuaded precisely zero.
On race relations, Mr Obama said recent concerns around policing and mass incarcerations were "legitimate and deserve intense attention" but insisted progress had been made.
Children growing up during the eight years of his presidency "will have a different view of race relations in this country and what's possible," he said.
"There are going to be tensions that arise. But if you look at my daughters' generation, they have an attitude about race that's entirely different than even my generation."
Talking about how he was feeling after his recent successes, he said "every president, every leader has strengths and weaknesses".
"One of my strengths is I have a pretty even temperament. I don't get too high when it's high and I don't get too low when it's low," he said.
+
+
Kenya is getting ready to welcome the US president
Kenya trip
Mr Obama was speaking to the BBC at the White House before departing for Kenya.
His father was Kenyan and the president is expected to meet relatives in Nairobi.
Mr Obama has faced criticism in the country after the US legalised gay marriage. However, in his interview, the president said he would not fall silent on the issue.
"I am not a fan of discrimination and bullying of anybody on the basis of race, on the basis of religion, on the basis of sexual orientation or gender," he said.
The president also admitted that some African governments, including Kenya's, needed to improve their records on human rights and democracy. However, he defended his decision to engage with and visit those governments.
"Well, they're not ideal institutions. But what we found is, is that when we combined blunt talk with engagement, that gives us the best opportunity to influence and open up space for civil society."
Mr Obama will become the first US president to address the African Union when he travels on to Ethiopia on Sunday.
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.
So what's a GreenPak?
-
Silego Technology is a fabless semiconductor company located in the SF Bay area, which makes (among other things) a line of programmable logic devices known as GreenPak. Their 5th generation parts were just announced, but I started this project before that happened so I'm still targeting the 4th generation.
GreenPak devices are kind of like itty bitty PSoCs - they have a mixed signal fabric with an ADC, DACs, comparators, voltage references, plus a digital LUT/FF fabric and some typical digital MCU peripherals like counters and oscillators (but no CPU).
It's actually an interesting architecture - FPGAs (including some devices marketed as CPLDs) are a 2D array of LUTs connected via wires to adjacent cells, and true (product term) CPLDs are a star topology of AND-OR arrays connected by a crossbar. GreenPak, on the other hand, is a star topology of LUTs, flipflops, and analog/digital hard IP connected to a crossbar.
Without further ado, here's a block diagram showing all the cool stuff you get in the SLG46620V:
-
+
Silego Technology is a fabless semiconductor company located in the SF Bay area, which makes (among other things) a line of programmable logic devices known as GreenPak. Their 5th generation parts were just announced, but I started this project before that happened so I'm still targeting the 4th generation.
GreenPak devices are kind of like itty bitty PSoCs - they have a mixed signal fabric with an ADC, DACs, comparators, voltage references, plus a digital LUT/FF fabric and some typical digital MCU peripherals like counters and oscillators (but no CPU).
It's actually an interesting architecture - FPGAs (including some devices marketed as CPLDs) are a 2D array of LUTs connected via wires to adjacent cells, and true (product term) CPLDs are a star topology of AND-OR arrays connected by a crossbar. GreenPak, on the other hand, is a star topology of LUTs, flipflops, and analog/digital hard IP connected to a crossbar.
Without further ado, here's a block diagram showing all the cool stuff you get in the SLG46620V:
+
+
+
+
-
SLG46620V block diagram (from device datasheet)
-
- They're also tiny (the SLG46620V is a 20-pin 0.4mm pitch STQFN measuring 2x3 mm, and the lower gate count SLG46140V is a mere 1.6x2 mm) and probably the cheapest programmable logic device on the market - $0.50 in low volume and less than $0.40 in larger quantities.
The Vdd range of GreenPak4 is huge, more like what you'd expect from an MCU than an FPGA! It can run on anything from 1.8 to 5V, although performance is only specified at 1.8, 3.3, and 5V nominal voltages. There's also a dual-rail version that trades one of the GPIO pins for a second power supply pin, allowing you to interface to logic at two different voltage levels.
To support low-cost/space-constrained applications, they even have the configuration memory on die. It's one-time programmable and needs external Vpp to program (presumably Silego didn't want to waste die area on charge pumps that would only be used once) but has a SRAM programming mode for prototyping.
The best part is that the development software (GreenPak Designer) is free of charge and provided for all major operating systems including Linux! Unfortunately, the only supported design entry method is schematic entry and there's no way to write your design in a HDL.
While schematics may be fine for quick tinkering on really simple designs, they quickly get unwieldy. The nightmare of a circuit shown below is just a bunch of counters hooked up to LEDs that blink at various rates.
-
+
+
+
SLG46620V block diagram (from device datasheet)
+
+
+
+ They're also tiny (the SLG46620V is a 20-pin 0.4mm pitch STQFN measuring 2x3 mm, and the lower gate count SLG46140V is a mere 1.6x2 mm) and probably the cheapest programmable logic device on the market - $0.50 in low volume and less than $0.40 in larger quantities.
The Vdd range of GreenPak4 is huge, more like what you'd expect from an MCU than an FPGA! It can run on anything from 1.8 to 5V, although performance is only specified at 1.8, 3.3, and 5V nominal voltages. There's also a dual-rail version that trades one of the GPIO pins for a second power supply pin, allowing you to interface to logic at two different voltage levels.
To support low-cost/space-constrained applications, they even have the configuration memory on die. It's one-time programmable and needs external Vpp to program (presumably Silego didn't want to waste die area on charge pumps that would only be used once) but has a SRAM programming mode for prototyping.
The best part is that the development software (GreenPak Designer) is free of charge and provided for all major operating systems including Linux! Unfortunately, the only supported design entry method is schematic entry and there's no way to write your design in a HDL.
While schematics may be fine for quick tinkering on really simple designs, they quickly get unwieldy. The nightmare of a circuit shown below is just a bunch of counters hooked up to LEDs that blink at various rates.
+
+
+
+
-
Schematic from hell!
-
+
+
+
Schematic from hell!
+
+
+
As if this wasn't enough of a problem, the largest GreenPak4 device (the SLG46620V) is split into two halves with limited routing between them, and the GUI doesn't help the user manage this complexity at all - you have to draw your schematic in two halves and add "cross connections" between them.
The icing on the cake is that schematics are a pain to diff and collaborate on. Although GreenPak schematics are XML based, which is a touch better than binary, who wants to read a giant XML diff and try to figure out what's going on in the circuit?
This isn't going to be a post on the quirks of Silego's software, though - that would be boring. As it turns out, there's one more exciting feature of these chips that I didn't mention earlier: the configuration bitstream is 100% documented in the device datasheet! This is unheard of in the programmable logic world. As Nick of Arachnid Labs says, the chip is "just dying for someone to write a VHDL or Verilog compiler for it". As you can probably guess by from the title of this post, I've been busy doing exactly that.
Great! How does it work?
-
Rather than wasting time writing a synthesizer, I decided to write a GreenPak technology library for Clifford Wolf's excellent open source synthesis tool, Yosys, and then make a place-and-route tool to turn that into a final netlist. The post-PAR netlist can then be loaded into GreenPak Designer in order to program the device.
The first step of the process is to run the "synth_greenpak4" Yosys flow on the Verilog source. This runs a generic RTL synthesis pass, then some coarse-grained extraction passes to infer shift register and counter cells from behavioral logic, and finally maps the remaining logic to LUT/FF cells and outputs a JSON-formatted netlist.
Once the design has been synthesized, my tool (named, surprisingly, gp4par) is then launched on the netlist. It begins by parsing the JSON and constructing a directed graph of cell objects in memory. A second graph, containing all of the primitives in the device and the legal connections between them, is then created based on the device specified on the command line. (As of now only the SLG46620V is supported; the SLG46621V can be added fairly easily but the SLG46140V has a slightly different microarchitecture which will require a bit more work to support.)
After the graphs are generated, each node in the netlist graph is assigned a numeric label identifying the type of cell and each node in the device graph is assigned a list of legal labels: for example, an I/O buffer site is legal for an input buffer, output buffer, or bidirectional buffer.
-
+
Rather than wasting time writing a synthesizer, I decided to write a GreenPak technology library for Clifford Wolf's excellent open source synthesis tool, Yosys, and then make a place-and-route tool to turn that into a final netlist. The post-PAR netlist can then be loaded into GreenPak Designer in order to program the device.
The first step of the process is to run the "synth_greenpak4" Yosys flow on the Verilog source. This runs a generic RTL synthesis pass, then some coarse-grained extraction passes to infer shift register and counter cells from behavioral logic, and finally maps the remaining logic to LUT/FF cells and outputs a JSON-formatted netlist.
Once the design has been synthesized, my tool (named, surprisingly, gp4par) is then launched on the netlist. It begins by parsing the JSON and constructing a directed graph of cell objects in memory. A second graph, containing all of the primitives in the device and the legal connections between them, is then created based on the device specified on the command line. (As of now only the SLG46620V is supported; the SLG46621V can be added fairly easily but the SLG46140V has a slightly different microarchitecture which will require a bit more work to support.)
After the graphs are generated, each node in the netlist graph is assigned a numeric label identifying the type of cell and each node in the device graph is assigned a list of legal labels: for example, an I/O buffer site is legal for an input buffer, output buffer, or bidirectional buffer.
+
+
+
+
-
Example labeling for a subset of the netlist and device graphs
-
- The labeled nodes now need to be placed. The initial placement uses a simple greedy algorithm to create a valid (although not necessarily optimal or even routable) placement:
Loop over the cells in the netlist. If any cell has a LOC constraint, which locks the cell to a specific physical site, attempt to assign the node to the specified site. If the specified node is the wrong type, doesn't exist, or is already used by another constrained node, the constraint is invalid so fail with an error.
+
+
+
Example labeling for a subset of the netlist and device graphs
+
+
+
+ The labeled nodes now need to be placed. The initial placement uses a simple greedy algorithm to create a valid (although not necessarily optimal or even routable) placement:
+
Loop over the cells in the netlist. If any cell has a LOC constraint, which locks the cell to a specific physical site, attempt to assign the node to the specified site. If the specified node is the wrong type, doesn't exist, or is already used by another constrained node, the constraint is invalid so fail with an error.
Loop over all of the unconstrained cells in the netlist and assign them to the first unused site with the right label. If none are available, the design is too big for the device so fail with an error.
- Once the design is placed, the placement optimizer then loops over the design and attempts to improve it. A simulated annealing algorithm is used, where changes to the design are accepted unconditionally if they make the placement better, and with a random, gradually decreasing probability if they make it worse. The optimizer terminates when the design receives a perfect score (indicating an optimal placement) or if it stops making progress for several iterations. Each iteration does the following:
Compute a score for the current design based on the number of unroutable nets, the amount of routing congestion (number of nets crossing between halves of the device), and static timing analysis (not yet implemented, always zero).
+ Once the design is placed, the placement optimizer then loops over the design and attempts to improve it. A simulated annealing algorithm is used, where changes to the design are accepted unconditionally if they make the placement better, and with a random, gradually decreasing probability if they make it worse. The optimizer terminates when the design receives a perfect score (indicating an optimal placement) or if it stops making progress for several iterations. Each iteration does the following:
+
Compute a score for the current design based on the number of unroutable nets, the amount of routing congestion (number of nets crossing between halves of the device), and static timing analysis (not yet implemented, always zero).
Make a list of nodes that contributed to this score in some way (having some attached nets unroutable, crossing to the other half of the device, or failing timing).
Remove nodes from the list that are LOC'd to a specific location since we're not allowed to move them.
Remove nodes from the list that have only one legal placement in the device (for example, oscillator hard IP) since there's nowhere else for them to go.
Pick a node from the remainder of the list at random. Call this our pivot.
Find a list of candidate placements for the pivot:
-
Consider all routable placements in the other half of the device.
+
+
Consider all routable placements in the other half of the device.
If none were found, consider all routable placements anywhere in the device.
If none were found, consider all placements anywhere in the device even if they're not routable.
-
Pick one of the candidates at random and move the pivot to that location. If another cell in the netlist is already there, put it in the vacant site left by the pivot.
+
+
Pick one of the candidates at random and move the pivot to that location. If another cell in the netlist is already there, put it in the vacant site left by the pivot.
Re-compute the score for the design. If it's better, accept this change and start the next iteration.
If the score is worse, accept it with a random probability which decreases as the iteration number goes up. If the change is not accepted, restore the previous placement.
- After optimization, the design is checked for routability. If any edges in the netlist graph don't correspond to edges in the device graph, the user probably asked for something impossible (for example, trying to hook a flipflop's output to a comparator's reference voltage input) so fail with an error.
The design is then routed. This is quite simple due to the crossbar structure of the device. For each edge in the netlist:
If dedicated (non-fabric) routing is used for this path, configure the destination's input mux appropriately and stop.
+ After optimization, the design is checked for routability. If any edges in the netlist graph don't correspond to edges in the device graph, the user probably asked for something impossible (for example, trying to hook a flipflop's output to a comparator's reference voltage input) so fail with an error.
The design is then routed. This is quite simple due to the crossbar structure of the device. For each edge in the netlist:
+
If dedicated (non-fabric) routing is used for this path, configure the destination's input mux appropriately and stop.
If the source and destination are in the same half of the device, configure the destination's input mux appropriately and stop.
A cross-connection must be used. Check if we already used one to bring the source signal to the other half of the device. If found, configure the destination to route from that cross-connection and stop.
Check if we have any cross-connections left going in this direction. If they're all used, the design is unroutable due to congestion so fail with an error.
Pick the next unused cross-connection and configure it to route from the source. Configure the destination to route from the cross-connection and stop.
- Once routing is finished, run a series of post-PAR design rule checks. These currently include the following:
If any node has no loads, generate a warning
+ Once routing is finished, run a series of post-PAR design rule checks. These currently include the following:
+
If any node has no loads, generate a warning
If an I/O buffer is connected to analog hard IP, fail with an error if it's not configured in analog mode.
Some signals (such as comparator inputs and oscillator power-down controls) are generated by a shared mux and fed to many loads. If different loads require conflicting settings for the shared mux, fail with an error.
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?”
+
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?”
@@ -33,7 +39,7 @@
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
+
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
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.
@@ -14,7 +14,7 @@
-
+
@@ -37,7 +37,7 @@
-
+
@@ -55,7 +55,7 @@
-
+
@@ -70,7 +70,7 @@
-
+
@@ -94,6 +94,7 @@
+
Business news in pictures
@@ -114,7 +115,7 @@
-
+
@@ -126,11 +127,14 @@
7. Always made sure the hand towels are clean when you arrive
Forrest Jones made a discovery when he was helping out with the housekeepers. “You know where you almost always find a hand towel in any recently-vacated hotel room that was occupied by a guy? On the floor, next to the bed, about halfway down, maybe a little toward the foot of the bed. Same spot in the floor, next to almost every bed occupied by a man, in every room. I'll leave the rest to your imagination,” he said.
\ 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 46a3f32..2321ff7 100644
--- a/test/test-pages/buzzfeed-1/expected.html
+++ b/test/test-pages/buzzfeed-1/expected.html
@@ -15,13 +15,13 @@
-
+
Facebook
-
+
Facebook
@@ -36,6 +36,7 @@
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.”
"Bartleby the Scrivener: A Story of Wall-Street " (1853)
+
"Bartleby the Scrivener: A Story of Wall-Street " (1853)
Herman Melville
-
+
Prepared by Ann
Woodlief, Virginia Commonwealth University
@@ -1383,4 +1386,5 @@
Ah
Bartleby! Ah humanity!
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/test/test-pages/cnet-svg-classes/expected-metadata.json b/test/test-pages/cnet-svg-classes/expected-metadata.json
index be68e31..632df58 100644
--- a/test/test-pages/cnet-svg-classes/expected-metadata.json
+++ b/test/test-pages/cnet-svg-classes/expected-metadata.json
@@ -1,8 +1,8 @@
{
- "Author": null,
+ "Author": "por \n \n \n César Salza",
"Direction": null,
"Excerpt": "Twitter Lite llega a 11 países de América Latina, para ayudar a los usuarios con mala señal de sus redes móviles.",
"Image": "https:\/\/cdn1.cnet.com\/img\/JumVcu1ZSLtPP8ui0UWaSlgi5RU=\/670x503\/2017\/12\/01\/b36ce794-e0b8-495c-a198-184923a8f4e9\/twitter-lite.jpg",
"Title": "Twitter Lite se estrena en México, Venezuela y otros nueve países",
"SiteName": "CNET en Español"
-}
+}
\ No newline at end of file
diff --git a/test/test-pages/cnet-svg-classes/expected.html b/test/test-pages/cnet-svg-classes/expected.html
index 1b63512..58f78ea 100644
--- a/test/test-pages/cnet-svg-classes/expected.html
+++ b/test/test-pages/cnet-svg-classes/expected.html
@@ -1,23 +1,29 @@
-
-
+
+
Twitter Lite estará disponible en Google Play Store en 11 países de América Latina.
Twitter
-
Twitter ha dado a conocer que Twitter Lite llegará a un total de 24 nuevos países a partir de hoy, 11 de ellos de América Latina.
-
Según explicó en un comunicadoTwitter Lite ahora estará disponible en Bolivia, Brasil, Chile, Colombia, Costa Rica, Ecuador, México, Panamá, Perú, El Salvador y Venezuela.
+
+
+
Twitter ha dado a conocer que Twitter Lite llegará a un total de 24 nuevos países a partir de hoy, 11 de ellos de América Latina.
+
Según explicó en un comunicadoTwitter Lite ahora estará disponible en Bolivia, Brasil, Chile, Colombia, Costa Rica, Ecuador, México, Panamá, Perú, El Salvador y Venezuela.
Twitter Lite es la versión ligera de la aplicación de la red social para Android, disponible en la Google Play Store. Con este app los usuarios que experimentan fallos de red o que viven en países con redes con poca velocidad de conexión como Venezuela podrán descargar los tuits de forma más rápida.
Entre sus novedades, Twitter Lite permite la carga rápida de tuits en redes 2G y 3G, y ofrece ayuda offline en caso de que pierdas tu conexión; a eso debemos sumar que minimiza el uso de datos y ofrece un modo de ahorro, en el que únicamente se descargan las fotos o videos de los tuits que quieres ver.
Además, el app ocupa menos espacio en tu teléfono móvil, al reducir a 3MB su peso.
-
Twitter dio a conocer Twitter Lite en abril en India, y desde entonces ha estado trabajando para llevarlo a más países. La empresa en los últimos meses también se ha involucrado de forma definitiva en la eliminación de los abusos en la red social, tomando medidas incluso en la verificación de cuentas.
+
Twitter dio a conocer Twitter Lite en abril en India, y desde entonces ha estado trabajando para llevarlo a más países. La empresa en los últimos meses también se ha involucrado de forma definitiva en la eliminación de los abusos en la red social, tomando medidas incluso en la verificación de cuentas.
+
-
+
+
+
Reproduciendo:Mira esto: Google Assistant mejora, hay más cambios en Twitter y...
- 8:09
+ 8:09
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/test/test-pages/cnet/expected-metadata.json b/test/test-pages/cnet/expected-metadata.json
index 773cbb9..d51b852 100644
--- a/test/test-pages/cnet/expected-metadata.json
+++ b/test/test-pages/cnet/expected-metadata.json
@@ -1,8 +1,8 @@
{
- "Author": "Steven Musil",
+ "Author": "by \n\n \n Steven Musil\n \n\n\n January 18, 2017 11:00 PM PST\n \n \n \n \n \n \n\n \n @stevenmusil",
"Direction": null,
"Excerpt": "Facebook CEO says be a friend and have a shared vision, but scare them when you have to and move fast.",
"Image": "https:\/\/cnet3.cbsistatic.com\/img\/1JaRRjqhoGxDVkFxTRRWkZgyK2Q=\/670x503\/2014\/03\/21\/863df5d9-e8b8-4b38-851b-5e3f77f2cf0e\/mark-zuckerberg-facebook-home-10671610x407.jpg",
"Title": "Zuckerberg offers peek at Facebook's acquisition strategies",
"SiteName": "CNET"
-}
+}
\ No newline at end of file
diff --git a/test/test-pages/cnet/expected.html b/test/test-pages/cnet/expected.html
index 4f401da..f9a3b74 100644
--- a/test/test-pages/cnet/expected.html
+++ b/test/test-pages/cnet/expected.html
@@ -1,15 +1,17 @@
-
+
-
+
Facebook CEO Mark Zuckerberg, the man with the acquisition plan.
Photo by James Martin/CNET
-
Anyone who has ever been involved in closing a billion-dollar acquisition deal will tell you that you don't go in without a clear, well thought out plan.
+
+
+
Anyone who has ever been involved in closing a billion-dollar acquisition deal will tell you that you don't go in without a clear, well thought out plan.
Facebook CEO Mark Zuckerberg knows a thing or two about how to seal the deal on blockbuster buys. After all, he's the man behind his company's $19 billion acquisition of WhatsApp, he personally brokered its $1 billion buyout of Instagram and closed the $3 billion deal to buy Oculus VR.
-
Zuckerberg offered a primer on the strategies he and his company employ when they see an attractive target during testimony Tuesday in a lawsuit with ZeniMax Media, which accuses Oculus and Facebook of "misappropriating" trade secrets and copyright infringement. At the heart of the lawsuit is technology that helped create liftoff for virtual reality, one of the hottest gadget trends today.
-
A key Facebook approach is building a long-term relationship with your target, Zuckerberg said at the trial. These deals don't just pop up over night, he said according to a transcript reviewed by Business Insider. They take time to cultivate.
+
Zuckerberg offered a primer on the strategies he and his company employ when they see an attractive target during testimony Tuesday in a lawsuit with ZeniMax Media, which accuses Oculus and Facebook of "misappropriating" trade secrets and copyright infringement. At the heart of the lawsuit is technology that helped create liftoff for virtual reality, one of the hottest gadget trends today.
+
A key Facebook approach is building a long-term relationship with your target, Zuckerberg said at the trial. These deals don't just pop up over night, he said according to a transcript reviewed by Business Insider. They take time to cultivate.
I've been building relationships, at least in Instagram and the WhatsApp cases, for years with the founders and the people that are involved in these companies, which made [it] so that when it became time or when we thought it was the right time to move, we felt like we had a good amount of context and had good relationships so that we could move quickly, which was competitively important and why a lot of these acquisitions, I think, came to us instead of our competitors and ended up being very good acquisitions over time that a lot of competitors wished they had gotten instead.
@@ -32,7 +34,7 @@
-
Tech Enabled: CNET chronicles tech's role in providing new kinds of accessibility. Check it out here.
+
Tech Enabled: CNET chronicles tech's role in providing new kinds of accessibility. Check it out here.
Technically Literate: Original works of short fiction with unique perspectives on tech, exclusively on CNET. Here.
@@ -40,4 +42,5 @@
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/test/test-pages/cnn/expected.html b/test/test-pages/cnn/expected.html
index 552455f..b61239b 100644
--- a/test/test-pages/cnn/expected.html
+++ b/test/test-pages/cnn/expected.html
@@ -10,6 +10,11 @@
+
+
+
+
+
Powered by SmartAsset.com
@@ -32,7 +37,7 @@
The report also suggested the U.S. might not be the "jobs machine" it thinks it is, when compared to other countries.
It ranked near the bottom of the pack based on the levels of unemployment among men and women of prime working age. The study determined this by taking the ratio of employed men and women between the ages of 25 and 54 compared to the total population of each country.
-
The overall rankings of the countries were as follows: 1. Finland 2. Norway 3. Australia 4. Canada 5. Germany 6. France 7. United Kingdom 8. Italy 9. Spain 10. United States
+
The overall rankings of the countries were as follows: 1. Finland 2. Norway 3. Australia 4. Canada 5. Germany 6. France 7. United Kingdom 8. Italy 9. Spain 10. United States
diff --git a/test/test-pages/daringfireball-1/expected.html b/test/test-pages/daringfireball-1/expected.html
index 6c3f154..2c0b309 100644
--- a/test/test-pages/daringfireball-1/expected.html
+++ b/test/test-pages/daringfireball-1/expected.html
@@ -7,10 +7,11 @@
Daring Fireball is written and produced by John Gruber.
Articles and links are published through Movable Type. In addition to my own SmartyPants and Markdown plug-ins, Daring Fireball uses several excellent Movable Type plug-ins, including Brad Choate’s MT-Regex and MT-IfEmpty, and Nat Irons’s Amputator.
Stats are tracked using Mint. Additional web nerdery, including the membership system, is fueled by Perl, PHP, and MySQL.
@@ -33,6 +37,9 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/test/test-pages/different-sources-for-images/expected.html b/test/test-pages/different-sources-for-images/expected.html
index 93f4c92..aa03b79 100644
--- a/test/test-pages/different-sources-for-images/expected.html
+++ b/test/test-pages/different-sources-for-images/expected.html
@@ -1,4 +1,5 @@
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
@@ -8,11 +9,11 @@
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Images
-
-
-
-
-
+
+
+
+
+
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
diff --git a/test/test-pages/ehow-1/expected.html b/test/test-pages/ehow-1/expected.html
index 397322e..a6f0c65 100644
--- a/test/test-pages/ehow-1/expected.html
+++ b/test/test-pages/ehow-1/expected.html
@@ -2,15 +2,20 @@
-
+
+
+
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 (Lucy Akins)
+
+ Glass cloche terrariums (Lucy Akins)
+
-
What You'll Need:
Cloche
+
What You'll Need:
+
Cloche
Planter saucer, small shallow dish or desired platform
Floral foam oasis
Ruler
@@ -20,14 +25,17 @@
Moss
Tweezers
Other small decorative items (optional)
-
+
+
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. (Lucy Akins)
+
+ Dig a hole in the oasis. (Lucy Akins)
+
@@ -35,60 +43,82 @@
Step 2
Insert your plant into the hole.
- Orchid in foam oasis (Lucy Akins)
+
+ Orchid in foam oasis (Lucy Akins)
+
Step 3
You can add various plants if you wish.
- Various foliage (Lucy Akins)
+
+ Various foliage (Lucy Akins)
+
Step 4
Using floral pins, attach enough moss around the oasis to cover it.
- Attach moss. (Lucy Akins)
+
+ Attach moss. (Lucy Akins)
+
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. (Lucy Akins)
+
+ Place cloche over oasis. (Lucy Akins)
+
Step 6
Simply pull down the moss with tweezers or insert more moss to fill in the empty spaces.
- Rearrange moss. (Lucy Akins)
+
+ Rearrange moss. (Lucy Akins)
+
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. (Lucy Akins)
+
+ Place cloche on a platform to sit on. (Lucy Akins)
+
Step 8
This particular terrarium rests on a planter saucer and features a small white pumpkin.
- Cloche placed on a terracotta saucer (Lucy Akins)
+
+ Cloche placed on a terracotta saucer (Lucy Akins)
+
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 (Lucy Akins)
+
+ Placed on a wooden slice (Lucy Akins)
+
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 (Lucy Akins)
+
+ Cloche terrarium (Lucy Akins)
+
-
Featured
+
+
+
+
Featured
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/test/test-pages/ehow-2/expected.html b/test/test-pages/ehow-2/expected.html
index ea7d138..b929634 100644
--- a/test/test-pages/ehow-2/expected.html
+++ b/test/test-pages/ehow-2/expected.html
@@ -1,27 +1,45 @@
-
+
+
+
+
+
+
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. 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.
-
+
+
+
+
(Mike Watson Images/Moodboard/Getty)
-
+
+
@@ -30,8 +48,12 @@
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.
-
- Thomas Jackson/Digital Vision/Getty Images
+
+
+
+
+ Thomas Jackson/Digital Vision/Getty Images
+
@@ -41,8 +63,12 @@
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.
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.
-
- evgenyb/iStock/Getty Images
+
+
+
+
+ evgenyb/iStock/Getty Images
+
@@ -62,8 +92,12 @@
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.
-
- Kane Skennar/Photodisc/Getty Images
+
+
+
+
+ Kane Skennar/Photodisc/Getty Images
+
@@ -72,8 +106,12 @@
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.
-
- Mike Watson Images/Moodboard/Getty
+
+
+
+
+ Mike Watson Images/Moodboard/Getty
+
@@ -83,8 +121,12 @@
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.
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.
-
- Mark Stout/iStock/Getty Images
+
+
+
+
+ Mark Stout/iStock/Getty Images
+
@@ -105,20 +151,26 @@
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.
-
+
+
+
\ No newline at end of file
diff --git a/test/test-pages/embedded-videos/expected.html b/test/test-pages/embedded-videos/expected.html
index 327e650..5ad8919 100644
--- a/test/test-pages/embedded-videos/expected.html
+++ b/test/test-pages/embedded-videos/expected.html
@@ -1,4 +1,5 @@
+
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
@@ -7,13 +8,13 @@
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Videos
At root
-
-
-
+
+
+
In a paragraph
-
+
In a div
-
+
Foo
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
diff --git a/test/test-pages/engadget/expected.html b/test/test-pages/engadget/expected.html
index 44a2afe..4372cdf 100644
--- a/test/test-pages/engadget/expected.html
+++ b/test/test-pages/engadget/expected.html
@@ -1,5 +1,13 @@
-
Not worth
it if you don’t have a 4K TV
@@ -97,7 +115,8 @@
Still no VR
support
-
+
+
@@ -118,7 +137,7 @@
Hardware
-
+
Despite all the power inside, the One X is
Microsoft's smallest console to date. It looks
similar to the Xbox One S, except it has an entirely
@@ -136,7 +155,7 @@
That additional horsepower means the Xbox One X can
run more games in full native 4K than the Sony's
console.
-
+
Along the front, there's the slot-loading 4K Blu-ray
drive, a physical power button, a single USB port
and a controller pairing button. And around back,
@@ -155,8 +174,11 @@
@@ -376,7 +409,7 @@
more widely supported, but it would have been nice
to see Dolby's, too.
-
+
And speaking of Dolby technology, Microsoft is also
highlighting Atmos support on the One X, just like
@@ -410,8 +443,11 @@
- Devindra Hardawar/AOL
-
+
+ Devindra Hardawar/AOL
+
+
+
@@ -449,7 +485,7 @@
PC, you won't be missing out on much by ditching
consoles.
Wrap-up
-
+
Ultimately, the Xbox One X offers some major
performance upgrades that gamers will notice --
especially if you're coming from an original Xbox
@@ -463,17 +499,23 @@
-
+
+
-
+
+
+
+
From around the web
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/test/test-pages/fortressofsolitude/expected-metadata.json b/test/test-pages/fortressofsolitude/expected-metadata.json
index 8405f67..6eaca95 100644
--- a/test/test-pages/fortressofsolitude/expected-metadata.json
+++ b/test/test-pages/fortressofsolitude/expected-metadata.json
@@ -1,5 +1,5 @@
{
- "Author": "Written by Edward Wallace",
+ "Author": null,
"Direction": null,
"Excerpt": "Just when you think the marketing behind the film couldn't get any more amazing, they go and release a music video from the Deadpool 2 soundtrack starring Canadian singer Céline Dion.",
"Image": "http:\/\/www.fortressofsolitude.co.za\/wp-content\/uploads\/2018\/05\/Céline-Dion-Belches-Her-Way-Onto-Deadpool-2s-Soundtrack.jpg",
diff --git a/test/test-pages/fortressofsolitude/expected.html b/test/test-pages/fortressofsolitude/expected.html
index 5dc6791..91d6a45 100644
--- a/test/test-pages/fortressofsolitude/expected.html
+++ b/test/test-pages/fortressofsolitude/expected.html
@@ -1 +1 @@
-
Ryan Reynolds never stops surprising fans with his Deadpool, a.k.a. the Merc with the Mouth, persona. Just when you think the marketing behind the film couldn’t get any more amazing, they go and release a music video from the Deadpool 2 soundtrack starring Canadian singer Céline Dion. Yes, the one who sang the Titanic theme song. Your eyes do not deceive you.
“What’s left to say? These prayers ain’t working anymore. Every word shot down in flames. What’s left to do with these broken pieces on the floor? I’m losing my voice calling on you,” Dion croons in the video for “Ashes”. Near the end of it, the filthy, foul-mouthed Deadpool shows up in a surprising twist mentioning that he should have gotten N’sync instead.
Deadpool 2 opens in theatres on May 18.
\ No newline at end of file
+
Ryan Reynolds never stops surprising fans with his Deadpool, a.k.a. the Merc with the Mouth, persona. Just when you think the marketing behind the film couldn’t get any more amazing, they go and release a music video from the Deadpool 2 soundtrack starring Canadian singer Céline Dion. Yes, the one who sang the Titanic theme song. Your eyes do not deceive you.
“What’s left to say? These prayers ain’t working anymore. Every word shot down in flames. What’s left to do with these broken pieces on the floor? I’m losing my voice calling on you,” Dion croons in the video for “Ashes”. Near the end of it, the filthy, foul-mouthed Deadpool shows up in a surprising twist mentioning that he should have gotten N’sync instead.
Deadpool 2 opens in theatres on May 18.
\ No newline at end of file
diff --git a/test/test-pages/gmw/expected.html b/test/test-pages/gmw/expected.html
index 1b69754..119205b 100644
--- a/test/test-pages/gmw/expected.html
+++ b/test/test-pages/gmw/expected.html
@@ -6,7 +6,7 @@
Das in der iOS-Version bereits enthaltene TOTP-Feature ist nun auch für OS X 10.10 verfügbar. Zudem gibt es neue Zusatzfelder in der Datenbank und weitere Verbesserungen.
Zur TOTP-Nutzung muss zunächst ein Startwert an 1Password übergeben werden. Das geht unter anderem per QR-Code, den die App über ein neues Scanfenster selbst einlesen kann – etwa aus dem Webbrowser. Eine Einführung in die Technik gibt ein kurzes Video. Die TOTP-Unterstützung in 1Password erlaubt es, auf ein zusätzliches Gerät (z.B. ein iPhone) neben dem Mac zu verzichten, das den Code liefert – was allerdings auch die Sicherheit verringert, weil es keinen "echten" zweiten Faktor mehr gibt.
+
+
+
+
+
+
+
Das in der iOS-Version bereits enthaltene TOTP-Feature ist nun auch für OS X 10.10 verfügbar. Zudem gibt es neue Zusatzfelder in der Datenbank und weitere Verbesserungen.
Zur TOTP-Nutzung muss zunächst ein Startwert an 1Password übergeben werden. Das geht unter anderem per QR-Code, den die App über ein neues Scanfenster selbst einlesen kann – etwa aus dem Webbrowser. Eine Einführung in die Technik gibt ein kurzes Video. Die TOTP-Unterstützung in 1Password erlaubt es, auf ein zusätzliches Gerät (z.B. ein iPhone) neben dem Mac zu verzichten, das den Code liefert – was allerdings auch die Sicherheit verringert, weil es keinen "echten" zweiten Faktor mehr gibt.
Update 5.3 des Passwortmanagers liefert auch noch weitere Verbesserungen. So gibt es die Möglichkeit, FaceTime-Audio- oder Skype-Anrufe aus 1Password zu starten, die Zahl der Zusatzfelder in der Datenbank wurde erweitert und der Umgang mit unterschiedlichen Zeitzonen klappt besser. Die Engine zur Passworteingabe im Browser soll beschleunigt worden sein.
1Password kostet aktuell knapp 50 Euro im Mac App Store und setzt in seiner aktuellen Version mindestens OS X 10.10 voraus.
-(bsc)
-
\ No newline at end of file
diff --git a/test/test-pages/herald-sun-1/expected.html b/test/test-pages/herald-sun-1/expected.html
index 6896eed..5f13728 100644
--- a/test/test-pages/herald-sun-1/expected.html
+++ b/test/test-pages/herald-sun-1/expected.html
@@ -1,7 +1,8 @@
-
+
+
A new Bill would require telecommunications service providers to store so-called ‘metadata’ for two years.Source:
diff --git a/test/test-pages/hukumusume/expected.html b/test/test-pages/hukumusume/expected.html
index defbcc1..2547269 100644
--- a/test/test-pages/hukumusume/expected.html
+++ b/test/test-pages/hukumusume/expected.html
@@ -3,11 +3,15 @@
福娘童話集 > きょうのイソップ童話 > 1月のイソップ童話 > 欲張りなイヌ
Through our pursuit of further automation and maximization of margins during the industrial age of media technology, we built advertising technology to optimize publishers’ yield of marketing budgets that had eroded after the last recession. Looking back now, our scraping of dimes may have cost us dollars in consumer loyalty. The fast, scalable systems of targeting users with ever-heftier advertisements have slowed down the public internet and drained more than a few batteries. We were so clever and so good at it that we over-engineered the capabilities of the plumbing laid down by, well, ourselves. This steamrolled the users, depleted their devices, and tried their patience.
The rise of ad blocking poses a threat to the internet and could potentially drive users to an enclosed platform world dominated by a few companies. We have let the fine equilibrium of content, commerce, and technology get out of balance in the open web. We had, and still do have, a responsibility to educate the business side, and in some cases to push back. We lost sight of our social and ethical responsibility to provide a safe, usable experience for anyone and everyone wanting to consume the content of their choice.
We need to bring that back into alignment, starting right now.
-
Today, the IAB Tech Lab is launching the L.E.A.N. Ads program. Supported by the Executive Committee of the IAB Tech Lab Board, IABs around the world, and hundreds of member companies, L.E.A.N. stands for Light, Encrypted, Ad choice supported, Non-invasive ads. These are principles that will help guide the next phases of advertising technical standards for the global digital advertising supply chain.
+
Today, the IAB Tech Lab is launching the L.E.A.N. Ads program. Supported by the Executive Committee of the IAB Tech Lab Board, IABs around the world, and hundreds of member companies, L.E.A.N. stands for Light, Encrypted, Ad choice supported, Non-invasive ads. These are principles that will help guide the next phases of advertising technical standards for the global digital advertising supply chain.
As with any other industry, standards should be created by non-profit standards-setting bodies, with many diverse voices providing input. We will invite all parties for public comment, and make sure consumer interest groups have the opportunity to provide input.
L.E.A.N. Ads do not replace the current advertising standards many consumers still enjoy and engage with while consuming content on our sites across all IP enabled devices. Rather, these principles will guide an alternative set of standards that provide choice for marketers, content providers, and consumers.
Among the many areas of concentration, we must also address frequency capping on retargeting in Ad Tech and make sure a user is targeted appropriately before, but never AFTER they make a purchase. If we are so good at reach and scale, we can be just as good, if not better, at moderation. Additionally, we must address volume of ads per page as well as continue on the path to viewability. The dependencies here are critical to an optimized user experience.
@@ -18,10 +18,13 @@
Finally, we must do this in an increasingly fragmented market, across screens. We must do this in environments where entire sites are blocked, purposefully or not. Yes, it is disappointing that our development efforts will have to manage with multiple frameworks while we work to supply the economic engine to sustain an open internet. However, our goal is still to provide diverse content and voices to as many connected users as possible around the world.
That is user experience.
-
IAB Tech Lab Members can join the IAB Tech Lab Ad Blocking Working Group, please email adblocking@iab.com for more information.
INTERNET DRAFT Michiel B. de Jong
Document: draft-dejong-remotestorage-04 IndieHosters
F. Kooman
Intended Status: Proposed Standard (independent)
@@ -53,7 +57,7 @@ Copyright Notice
de Jong [Page 1]
-
+
Internet-Draft remoteStorage December 2014
@@ -89,7 +93,7 @@ Table of Contents
18. Authors' addresses............................................22
-1. Introduction
+1. Introduction
Many services for data storage are available over the internet. This
specification describes a vendor-independent interface for such
@@ -103,7 +107,7 @@ Table of Contents
de Jong [Page 2]
-
+
Internet-Draft remoteStorage December 2014
@@ -122,7 +126,7 @@ Table of Contents
The exact details of these four actions are described in this
specification.
-2. Terminology
+2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
@@ -135,7 +139,7 @@ Table of Contents
implement the general requirement when such failure would result in
interoperability failure.
-3. Storage model
+3. Storage model
The server stores data in nodes that form a tree structure.
Internal nodes are called 'folders' and leaf nodes are called
@@ -153,7 +157,7 @@ Table of Contents
de Jong [Page 3]
-
+
Internet-Draft remoteStorage December 2014
@@ -163,7 +167,7 @@ Table of Contents
* content length
* content
-4. Requests
+4. Requests
Client-to-server requests SHOULD be made over https [HTTPS], and
servers MUST comply with HTTP/1.1 [HTTP]. Specifically, they
@@ -203,7 +207,7 @@ Table of Contents
de Jong [Page 4]
-
+
Internet-Draft remoteStorage December 2014
@@ -253,7 +257,7 @@ Table of Contents
de Jong [Page 5]
-
+
Internet-Draft remoteStorage December 2014
@@ -303,11 +307,11 @@ Table of Contents
de Jong [Page 6]
-
+
Internet-Draft remoteStorage December 2014
-5. Response codes
+5. Response codes
Response codes SHOULD be given as defined by [HTTP, section 6] and
[BEARER, section 3.1]. The following is a non-normative checklist
@@ -340,7 +344,7 @@ Table of Contents
Clients SHOULD also handle the case where a response takes too long
to arrive, or where no response is received at all.
-6. Versioning
+6. Versioning
All successful requests MUST return an 'ETag' header [HTTP] with, in
the case of GET, the current version, in the case of PUT, the new
@@ -353,7 +357,7 @@ Table of Contents
de Jong [Page 7]
-
+
Internet-Draft remoteStorage December 2014
@@ -370,14 +374,14 @@ Table of Contents
A provider MAY offer version rollback functionality to its users,
but this specification does not define the user interface for that.
-7. CORS headers
+7. CORS headers
All responses MUST carry CORS headers [CORS]. The server MUST also
reply to OPTIONS requests as per CORS. For GET requests, a wildcard
origin MAY be returned, but for PUT and DELETE requests, the
response MUST echo back the Origin header sent by the client.
-8. Session description
+8. Session description
The information that a client needs to receive in order to be able
to connect to a server SHOULD reach the client as described in the
@@ -403,7 +407,7 @@ Table of Contents
de Jong [Page 8]
-
+
Internet-Draft remoteStorage December 2014
@@ -418,7 +422,7 @@ Table of Contents
* https://storage.example.com/bob/public/documents/
* https://storage.example.com/bob/public/documents/draft.txt
-9. Bearer tokens and access control
+9. Bearer tokens and access control
A bearer token represents one or more access scopes. These access
scopes are represented as strings of the form <module> <level>,
@@ -453,12 +457,12 @@ Table of Contents
de Jong [Page 9]
-
+
Internet-Draft remoteStorage December 2014
-10. Application-first bearer token issuance
+10. Application-first bearer token issuance
To make a remoteStorage server available as 'the remoteStorage of
<account> at <host>', exactly one link of the following format
@@ -503,7 +507,7 @@ Table of Contents
de Jong [Page 10]
-
+
Internet-Draft remoteStorage December 2014
@@ -533,7 +537,7 @@ Table of Contents
client_id parameter in favor of relying on the redirect_uri
parameter for client identification.
-11. Storage-first bearer token issuance
+11. Storage-first bearer token issuance
The provider MAY also present a dashboard to the user, where they
have some way to add open web app manifests [MANIFEST]. Adding a
@@ -553,7 +557,7 @@ Table of Contents
de Jong [Page 11]
-
+
Internet-Draft remoteStorage December 2014
@@ -591,19 +595,19 @@ Table of Contents
debug tool, thus bypassing the need for an OAuth dance. Clients
SHOULD NOT rely on this in production.
-12. Example wire transcripts
+12. Example wire transcripts
The following examples are not normative ("\" indicates a line was
wrapped).
-12.1. WebFinger
+12.1. WebFinger
In application-first, an in-browser application might issue the
following request, using XMLHttpRequest and CORS:
de Jong [Page 12]
-
+
Internet-Draft remoteStorage December 2014
@@ -643,7 +647,7 @@ motestorage-04",
}]
}
-12.2. OAuth dialog form
+12.2. OAuth dialog form
Once the in-browser application has discovered the server's OAuth
end-point, it will typically redirect the user to this URL, in
@@ -653,7 +657,7 @@ motestorage-04",
de Jong [Page 13]
-
+
Internet-Draft remoteStorage December 2014
@@ -673,7 +677,7 @@ unhosted.5apps.com&response_type=token HTTP/1.1
<title>Allow access?</title>
...
-12.3. OAuth dialog form submission
+12.3. OAuth dialog form submission
When the user submits the form, the request would look something
like this:
@@ -698,12 +702,12 @@ low
Location:https://drinks-unhosted.5apps.com/#access_token=j2YnGt\
XjzzzHNjkd1CJxoQubA1o%3D&token_type=bearer&state=
-12.4. OPTIONS preflight
+12.4. OPTIONS preflightde Jong [Page 14]
-
+
Internet-Draft remoteStorage December 2014
@@ -726,7 +730,7 @@ XjzzzHNjkd1CJxoQubA1o%3D&token_type=bearer&state=
Access-Control-Allow-Headers: Authorization, Content-Length, Co\
ntent-Type, Origin, X-Requested-With, If-Match, If-None-Match
-12.5. Initial PUT
+12.5. Initial PUT
An initial PUT may contain an 'If-None-Match: *' header, like this:
@@ -749,11 +753,11 @@ ntent-Type, Origin, X-Requested-With, If-Match, If-None-Match
Access-Control-Allow-Origin: https://drinks-unhosted.5apps.com
ETag: "1382694045000"
-12.6. Subsequent PUT
+12.6. Subsequent PUTde Jong [Page 15]
-
+
Internet-Draft remoteStorage December 2014
@@ -779,7 +783,7 @@ e.io/spec/modules/myfavoritedrinks/drink"}
Access-Control-Allow-Origin: https://drinks-unhosted.5apps.com
ETag: "1382694048000"
-12.7. GET
+12.7. GET
A GET request would also include the bearer token, and optionally
an If-None-Match header:
@@ -803,7 +807,7 @@ e.io/spec/modules/myfavoritedrinks/drink"}
de Jong [Page 16]
-
+
Internet-Draft remoteStorage December 2014
@@ -838,7 +842,7 @@ charset=UTF-8","Content-Length":106}}}
HTTP/1.1 404 Not Found
Access-Control-Allow-Origin: https://drinks-unhosted.5apps.com
-12.8. DELETE
+12.8. DELETE
A DELETE request may look like this:
@@ -853,7 +857,7 @@ charset=UTF-8","Content-Length":106}}}
de Jong [Page 17]
-
+
Internet-Draft remoteStorage December 2014
@@ -863,7 +867,7 @@ charset=UTF-8","Content-Length":106}}}
Access-Control-Allow-Origin: https://drinks-unhosted.5apps.com
ETag: "1382694048000"
-13. Distributed versioning
+13. Distributed versioning
This section is non-normative, and is intended to explain some of
the design choices concerning ETags and folder listings. At the
@@ -903,7 +907,7 @@ charset=UTF-8","Content-Length":106}}}
de Jong [Page 18]
-
+
Internet-Draft remoteStorage December 2014
@@ -925,7 +929,7 @@ charset=UTF-8","Content-Length":106}}}
but it is up to whichever client discovers a given version
conflict, to resolve it.
-14. Security Considerations
+14. Security Considerations
To prevent man-in-the-middle attacks, the use of https instead of
http is important for both the interface itself and all end-points
@@ -953,7 +957,7 @@ charset=UTF-8","Content-Length":106}}}
de Jong [Page 19]
-
+
Internet-Draft remoteStorage December 2014
@@ -970,7 +974,7 @@ charset=UTF-8","Content-Length":106}}}
The server SHOULD also detect and stop denial-of-service attacks
that aim to overwhelm its interface with too much traffic.
-15. IANA Considerations
+15. IANA Considerations
This document registers the 'remotestorage' link relation, as well
as the following WebFinger properties:
@@ -980,7 +984,7 @@ charset=UTF-8","Content-Length":106}}}
* "http://tools.ietf.org/html/rfc7233"
* "http://remotestorage.io/spec/web-authoring"
-16. Acknowledgements
+16. Acknowledgements
The authors would like to thank everybody who contributed to the
development of this protocol, including Kenny Bentley, Javier Diaz,
@@ -993,95 +997,95 @@ charset=UTF-8","Content-Length":106}}}
Rick van Rein, Mark Nottingham, Julian Reschke, and Markus
Lanthaler, among many others.
-17. References
+17. References
-17.1. Normative References
+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
+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]
-
\ No newline at end of file
diff --git a/test/test-pages/infobae/expected.html b/test/test-pages/infobae/expected.html
index e575c7b..322e1cc 100644
--- a/test/test-pages/infobae/expected.html
+++ b/test/test-pages/infobae/expected.html
@@ -1 +1 @@
-
Jonathan Castellari tiene 25 años y fue golpeado por una patota de 8 hombres
Eran casi las 6:30 de la mañana. Jonathan Castellari, de 25 años, volvía de bailar junto a Sebastián, su amigo. Les pareció una buena idea detenerse en el Mc Donald's de Avenida Córdoba al 3100 con el objetivo de desayunar y continuar el viaje hasta sus hogares. Mientras esperaban la comida, un grupo de 8 chicos de entre 20 y 25 años ingresó al local con el mismo objetivo, aunque adoptaron otro plan: mirarlos fijamente, reírse de ellos y hacer chistes sobre la sexualidad de ambos.
Sebastián relató a Infobae: "Estábamos esperando nuestro pedido, haciéndonos chistes, riéndonos de lo sucedido durante la noche. Hablábamos entre nosotros. En ese momento entró un grupo de 8 chicos, de contextura grande, y notamos que estaban alcoholizados. Nos miraban, hacían chistes, se reían de nosotros. Fue ahí cuando decidimos salir con Jonathan a fumar un cigarrillo y esperar que se fueran. Él salió primero y vi que uno de estos pibes lo abrazó y se lo llevó. Instantáneamente se metieron los demás a pegarle. Le pegaron mucho. Quise pararlos y no pude. Ligué yo también, pero nada en comparación a lo que sufrió Jonathan. Cuando lo soltaron lo agarré como pude y justo una enfermera del Sanatorio Güemes (está a dos cuadras del local) estaba tomando un café y le dio los primeros auxilios".
"Fuimos a verlo recién, no paraba de llorar y de decirnos que le pegaron por puto", dijo a Infobae María Rachid, titular del Instituto contra la Discriminación de la Defensoría del Pueblo CABA. "Lamentablemente su situación es delicada. Recién nos informaron que lo van a intervenir quirúrgicamente porque podría perder un ojo".
Como Jonathan no conoce a los agresores, desde la Defensoría y la Federación LGBT se comunicaron con autoridades del Ministerio de Seguridad para que soliciten las cámaras de seguridad del Mc Donald's, del sanatorio Güemes y de otros negocios de la cuadra para poder identificarlos.
Gastón Llopart, abogado de Sebastián, le detalló a Infobae que Jonathan está "próximo a recibir una intervención quirúrgica, ya que tuvo fractura en el hueso del pómulo derecho de su rostro. Sebastián llamó al 911 dos veces y no fueron. Me contaron que los agresores los siguieron hasta el sanatorio mientras los insultaban: la gente de seguridad tuvo que echarlos".
Llopart agregó que la patota, mientras lo golpeaban, le gritaba: "Te vamos a matar por puto". La familia de Jonathan está en el sanatorio a la espera de la intervención quirúrgica. Llopart dijo que "harán la denuncia el lunes por la mañana, cuando existan mayores precisiones de lo ocurrido".
Jonathan y Sebastián forman parte de Ciervos Pampas Rugby Club, un equipo que nació hace cinco años como el primer equipo de la Argentina por la diversidad sexual. Se trata de un combinado que no está integrado en un 100% por varones gays, pero en el que estos encuentran un lugar en el cual expresar libremente su orientación sexual, sin miedo a los prejuicios o a la discriminación. El club emitió un comunicado en su cuenta de Facebook, relatando los hechos y solidarizándose con Jonathan.
\ No newline at end of file
+
Jonathan Castellari tiene 25 años y fue golpeado por una patota de 8 hombres
Eran casi las 6:30 de la mañana. Jonathan Castellari, de 25 años, volvía de bailar junto a Sebastián, su amigo. Les pareció una buena idea detenerse en el Mc Donald's de Avenida Córdoba al 3100 con el objetivo de desayunar y continuar el viaje hasta sus hogares. Mientras esperaban la comida, un grupo de 8 chicos de entre 20 y 25 años ingresó al local con el mismo objetivo, aunque adoptaron otro plan: mirarlos fijamente, reírse de ellos y hacer chistes sobre la sexualidad de ambos.
Sebastián relató a Infobae: "Estábamos esperando nuestro pedido, haciéndonos chistes, riéndonos de lo sucedido durante la noche. Hablábamos entre nosotros. En ese momento entró un grupo de 8 chicos, de contextura grande, y notamos que estaban alcoholizados. Nos miraban, hacían chistes, se reían de nosotros. Fue ahí cuando decidimos salir con Jonathan a fumar un cigarrillo y esperar que se fueran. Él salió primero y vi que uno de estos pibes lo abrazó y se lo llevó. Instantáneamente se metieron los demás a pegarle. Le pegaron mucho. Quise pararlos y no pude. Ligué yo también, pero nada en comparación a lo que sufrió Jonathan. Cuando lo soltaron lo agarré como pude y justo una enfermera del Sanatorio Güemes (está a dos cuadras del local) estaba tomando un café y le dio los primeros auxilios".
"Fuimos a verlo recién, no paraba de llorar y de decirnos que le pegaron por puto", dijo a Infobae María Rachid, titular del Instituto contra la Discriminación de la Defensoría del Pueblo CABA. "Lamentablemente su situación es delicada. Recién nos informaron que lo van a intervenir quirúrgicamente porque podría perder un ojo".
Como Jonathan no conoce a los agresores, desde la Defensoría y la Federación LGBT se comunicaron con autoridades del Ministerio de Seguridad para que soliciten las cámaras de seguridad del Mc Donald's, del sanatorio Güemes y de otros negocios de la cuadra para poder identificarlos.
Gastón Llopart, abogado de Sebastián, le detalló a Infobae que Jonathan está "próximo a recibir una intervención quirúrgica, ya que tuvo fractura en el hueso del pómulo derecho de su rostro. Sebastián llamó al 911 dos veces y no fueron. Me contaron que los agresores los siguieron hasta el sanatorio mientras los insultaban: la gente de seguridad tuvo que echarlos".
Llopart agregó que la patota, mientras lo golpeaban, le gritaba: "Te vamos a matar por puto". La familia de Jonathan está en el sanatorio a la espera de la intervención quirúrgica. Llopart dijo que "harán la denuncia el lunes por la mañana, cuando existan mayores precisiones de lo ocurrido".
Jonathan y Sebastián forman parte de Ciervos Pampas Rugby Club, un equipo que nació hace cinco años como el primer equipo de la Argentina por la diversidad sexual. Se trata de un combinado que no está integrado en un 100% por varones gays, pero en el que estos encuentran un lugar en el cual expresar libremente su orientación sexual, sin miedo a los prejuicios o a la discriminación. El club emitió un comunicado en su cuenta de Facebook, relatando los hechos y solidarizándose con Jonathan.
\ 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 d3696f7..6116487 100644
--- a/test/test-pages/keep-images/expected.html
+++ b/test/test-pages/keep-images/expected.html
@@ -1,58 +1,69 @@
+
-
+
+
-
-
+
+
+
+
-
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
+
+
+
+
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
+
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
+ 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
+
“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
+
+
+ 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
+
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,
+ 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,
+
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
+
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
@@ -60,50 +71,61 @@
A jungle of thick pipes hang from the lab’s ceiling behind it.
-
+
+
-
- Photo by Joan Bardeletti
+
+
+ Photo by Joan Bardeletti
+
+
-
“Chromatography separates all the substances,” Lladanosa says as she loads
+
“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
+
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
+
+
+ Photo by Joan Bardeletti
+
+
-
To get the drugs to Barcelona, a user mails at least 10 milligrams of
+
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.
+
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
+
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
+
“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
+
+
+
+
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
@@ -113,39 +135,43 @@
harms of certain substances.
-
+
+
-
- Fernando Caudevilla, AKA DoctorX. Photo: Joseph Cox
+
+
+ Fernando Caudevilla, AKA DoctorX. Photo: Joseph Cox
+
+
-
Caudevilla first ventured into Silk Road forums in April 2013. “I would
+
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,
+ 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
+
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
+
“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,
+ 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
+
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
+
“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
@@ -157,31 +183,38 @@
transparency,” Caudevilla said. “We could not make mistakes,” he added.
-
+
+
-
- Photo: Joseph Cox
+
+
+ Photo: Joseph Cox
+
+
-
+
+
-
-
While the Energy Control lab in Madrid lab only tests Spanish drugs from
+
+
+
+
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
+
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
+
“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
+
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
@@ -189,131 +222,150 @@
synthetic cannabinoids, and even pills of Viagra.
-
+
+
-
- Photo by Joan Bardeletti
+
+
+ Photo by Joan Bardeletti
+
+
-
So it’s fair to make a tentative judgement on what people are paying for
+
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
+
“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,
+ 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
+
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
+
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
+
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
+
“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
+
+
+ Photo by Joan Bardeletti
+
+
-
+
+
-
-
Despite the prevalence of people using the service to gauge the quality
+
+
+
+
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
+ 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
+
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.
+
“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
+
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 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
+
“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,”
+
“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
+
+
+ Photo by Joan Bardeletti
+
+
-
The particular case of cocaine cut with Levamisole is one of the reasons
+
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
+
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
+ 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
+
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
+
+
+ Photo by Joan Bardeletti
+
+
-
Other members of the community have been helping out, too. PlutoPete,
+
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
+
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
+
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
@@ -321,17 +373,17 @@
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
+
“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
+
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
+
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
@@ -339,7 +391,7 @@
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
+
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
@@ -347,35 +399,43 @@
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,
+
“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
+
+
+ Photo by Joan Bardeletti
+
+
-
“In the white market, they have quality control. In the dark market, 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:
+
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.
-
+
+
\ No newline at end of file
diff --git a/test/test-pages/la-nacion/expected.html b/test/test-pages/la-nacion/expected.html
index 5640699..2084cd8 100644
--- a/test/test-pages/la-nacion/expected.html
+++ b/test/test-pages/la-nacion/expected.html
@@ -1,9 +1,12 @@
-
+
+
Los pueblos indígenas reclaman por derechos que permanecen
incumplidos, por eso es más eficiente canalizar la protesta que reprimirla
+
+
Abdullah Ocalan, el líder independentista kurdo, desembarcó en Italia en noviembre de
1998 y pidió asilo político. Arrastraba un pedido de captura de Turquía, donde era acusado por
terrorismo. El ex comunista Massimo D'Alema, recién asumido, dudaba. Acoger a Ocalan implicaba comprarse
@@ -21,8 +24,12 @@
supuestos contactos internacionales de organizaciones mapuches. Entre ellos aparecía Ocalan, a quien el
informe ubicó "con domicilios en Palermo y en el centro porteño", y aseguraba incluso que había sido
visto "en Neuquén, Río Negro y Chubut durante el juicio a Jones Huala".
-
- Foto: LA NACION
Esta falsa noticia fue la más rocambolesca de una larga cadena. Dos hechos quedaron en evidencia:
+
+
+ Foto: LA NACION
+
+
+
Esta falsa noticia fue la más rocambolesca de una larga cadena. Dos hechos quedaron en evidencia:
primero, que hay periodistas que no chequean la información; segundo, que los servicios de inteligencia
los utilizan para manipular la agenda pública. Y sobre los servicios hay dos posibilidades: o son burros
o son perversos. Las opciones no son excluyentes, aunque cualquiera alcanza para tornarlos indignos de
@@ -37,6 +44,7 @@
Estado", vincular a un grupo que reclama tierras en la región de sus ancestros con otro que busca
gobernar el mundo según sus normas religiosas y ha masacrado a miles de personas requiere de una
operación intelectual tan audaz como inadecuada.
+
La asociación con el movimiento kurdo, en cambio, asoma menos inverosímil. Desde su arresto, Ocalan
transformó su pensamiento: de una visión nacionalista con inspiración estalinista evolucionó al
confederalismo democrático, una propuesta de organización comunal, ecologista, más apegada a las raíces
@@ -54,6 +62,7 @@
matar directamente, es realizar sabotajes, movilizaciones, ataques a iglesias y empresas y mucha
prensa". ¡En Medio Oriente pagarían por un terrorismo así! Ningún hecho de violencia debe ser
minimizado, pero las analogías no resisten prueba.
+
La "cuestión mapuche" es social antes que policial. La Constitución manda "reconocer la preexistencia
étnica y cultural de los pueblos indígenas argentinos. Garantizar el respeto a su identidad?; reconocer
la personería jurídica de sus comunidades, y la posesión y propiedad comunitarias de las tierras que
@@ -82,4 +91,6 @@
del Estado argentino no fue tanto quiénes lo desafiaron como quiénes lo gobernaron. Cambiemos.
Andrés Malamud es politólogo e investigador en la Universidad de Lisboa. Martín Schapiro es abogado
administrativista y analista internacional
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/test/test-pages/lemonde-1/expected-metadata.json b/test/test-pages/lemonde-1/expected-metadata.json
index a45fcaf..0f46210 100644
--- a/test/test-pages/lemonde-1/expected-metadata.json
+++ b/test/test-pages/lemonde-1/expected-metadata.json
@@ -1,5 +1,5 @@
{
- "Author": null,
+ "Author": "Martin Untersinger (avec Damien Leloup et Morgane Tual)",
"Direction": null,
"Excerpt": "Largement approuvé par les députés, le texte sera désormais examiné par le Sénat, puis le Conseil constitutionnel.",
"Image": "http:\/\/s1.lemde.fr\/image\/2015\/05\/05\/600x315\/4628128_3_47fc_projet-de-loi-renseignement_aeba800424730d672d1bd08faf203438.jpg",
diff --git a/test/test-pages/lemonde-1/expected.html b/test/test-pages/lemonde-1/expected.html
index dd91ed5..bb3a0d8 100644
--- a/test/test-pages/lemonde-1/expected.html
+++ b/test/test-pages/lemonde-1/expected.html
@@ -1,38 +1,33 @@
-
Le Monde |
- • Mis à jour le
- |
-Par Martin Untersinger (avec Damien Leloup et Morgane Tual)
-
-
+
-
+
-
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.
+
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.
Parmi les députés ayan voté contre figurent notamment des opposants de la première heure, comme l'UMP Laure de la Raudière ou l'écologiste Sergio Coronado, mais aussi quelques poids lourds de l'opposition comme Patrick Devedjian ou Claude Goasguen. A gauche, on trouve parmi les quelque opposants au texte Aurélie Filipetti. Christian Paul, qui avait été très actif lors d'autres débats sur les libertés numériques, s'est abstenu.
-
Pouria Amirshahi, député socialiste des Français de l'étranger qui a également voté contre, a annoncé qu'il transmettrait un « mémorandum argumenté » au Conseil constitutionnel et demanderait à se faire auditionner sur le projet de loi. D'autres députés ont prévu de faire la même démarche.
+
Pouria Amirshahi, député socialiste des Français de l'étranger qui a également voté contre, a annoncé qu'il transmettrait un « mémorandum argumenté » au Conseil constitutionnel et demanderait à se faire auditionner sur le projet de loi. D'autres députés ont prévu de faire la même démarche.
Ce texte, fortement décrié par la société civile pour son manque de contre-pouvoir et le caractère intrusif des techniques qu’il autorise, entend donner un cadre aux pratiques des services de renseignement, rendant légales certaines pratiques qui, jusqu’à présent, ne l’étaient pas.
Retour sur ses principales dispositions, après son passage en commission des lois et après le débat en séance publique.
Définition des objectifs des services
-
Le projet de loi énonce les domaines que peuvent invoquer les services pour justifier leur surveillance. Il s’agit notamment, de manière attendue, de « l’indépendance nationale, de l’intégrité du territoire et de la défense nationale » et de « la prévention du terrorisme », mais également des « intérêts majeurs de la politique étrangère », ainsi que de la « prévention des atteintes à la forme républicaine des institutions » et de « la criminalité et de la délinquance organisées ». Des formulations parfois larges qui inquiètent les opposants au texte qui craignent qu’elles puissent permettre de surveiller des activistes ou des manifestants.
+
Le projet de loi énonce les domaines que peuvent invoquer les services pour justifier leur surveillance. Il s’agit notamment, de manière attendue, de « l’indépendance nationale, de l’intégrité du territoire et de la défense nationale » et de « la prévention du terrorisme », mais également des « intérêts majeurs de la politique étrangère », ainsi que de la « prévention des atteintes à la forme républicaine des institutions » et de « la criminalité et de la délinquance organisées ». Des formulations parfois larges qui inquiètent les opposants au texte qui craignent qu’elles puissent permettre de surveiller des activistes ou des manifestants.
La Commission de contrôle
Le contrôle de cette surveillance sera confié à une nouvelle autorité administrative indépendante, la Commission nationale de contrôle des techniques de renseignement (CNCTR), composée de six magistrats du Conseil d’Etat et de la Cour de cassation, de trois députés et trois sénateurs de la majorité et de l’opposition, et d’un expert technique. Elle remplacera l’actuelle Commission nationale de contrôle des interceptions de sécurité (CNCIS).
-
Elle délivrera son avis, sauf cas d’urgence, avant toute opération de surveillance ciblée. Deux types urgences sont prévus par la loi : d’un côté une « urgence absolue », pour laquelle un agent pourra se passer de l’avis de la CNCTR mais pas de l’autorisation du premier ministre. De l’autre, une urgence opérationnelle extrêmement limitée, notamment en termes de techniques, à l’initiative du chef du service de renseignement, qui se passe de l’avis de la CNCTR. Ces cas d’urgence ne justifieront pas l’intrusion d’un domicile ni la surveillance d’un journaliste, un parlementaire ou un avocat. Dans ces cas, la procédure classique devra s’appliquer.
+
Elle délivrera son avis, sauf cas d’urgence, avant toute opération de surveillance ciblée. Deux types urgences sont prévus par la loi : d’un côté une « urgence absolue », pour laquelle un agent pourra se passer de l’avis de la CNCTR mais pas de l’autorisation du premier ministre. De l’autre, une urgence opérationnelle extrêmement limitée, notamment en termes de techniques, à l’initiative du chef du service de renseignement, qui se passe de l’avis de la CNCTR. Ces cas d’urgence ne justifieront pas l’intrusion d’un domicile ni la surveillance d’un journaliste, un parlementaire ou un avocat. Dans ces cas, la procédure classique devra s’appliquer.
L’avis de la CNCTR ne sera pas contraignant, mais cette commission pourra saisir le Conseil d’Etat si elle estime que la loi n’est pas respectée et elle disposera de pouvoirs d’enquête. Ce recours juridictionnel est une nouveauté dans le monde du renseignement.
-
Les « boîtes noires »
-
Une des dispositions les plus contestées de ce projet de loi prévoit de pouvoir contraindre les fournisseurs d’accès à Internet (FAI) à « détecter une menace terroriste sur la base d’un traitement automatisé ». Ce dispositif – autorisé par le premier ministre par tranche de quatre mois – permettrait de détecter, en temps réel ou quasi réel, les personnes ayant une activité en ligne typique de « schémas » utilisés par les terroristes pour transmettre des informations.
-
En pratique, les services de renseignement pourraient installer chez les FAI une « boîte noire » surveillant le trafic. Le contenu des communications – qui resterait « anonyme » – ne serait pas surveillé, mais uniquement les métadonnées : origine ou destinataire d’un message, adresse IP d’un site visité, durée de la conversation ou de la connexion… Ces données ne seraient pas conservées.
+
Les « boîtes noires »
+
Une des dispositions les plus contestées de ce projet de loi prévoit de pouvoir contraindre les fournisseurs d’accès à Internet (FAI) à « détecter une menace terroriste sur la base d’un traitement automatisé ». Ce dispositif – autorisé par le premier ministre par tranche de quatre mois – permettrait de détecter, en temps réel ou quasi réel, les personnes ayant une activité en ligne typique de « schémas » utilisés par les terroristes pour transmettre des informations.
+
En pratique, les services de renseignement pourraient installer chez les FAI une « boîte noire » surveillant le trafic. Le contenu des communications – qui resterait « anonyme » – ne serait pas surveillé, mais uniquement les métadonnées : origine ou destinataire d’un message, adresse IP d’un site visité, durée de la conversation ou de la connexion… Ces données ne seraient pas conservées.
La Commission nationale informatique et libertés(CNIL), qui critique fortement cette disposition. La CNIL soulève notamment que l’anonymat de ces données est très relatif, puisqu’il peut être levé.
Le dispositif introduit une forme de « pêche au chalut » – un brassage très large des données des Français à la recherche de quelques individus. Le gouvernement se défend de toute similarité avec les dispositifs mis en place par la NSA américaine, arguant notamment que les données ne seront pas conservées et que cette activité sera contrôlée par une toute nouvelle commission aux moyens largement renforcés. Il s’agit cependant d’un dispositif très large, puisqu’il concernera tous les fournisseurs d’accès à Internet, et donc tous les internautes français.
-
L’élargissement de la surveillance électronique pour détecter les « futurs » terroristes
-
La surveillance des métadonnées sera aussi utilisée pour tenter de détecter de nouveaux profils de terroristes potentiels, prévoit le projet de loi. Le gouvernement considère qu’il s’agit d’une manière efficace de détecter les profils qui passent aujourd’hui « entre les mailles du filet », par exemple des personnes parties en Syrie ou en Irak sans qu’aucune activité suspecte n’ait été décelée avant leur départ.
Le dispositif introduit une forme de « pêche au chalut » – un brassage très large des données des Français à la recherche de quelques individus. Le gouvernement se défend de toute similarité avec les dispositifs mis en place par la NSA américaine, arguant notamment que les données ne seront pas conservées et que cette activité sera contrôlée par une toute nouvelle commission aux moyens largement renforcés. Il s’agit cependant d’un dispositif très large, puisqu’il concernera tous les fournisseurs d’accès à Internet, et donc tous les internautes français.
+
L’élargissement de la surveillance électronique pour détecter les « futurs » terroristes
+
La surveillance des métadonnées sera aussi utilisée pour tenter de détecter de nouveaux profils de terroristes potentiels, prévoit le projet de loi. Le gouvernement considère qu’il s’agit d’une manière efficace de détecter les profils qui passent aujourd’hui « entre les mailles du filet », par exemple des personnes parties en Syrie ou en Irak sans qu’aucune activité suspecte n’ait été décelée avant leur départ.
Pour repérer ces personnes, la loi permettra d’étendre la surveillance électronique à toutes les personnes en contact avec des personnes déjà suspectées. En analysant leurs contacts, la fréquence de ces derniers et les modes de communication, les services de renseignement espèrent pouvoir détecter ces nouveaux profils en amont.
De nouveaux outils et méthodes de collecte
Les services pourront également procéder, après un avis de la CNCTR, à la pose de micros dans une pièce ou de mouchards sur un objet (voiture par exemple), ou à l’intérieur d’un ordinateur. L’utilisation des IMSI-catchers (fausses antennes qui permettent d’intercepter des conversations téléphoniques) est également légalisée, pour les services de renseignement, dans certains cas. Le nombre maximal de ces appareils sera fixé par arrêté du premier ministre après l’avis de la CNCTR.
La loi introduit également des mesures de surveillance internationale : concrètement, les procédures de contrôle seront allégées lorsqu’un des « bouts » de la communication sera situé à l’étranger (concrètement, un Français qui parle avec un individu situé à l’étranger). Cependant, comme l’a souligné l’Arcep (l’Autorité de régulation des communications électroniques et des postes), sollicitée pour le versant technique de cette mesure, il est parfois difficile de s’assurer qu’une communication, même passant par l’étranger, ne concerne pas deux Français.
La loi introduit également des mesures de surveillance internationale : concrètement, les procédures de contrôle seront allégées lorsqu’un des « bouts » de la communication sera situé à l’étranger (concrètement, un Français qui parle avec un individu situé à l’étranger). Cependant, comme l’a souligné l’Arcep (l’Autorité de régulation des communications électroniques et des postes), sollicitée pour le versant technique de cette mesure, il est parfois difficile de s’assurer qu’une communication, même passant par l’étranger, ne concerne pas deux Français.
Un nouveau fichier
La loi crée un fichier judiciaire national automatisé des auteurs d’infractions terroristes (Fijait), dont les données pourront être conservées pendant vingt ans.
Ce fichier concerne les personnes ayant été condamnées, même si une procédure d’appel est en cours. Les mineurs pourront aussi être inscrits dans ce fichier et leurs données conservées jusqu’à dix ans. L’inscription ne sera pas automatique et se fera sur décision judiciaire. Certaines mises en examen pourront aussi apparaître sur ce fichier. En cas de non-lieu, relaxe, acquittement, amnistie ou réhabilitation, ces informations seront effacées.
@@ -40,7 +35,7 @@ Par a fait part à plusieurs reprises de sa volonté d’exercer sa mission de contrôle sur les fichiers liés au renseignement, qui seront alimentés par ces collectes. Ces fichiers sont aujourd’hui exclus du périmètre d’action de la CNIL.
-
La durée de conservation des données collectées – et l’adaptation de cette durée à la technique employée – a par ailleurs été inscrite dans la loi, contrairement au projet initial du gouvernement qui entendait fixer ces limites par décret. Elle pourra aller jusqu’à cinq ans dans le cas des données de connexion.
+
La durée de conservation des données collectées – et l’adaptation de cette durée à la technique employée – a par ailleurs été inscrite dans la loi, contrairement au projet initial du gouvernement qui entendait fixer ces limites par décret. Elle pourra aller jusqu’à cinq ans dans le cas des données de connexion.
Un dispositif pour les lanceurs d’alerte
-
La loi prévoit également une forme de protection pour les agents qui seraient témoins de surveillance illégale. Ces lanceurs d’alerte pourraient solliciter la CNCTR, voire le premier ministre, et leur fournir toutes les pièces utiles. La CNCTR pourra ensuite aviser le procureur de la République et solliciter la Commission consultative du secret de la défense nationale afin que cette dernière « donne au premier ministre son avis sur la possibilité de déclassifier tout ou partie de ces éléments ». Aucune mesure de rétorsion ne pourra viser l’agent qui aurait dénoncé des actes potentiellement illégaux.
+
La loi prévoit également une forme de protection pour les agents qui seraient témoins de surveillance illégale. Ces lanceurs d’alerte pourraient solliciter la CNCTR, voire le premier ministre, et leur fournir toutes les pièces utiles. La CNCTR pourra ensuite aviser le procureur de la République et solliciter la Commission consultative du secret de la défense nationale afin que cette dernière « donne au premier ministre son avis sur la possibilité de déclassifier tout ou partie de ces éléments ». Aucune mesure de rétorsion ne pourra viser l’agent qui aurait dénoncé des actes potentiellement illégaux.
\ No newline at end of file
diff --git a/test/test-pages/lemonde-2/expected-metadata.json b/test/test-pages/lemonde-2/expected-metadata.json
index c402d3e..916f4ab 100644
--- a/test/test-pages/lemonde-2/expected-metadata.json
+++ b/test/test-pages/lemonde-2/expected-metadata.json
@@ -1,5 +1,5 @@
{
- "Author": null,
+ "Author": "Collectif",
"Direction": null,
"Excerpt": "Le retour à la stabilité coûtera des milliards d'euros, mais l'Union européenne en vaut la peine, estime un collectif d'industriels.",
"Image": "http:\/\/s1.lemde.fr\/medias\/web\/1.2.705\/img\/placeholder\/default.png",
diff --git a/test/test-pages/lemonde-2/expected.html b/test/test-pages/lemonde-2/expected.html
index af69efe..69f6da5 100644
--- a/test/test-pages/lemonde-2/expected.html
+++ b/test/test-pages/lemonde-2/expected.html
@@ -1,13 +1,14 @@
Le retour à la stabilité coûtera des milliards d'euros, mais l'Union européenne en vaut la peine, estime un collectif d'industriels.
L'union monétaire s'enlise dans la crise, l'euro reste soumis au feu des critiques. C'est le bilan des nombreux débats qui ont eu lieu ces derniers mois.
-
En tant qu'industriels allemands et français, qui ont la responsabilité de 1 500 milliards d'euros de chiffre d'affaires et de cinq millions de salariés dans le monde entier, nous nous soucions de l'avenir de l'euro et de l'union économique et monétaire européenne. L'histoire de l'euro est une véritable réussite. Qui aurait pensé, lorsque l'euro a été introduit il y a douze ans, qu'il aurait aujourd'hui gagné en valeur par rapport au dollar et de nombreuses autres monnaies ?
+
En tant qu'industriels allemands et français, qui ont la responsabilité de 1 500 milliards d'euros de chiffre d'affaires et de cinq millions de salariés dans le monde entier, nous nous soucions de l'avenir de l'euro et de l'union économique et monétaire européenne. L'histoire de l'euro est une véritable réussite. Qui aurait pensé, lorsque l'euro a été introduit il y a douze ans, qu'il aurait aujourd'hui gagné en valeur par rapport au dollar et de nombreuses autres monnaies ?
L'euro s'est imposé comme seconde monnaie de référence à côté du dollar et a renforcé le rôle de l'Europe en tant que puissance économique. Avec l'euro, un marché commun doté d'une monnaie unique et sans fluctuation de cours de change a vu le jour, créant ainsi prospérité et richesse pour nous tous. Depuis son introduction, près de 9 millions de nouveaux emplois ont été créés dans la zone euro. Les entreprises européennes profitent de ce développement. Elles ont élargi leurs capacités de financement et augmenté leur compétitivité à l'international.
-
Le ralentissement de l'économie mondiale a conduit certains pays de l'union monétaire à s'endetter encore davantage. A court terme, ces pays doivent être aidés pour regagner leur indépendance financière et recréer les conditions d'un avenir meilleur pour leur population.
-
En contrepartie, des mesures efficaces doivent être mises en oeuvre. Le retour à une situation financière stable coûtera de nombreux milliards d'euros, mais l'Union européenne et notre monnaie commune en valent la peine. Nous devons convaincre nos concitoyens de cela.
+
Le ralentissement de l'économie mondiale a conduit certains pays de l'union monétaire à s'endetter encore davantage. A court terme, ces pays doivent être aidés pour regagner leur indépendance financière et recréer les conditions d'un avenir meilleur pour leur population.
+
En contrepartie, des mesures efficaces doivent être mises en oeuvre. Le retour à une situation financière stable coûtera de nombreux milliards d'euros, mais l'Union européenne et notre monnaie commune en valent la peine. Nous devons convaincre nos concitoyens de cela.
RÈGLES PLUS STRICTES
-
Nous avons besoin d'une politique économique européenne et de règles de stabilité plus strictes. Pour éviter, à l'avenir, une crise telle que celle que nous traversons actuellement, nous devons renforcer les règles de stabilité existantes et assurer leur respect. Les solutions envisagées, comme, par exemple, l'exclusion de pays membres de la zone euro ou la scission entre une Union des pays du Nord et du Sud, ne sont pas bonnes. Cela aurait des conséquences qui sont difficilement prévisibles aujourd'hui. De telles propositions démagogiques ne sont pas adaptées à la gravité de la situation.
-
Cependant, des mesures doivent être prises à temps et être aussi efficaces que possible. De plus, les Etats membres doivent coordonner, plus étroitement qu'auparavant, leur politique économique intérieure et parler d'une seule voix vis-à-vis de l'extérieur.
-
En tant qu'industriels allemands et français, nous voulons souligner les immenses avantages que l'espace monétaire commun a apportés. Nous envoyons un message de soutien aux responsables politiques, afin qu'ils mettent en place des conditions nécessaires à un euro durablement stable et compétitif. C'est la base de la future prospérité en Europe. L'union monétaire a durablement besoin de finances publiques solides, de règles de responsabilité claires, de structures transparentes et de conditions de concurrence équitables.
+
Nous avons besoin d'une politique économique européenne et de règles de stabilité plus strictes. Pour éviter, à l'avenir, une crise telle que celle que nous traversons actuellement, nous devons renforcer les règles de stabilité existantes et assurer leur respect. Les solutions envisagées, comme, par exemple, l'exclusion de pays membres de la zone euro ou la scission entre une Union des pays du Nord et du Sud, ne sont pas bonnes. Cela aurait des conséquences qui sont difficilement prévisibles aujourd'hui. De telles propositions démagogiques ne sont pas adaptées à la gravité de la situation.
+
Cependant, des mesures doivent être prises à temps et être aussi efficaces que possible. De plus, les Etats membres doivent coordonner, plus étroitement qu'auparavant, leur politique économique intérieure et parler d'une seule voix vis-à-vis de l'extérieur.
+
En tant qu'industriels allemands et français, nous voulons souligner les immenses avantages que l'espace monétaire commun a apportés. Nous envoyons un message de soutien aux responsables politiques, afin qu'ils mettent en place des conditions nécessaires à un euro durablement stable et compétitif. C'est la base de la future prospérité en Europe. L'union monétaire a durablement besoin de finances publiques solides, de règles de responsabilité claires, de structures transparentes et de conditions de concurrence équitables.
Ce n'est qu'à ces conditions que l'euro sortira renforcé de la crise de la dette. Il n'y a pas d'alternative sérieuse à l'euro commun. L'euro symbolise l'Europe d'aujourd'hui. Un échec de l'euro serait un revers fatal pour l'Europe.
-
-Appel Frank (Deutsche Post) ; Aschenbroich Jacques (Valeo) ; Berger Roland (Roland Berger Strategy Consultants) ; Bock Kurt (BASF) ; Bories Christel (Constellium) ; Borsig Clemens (Deutsche Bank) ; Brunck Robert (CGG Veritas) ; Buffet Patrick (Eramet) ; Burda Hubert (Hubert Burda Media Holding) ; Caparros Alain (Rewe group) ; Clamadieu Jean-Pierre (Rhodia) ; Cromme Gerhard (ThyssenKrupp) ; Crouzet Philippe (Vallourec) ; de Chalendar Pierre-André (Saint-Gobain) ; de Margerie Christophe (Total) ; de Romanet Augustin (Caisse des dépôts et consignations) ; Degenhart Elmar (Continental) ; Diekmann Michael (Allianz) ; Engel Klaus (Evonik Industries) ; Fehrenbach Franz (Robert Bosch) ; Frérot Antoine (Veolia Environnement) ; Hagemann Snabe Jim (SAP) ; Henrot François (Groupe Rothschild Cie Banque) ; Hermelin Paul (Cap Gemini) ; Kormann Hermut (Lazard) ; Kron Patrick (Alstom) ; Lachmann Henri (Schneider Electric) ; Lafont Bruno (Lafarge) ; Lauvergeon Anne (Areva) ; Lévy Maurice (Publicis Groupe SA) ; Lévy Jean-Bernard (Vivendi) ; Löscher Peter (Siemens) ; Mestrallet Gérard (GDF Suez) ; Obermann René (Deutsche Telekom) ;Oetker Arend (Dr Arend Oetker Holding) ; Oudéa Frédéric (Société Générale) ; Potier Benoit (Air Liquide) ; Ranque Denis (Cercle de l'industrie/Technicolor) ; Reithofer Norbert (BMW) ; Reitzle Wolfgang (Linde) ; Richard Stéphane (France Telecom) ; Rollier Michel (Michelin) ; Rose Frédéric (Technicolor) ; Schnepp Gilles (Legrand) ; Spinetta Jean-Cyril (Air-France KLM) ; Teyssen Johannes (E.ON) ; Thumann Jürgen (BusinessEurope) ; Verwaayen Ben (Alcatel-Lucent) ; Viehbacher Chris (Sanofi) ; Zetsche Dieter (Daimler).
\ No newline at end of file
+
+Appel Frank (Deutsche Post) ; Aschenbroich Jacques (Valeo) ; Berger Roland (Roland Berger Strategy Consultants) ; Bock Kurt (BASF) ; Bories Christel (Constellium) ; Borsig Clemens (Deutsche Bank) ; Brunck Robert (CGG Veritas) ; Buffet Patrick (Eramet) ; Burda Hubert (Hubert Burda Media Holding) ; Caparros Alain (Rewe group) ; Clamadieu Jean-Pierre (Rhodia) ; Cromme Gerhard (ThyssenKrupp) ; Crouzet Philippe (Vallourec) ; de Chalendar Pierre-André (Saint-Gobain) ; de Margerie Christophe (Total) ; de Romanet Augustin (Caisse des dépôts et consignations) ; Degenhart Elmar (Continental) ; Diekmann Michael (Allianz) ; Engel Klaus (Evonik Industries) ; Fehrenbach Franz (Robert Bosch) ; Frérot Antoine (Veolia Environnement) ; Hagemann Snabe Jim (SAP) ; Henrot François (Groupe Rothschild Cie Banque) ; Hermelin Paul (Cap Gemini) ; Kormann Hermut (Lazard) ; Kron Patrick (Alstom) ; Lachmann Henri (Schneider Electric) ; Lafont Bruno (Lafarge) ; Lauvergeon Anne (Areva) ; Lévy Maurice (Publicis Groupe SA) ; Lévy Jean-Bernard (Vivendi) ; Löscher Peter (Siemens) ; Mestrallet Gérard (GDF Suez) ; Obermann René (Deutsche Telekom) ;Oetker Arend (Dr Arend Oetker Holding) ; Oudéa Frédéric (Société Générale) ; Potier Benoit (Air Liquide) ; Ranque Denis (Cercle de l'industrie/Technicolor) ; Reithofer Norbert (BMW) ; Reitzle Wolfgang (Linde) ; Richard Stéphane (France Telecom) ; Rollier Michel (Michelin) ; Rose Frédéric (Technicolor) ; Schnepp Gilles (Legrand) ; Spinetta Jean-Cyril (Air-France KLM) ; Teyssen Johannes (E.ON) ; Thumann Jürgen (BusinessEurope) ; Verwaayen Ben (Alcatel-Lucent) ; Viehbacher Chris (Sanofi) ; Zetsche Dieter (Daimler).
+
\ No newline at end of file
diff --git a/test/test-pages/liberation-1/expected-metadata.json b/test/test-pages/liberation-1/expected-metadata.json
index 5f2b7b5..8ad2b2c 100644
--- a/test/test-pages/liberation-1/expected-metadata.json
+++ b/test/test-pages/liberation-1/expected-metadata.json
@@ -1,5 +1,5 @@
{
- "Author": "AFP",
+ "Author": "Par Sébastien Farcis",
"Direction": null,
"Excerpt": "Laurent Fabius a accueilli jeudi matin à Roissy un premier avion spécial ramenant des rescapés.",
"Image": "http:\/\/md1.libe.com\/photo\/755923-000_hkg10175905.jpg?modified_at=1430371146&width=750",
diff --git a/test/test-pages/liberation-1/expected.html b/test/test-pages/liberation-1/expected.html
index 889c2b9..e123ff2 100644
--- a/test/test-pages/liberation-1/expected.html
+++ b/test/test-pages/liberation-1/expected.html
@@ -1,13 +1,20 @@
-
+
+
+
+
+
+
+
-
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.
+
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.
-
-
+
+
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/test/test-pages/lifehacker-post-comment-load/expected.html b/test/test-pages/lifehacker-post-comment-load/expected.html
index 2f862a9..758a827 100644
--- a/test/test-pages/lifehacker-post-comment-load/expected.html
+++ b/test/test-pages/lifehacker-post-comment-load/expected.html
@@ -1,4 +1,15 @@
-
We all buy things from time to time that we don't really need. It's okay to appeal to your wants every once in a while, as long as you're in control. If you struggle with clutter, impulse buys, and buyer's remorse, here's how to put your mind in the right place before you even set foot in a store.
+
+
+
+
+
+
+
+
+
+
+
+
We all buy things from time to time that we don't really need. It's okay to appeal to your wants every once in a while, as long as you're in control. If you struggle with clutter, impulse buys, and buyer's remorse, here's how to put your mind in the right place before you even set foot in a store.
@@ -21,7 +32,7 @@
-
+
@@ -43,7 +54,48 @@
-
Color: Stores use color to make products attractive and eye-catching, but they also use color on price labels. Red stands out and can encourage taking action, that's why it's commonly associated with sale signage and advertising. When you see red, remember what they're trying to do to your brain with that color. You don't to buy something just because it's on sale.
Navigation Roadblocks: Stores force you to walk around stuff you don't need to find the stuff you are really after. Have a list of what you need before you go in, go straight to it, and imagine it's the only item in the store.
The Touch Factor: Stores place items they want to sell in easy to reach locations and encourage you to touch them. Don't do it! As soon as you pick something up, you're more likely to buy it because your mind suddenly takes ownership of the object. Don't pick anything up and don't play with display items.
Scents and Sounds: You'll probably hear classic, upbeat tunes when you walk into a store. The upbeat music makes you happy and excited, while playing familiar songs makes you feel comfortable. They also use pleasant smells to put your mind at ease. A happy, comfortable mind at ease is a dangerous combination for your brain when shopping. There's not much you can do to avoid this unless you shop online, but it's good to be aware of it.
Color: Stores use color to make products attractive and eye-catching, but they also use color on price labels. Red stands out and can encourage taking action, that's why it's commonly associated with sale signage and advertising. When you see red, remember what they're trying to do to your brain with that color. You don't to buy something just because it's on sale.
Navigation Roadblocks: Stores force you to walk around stuff you don't need to find the stuff you are really after. Have a list of what you need before you go in, go straight to it, and imagine it's the only item in the store.
The Touch Factor: Stores place items they want to sell in easy to reach locations and encourage you to touch them. Don't do it! As soon as you pick something up, you're more likely to buy it because your mind suddenly takes ownership of the object. Don't pick anything up and don't play with display items.
Scents and Sounds: You'll probably hear classic, upbeat tunes when you walk into a store. The upbeat music makes you happy and excited, while playing familiar songs makes you feel comfortable. They also use pleasant smells to put your mind at ease. A happy, comfortable mind at ease is a dangerous combination for your brain when shopping. There's not much you can do to avoid this unless you shop online, but it's good to be aware of it.
The purpose of this exercise is twofold: you see what you already have and don't need to ever buy again, and you get to see what you shouldn't have bought in the first place. As you list everything out, separate items into categories. It's extremely important that you are as honest with yourself as possible while you do this. It's also important you actually write this all down or type it all out. Here is the first set of categories to separate everything into:
@@ -113,18 +195,40 @@
-
Need: You absolutely need this item to get by on a day to day basis.
Sometimes Need: You don't need this item every day, but you use it on a somewhat regular basis.
Want: You bought this item because you wanted it, not because you needed it.
Crap: You don't have a good reason why you have it and you already know it needs to go (there's probably a few of these items, at least).
Leave the things you listed as "needs" alone, put your stuff listed as "crap" in a pile or box to go bye-bye, and move your attention back to your "sometimes need" and "want" lists. You need to go back over both of those lists because you probably fudged some of the listings, either subconsciously or intentionally. Now ask yourself these three questions as you go through both the "sometimes need" and "want" lists:
+
Need: You absolutely need this item to get by on a day to day basis.
Sometimes Need: You don't need this item every day, but you use it on a somewhat regular basis.
Want: You bought this item because you wanted it, not because you needed it.
Crap: You don't have a good reason why you have it and you already know it needs to go (there's probably a few of these items, at least).
+
+
+
+
+
+
Leave the things you listed as "needs" alone, put your stuff listed as "crap" in a pile or box to go bye-bye, and move your attention back to your "sometimes need" and "want" lists. You need to go back over both of those lists because you probably fudged some of the listings, either subconsciously or intentionally. Now ask yourself these three questions as you go through both the "sometimes need" and "want" lists:
Remember to be honest and adjust your lists accordingly. There's nothing wrong with keeping things you wanted. Material items can bring happiness to many people, but make sure the items on your "want" list actively provide you joy and are being used. If an item doesn't get much use or doesn't make you happy, add it to the "crap" list.
Remember to be honest and adjust your lists accordingly. There's nothing wrong with keeping things you wanted. Material items can bring happiness to many people, but make sure the items on your "want" list actively provide you joy and are being used. If an item doesn't get much use or doesn't make you happy, add it to the "crap" list.
@@ -157,7 +261,7 @@
-
+
@@ -201,7 +305,7 @@
-
+
@@ -245,7 +349,7 @@
-
+
@@ -289,7 +393,7 @@
-
+
@@ -311,7 +415,18 @@
-
Is this a planned purchase?
Will it end up in the "crap" list picture one day?
Custom build your test to hit all of your weaknesses. If you make a lot of impulse buys, include questions that address that. If you experience a lot of buyer's remorse, include a lot of questions that make you think about the use of item after you buy it. If buying the latest and greatest technology is your weakness, Joshua Becker at Becoming Minimalist suggests you ask yourself what problem the piece of tech solves. If you can't think of anything it solves or if you already have something that solves it, you don't need it. Be thorough and build a test that you can run through your mind every time you consider buying something.
+
Is this a planned purchase?
Will it end up in the "crap" list picture one day?
Custom build your test to hit all of your weaknesses. If you make a lot of impulse buys, include questions that address that. If you experience a lot of buyer's remorse, include a lot of questions that make you think about the use of item after you buy it. If buying the latest and greatest technology is your weakness, Joshua Becker at Becoming Minimalist suggests you ask yourself what problem the piece of tech solves. If you can't think of anything it solves or if you already have something that solves it, you don't need it. Be thorough and build a test that you can run through your mind every time you consider buying something.
@@ -333,7 +448,7 @@
-
+
@@ -379,7 +494,37 @@
-
The last thing you should consider when it comes to impulse buys is "artificial replacement." As Trent Hamm at The Simple Dollar explains, artificial replacement can happen when you start to reduce the time you get with your main interests:
The last thing you should consider when it comes to impulse buys is "artificial replacement." As Trent Hamm at The Simple Dollar explains, artificial replacement can happen when you start to reduce the time you get with your main interests:
@@ -424,7 +569,7 @@
-
+
@@ -435,7 +580,7 @@
-
Once you've programmed your mind to stop buying crap you don't need, you'll have some extra cash to play with. Take all that money and start putting it toward your future and things you will need further down the road. You might need a home, a vehicle, or a way to retire, but none of that can happen until you start planning for it.
+
Once you've programmed your mind to stop buying crap you don't need, you'll have some extra cash to play with. Take all that money and start putting it toward your future and things you will need further down the road. You might need a home, a vehicle, or a way to retire, but none of that can happen until you start planning for it.
@@ -457,7 +602,38 @@
-
With your debts whittled down, you should start an emergency fund. No matter how well you plan things, accidents and health emergencies can still happen. An emergency fund is designed to make those kinds of events more manageable. This type of savings account is strictly for when life throws you a curveball, but you can grow one pretty easily with only modest savings.
+
With your debts whittled down, you should start an emergency fund. No matter how well you plan things, accidents and health emergencies can still happen. An emergency fund is designed to make those kinds of events more manageable. This type of savings account is strictly for when life throws you a curveball, but you can grow one pretty easily with only modest savings.
+
+
+
+
+
+
+
+
+
+
+
When you've paid off your debt and prepared yourself for troubled times, you can start saving for the big stuff. All that money you're not spending on crap anymore can be saved, invested, and compounded to let you buy comfort and security. If you don't know where to start, talk to a financial planner. Or create a simple, yet effective "set and forget" investment portfolio. You've worked hard to reprogram your mind, so make sure you reap the benefits for many years to come.
When you've paid off your debt and prepared yourself for troubled times, you can start saving for the big stuff. All that money you're not spending on crap anymore can be saved, invested, and compounded to let you buy comfort and security. If you don't know where to start, talk to a financial planner. Or create a simple, yet effective "set and forget" investment portfolio. You've worked hard to reprogram your mind, so make sure you reap the benefits for many years to come.
\ No newline at end of file
diff --git a/test/test-pages/lifehacker-working/expected.html b/test/test-pages/lifehacker-working/expected.html
index 2f862a9..758a827 100644
--- a/test/test-pages/lifehacker-working/expected.html
+++ b/test/test-pages/lifehacker-working/expected.html
@@ -1,4 +1,15 @@
-
We all buy things from time to time that we don't really need. It's okay to appeal to your wants every once in a while, as long as you're in control. If you struggle with clutter, impulse buys, and buyer's remorse, here's how to put your mind in the right place before you even set foot in a store.
+
+
+
+
+
+
+
+
+
+
+
+
We all buy things from time to time that we don't really need. It's okay to appeal to your wants every once in a while, as long as you're in control. If you struggle with clutter, impulse buys, and buyer's remorse, here's how to put your mind in the right place before you even set foot in a store.
@@ -21,7 +32,7 @@
-
+
@@ -43,7 +54,48 @@
-
Color: Stores use color to make products attractive and eye-catching, but they also use color on price labels. Red stands out and can encourage taking action, that's why it's commonly associated with sale signage and advertising. When you see red, remember what they're trying to do to your brain with that color. You don't to buy something just because it's on sale.
Navigation Roadblocks: Stores force you to walk around stuff you don't need to find the stuff you are really after. Have a list of what you need before you go in, go straight to it, and imagine it's the only item in the store.
The Touch Factor: Stores place items they want to sell in easy to reach locations and encourage you to touch them. Don't do it! As soon as you pick something up, you're more likely to buy it because your mind suddenly takes ownership of the object. Don't pick anything up and don't play with display items.
Scents and Sounds: You'll probably hear classic, upbeat tunes when you walk into a store. The upbeat music makes you happy and excited, while playing familiar songs makes you feel comfortable. They also use pleasant smells to put your mind at ease. A happy, comfortable mind at ease is a dangerous combination for your brain when shopping. There's not much you can do to avoid this unless you shop online, but it's good to be aware of it.
Color: Stores use color to make products attractive and eye-catching, but they also use color on price labels. Red stands out and can encourage taking action, that's why it's commonly associated with sale signage and advertising. When you see red, remember what they're trying to do to your brain with that color. You don't to buy something just because it's on sale.
Navigation Roadblocks: Stores force you to walk around stuff you don't need to find the stuff you are really after. Have a list of what you need before you go in, go straight to it, and imagine it's the only item in the store.
The Touch Factor: Stores place items they want to sell in easy to reach locations and encourage you to touch them. Don't do it! As soon as you pick something up, you're more likely to buy it because your mind suddenly takes ownership of the object. Don't pick anything up and don't play with display items.
Scents and Sounds: You'll probably hear classic, upbeat tunes when you walk into a store. The upbeat music makes you happy and excited, while playing familiar songs makes you feel comfortable. They also use pleasant smells to put your mind at ease. A happy, comfortable mind at ease is a dangerous combination for your brain when shopping. There's not much you can do to avoid this unless you shop online, but it's good to be aware of it.
The purpose of this exercise is twofold: you see what you already have and don't need to ever buy again, and you get to see what you shouldn't have bought in the first place. As you list everything out, separate items into categories. It's extremely important that you are as honest with yourself as possible while you do this. It's also important you actually write this all down or type it all out. Here is the first set of categories to separate everything into:
@@ -113,18 +195,40 @@
-
Need: You absolutely need this item to get by on a day to day basis.
Sometimes Need: You don't need this item every day, but you use it on a somewhat regular basis.
Want: You bought this item because you wanted it, not because you needed it.
Crap: You don't have a good reason why you have it and you already know it needs to go (there's probably a few of these items, at least).
Leave the things you listed as "needs" alone, put your stuff listed as "crap" in a pile or box to go bye-bye, and move your attention back to your "sometimes need" and "want" lists. You need to go back over both of those lists because you probably fudged some of the listings, either subconsciously or intentionally. Now ask yourself these three questions as you go through both the "sometimes need" and "want" lists:
+
Need: You absolutely need this item to get by on a day to day basis.
Sometimes Need: You don't need this item every day, but you use it on a somewhat regular basis.
Want: You bought this item because you wanted it, not because you needed it.
Crap: You don't have a good reason why you have it and you already know it needs to go (there's probably a few of these items, at least).
+
+
+
+
+
+
Leave the things you listed as "needs" alone, put your stuff listed as "crap" in a pile or box to go bye-bye, and move your attention back to your "sometimes need" and "want" lists. You need to go back over both of those lists because you probably fudged some of the listings, either subconsciously or intentionally. Now ask yourself these three questions as you go through both the "sometimes need" and "want" lists:
Remember to be honest and adjust your lists accordingly. There's nothing wrong with keeping things you wanted. Material items can bring happiness to many people, but make sure the items on your "want" list actively provide you joy and are being used. If an item doesn't get much use or doesn't make you happy, add it to the "crap" list.
Remember to be honest and adjust your lists accordingly. There's nothing wrong with keeping things you wanted. Material items can bring happiness to many people, but make sure the items on your "want" list actively provide you joy and are being used. If an item doesn't get much use or doesn't make you happy, add it to the "crap" list.
@@ -157,7 +261,7 @@
-
+
@@ -201,7 +305,7 @@
-
+
@@ -245,7 +349,7 @@
-
+
@@ -289,7 +393,7 @@
-
+
@@ -311,7 +415,18 @@
-
Is this a planned purchase?
Will it end up in the "crap" list picture one day?
Custom build your test to hit all of your weaknesses. If you make a lot of impulse buys, include questions that address that. If you experience a lot of buyer's remorse, include a lot of questions that make you think about the use of item after you buy it. If buying the latest and greatest technology is your weakness, Joshua Becker at Becoming Minimalist suggests you ask yourself what problem the piece of tech solves. If you can't think of anything it solves or if you already have something that solves it, you don't need it. Be thorough and build a test that you can run through your mind every time you consider buying something.
+
Is this a planned purchase?
Will it end up in the "crap" list picture one day?
Custom build your test to hit all of your weaknesses. If you make a lot of impulse buys, include questions that address that. If you experience a lot of buyer's remorse, include a lot of questions that make you think about the use of item after you buy it. If buying the latest and greatest technology is your weakness, Joshua Becker at Becoming Minimalist suggests you ask yourself what problem the piece of tech solves. If you can't think of anything it solves or if you already have something that solves it, you don't need it. Be thorough and build a test that you can run through your mind every time you consider buying something.
@@ -333,7 +448,7 @@
-
+
@@ -379,7 +494,37 @@
-
The last thing you should consider when it comes to impulse buys is "artificial replacement." As Trent Hamm at The Simple Dollar explains, artificial replacement can happen when you start to reduce the time you get with your main interests:
The last thing you should consider when it comes to impulse buys is "artificial replacement." As Trent Hamm at The Simple Dollar explains, artificial replacement can happen when you start to reduce the time you get with your main interests:
@@ -424,7 +569,7 @@
-
+
@@ -435,7 +580,7 @@
-
Once you've programmed your mind to stop buying crap you don't need, you'll have some extra cash to play with. Take all that money and start putting it toward your future and things you will need further down the road. You might need a home, a vehicle, or a way to retire, but none of that can happen until you start planning for it.
+
Once you've programmed your mind to stop buying crap you don't need, you'll have some extra cash to play with. Take all that money and start putting it toward your future and things you will need further down the road. You might need a home, a vehicle, or a way to retire, but none of that can happen until you start planning for it.
@@ -457,7 +602,38 @@
-
With your debts whittled down, you should start an emergency fund. No matter how well you plan things, accidents and health emergencies can still happen. An emergency fund is designed to make those kinds of events more manageable. This type of savings account is strictly for when life throws you a curveball, but you can grow one pretty easily with only modest savings.
+
With your debts whittled down, you should start an emergency fund. No matter how well you plan things, accidents and health emergencies can still happen. An emergency fund is designed to make those kinds of events more manageable. This type of savings account is strictly for when life throws you a curveball, but you can grow one pretty easily with only modest savings.
+
+
+
+
+
+
+
+
+
+
+
When you've paid off your debt and prepared yourself for troubled times, you can start saving for the big stuff. All that money you're not spending on crap anymore can be saved, invested, and compounded to let you buy comfort and security. If you don't know where to start, talk to a financial planner. Or create a simple, yet effective "set and forget" investment portfolio. You've worked hard to reprogram your mind, so make sure you reap the benefits for many years to come.
When you've paid off your debt and prepared yourself for troubled times, you can start saving for the big stuff. All that money you're not spending on crap anymore can be saved, invested, and compounded to let you buy comfort and security. If you don't know where to start, talk to a financial planner. Or create a simple, yet effective "set and forget" investment portfolio. You've worked hard to reprogram your mind, so make sure you reap the benefits for many years to come.
\ No newline at end of file
diff --git a/test/test-pages/links-in-tables/expected-metadata.json b/test/test-pages/links-in-tables/expected-metadata.json
index d6b1330..d13d96c 100644
--- a/test/test-pages/links-in-tables/expected-metadata.json
+++ b/test/test-pages/links-in-tables/expected-metadata.json
@@ -1,5 +1,5 @@
{
- "Author": null,
+ "Author": "",
"Direction": null,
"Excerpt": "Posted by Andrew Hayden, Software Engineer on Google Play Android users are downloading tens of billions of apps and games on Google Pla...",
"Image": "https:\/\/2.bp.blogspot.com\/-chCZZinlUTg\/WEcxvJo9gdI\/AAAAAAAADnk\/3ND_BspqN6Y2j5xxkLFW3RyS2Ig0NHZpQCLcB\/w1200-h630-p-k-nu\/ipsum-opsum.gif",
diff --git a/test/test-pages/links-in-tables/expected.html b/test/test-pages/links-in-tables/expected.html
index 05e0723..ddeed24 100644
--- a/test/test-pages/links-in-tables/expected.html
+++ b/test/test-pages/links-in-tables/expected.html
@@ -54,7 +54,7 @@ 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
@@ -107,42 +107,51 @@ Here are examples of app updates already using File-by-File Patching:
Disclaimer: if you see different patch sizes when you press "update"
@@ -169,6 +178,6 @@ 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/lwn-1/expected.html b/test/test-pages/lwn-1/expected.html
index 358f956..2ed24ac 100644
--- a/test/test-pages/lwn-1/expected.html
+++ b/test/test-pages/lwn-1/expected.html
@@ -1,4 +1,5 @@
-
QGIS is a free-software geographic information system (GIS) tool; it provides a unified interface in which users can import, edit, and analyze geographic-oriented information, and it can produce output as varied as printable maps or map-based web services. The project recently made its first update to be designated a long-term release (LTR), and that release is both poised for high-end usage and friendly to newcomers alike.
-
The new release is version 2.8, which was unveiled on March 2. An official change
+
As the name might suggest, QGIS is a Qt application; the latest release will, in fact, build on both Qt4 and Qt5, although the binaries released by the project come only in Qt4 form at present. 2.8 has been labeled a long-term release (LTR)—which, in this case, means that the project has committed to providing backported bug fixes for one full calendar year, and that the 2.8.x series is in permanent feature freeze. The goal, according to the change log, is to provide a stable version suitable for businesses and deployments in other large organizations. The change log itself points out that the development of quite a few new features was underwritten by various GIS companies or university groups, which suggests that taking care of these organizations' needs is reaping dividends for the project.
+
As the name might suggest, QGIS is a Qt application; the latest release will, in fact, build on both Qt4 and Qt5, although the binaries released by the project come only in Qt4 form at present. 2.8 has been labeled a long-term release (LTR)—which, in this case, means that the project has committed to providing backported bug fixes for one full calendar year, and that the 2.8.x series is in permanent feature freeze. The goal, according to the change log, is to provide a stable version suitable for businesses and deployments in other large organizations. The change log itself points out that the development of quite a few new features was underwritten by various GIS companies or university groups, which suggests that taking care of these organizations' needs is reaping dividends for the project.
For those new to QGIS (or GIS in general), there is a detailed new-user tutorial that provides a thorough walk-through of the data-manipulation, mapping, and analysis functions. Being a new user, I went through the tutorial; although there are a handful of minor differences between QGIS 2.8 and the version used in the text (primarily whether specific features were accessed through a toolbar or right-click menu), on the whole it is well worth the time.
QGIS is designed to make short work of importing spatially oriented data sets, mining information from them, and turning the results into a meaningful visualization. Technically speaking, the visualization output is optional: one could simply extract the needed statistics and results and use them to answer some question or, perhaps, publish the massaged data set as a database for others to use.
But well-made maps are often the easiest way to illuminate facts about populations, political regions, geography, and many other topics when human comprehension is the goal. QGIS makes importing data from databases, web-mapping services (WMS), and even unwieldy flat-file data dumps a painless experience. It handles converting between a variety of map-referencing systems more or less automatically, and allows the user to focus on finding the useful attributes of the data sets and rendering them on screen.
Here be data
The significant changes in QGIS 2.8 fall into several categories. There are updates to how QGIS handles the mathematical expressions and queries users can use to filter information out of a data set, improvements to the tools used to explore the on-screen map canvas, and enhancements to the "map composer" used to produce visual output. This is on top of plenty of other under-the-hood improvements, naturally.
-
In the first category are several updates to the filtering tools used to mine a data set. Generally speaking, each independent data set is added to a QGIS project as its own layer, then transformed with filters to focus in on a specific portion of the original data. For instance, the land-usage statistics for a region might be one layer, while roads and buildings for the same region from OpenStreetMap might be two additional layers. Such filters can be created in several ways: there is a "query builder" that lets the user construct and test expressions on a data layer, then save the results, an SQL console for performing similar queries on a database, and spreadsheet-like editing tools for working directly on data tables.
+
In the first category are several updates to the filtering tools used to mine a data set. Generally speaking, each independent data set is added to a QGIS project as its own layer, then transformed with filters to focus in on a specific portion of the original data. For instance, the land-usage statistics for a region might be one layer, while roads and buildings for the same region from OpenStreetMap might be two additional layers. Such filters can be created in several ways: there is a "query builder" that lets the user construct and test expressions on a data layer, then save the results, an SQL console for performing similar queries on a database, and spreadsheet-like editing tools for working directly on data tables.
All three have been improved in this release. New are support for if(condition, true, false) conditional statements, a set of operations for geometry primitives (e.g., to test whether regions overlap or lines intersect), and an "integer divide" operation. Users can also add comments to their queries to annotate their code, and there is a new custom
function editor for writing Python functions that can be called in mathematical expressions within the query builder.
It is also now possible to select only some rows in a table, then perform calculations just on the selection—previously, users would have to extract the rows of interest into a new table first. Similarly, in the SQL editor, the user can highlight a subset of the SQL query and execute it separately, which is no doubt helpful for debugging.
There have also been several improvements to the Python and Processing plugins. Users can now drag-and-drop Python scripts onto QGIS and they will be run automatically. Several new analysis algorithms are now available through the Processing interface that were previously Python-only; they include algorithms for generating grids of points or vectors within a region, splitting layers and lines, generating hypsometric
curves, refactoring data sets, and more.
Maps in, maps out
-
The process of working with on-screen map data picked up some improvements in the new release as well. Perhaps the most fundamental is that each map layer added to the canvas is now handled in its own thread, so fewer hangs in the user interface are experienced when re-rendering a layer (as happens whenever the user changes the look of points or shapes in a layer). Since remote databases can also be layers, this multi-threaded approach is more resilient against connectivity problems, too. The interface also now supports temporary "scratch" layers that can be used to merge, filter, or simply experiment with a data set, but are not saved when the current project is saved.
+
The process of working with on-screen map data picked up some improvements in the new release as well. Perhaps the most fundamental is that each map layer added to the canvas is now handled in its own thread, so fewer hangs in the user interface are experienced when re-rendering a layer (as happens whenever the user changes the look of points or shapes in a layer). Since remote databases can also be layers, this multi-threaded approach is more resilient against connectivity problems, too. The interface also now supports temporary "scratch" layers that can be used to merge, filter, or simply experiment with a data set, but are not saved when the current project is saved.
For working on the canvas itself, polygonal regions can now use raster images (tiled, if necessary) as fill colors, the map itself can be rotated arbitrarily, and objects can be "snapped" to align with items on any layer (not just the current layer). For working with raster image layers (e.g., aerial photographs) or simply creating new geometric shapes by hand, there is a new digitizing tool that can offer assistance by locking lines to specific angles, automatically keeping borders parallel, and other niceties.
There is a completely overhauled "simplify" tool that is used to reduce the number of extraneous vertices of a vector layer (thus reducing its size). The old simplify tool provided only a relative "tolerance" setting that did not correspond directly to any units. With the new tool, users can set a simplification threshold in terms of the underlying map units, layer-specific units, pixels, and more—and, in addition, the tool reports how much the simplify operation has reduced the size of the data.
-
There has also been an effort to present a uniform interface to one of the most important features of the map canvas: the ability to change the symbology used for an item based on some data attribute. The simplest example might be to change the line color of a road based on whether its road-type attribute is "highway," "service road," "residential," or so on. But the same feature is used to automatically highlight layer information based on the filtering and querying functionality discussed above. The new release allows many more map attributes to be controlled by these "data definition" settings, and provides a hard-to-miss button next to each attribute, through which a custom data definition can be set.
+
There has also been an effort to present a uniform interface to one of the most important features of the map canvas: the ability to change the symbology used for an item based on some data attribute. The simplest example might be to change the line color of a road based on whether its road-type attribute is "highway," "service road," "residential," or so on. But the same feature is used to automatically highlight layer information based on the filtering and querying functionality discussed above. The new release allows many more map attributes to be controlled by these "data definition" settings, and provides a hard-to-miss button next to each attribute, through which a custom data definition can be set.
QGIS's composer module is the tool used to take project data and generate a map that can be used outside of the application (in print, as a static image, or as a layer for MapServer or some other software tool, for example). Consequently, it is not a simple select-and-click-export tool; composing the output can involve a lot of choices about which data to make visible, how (and where) to label it, and how to make it generally accessible.
The updated composer in 2.8 now has a full-screen mode and sports several new options for configuring output. For instance, the user now has full control over how map axes are labeled. In previous releases, the grid coordinates of the map could be turned on or off, but the only options were all or nothing. Now, the user can individually choose whether coordinates are displayed on all four sides, and can even choose in which direction vertical text labels will run (so that they can be correctly justified to the edge of the map, for example).
There are, as usual, many more changes than there is room to discuss. Some particularly noteworthy improvements include the ability to save and load bookmarks for frequently used data sources (perhaps most useful for databases, web services, and other non-local data) and improvements to QGIS's server module. This module allows one QGIS instance to serve up data accessible to other QGIS applications (for example, to simply team projects). The server can now be extended with Python plugins and the data layers that it serves can be styled with style rules like those used in the desktop interface.
@@ -55,7 +56,7 @@ curves, refactoring data sets, and more.
The LibreOffice project was announced with great fanfare in September 2010. Nearly one year later, the OpenOffice.org project (from which LibreOffice was forked) was
+ March 25, 2015
The LibreOffice project was announced with great fanfare in September 2010. Nearly one year later, the OpenOffice.org project (from which LibreOffice was forked) was
cut loose from Oracle and found a new home as an Apache project. It is fair to say that the rivalry between the two projects in the time since then has been strong. Predictions that one project or the other would fail have not been borne out, but that does not mean that the two projects are equally successful. A look at the two projects' development communities reveals some interesting differences.
Release histories
@@ -63,286 +64,499 @@ cut loose from Oracle and found a new home as an Apache project. It is fair
The release history for LibreOffice tells a slightly different story:
-
+
+
It seems clear that LibreOffice has maintained a rather more frenetic release cadence, generally putting out at least one release per month. The project typically keeps at least two major versions alive at any one time. Most of the releases are of the minor, bug-fix variety, but there have been two major releases in the last year as well.
Development statistics
In the one-year period since late March 2014, there have been 381 changesets committed to the OpenOffice Subversion repository. The most active committers are:
-
Most active OpenOffice developers
-
-
By changesets
-
Herbert Dürr
+
+
+
+
Most active OpenOffice developers
+
+
+
+
+
+
+
By changesets
+
+
+
Herbert Dürr
63
16.6%
-
Jürgen Schmidt
+
+
+
Jürgen Schmidt
56
14.7%
-
Armin Le Grand
+
+
+
Armin Le Grand
56
14.7%
-
Oliver-Rainer Wittmann
+
+
+
Oliver-Rainer Wittmann
46
12.1%
-
Tsutomu Uchino
+
+
+
Tsutomu Uchino
33
8.7%
-
Kay Schenk
+
+
+
Kay Schenk
27
7.1%
-
Pedro Giffuni
+
+
+
Pedro Giffuni
23
6.1%
-
Ariel Constenla-Haile
+
+
+
Ariel Constenla-Haile
22
5.8%
-
Andrea Pescetti
+
+
+
Andrea Pescetti
14
3.7%
-
Steve Yin
+
+
+
Steve Yin
11
2.9%
-
Andre Fischer
+
+
+
Andre Fischer
10
2.6%
-
Yuri Dario
+
+
+
Yuri Dario
7
1.8%
-
Regina Henschel
+
+
+
Regina Henschel
6
1.6%
-
Juan C. Sanz
+
+
+
Juan C. Sanz
2
0.5%
-
Clarence Guo
+
+
+
Clarence Guo
2
0.5%
-
Tal Daniel
+
+
+
Tal Daniel
2
0.5%
-
+
+
+
+
-
By changed lines
-
Jürgen Schmidt
+
+
+
+
By changed lines
+
+
+
Jürgen Schmidt
455499
88.1%
-
Andre Fischer
+
+
+
Andre Fischer
26148
3.8%
-
Pedro Giffuni
+
+
+
Pedro Giffuni
23183
3.4%
-
Armin Le Grand
+
+
+
Armin Le Grand
11018
1.6%
-
Juan C. Sanz
+
+
+
Juan C. Sanz
4582
0.7%
-
Oliver-Rainer Wittmann
+
+
+
Oliver-Rainer Wittmann
4309
0.6%
-
Andrea Pescetti
+
+
+
Andrea Pescetti
3908
0.6%
-
Herbert Dürr
+
+
+
Herbert Dürr
2811
0.4%
-
Tsutomu Uchino
+
+
+
Tsutomu Uchino
1991
0.3%
-
Ariel Constenla-Haile
+
+
+
Ariel Constenla-Haile
1258
0.2%
-
Steve Yin
+
+
+
Steve Yin
1010
0.1%
-
Kay Schenk
+
+
+
Kay Schenk
616
0.1%
-
Regina Henschel
+
+
+
Regina Henschel
417
0.1%
-
Yuri Dario
+
+
+
Yuri Dario
268
0.0%
-
tal
+
+
+
tal
16
0.0%
-
Clarence Guo
+
+
+
Clarence Guo
11
0.0%
-
-
+
+
+
+
+
+
+
+
In truth, the above list is not just the most active OpenOffice developers — it is all of them; a total of 16 developers have committed changes to OpenOffice in the last year. Those developers changed 528,000 lines of code, but, as can be seen above, Jürgen Schmidt accounted for the bulk of those changes, which were mostly updates to translation files.
The top four developers in the "by changesets" column all work for IBM, so IBM is responsible for a minimum of about 60% of the changes to OpenOffice in the last year.
The picture for LibreOffice is just a little bit different; in the same one-year period, the project has committed 22,134 changesets from 268 developers. The most active of these developers were:
-
Most active LibreOffice developers
-
-
By changesets
-
Caolán McNamara
+
+
+
+
Most active LibreOffice developers
+
+
+
+
+
+
+
By changesets
+
+
+
Caolán McNamara
4307
19.5%
-
Stephan Bergmann
+
+
+
Stephan Bergmann
2351
10.6%
-
Miklos Vajna
+
+
+
Miklos Vajna
1449
6.5%
-
Tor Lillqvist
+
+
+
Tor Lillqvist
1159
5.2%
-
Noel Grandin
+
+
+
Noel Grandin
1064
4.8%
-
Markus Mohrhard
+
+
+
Markus Mohrhard
935
4.2%
-
Michael Stahl
+
+
+
Michael Stahl
915
4.1%
-
Kohei Yoshida
+
+
+
Kohei Yoshida
755
3.4%
-
Tomaž Vajngerl
+
+
+
Tomaž Vajngerl
658
3.0%
-
Thomas Arnhold
+
+
+
Thomas Arnhold
619
2.8%
-
Jan Holesovsky
+
+
+
Jan Holesovsky
466
2.1%
-
Eike Rathke
+
+
+
Eike Rathke
457
2.1%
-
Matteo Casalin
+
+
+
Matteo Casalin
442
2.0%
-
Bjoern Michaelsen
+
+
+
Bjoern Michaelsen
421
1.9%
-
Chris Sherlock
+
+
+
Chris Sherlock
396
1.8%
-
David Tardon
+
+
+
David Tardon
386
1.7%
-
Julien Nabet
+
+
+
Julien Nabet
362
1.6%
-
Zolnai Tamás
+
+
+
Zolnai Tamás
338
1.5%
-
Matúš Kukan
+
+
+
Matúš Kukan
256
1.2%
-
Robert Antoni Buj Gelonch
+
+
+
Robert Antoni Buj Gelonch
231
1.0%
-
+
+
+
+
-
By changed lines
-
Lionel Elie Mamane
+
+
+
+
By changed lines
+
+
+
Lionel Elie Mamane
244062
12.5%
-
Noel Grandin
+
+
+
Noel Grandin
238711
12.2%
-
Stephan Bergmann
+
+
+
Stephan Bergmann
161220
8.3%
-
Miklos Vajna
+
+
+
Miklos Vajna
129325
6.6%
-
Caolán McNamara
+
+
+
Caolán McNamara
97544
5.0%
-
Tomaž Vajngerl
+
+
+
Tomaž Vajngerl
69404
3.6%
-
Tor Lillqvist
+
+
+
Tor Lillqvist
59498
3.1%
-
Laurent Balland-Poirier
+
+
+
Laurent Balland-Poirier
52802
2.7%
-
Markus Mohrhard
+
+
+
Markus Mohrhard
50509
2.6%
-
Kohei Yoshida
+
+
+
Kohei Yoshida
45514
2.3%
-
Chris Sherlock
+
+
+
Chris Sherlock
36788
1.9%
-
Peter Foley
+
+
+
Peter Foley
34305
1.8%
-
Christian Lohmaier
+
+
+
Christian Lohmaier
33787
1.7%
-
Thomas Arnhold
+
+
+
Thomas Arnhold
32722
1.7%
-
David Tardon
+
+
+
David Tardon
21681
1.1%
-
David Ostrovsky
+
+
+
David Ostrovsky
21620
1.1%
-
Jan Holesovsky
+
+
+
Jan Holesovsky
20792
1.1%
-
Valentin Kettner
+
+
+
Valentin Kettner
20526
1.1%
-
Robert Antoni Buj Gelonch
+
+
+
Robert Antoni Buj Gelonch
20447
1.0%
-
Michael Stahl
+
+
+
Michael Stahl
18216
0.9%
-
-
+
+
+
+
+
+
+
+
To a first approximation, the top ten companies supporting LibreOffice in the last year are:
-
Companies supporting LibreOffice development
-
(by changesets)
-
Red Hat
+
+
+
+
Companies supporting LibreOffice development
+
+
+
(by changesets)
+
+
+
Red Hat
8417
38.0%
-
Collabora Multimedia
+
+
+
Collabora Multimedia
6531
29.5%
-
(Unknown)
+
+
+
(Unknown)
5126
23.2%
-
(None)
+
+
+
(None)
1490
6.7%
-
Canonical
+
+
+
Canonical
422
1.9%
-
Igalia S.L.
+
+
+
Igalia S.L.
80
0.4%
-
Ericsson
+
+
+
Ericsson
21
0.1%
-
Yandex
+
+
+
Yandex
18
0.1%
-
FastMail.FM
+
+
+
FastMail.FM
17
0.1%
-
SUSE
+
+
+
SUSE
7
0.0%
-
+
+
+
+
Development work on LibreOffice is thus concentrated in a small number of companies, though it is rather more spread out than OpenOffice development. It is worth noting that the LibreOffice developers with unknown affiliation, who contributed 23% of the changes, make up 82% of the developer base, so there would appear to be a substantial community of developers contributing from outside the above-listed companies.
Some conclusions
@@ -355,15 +569,16 @@ bark but the caravan moves on." That may be true, but, in this case, the
Security: Toward secure package downloads; New vulnerabilities in drupal, mozilla, openssl, python-django ...
+
+
Security: Toward secure package downloads; New vulnerabilities in drupal, mozilla, openssl, python-django ...
Kernel: LSFMM coverage: NFS, defragmentation, epoll(), copy offload, and more.
Distributions: A look at Debian's 2015 DPL candidates; Debian, Fedora, ...
Development: A look at GlusterFS; LibreOffice Online; Open sourcing existing code; Secure Boot in Windows 10; ...
Announcements: A Turing award for Michael Stonebraker, Sébastien Jodogne, ReGlue are Free Software Award winners, Kat Walsh joins FSF board of directors, Cyanogen, ...
The numbers: The S&P/Case-Shiller national index rose a seasonally adjusted 0.5% in the three-month period ending in January, and was up 6.2% compared to a year before. The 20-city index rose a seasonally adjusted 0.8% for the month, and 6.4% for the year.
What happened: Prices are still on fire. And the West is still the best: Seattle, Las Vegas and San Francisco all notched double-digit yearly price gains. Only one city, Washington, D.C., had a negative monthly reading.
As David Blitzer, chairman of the index committee at S&P Dow Jones Indices, noted in a release, the price gains are all about demand and lack of supply.
“The current months-supply — how many months at the current sales rate would be needed to absorb homes currently for sale — is 3.4; the average since 2000 is 6.0 months, and the high in July 2010 was 11.9,” Blitzer wrote. “Currently, the homeowner vacancy rate is 1.6% compared to an average of 2.1% since 2000; it peaked in 2010 at 2.7%. Despite limited supplies, rising prices and higher mortgage rates, affordability is not a concern.”
Relatively affordable housing is cold comfort to many would-be home buyers who simply can’t find anything to buy.
Big picture: Economists had forecast a 0.7% monthly increase, and a 6.2% 12-month increase, for the 20-city index. As MarketWatch has reported, most housing analysts have argued that the ongoing price gains in housing can’t last — and yet they have so far.
The numbers: The S&P/Case-Shiller national index rose a seasonally adjusted 0.5% in the three-month period ending in January, and was up 6.2% compared to a year before. The 20-city index rose a seasonally adjusted 0.8% for the month, and 6.4% for the year.
What happened: Prices are still on fire. And the West is still the best: Seattle, Las Vegas and San Francisco all notched double-digit yearly price gains. Only one city, Washington, D.C., had a negative monthly reading.
As David Blitzer, chairman of the index committee at S&P Dow Jones Indices, noted in a release, the price gains are all about demand and lack of supply.
“The current months-supply — how many months at the current sales rate would be needed to absorb homes currently for sale — is 3.4; the average since 2000 is 6.0 months, and the high in July 2010 was 11.9,” Blitzer wrote. “Currently, the homeowner vacancy rate is 1.6% compared to an average of 2.1% since 2000; it peaked in 2010 at 2.7%. Despite limited supplies, rising prices and higher mortgage rates, affordability is not a concern.”
Relatively affordable housing is cold comfort to many would-be home buyers who simply can’t find anything to buy.
Big picture: Economists had forecast a 0.7% monthly increase, and a 6.2% 12-month increase, for the 20-city index. As MarketWatch has reported, most housing analysts have argued that the ongoing price gains in housing can’t last — and yet they have so far.
We pushed out the first version of the Open Journalism site in January. Our goal is for the
+
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
+
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
+
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.
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.
+
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
+
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
+
+
+
+
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
@@ -56,12 +63,12 @@
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
+
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.
+
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.
@@ -69,122 +76,141 @@
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
+
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,
+
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
+
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
+
+
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
+
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
-
+
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
+
+
+ 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.
-
Still no mentorship or link to professional newsrooms building stories
+
+
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.
+
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
+
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
+
Lack of skill diversity (specifically coding, interaction design, and
statistics)
-
Overly restricted access to student website technology. Changes are primarily
+
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
+
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
+
+
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.
+
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
+
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.
+
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?
+
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
+
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
+
+
+
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…
-
The handoff
- Problems arise because web editors are given roles that absolve the rest
+
+
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?”
-
Not just social media A
+
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.
-
Web (interactive) editor The
+
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
+
+
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
+
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
+
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
-
New process
- Our rough research has told us newsrooms need to be reorganized. This
+ an original launch page we use in 2012
+
+
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
@@ -196,16 +222,16 @@
“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
+
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
+
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.
@@ -215,71 +241,83 @@
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
-
Sharing curiosity for the web
- We don’t know how to best teach students about the web. It’s not efficient
+
+
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
+
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
+
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
-
A concise guide to building stories for the web
- There are too many options to get started. We hope to provide an opinionated
+
+
+
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.
-
Student newsrooms don’t have investors to please. Student newsrooms can
+
+
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
+
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,
+
+
+ 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
+
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
+ 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
+
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.
+
+
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.
+
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.
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
+
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.
\ 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 f1c311e..04bd9b4 100644
--- a/test/test-pages/medium-3/expected.html
+++ b/test/test-pages/medium-3/expected.html
@@ -1,226 +1,265 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
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:
-
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.
-
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.
-
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.
-
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.
-
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.
+
Samantha’s points (I assume you read it, for you are smart people who know the importance of such things) are fairly clear:
+
+
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.
+
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.
+
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.
+
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.
+
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.
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.)
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:
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:
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.
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
+
+
+
+
+
+
+
+
+
+
\ 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 ba1896e..61c35dc 100644
--- a/test/test-pages/mozilla-1/expected.html
+++ b/test/test-pages/mozilla-1/expected.html
@@ -1,67 +1,87 @@
-
+
+
+
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.
+ No other browser gives you so much choice and flexibility.
-
+
-
+
+
+
-
Designed to be redesigned
+
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.
-
+
+
-
+
-
-
-
+
+
+
+
+
+
+
Themes
Make Firefox match your style. Choose from thousands of themes and dress
up your browser with a single click.
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.
\ No newline at end of file
diff --git a/test/test-pages/mozilla-2/expected.html b/test/test-pages/mozilla-2/expected.html
index 8ce4c07..7541bb0 100644
--- a/test/test-pages/mozilla-2/expected.html
+++ b/test/test-pages/mozilla-2/expected.html
@@ -1,8 +1,14 @@
-
+
+
+
+
Get to know the features that make it the most complete browser for building the Web.
Developer Edition comes with a new profile so you can run it alongside other versions of Firefox. To access your bookmarks, browsing history and more, you need to sync the profile with your existing Firefox Account, or create a new one.
Learn more
\ No newline at end of file
diff --git a/test/test-pages/msn/expected.html b/test/test-pages/msn/expected.html
index 3ed4d69..7757011 100644
--- a/test/test-pages/msn/expected.html
+++ b/test/test-pages/msn/expected.html
@@ -1,7 +1,10 @@
-
The name and basic idea might sound like one of those endless score attack games like "Temple Run," but that's not the case. "Super Mario Run" is divided into hand-crafted levels with a clear end-point like any other Mario game, meaning you're essentially getting the Mario experience for $10 without needing to control his movement.
$10 might seem like a bit much compared to the $0 people pay for most mobile games, but it's possible the game has $10 worth of levels to play in it. It's also not iPhone exclusive, but the Android version will launch at a later, currently unknown date.
To see "Super Mario Run" in action, check out the footage below:
-
+
-
\ No newline at end of file
+
+
\ 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 60f7148..7cf46a2 100644
--- a/test/test-pages/nytimes-1/expected.html
+++ b/test/test-pages/nytimes-1/expected.html
@@ -1,13 +1,19 @@
- 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.
+
+
+
+
+
+ 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.
+
+
+
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.
Sudan is one of the poorest, most isolated and most violent countries in Africa, and for years the United States has imposed punitive measures against it in a largely unsuccessful attempt to get the Sudanese government to stop killing its own people.
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.
@@ -28,7 +34,8 @@
“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.”
+
Mr. Reeves said he thought that the American government was being manipulated and that the Obama administration had made a “deal with the devil.”
Yahoo’s $4.8 billion sale to Verizon is a complicated beast, showing how different acquisition structures can affect how shareholders are treated.
+
+
+
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
diff --git a/test/test-pages/pixnet/expected.html b/test/test-pages/pixnet/expected.html
index ffa81c7..80a2e4a 100644
--- a/test/test-pages/pixnet/expected.html
+++ b/test/test-pages/pixnet/expected.html
@@ -1,6 +1,6 @@
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.
@@ -23,4 +24,5 @@
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
+
+
\ No newline at end of file
diff --git a/test/test-pages/replace-brs/expected.html b/test/test-pages/replace-brs/expected.html
index 56e36a4..778fdc0 100644
--- a/test/test-pages/replace-brs/expected.html
+++ b/test/test-pages/replace-brs/expected.html
@@ -1,14 +1,14 @@
- Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do eiusmod
- tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
+ 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
+ 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.
- Tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
- quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
+ 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
+ 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/salon-1/expected.html b/test/test-pages/salon-1/expected.html
index d1cb60e..4df6b42 100644
--- a/test/test-pages/salon-1/expected.html
+++ b/test/test-pages/salon-1/expected.html
@@ -12,7 +12,7 @@
murdering his ex-wife, seized hostages in a café that was located in Sydney’s
Central Business District or “CBD.” In the process he put up an Islamic
flag – “igniting,” as Reuters reported,
- “fears of a jihadist attack in the heart of the country’s biggest city.”
In the midst of the fear, Uber stepped in and tweeted this announcement:
+ “fears of a jihadist attack in the heart of the country’s biggest city.”
In the midst of the fear, Uber stepped in and tweeted this announcement:
“We are all concerned with events in CBD. Fares have increased to encourage
more drivers to come online & pick up passengers in the area.”
And then there’s the matter of our collective psyche. In her book “A Paradise
Built in Hell: The Extraordinary Communities that Arise in Disaster,” Rebecca
Solnit wrote of the purpose, meaning and deep satisfaction people find
- when they pull together to help one another in the face of adversity.
+ when they pull together to help one another in the face of adversity.
But in the world Uber seeks to create, those surges of the spirit would
be replaced by surge pricing.
The Raspberry Pi Foundation started by a handful of volunteers in 2012 when they released the original Raspberry Pi 256MB Model B without knowing what to expect. In a short four-year period they have grown to over sixty full-time employees and have shipped over eight million units to-date. Raspberry Pi has achieved new heights by being shipped to the International Space Station for research and by being an affordable computing platforms used by teachers throughout the world. "It has become the all-time best-selling computer in the UK".
+
The Raspberry Pi Foundation started by a handful of volunteers in 2012 when they released the original Raspberry Pi 256MB Model B without knowing what to expect. In a short four-year period they have grown to over sixty full-time employees and have shipped over eight million units to-date. Raspberry Pi has achieved new heights by being shipped to the International Space Station for research and by being an affordable computing platforms used by teachers throughout the world. "It has become the all-time best-selling computer in the UK".
Raspberry Pi 3 - A credit card sized PC that only costs $35 - Image: Raspberry Pi Foundation
-
Raspberry Pi Foundation is charity organization that pushes for a digital revolution with a mission to inspire kids to learn by creating computer-powered objects. The foundation also helps teachers learn computing skills through free training and readily available tutorials & example code for creating cool things such as music.
+
Raspberry Pi Foundation is charity organization that pushes for a digital revolution with a mission to inspire kids to learn by creating computer-powered objects. The foundation also helps teachers learn computing skills through free training and readily available tutorials & example code for creating cool things such as music.
Raspberry Pi in educations - Image: Raspberry Pi Foundation
-
In celebration of their 4th year anniversary, the foundation has released Raspberry Pi 3 with the same price tag of$35 USD. The 3rd revision features a 1.2GHz 64-bit quad-core ARM CPU with integrated Bluetooth 4.1 and 802.11n wireless LAN chipsets. The ARM Cortex-A53 CPU along with other architectural enhancements making it the fastest Raspberry Pi to-date. The 3rd revision is reportedly about 50-60% times faster than its predecessor Raspberry Pi 2 and about 10 times faster then the original Raspberry PI.
+
In celebration of their 4th year anniversary, the foundation has released Raspberry Pi 3 with the same price tag of$35 USD. The 3rd revision features a 1.2GHz 64-bit quad-core ARM CPU with integrated Bluetooth 4.1 and 802.11n wireless LAN chipsets. The ARM Cortex-A53 CPU along with other architectural enhancements making it the fastest Raspberry Pi to-date. The 3rd revision is reportedly about 50-60% times faster than its predecessor Raspberry Pi 2 and about 10 times faster then the original Raspberry PI.
Raspberry Pi - Various Usage
-
Raspberry Pi 3 is now available via many online resellers. At this time, you should use a recent 32-bit NOOBS or Raspbian image from their downloads page with a promise of a switch to a 64-bit version only if further investigation proves that there is indeed some value in moving to 64-bit mode.
+
Raspberry Pi 3 is now available via many online resellers. At this time, you should use a recent 32-bit NOOBS or Raspbian image from their downloads page with a promise of a switch to a 64-bit version only if further investigation proves that there is indeed some value in moving to 64-bit mode.
\ 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 1cc4559..faa8ff8 100644
--- a/test/test-pages/svg-parsing/expected.html
+++ b/test/test-pages/svg-parsing/expected.html
@@ -11,7 +11,13 @@ 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
+
+
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
diff --git a/test/test-pages/table-style-attributes/expected.html b/test/test-pages/table-style-attributes/expected.html
index 77c083b..31ad09b 100644
--- a/test/test-pages/table-style-attributes/expected.html
+++ b/test/test-pages/table-style-attributes/expected.html
@@ -1,17 +1,21 @@
In December 2002, I tried to install some software on my computer. The experience was, shall we say, less than pleasant. On many levels. I wrote about my experience, as I so often do.
Then in January, the jackasses over at Slashdot posted a link to it, calling it a "review" of Linux video software. I guess you could consider it a review, if you were to squint at it just right. But really what it is is a rant about how I had an evening stolen from me by crap software design. It is a flame about the pathetic state of Linux usability in general, and the handful of video players I tried out in particular. It makes no attempt to be balanced or objective or exhaustive. It is a description of my experience. Perhaps your experience was different. Good for you.
So of course that day I got hundreds of emails about it. Every Linux apologist in the world wanted to make sure I was fully informed of their opinion. The replies were roughly in the following groups:
-
"Right on! I had exactly the same experience! Thank you for putting it into words." (This was about 1/3 of the replies.)
+
+
"Right on! I had exactly the same experience! Thank you for putting it into words." (This was about 1/3 of the replies.)
"You're clearly an idiot, Linux is too sophisticated for you, you clearly are incapable of understanding anything, you should go back to kindergarten and/or use a Mac." (Oddly, all of these messages used the word `clearly' repeatedly.)
@@ -29,29 +33,38 @@
"While you have some valid complaints, I'm going to focus on this one inconsequential error you made in your characterization of one of the many roadblocks you encountered. You suck!"
-
"It's your fault for using Red Hat! You should be using Debian/Mandrake/Gentoo instead!"
+
"It's your fault for using Red Hat! You should be using Debian/Mandrake/Gentoo instead!"
"Red Hat 7.2 is totally obsolete! It's almost 14 months old! What were you expecting!"
-
+
+
While I am flattered that so many logorrheic Linux fanboys are sufficiently interested in my opinions and experiences to share their deeply heartfelt views with me, you can all rest assured that:
-
I've heard it before; and
+
+
+
I've heard it before; and
I didn't care the first time.
-
So please. Don't bother sending me any more mail about this. It's a near certainty that I will just delete it unread, so you might as well not waste your time. Feel free to call me names on your own web page if you feel the need to get it out of your system. But kindly stay out of my inbox.
+
+
+
So please. Don't bother sending me any more mail about this. It's a near certainty that I will just delete it unread, so you might as well not waste your time. Feel free to call me names on your own web page if you feel the need to get it out of your system. But kindly stay out of my inbox.
-
+
+
+
+
that said...
I understand that one can play videos on one's computer. I understand these videos come in many different formats. Every now and then I try to figure out what the Done Thing is, as far as playing movies on one's Linux machine.
-
(Really my eventual goal is to be able to create video on Linux, but I figured I'd start small, and see if I could just get playback working before trying something that is undoubtedly ten thousand times harder.)
I finally found RPMs of mplayer that would consent to install themselves on a Red Hat 7.2 machine, and actually got it to play some videos. Amazing. But it's a total pain in the ass to use due to rampant "themeing." Why do people do this? They map this stupid shaped window with no titlebar (oh, sorry, your choice of a dozen stupidly-shaped windows without titlebars) all of which use fonts that are way too small to read. But, here's the best part, there's no way to raise the window to the top. So if another window ever gets on top of it, well, sorry, you're out of luck. And half of the themes always map the window at the very bottom of the
+
(Really my eventual goal is to be able to create video on Linux, but I figured I'd start small, and see if I could just get playback working before trying something that is undoubtedly ten thousand times harder.)
+
I finally found RPMs of mplayer that would consent to install themselves on a Red Hat 7.2 machine, and actually got it to play some videos. Amazing. But it's a total pain in the ass to use due to rampant "themeing." Why do people do this? They map this stupid shaped window with no titlebar (oh, sorry, your choice of a dozen stupidly-shaped windows without titlebars) all of which use fonts that are way too small to read. But, here's the best part, there's no way to raise the window to the top. So if another window ever gets on top of it, well, sorry, you're out of luck. And half of the themes always map the window at the very bottom of the
screen -- conveniently under my panel where I can't reach it.
Resizing the window changes the aspect ratio of the video! Yeah, I'm sure someone has ever wanted that.
It moves the mouse to the upper left corner of every dialog box it creates! Which is great, because that means that when it gets into this cute little state of popping up a blank dialog that says "Error" five times a second, you can't even move the mouse over to another window to kill the program, you have to log in from another machine.
@@ -65,38 +78,45 @@ RPMs, and it sucks about the same as mplayer, and in about the same ways, th
Oh, and even though I have libdvdcss installed (as evidenced by the fact that Ogle actually works) Xine won't play the same disc that Ogle will play. It seems to be claiming that the CSS stuff isn't installed, which it clearly is.
An idiocy that all of these programs have in common is that, in addition to opening a window for the movie, and a window for the control panel, they also spray a constant spatter of curses crud on the terminal they were started from. I imagine at some point, there was some user who said, ``this program is pretty nice, but you know what it's missing? It's missing a lot of pointless chatter about what plugins and fonts have been loaded!''
- And here's the Random Commentary section:
+ And here's the Random Commentary section:
Whenever a programmer thinks, "Hey, skins, what a cool idea", their
computer's speakers should create some sort of cock-shaped soundwave
and plunge it repeatedly through their skulls.
-
I am fully in support of this proposed audio-cock technology.
+
+
I am fully in support of this proposed audio-cock technology.
Various people wrote:
You shouldn't even bother compiling the GUI into mplayer!
-
So I should solve the problem of ``crappy GUI'' by replacing it with ``no GUI at all?'' I should use the program only from the command line, or by memorizing magic keystrokes? Awesome idea.
+
+
So I should solve the problem of ``crappy GUI'' by replacing it with ``no GUI at all?'' I should use the program only from the command line, or by memorizing magic keystrokes? Awesome idea.
True, I hadn't. Now I have. It has an overly-complicated UI, (the Preferences panel is a festival of overkill) but at least it uses standard menus and buttons, so it doesn't make you want to claw your eyes out immediately. But, it can only play a miniscule number of video formats, so it's mostly useless. *plonk*
+
+
True, I hadn't. Now I have. It has an overly-complicated UI, (the Preferences panel is a festival of overkill) but at least it uses standard menus and buttons, so it doesn't make you want to claw your eyes out immediately. But, it can only play a miniscule number of video formats, so it's mostly useless. *plonk*
Someone else wrote:
Have you considered changing distributions?
-
Yes, every single time I try something like this, I very seriously consider getting a Mac.
+
+
Yes, every single time I try something like this, I very seriously consider getting a Mac.
Really the only thing that's stopping me is that I fear the Emacs situation.
(By which I mean, ``Lack of a usable version thereof.'' No, running RMSmacs inside a terminal window doesn't qualify. Nor does running an X server on the Mac: if I were going to switch, why in the world would I continue inflicting the X Windows Disaster on myself? Wouldn't getting away from that be the whole
point?)
-
(I understand there is an almost-functional Aqua version of
+
+ (I understand there is an almost-functional Aqua version of
RMSmacs now. I'll probably check it out at some point, but the problem with me switching from XEmacs to RMSmacs is that it would probably result in another
Slashdork post, meaning I'd wake up to another 150+ poorly spelled flames in my inbox... I'm hoping for a Aquafied XEmacs, but I know that's not likely to happen any time soon.)
-
By the way, the suggestion to switch Linux distrubutions in order to get a single app to work might sound absurd at first. And that's because it is. But I've been saturated with Unix-peanut-gallery effluvia for so long that it no longer even surprises me when every
+
+
By the way, the suggestion to switch Linux distrubutions in order to get a single app to work might sound absurd at first. And that's because it is. But I've been saturated with Unix-peanut-gallery effluvia for so long that it no longer even surprises me when every
question -- no matter how
simple -- results in someone suggesting that you either A) patch your kernel or B) change distros. It's inevitable and inescapable, like Hitler.
-
-
+
+
+
\ No newline at end of file
diff --git a/test/test-pages/telegraph/expected-metadata.json b/test/test-pages/telegraph/expected-metadata.json
index be19af1..6307fc2 100644
--- a/test/test-pages/telegraph/expected-metadata.json
+++ b/test/test-pages/telegraph/expected-metadata.json
@@ -1,5 +1,5 @@
{
- "Author": "Our Foreign Staff \n \n\n16 November 2017 • 2:15pm",
+ "Author": null,
"Direction": null,
"Excerpt": "Zimbabwe President Robert Mugabe, his wife Grace and two key figures from her G40 political faction are under house arrest at Mugabe's "Blue House" compound in Harare and are insisting the 93 year-old finishes his presidential term, a source said.",
"Image": "http:\/\/www.telegraph.co.uk\/content\/dam\/news\/2017\/11\/16\/TELEMMGLPICT000146889449-xlarge_trans_NvBQzQNjv4BqySoB6nTCgtc7U4LQ_FPO4hKi2sT3vi7ux2-RDZwC4QA.jpeg",
diff --git a/test/test-pages/tmz-1/expected.html b/test/test-pages/tmz-1/expected.html
index 6eb48b9..1f7479a 100644
--- a/test/test-pages/tmz-1/expected.html
+++ b/test/test-pages/tmz-1/expected.html
@@ -13,22 +13,23 @@
EXCLUSIVE
- Lupita Nyong'o's now-famous Oscar dress
+ Lupita 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.
+ 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.
+ catch the culprit right in the act.
- 12: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
+ 12: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.
-
+
+
\ No newline at end of file
diff --git a/test/test-pages/tumblr/expected.html b/test/test-pages/tumblr/expected.html
index 56df596..88dd224 100644
--- a/test/test-pages/tumblr/expected.html
+++ b/test/test-pages/tumblr/expected.html
@@ -4,7 +4,7 @@
+ 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
+
+ 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
The Seattle Thunderbirds are excited to announce the dates of their
annual Summer Hockey Clinic! This three day hockey school will feature top level
@@ -21,8 +25,8 @@
You will begin your daily training on-ice and complete the day off-ice (see the next
page for a complete schedule). Please come prepared with appropriate work-out gear and
sneakers!
-
• GROUP A: 7, 8 & 9 yrs old $125 • GROUP B: 10 & 11 yrs old $125 • GROUP
- C: 12, 13 & 14 yrs old $125 • ADULTS: 18 & Over $160
+
• GROUP A: 7, 8 & 9 yrs old $125 • GROUP B: 10 & 11 yrs old $125 • GROUP
+ C: 12, 13 & 14 yrs old $125 • ADULTS: 18 & Over $160
To reserve your space in the T-Birds Summer Hockey Clinic and receive
your Ticket Special, fill out the registration form on reverse. Space is limited and
@@ -31,13 +35,13 @@
hockey players of all ages to improve their skills and enjoy their time with us. To help
ensure this, the Thunderbirds\' training staff will be at the clinic for its
entirety.
-
Elevate your game! Improve your skating… • lengthen your stride
- • gain power • balance and agility
-
Improve your puck skills… • puck control and deking • power moves
+
Elevate your game! Improve your skating… • lengthen your stride
+ • gain power • balance and agility
+
Improve your puck skills… • puck control and deking • power moves
and puck protection
-
Improve your passing and team play… • puck support and \'ice
- vision\' • shooting for accuracy vs rebounds • game systems
-
Instructors: Instructors for the 2007 Summer Hockey Clinics will
+
Improve your passing and team play… • puck support and \'ice
+ vision\' • shooting for accuracy vs rebounds • game systems
+
Instructors: Instructors for the 2007 Summer Hockey Clinics will
include Seattle Thunderbirds Head Coach Rob Sumner, Assistant Coach Turner Stevenson,
past Thunderbirds Ryan Gibbons and Tyler Metcalfe and past and present Seattle
Thunderbirds players.
@@ -50,66 +54,125 @@
players may wear a half visor, however full cages and mouth guards are highly
recommended.
-
• To register and pay for your clinic online, compelte the form below •
+
• To register and pay for your clinic online, compelte the form below •
To register and pay for your clinic via mail, click here to download the registration
form
-
+
+
+
+
Summer Hockey Clinic Registration Form
-
-
-
Player Name
+
+
+
+
+
+
+
+
+
Player Name
-
Email Address
+
+
+
Email Address
-
Birthdate
+
+
+
Birthdate
-
Address
+
+
+
Address
-
City/St
+
+
+
City/St
Zip
-
Day Phone
+
+
+
Day Phone
Eve Phone
-
Please indicate your curreny hockey association or
+
+
+
Please indicate your curreny hockey association or
league:
-
-
SKAHA SJHA KVAHA
- GSHL Other
-
If other, pelase specify:
-
Position:
-
Forward Defense Goalie
+
+
+
+
SKAHA SJHA KVAHA
+ GSHL Other
+
+
+
If other, pelase specify:
+
+
+
Position:
+
Forward Defense Goalie
-
Jersey Size
-
S M L XL
+
+
+
Jersey Size
+
S M L XL
XXL
-
I want to purchase the following T-Birds Summer Hockey
+
+
+
I want to purchase the following T-Birds Summer Hockey
Clinic:
-
GROUP A 7, 8 & 9 $125
-
GROUP B 10 & 11 $125
-
GROUP C 12, 13 & 14
- $125
-
ADULTS 18 & Over $160
-
-
-
Waiver and Release
-
By checking this box, I understand that participation
+
+
+
+
GROUP A 7, 8 & 9 $125
+
+
GROUP B 10 & 11 $125
+
+
GROUP C 12, 13 & 14
+ $125
+
ADULTS 18 & Over $160
+
+
+
+
+
+
+
+
+
+
+
Waiver and Release
+
+
+
By checking this box, I understand that participation
of the sport constitutes a risk to me (or my child). I voluntarily
recognize, accept and assume risk and release the Seattle
Thunderbirds and Kingsgate Arena from any and all liability.
-
-
-
Once you click submit, you will be
+
+
+
+
+
+
+
+
+
Once you click submit, you will be
given the link to continue to online payment
-
-
+
+
+
+
+
+
+
+
-
+
+
\ No newline at end of file
diff --git a/test/test-pages/wapo-1/expected.html b/test/test-pages/wapo-1/expected.html
index ed051e8..7fd81fe 100644
--- a/test/test-pages/wapo-1/expected.html
+++ b/test/test-pages/wapo-1/expected.html
@@ -1,4 +1,5 @@
+
CAIRO — Gunmen opened fire on visitors at
Tunisia’s most renowned museum on Wednesday, killing at least 19 people,
including 17 foreigners, in an assault that threatened to upset the fragile
@@ -112,7 +113,9 @@
In January, Libyan militants loyal to the Islamic State beheaded 21 Christians —
20 of them Egyptian Copts — along the country’s coast. They later seized
the Libyan city of Sirte.
-
+
+
+
Officials are worried about the number of Tunisian militants who may have
joined the jihadists in Libya — with the goal of returning home to fight
the Tunis government.
- Israeli Prime Minister Benjamin Netanyahu reacts as he visits the Western Wall in Jerusalem on March 18 following his party's victory in Israel's general election. (Thomas Coex/AFP/Getty Images)
-
President Obama told the U.N. General Assembly 18 months ago that he would
+
+ Israeli Prime Minister Benjamin Netanyahu reacts as he visits the Western Wall in Jerusalem on March 18 following his party's victory in Israel's general election. (Thomas Coex/AFP/Getty Images)
+
+
President Obama told the U.N. General Assembly 18 months ago that he would
seek “real breakthroughs on these two issues — Iran’s nuclear program and
Israeli-Palestinian peace.”
“That could be an issue forced onto the agenda about the same time as
a potential nuclear deal.”
-
Steven Mufson covers the White House. Since joining The Post, he has covered
+
Steven Mufson covers the White House. Since joining The Post, he has covered
economics, China, foreign policy and energy.
\ No newline at end of file
diff --git a/test/test-pages/webmd-2/expected.html b/test/test-pages/webmd-2/expected.html
index d9e1816..f9f1d5d 100644
--- a/test/test-pages/webmd-2/expected.html
+++ b/test/test-pages/webmd-2/expected.html
@@ -6,18 +6,19 @@
-
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.
+
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.
+
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."
+
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.
Any species of bacteria can turn into a superbug.
Misusing antibiotics (such as taking them when you don't need them or not finishing all of your medicine) is the "single leading factor" contributing to this problem, the CDC says. The concern is that eventually doctors will run out of antibiotics to treat them.
"What the public should know is that the more antibiotics you’ve taken, the higher your superbug risk," says Eric Biondi, MD, who runs a program to decrease unnecessary antibiotic use. "The more encounters you have with the hospital setting, the higher your superbug risk."
-
"Superbugs should be a concern to everyone," Coombes says. "Antibiotics are the foundation on which all modern medicine rests. Cancer chemotherapy, organ transplants, surgeries, and childbirth all rely on antibiotics to prevent infections. If you can't treat those, then we lose the medical advances we have made in the last 50 years."
+
"Superbugs should be a concern to everyone," Coombes says. "Antibiotics are the foundation on which all modern medicine rests. Cancer chemotherapy, organ transplants, surgeries, and childbirth all rely on antibiotics to prevent infections. If you can't treat those, then we lose the medical advances we have made in the last 50 years."
Here are some of the growing superbug threats identified in the 2015 White House report.
\ No newline at end of file
diff --git a/test/test-pages/wikia/expected.html b/test/test-pages/wikia/expected.html
index de18ee3..eb8eb6e 100644
--- a/test/test-pages/wikia/expected.html
+++ b/test/test-pages/wikia/expected.html
@@ -1,25 +1,26 @@
-
Although Lucasfilm is already planning a birthday bash for the Star Wars Saga at Celebration Orlando this April, fans might get another present for the saga’s 40th anniversary. According to fan site MakingStarWars.net, rumors abound that Lucasfilm might re-release the unaltered cuts of the saga’s original trilogy.
+
Although Lucasfilm is already planning a birthday bash for the Star Wars Saga at Celebration Orlando this April, fans might get another present for the saga’s 40th anniversary. According to fan site MakingStarWars.net, rumors abound that Lucasfilm might re-release the unaltered cuts of the saga’s original trilogy.
If the rumors are true, this is big news for Star Wars fans. Aside from limited VHS releases, the unaltered cuts of the original trilogy films haven’t been available since they premiered in theaters in the 1970s and ’80s. If Lucasfilm indeed re-releases the films’ original cuts, then this will be the first time in decades that fans can see the films in their original forms. Here’s what makes the unaltered cuts of the original trilogy so special.
The Star Wars Special Editions Caused Controversy
-
+
-
Thanks to the commercial success of Star Wars, George Lucas has revisited and further edited his films for re-releases. The most notable — and controversial — release were the Special Editions of the original trilogy. In 1997, to celebrate the saga’s 20th anniversary, Lucasfilm spent a total of $15 million to remaster A New Hope, The Empire Strikes Back, and Return of the Jedi. The Special Editions had stints in theaters before moving to home media.
-
Although most of the Special Editions’ changes were cosmetic, others significantly affected the plot of the films. The most notable example is the “Han shot first” scene in A New Hope. As a result, the Special Editions generated significant controversy among Star Wars fans. Many fans remain skeptical about George Lucas’s decision to finish each original trilogy film “the way it was meant to be.”
+
Thanks to the commercial success of Star Wars, George Lucas has revisited and further edited his films for re-releases. The most notable — and controversial — release were the Special Editions of the original trilogy. In 1997, to celebrate the saga’s 20th anniversary, Lucasfilm spent a total of $15 million to remaster A New Hope, The Empire Strikes Back, and Return of the Jedi. The Special Editions had stints in theaters before moving to home media.
+
Although most of the Special Editions’ changes were cosmetic, others significantly affected the plot of the films. The most notable example is the “Han shot first” scene in A New Hope. As a result, the Special Editions generated significant controversy among Star Wars fans. Many fans remain skeptical about George Lucas’s decision to finish each original trilogy film “the way it was meant to be.”
-
+
-
While the Special Editions represent the most significant edits to the original trilogy, the saga has undergone other changes. Following up on the saga’s first Blu-ray release in 2011, Industrial Light & Magic (ILM) began remastering the entire saga in 3D, starting with the prequel trilogy. The Phantom Menace saw a theatrical 3D re-release in 2012, but Disney’s 2012 acquisition of Lucasfilm indefinitely postponed further 3D releases.
-
In 2015, Attack of the Clones and Revenge of the Sith received limited 3D showings at Celebration Anaheim. Other than that, it seems as though Disney has decided to refocus Lucasfilm’s efforts to new films. Of course, that’s why the saga has produced new content beginning with The Force Awakens. However, it looks like Lucasfilm isn’t likely to generate 3D versions of the original trilogy anytime soon.
+
While the Special Editions represent the most significant edits to the original trilogy, the saga has undergone other changes. Following up on the saga’s first Blu-ray release in 2011, Industrial Light & Magic (ILM) began remastering the entire saga in 3D, starting with the prequel trilogy. The Phantom Menace saw a theatrical 3D re-release in 2012, but Disney’s 2012 acquisition of Lucasfilm indefinitely postponed further 3D releases.
+
In 2015, Attack of the Clones and Revenge of the Sith received limited 3D showings at Celebration Anaheim. Other than that, it seems as though Disney has decided to refocus Lucasfilm’s efforts to new films. Of course, that’s why the saga has produced new content beginning with The Force Awakens. However, it looks like Lucasfilm isn’t likely to generate 3D versions of the original trilogy anytime soon.
Why the Original Film Cuts Matter
-
+
-
Admittedly, the differences between the original trilogy’s unaltered cuts and the Special Editions appeal to more hardcore fans. Casual fans are less likely to care about whether Greedo or Han Solo shot first. Still, given Star Wars’ indelible impact on pop culture, there’s certainly a market for the original trilogy’s unaltered cuts. They might not be for every Star Wars fan, but many of us care about them.
-
ILM supervisor John Knoll, who first pitched the story idea for Rogue One, said last year that ILM finished a brand new 4K restoration print of A New Hope. For that reason, it seems likely that Lucasfilm will finally give diehard fans the original film cuts that they’ve clamored for. There’s no word yet whether the unaltered cuts will be released in theaters or on home media. At the very least, however, fans will likely get them after all this time. After all, the Special Editions marked the saga’s 20th anniversary. Star Wars turns 40 years old this year, so there’s no telling what’s in store.
-
+
Admittedly, the differences between the original trilogy’s unaltered cuts and the Special Editions appeal to more hardcore fans. Casual fans are less likely to care about whether Greedo or Han Solo shot first. Still, given Star Wars’ indelible impact on pop culture, there’s certainly a market for the original trilogy’s unaltered cuts. They might not be for every Star Wars fan, but many of us care about them.
+
ILM supervisor John Knoll, who first pitched the story idea for Rogue One, said last year that ILM finished a brand new 4K restoration print of A New Hope. For that reason, it seems likely that Lucasfilm will finally give diehard fans the original film cuts that they’ve clamored for. There’s no word yet whether the unaltered cuts will be released in theaters or on home media. At the very least, however, fans will likely get them after all this time. After all, the Special Editions marked the saga’s 20th anniversary. Star Wars turns 40 years old this year, so there’s no telling what’s in store.
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]
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 proprietaryH.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 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 proprietaryH.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.
The Mozilla Foundation pledges to support the Mozilla Manifesto in its activities. Specifically, we will:
-
Build and enable open-source technologies and communities that support the Manifesto’s principles;
+
+
Build and enable open-source technologies and communities that support the Manifesto’s principles;
Build and deliver great consumer products that support the Manifesto’s principles;
Use the Mozilla assets (intellectual property such as copyrights and trademarks, infrastructure, funds, and reputation) to keep the Internet an open platform;
Promote models for creating economic value for the public benefit; and
Promote the Mozilla Manifesto principles in public discourse and within the Internet industry.
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 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]
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.
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.
@@ -156,25 +159,27 @@
-
+
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.
When joining the program, a Mozilla Rep agrees to take on the following responsibilities:
-
Represent Mozilla in their country/region
+
+
Represent Mozilla in their country/region
Promote the Mozilla Project and its mission
Build on and support existing/future local community efforts and programs
^"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.
+
^"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.
^"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
+
^"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
^"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
+
^"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
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.
@@ -26,4 +32,8 @@
-
\ No newline at end of file
+
+
+
+
+
\ 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 deea6c8..c532a62 100644
--- a/test/test-pages/yahoo-1/expected.html
+++ b/test/test-pages/yahoo-1/expected.html
@@ -1,44 +1,50 @@
-
-
-
+
+
+
+
+
-
Sony’s PlayStation VR.
+
+
Sony’s PlayStation VR.
-
-
Virtual reality has officially reached the consoles. And it’s pretty good! Sony’s PlayStation VR is extremely comfortable and reasonably priced, and while it’s lacking killer apps, it’s loaded with lots of interesting ones.
-
But which ones should you buy? I’ve played just about every launch game, and while some are worth your time, others you might want to skip. To help you decide what’s what, I’ve put together this list of the eight PSVR games worth considering.
Beloved cult hit “Rez” gets the VR treatment to help launch the PSVR, and the results are terrific. It includes a fully remastered take on the original “Rez” – you zoom through a Matrix-like computer system, shooting down enemies to the steady beat of thumping electronica – but the VR setting makes it incredibly immersive. It gets better the more you play it, too; unlock the amazing Area X mode and you’ll find yourself flying, shooting and bobbing your head to some of the trippiest visuals yet seen in VR.
What would happen if Tron, the board game Simon, a Clown beetle, Cthulhu and a noise band met in VR? Chaos, for sure, and also “Thumper.” Called a “violent rhythm game” by its creators, “Thumper” is, well, a violent rhythm game that’s also a gorgeous, unsettling and totally captivating assault on the senses. With simple controls and a straightforward premise – click the X button and the analog stick in time with the music as you barrel down a neon highway — it’s one of the rare games that works equally well both in and out of VR. But since you have PSVR, play it there. It’s marvelous.
Cheeky horror game “Until Dawn” was a breakout hit for the PS4 last year, channeling the classic “dumb teens in the woods” horror trope into an effective interactive drama. Well, forget all that if you fire up “Rush of Blood,” because this one sticks you front and center on a rollercoaster ride from Hell. Literally. You ride through a dimly-lit carnival of terror, dual-wielding pistols as you take down targets, hideous pig monsters and, naturally, maniac clowns. Be warned: If the bad guys don’t get you, the jump scares will.
Soccer meets “Portal” in the weird (and weirdly fun) “Headmaster,” a game about heading soccer balls into nets, targets and a variety of other things while stuck in some diabolical training facility. While at first it seems a little basic, increasingly challenging shots and a consistently entertaining narrative keep it from running off the pitch. Funny, ridiculous and as easy as literally moving your head back and forth, it’s a pleasant PSVR surprise.
Giant mechs + sports? That’s the gist of this robotic blast-a-thon, which pits two teams of three against one another in gorgeous, explosive and downright fun VR combat. At its best, “RIGS” marries the thrill of fast-paced competitive shooters with the insanity of piloting a giant mech in VR. It can, however, be one of the barfier PSVR games. So pack your Dramamine, you’re going to have to ease yourself into this one.
“I’m Batman,” you will say. And you’ll actually be right this time, because you are Batman in this detective yarn, and you know this because you actually grab the famous cowl and mask, stick it on your head, and stare into the mirrored reflection of Rocksteady Games’ impressive Dark Knight character model. It lacks the action of its fellow “Arkham” games and runs disappointingly short, but it’s a high-quality experience that really shows off how powerfully immersive VR can be.
There are a number of good VR ports in the PSVR launch lineup, but the HTC Vive launch game “Job Simulator” might be the best. Your task? Lots of tasks, actually, from cooking food to fixing cars to working in an office, all for robots, because did I mention you were in the future? Infinitely charming and surprisingly challenging, it’s a great showpiece for VR.
Already a hit on the Oculus Rift, this space dogfighting game was one of the first to really show off how VR can turn a traditional game experience into something special. It’s pricey and not quite as hi-res as the Rift version, but “Eve Valkyrie” does an admirable job filling the void left since “Battlestar Galactica” ended. Too bad there aren’t any Cylons in it (or are there?)
Virtual reality has officially reached the consoles. And it’s pretty good! Sony’s PlayStation VR is extremely comfortable and reasonably priced, and while it’s lacking killer apps, it’s loaded with lots of interesting ones.
+
But which ones should you buy? I’ve played just about every launch game, and while some are worth your time, others you might want to skip. To help you decide what’s what, I’ve put together this list of the eight PSVR games worth considering.
Beloved cult hit “Rez” gets the VR treatment to help launch the PSVR, and the results are terrific. It includes a fully remastered take on the original “Rez” – you zoom through a Matrix-like computer system, shooting down enemies to the steady beat of thumping electronica – but the VR setting makes it incredibly immersive. It gets better the more you play it, too; unlock the amazing Area X mode and you’ll find yourself flying, shooting and bobbing your head to some of the trippiest visuals yet seen in VR.
What would happen if Tron, the board game Simon, a Clown beetle, Cthulhu and a noise band met in VR? Chaos, for sure, and also “Thumper.” Called a “violent rhythm game” by its creators, “Thumper” is, well, a violent rhythm game that’s also a gorgeous, unsettling and totally captivating assault on the senses. With simple controls and a straightforward premise – click the X button and the analog stick in time with the music as you barrel down a neon highway — it’s one of the rare games that works equally well both in and out of VR. But since you have PSVR, play it there. It’s marvelous.
Cheeky horror game “Until Dawn” was a breakout hit for the PS4 last year, channeling the classic “dumb teens in the woods” horror trope into an effective interactive drama. Well, forget all that if you fire up “Rush of Blood,” because this one sticks you front and center on a rollercoaster ride from Hell. Literally. You ride through a dimly-lit carnival of terror, dual-wielding pistols as you take down targets, hideous pig monsters and, naturally, maniac clowns. Be warned: If the bad guys don’t get you, the jump scares will.
Soccer meets “Portal” in the weird (and weirdly fun) “Headmaster,” a game about heading soccer balls into nets, targets and a variety of other things while stuck in some diabolical training facility. While at first it seems a little basic, increasingly challenging shots and a consistently entertaining narrative keep it from running off the pitch. Funny, ridiculous and as easy as literally moving your head back and forth, it’s a pleasant PSVR surprise.
Giant mechs + sports? That’s the gist of this robotic blast-a-thon, which pits two teams of three against one another in gorgeous, explosive and downright fun VR combat. At its best, “RIGS” marries the thrill of fast-paced competitive shooters with the insanity of piloting a giant mech in VR. It can, however, be one of the barfier PSVR games. So pack your Dramamine, you’re going to have to ease yourself into this one.
“I’m Batman,” you will say. And you’ll actually be right this time, because you are Batman in this detective yarn, and you know this because you actually grab the famous cowl and mask, stick it on your head, and stare into the mirrored reflection of Rocksteady Games’ impressive Dark Knight character model. It lacks the action of its fellow “Arkham” games and runs disappointingly short, but it’s a high-quality experience that really shows off how powerfully immersive VR can be.
There are a number of good VR ports in the PSVR launch lineup, but the HTC Vive launch game “Job Simulator” might be the best. Your task? Lots of tasks, actually, from cooking food to fixing cars to working in an office, all for robots, because did I mention you were in the future? Infinitely charming and surprisingly challenging, it’s a great showpiece for VR.
Already a hit on the Oculus Rift, this space dogfighting game was one of the first to really show off how VR can turn a traditional game experience into something special. It’s pricey and not quite as hi-res as the Rift version, but “Eve Valkyrie” does an admirable job filling the void left since “Battlestar Galactica” ended. Too bad there aren’t any Cylons in it (or are there?)
diff --git a/test/test-pages/yahoo-3/expected-metadata.json b/test/test-pages/yahoo-3/expected-metadata.json
index 8af68c0..1af6b8f 100644
--- a/test/test-pages/yahoo-3/expected-metadata.json
+++ b/test/test-pages/yahoo-3/expected-metadata.json
@@ -1,6 +1,6 @@
{
"Author": "By GILLIAN MOHNEY\n March 11, 2015 3:46 PM",
- "Direction": null,
+ "Direction": "ltr",
"Excerpt": "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.",
"Image": "https:\/\/s.yimg.com\/bt\/api\/res\/1.2\/qZaM9MLUOrxLg4IfXt_Niw--\/YXBwaWQ9eW5ld3NfbGVnbztxPTc1O3c9NjAw\/http:\/\/media.zenfs.com\/en-US\/video\/video.abcnewsplus.com\/559ecdbafdb839129816b5c79a996975.cf.png",
"Title": "Veteran Wraps Baby in American Flag, Photo Sparks Controversy",
diff --git a/test/test-pages/yahoo-3/expected.html b/test/test-pages/yahoo-3/expected.html
index c5d7e33..d5fb222 100644
--- a/test/test-pages/yahoo-3/expected.html
+++ b/test/test-pages/yahoo-3/expected.html
@@ -1,28 +1,39 @@
-
-
'GMA' Cookie Search:
+
+
+
'GMA' Cookie Search:
-
+
+
+
-
+
+
+
-
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.
“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
+
View photo
.
+
Vanessa Hicks
-
The Federal Flag Code has guidelines for the proper treatment of the U.S. Flag but there are no rules for punishment related to violations. In the past, the Supreme Court has found that people are protected from punishment under the First Amendment for manipulating or even burning the flag.
+
The Federal Flag Code has guidelines for the proper treatment of the U.S. Flag but there are no rules for punishment related to violations. In the past, the Supreme Court has found that people are protected from punishment under the First Amendment for manipulating or even burning the flag.
Hicks said she was surprised when messages suddenly started to pop up on her Facebook page and even her own website criticizing her photos.
She said she stayed up until 4 a.m. recently to take down comments from her business and company page, even on shoots that had nothing to do with the flag.
@@ -32,11 +43,14 @@
Hicks, whose husband is still on active duty in the Navy, said the flag is a symbol of U.S. freedoms including the First Amendment right to free speech.
“[My husband] wouldn’t die for a flag, he would die for the freedoms that this country offers,” she told ABC News.
After her story grabbed local headlines, Hicks has been inundated by requests for photos shoots, and she said she plans to give 15 percent of all profits related to these shoots to the USO.