summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndres Rey <[email protected]>2018-11-03 16:35:02 +0000
committerAndres Rey <[email protected]>2018-11-03 16:35:02 +0000
commit9e7ed7f7ade49317910076f041982a13eabab209 (patch)
tree4b5634797dcddaed6ff6baaa439a757704ba5517 /test
parentde4334b8189b6697497194551f69ae26299a7a6c (diff)
Update test expectations
Diffstat (limited to 'test')
-rw-r--r--test/test-pages/002/expected.html2
-rw-r--r--test/test-pages/aclu/config.json3
-rw-r--r--test/test-pages/blogger/expected.html168
-rw-r--r--test/test-pages/buzzfeed-1/expected-metadata.json3
-rw-r--r--test/test-pages/clean-links/expected.html2
-rw-r--r--test/test-pages/cnn/expected.html89
-rw-r--r--test/test-pages/ehow-2/expected-metadata.json4
-rw-r--r--test/test-pages/ehow-2/expected.html6
-rw-r--r--test/test-pages/engadget/expected.html2
-rw-r--r--test/test-pages/gmw/expected.html103
-rw-r--r--test/test-pages/hidden-nodes/expected.html2
-rw-r--r--test/test-pages/hukumusume/expected.html2
-rw-r--r--test/test-pages/ietf-1/expected-metadata.json4
-rw-r--r--test/test-pages/ietf-1/expected.html193
-rw-r--r--test/test-pages/keep-images/expected.html575
-rw-r--r--test/test-pages/links-in-tables/expected.html2
-rw-r--r--test/test-pages/msn/expected-metadata.json2
-rw-r--r--test/test-pages/qq/expected.html2
-rw-r--r--test/test-pages/remove-extra-brs/expected.html2
-rw-r--r--test/test-pages/table-style-attributes/expected.html103
-rw-r--r--test/test-pages/telegraph/expected-metadata.json2
-rw-r--r--test/test-pages/tmz-1/expected.html2
-rw-r--r--test/test-pages/yahoo-4/expected.html2
23 files changed, 713 insertions, 562 deletions
diff --git a/test/test-pages/002/expected.html b/test/test-pages/002/expected.html
index e129084..8870180 100644
--- a/test/test-pages/002/expected.html
+++ b/test/test-pages/002/expected.html
@@ -1,4 +1,4 @@
-<div id="readability-page-1" class="page">
+
<div id="content-main">
<article role="article">
<p>For more than a decade the Web has used XMLHttpRequest (XHR) to achieve asynchronous requests in JavaScript. While very useful, XHR is not a very nice API. It suffers from lack of separation of concerns. The input, output and state are all managed by interacting with one object, and state is tracked using events. Also, the event-based model doesn’t play well with JavaScript’s recent focus on Promise- and generator-based asynchronous programming.</p>
diff --git a/test/test-pages/aclu/config.json b/test/test-pages/aclu/config.json
new file mode 100644
index 0000000..0ac6816
--- /dev/null
+++ b/test/test-pages/aclu/config.json
@@ -0,0 +1,3 @@
+{
+ "ArticleByLine": true
+} \ No newline at end of file
diff --git a/test/test-pages/blogger/expected.html b/test/test-pages/blogger/expected.html
index 52c1ab5..35e484a 100644
--- a/test/test-pages/blogger/expected.html
+++ b/test/test-pages/blogger/expected.html
@@ -1,111 +1,57 @@
-<div id="readability-page-1" class="page">
- <div id="post-body-932306423056216142" itemprop="description articleBody">
- <p> I've written a couple of posts in the past few months but they were all for <a href="http://blog.ioactive.com/search/label/Andrew%20Zonenberg">the blog at work</a> so I figured I'm long overdue for one on Silicon Exposed.</p>
- <h2> So what's a GreenPak?</h2>
- <p> 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 <a href="http://www.silego.com/products/greenpak5.html">5th generation parts</a> were just announced, but I started this project before that happened so I'm still targeting the <a href="http://www.silego.com/products/greenpak4.html">4th generation</a>.</p>
- <p> GreenPak devices are kind of like itty bitty <a href="http://www.cypress.com/products/32-bit-arm-cortex-m-psoc">PSoCs</a> - 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).</p>
- <p> 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.</p>
- <p> Without further ado, here's a block diagram showing all the cool stuff you get in the SLG46620V:</p>
- <table>
- <tbody>
- <tr>
- <td> <a href="https://1.bp.blogspot.com/-YIPC5jkXkDE/Vy7YPSqFKWI/AAAAAAAAAxI/a7D6Ji2GxoUvcrwUkI4RLZcr2LFQEJCTACLcB/s1600/block-diagram.png" imageanchor="1"><img height="512" src="https://1.bp.blogspot.com/-YIPC5jkXkDE/Vy7YPSqFKWI/AAAAAAAAAxI/a7D6Ji2GxoUvcrwUkI4RLZcr2LFQEJCTACLcB/s640/block-diagram.png" width="640"/></a> </td>
- </tr>
- <tr>
- <td>SLG46620V block diagram (from device datasheet)</td>
- </tr>
- </tbody>
- </table>
- <p> 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.</p>
- <p> 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.</p>
- <p> 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.</p>
- <p> 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.</p>
- <p> 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.</p>
- <table>
- <tbody>
- <tr>
- <td> <a href="https://1.bp.blogspot.com/-k3naUT3uXao/Vy7WFac246I/AAAAAAAAAw8/mePy_ostO8QJra5ZJrbP2WGhTlJ0B_r8gCLcB/s1600/schematic-from-hell.png" imageanchor="1"><img height="334" src="https://1.bp.blogspot.com/-k3naUT3uXao/Vy7WFac246I/AAAAAAAAAw8/mePy_ostO8QJra5ZJrbP2WGhTlJ0B_r8gCLcB/s640/schematic-from-hell.png" width="640"/></a> </td>
- </tr>
- <tr>
- <td>Schematic from hell!</td>
- </tr>
- </tbody>
- </table>
- <p> 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.</p>
- <p> 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?</p>
- <p> 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 <a href="http://www.arachnidlabs.com/blog/2015/03/30/greenpak/">says</a>, 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.</p>
- <h2> Great! How does it work?</h2>
- <p> Rather than wasting time writing a synthesizer, I decided to write a GreenPak technology library for Clifford Wolf's excellent open source synthesis tool, <a href="http://www.clifford.at/yosys/">Yosys</a>, 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.</p>
- <p> 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.</p>
- <p> 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.)</p>
- <p> 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.</p>
- <table>
- <tbody>
- <tr>
- <td> <a href="https://2.bp.blogspot.com/-kIekczO693g/Vy7dBqYifXI/AAAAAAAAAxc/hMNJBs5bedIQOrBzzkhq4gbmhR-n58EQwCLcB/s1600/graph-labels.png" imageanchor="1"><img height="141" src="https://2.bp.blogspot.com/-kIekczO693g/Vy7dBqYifXI/AAAAAAAAAxc/hMNJBs5bedIQOrBzzkhq4gbmhR-n58EQwCLcB/s400/graph-labels.png" width="400"/></a> </td>
- </tr>
- <tr>
- <td>Example labeling for a subset of the netlist and device graphs</td>
- </tr>
- </tbody>
- </table>
- <p> 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:</p>
- <ol>
- <li>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.</li>
- <li>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.</li>
- </ol>
- <p> 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:</p>
- <ol>
- <li>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).</li>
- <li>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).</li>
- <li>Remove nodes from the list that are LOC'd to a specific location since we're not allowed to move them.</li>
- <li>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.</li>
- <li>Pick a node from the remainder of the list at random. Call this our pivot.</li>
- <li>Find a list of candidate placements for the pivot: </li>
- <ol>
- <li>Consider all routable placements in the other half of the device.</li>
- <li>If none were found, consider all routable placements anywhere in the device.</li>
- <li>If none were found, consider all placements anywhere in the device even if they're not routable.</li>
- </ol>
- <li>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.</li>
- <li>Re-compute the score for the design. If it's better, accept this change and start the next iteration.</li>
- <li>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.</li>
- </ol>
- <p> 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.</p>
- <p> The design is then routed. This is quite simple due to the crossbar structure of the device. For each edge in the netlist:</p>
- <ol>
- <li>If dedicated (non-fabric) routing is used for this path, configure the destination's input mux appropriately and stop.</li>
- <li>If the source and destination are in the same half of the device, configure the destination's input mux appropriately and stop.</li>
- <li>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.</li>
- <li>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.</li>
- <li>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.</li>
- </ol>
- <p> Once routing is finished, run a series of post-PAR design rule checks. These currently include the following:</p>
- <ul>
- <li>If any node has no loads, generate a warning</li>
- <li>If an I/O buffer is connected to analog hard IP, fail with an error if it's not configured in analog mode.</li>
- <li>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.</li>
- </ul>
- <p> If DRC passes with no errors, configure all of the individual cells in the netlist based on the HDL parameters. Fail with an error if an invalid configuration was requested.</p>
- <p> Finally, generate the bitstream from all of the per-cell configuration and write it to a file.</p>
- <h2> Great, let's get started!</h2>
- <p> If you don't already have one, you'll need to buy a <a href="http://www.silego.com/buy/index.php?main_page=product_info&amp;products_id=388">GreenPak4 development kit</a>. The kit includes samples of the SLG46620V (among other devices) and a programmer/emulation board. While you're waiting for it to arrive, install <a href="http://www.silego.com/softdoc/software.html">GreenPak Designer</a>.</p>
- <p> Download and install Yosys. Although Clifford is pretty good at merging my pull requests, only <a href="https://github.com/azonenberg/yosys/">my fork on Github</a> is guaranteed to have the most up-to-date support for GreenPak devices so don't be surprised if you can't use a bleeding-edge feature with mainline Yosys.</p>
- <p> Download and install gp4par. You can get it from <a href="https://github.com/azonenberg/openfpga/">the Github repository</a>.</p>
- <p> Write your HDL, compile with Yosys, P&amp;R with gp4par, and import the bitstream into GreenPak Designer to program the target device. The most current gp4par manual is included in LaTeX source form in the source tree and is automatically built as part of the compile process. If you're just browsing, there's a <a href="http://thanatos.virtual.antikernel.net/unlisted/gp4-hdl.pdf">relatively recent PDF version</a> on my web server.</p>
- <p> If you'd like to see the Verilog that produced the nightmare of a schematic I showed above, <a href="https://github.com/azonenberg/openfpga/blob/master/tests/greenpak4/Blinky/Blinky.v">here it is</a>.</p>
- <p> Be advised that this project is still very much a work in progress and there are still a number of SLG46620V features I don't support (see the manual for exact details).</p>
- <h2> I love it / it segfaulted / there's a problem in the manual!</h2>
- <p> Hop in our IRC channel (##openfpga on Freenode) and let me know. Feedback is great, pull requests are even better,</p>
- <h2> You're competing with Silego's IDE. Have they found out and sued you yet?</h2>
- <p> Nope. They're fully aware of what I'm doing and are rolling out the red carpet for me. They love the idea of a HDL flow as an alternative to schematic entry and are pretty amazed at how fast it's coming together.</p>
- <p> After I reported a few bugs in their datasheets they decided to skip the middleman and give me direct access to the engineer who writes their documentation so that I can get faster responses. The last time I found a problem (two different parts of the datasheet contradicted each other) an updated datasheet was in my inbox and on their website by the next day. I only wish Xilinx gave me that kind of treatment!</p>
- <p> They've even <a href="https://twitter.com/SilegoTech/status/717018987771469824">offered me free hardware</a> to help me add support for their latest product family, although I plan to get GreenPak4 support to a more stable state before taking them up on the offer.</p>
- <h2> So what's next?</h2>
- <p> Better testing, for starters. I have to verify functionality by hand with a DMM and oscilloscope, which is time consuming.</p>
- <p> My contact at Silego says they're going to be giving me documentation on the SRAM emulation interface soon, so I'm going to make a hardware-in-loop test platform that connects to my desktop and the Silego ZIF socket, and lets me load new bitstreams via a scriptable interface. It'll have FPGA-based digital I/O as well as an ADC and DAC on every device pin, plus an adjustable voltage regulator for power, so I can feed in arbitrary mixed-signal test waveforms and write PC-based unit tests to verify correct behavior.</p>
- <p> Other than that, I want to finish support for the SLG46620V in the next month or two. The SLG46621V will be an easy addition since only one pin and the relevant configuration bits have changed from the 46620 (I suspect they're the same die, just bonded out differently).</p>
- <p> Once that's done I'll have to do some more extensive work to add the SLG46140V since the architecture is a bit different (a lot of the combinatorial logic is merged into multi-function blocks). Luckily, the 46140 has a lot in common architecturally with the GreenPak5 family, so once that's done GreenPak5 will probably be a lot easier to add support for.</p>
- <p> My thanks go out to Clifford Wolf, whitequark, the IRC users in ##openfpga, and everyone at Silego I've worked with to help make this possible. I hope that one day this project will become mature enough that Silego will ship it as an officially supported extension to GreenPak Designer, making history by becoming the first modern programmable logic vendor to ship a fully open source synthesis and P&amp;R suite. </p>
- </div>
-</div> \ No newline at end of file
+<div id="post-body-932306423056216142" itemprop="description articleBody"><p>
+ I've written a couple of posts in the past few months but they were all for <a href="http://blog.ioactive.com/search/label/Andrew%20Zonenberg">the blog at work</a> so I figured I'm long overdue for one on Silicon Exposed.</p><p><h2>
+ So what's a GreenPak?</h2></p>
+ <p> 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 <a href="http://www.silego.com/products/greenpak5.html">5th generation parts</a> were just announced, but I started this project before that happened so I'm still targeting the <a href="http://www.silego.com/products/greenpak4.html">4th generation</a>.</p><p> GreenPak devices are kind of like itty bitty <a href="http://www.cypress.com/products/32-bit-arm-cortex-m-psoc">PSoCs</a> - 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).</p><p> 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.</p><p> Without further ado, here's a block diagram showing all the cool stuff you get in the SLG46620V:</p><p><table><tbody><tr><td>
+ <a href="https://1.bp.blogspot.com/-YIPC5jkXkDE/Vy7YPSqFKWI/AAAAAAAAAxI/a7D6Ji2GxoUvcrwUkI4RLZcr2LFQEJCTACLcB/s1600/block-diagram.png" imageanchor="1"><img height="512" src="https://1.bp.blogspot.com/-YIPC5jkXkDE/Vy7YPSqFKWI/AAAAAAAAAxI/a7D6Ji2GxoUvcrwUkI4RLZcr2LFQEJCTACLcB/s640/block-diagram.png" width="640"></img></a>
+ </td>
+ </tr><tr><td>SLG46620V block diagram (from device datasheet)</td>
+ </tr></tbody></table></p><p>
+ 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.</p><p> 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.</p><p> 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.</p><p> 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.</p><p> 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.</p><p><table><tbody><tr><td>
+ <a href="https://1.bp.blogspot.com/-k3naUT3uXao/Vy7WFac246I/AAAAAAAAAw8/mePy_ostO8QJra5ZJrbP2WGhTlJ0B_r8gCLcB/s1600/schematic-from-hell.png" imageanchor="1"><img height="334" src="https://1.bp.blogspot.com/-k3naUT3uXao/Vy7WFac246I/AAAAAAAAAw8/mePy_ostO8QJra5ZJrbP2WGhTlJ0B_r8gCLcB/s640/schematic-from-hell.png" width="640"></img></a>
+ </td>
+ </tr><tr><td>Schematic from hell!</td>
+ </tr></tbody></table></p><p>
+ 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.</p><p> 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?</p><p> 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 <a href="http://www.arachnidlabs.com/blog/2015/03/30/greenpak/">says</a>, 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.</p><p><h2>
+ Great! How does it work?</h2></p>
+ <p> Rather than wasting time writing a synthesizer, I decided to write a GreenPak technology library for Clifford Wolf's excellent open source synthesis tool, <a href="http://www.clifford.at/yosys/">Yosys</a>, 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.</p><p> 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.</p><p> 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.)</p><p> 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.</p><p><table><tbody><tr><td>
+ <a href="https://2.bp.blogspot.com/-kIekczO693g/Vy7dBqYifXI/AAAAAAAAAxc/hMNJBs5bedIQOrBzzkhq4gbmhR-n58EQwCLcB/s1600/graph-labels.png" imageanchor="1"><img height="141" src="https://2.bp.blogspot.com/-kIekczO693g/Vy7dBqYifXI/AAAAAAAAAxc/hMNJBs5bedIQOrBzzkhq4gbmhR-n58EQwCLcB/s400/graph-labels.png" width="400"></img></a>
+ </td>
+ </tr><tr><td>Example labeling for a subset of the netlist and device graphs</td>
+ </tr></tbody></table></p><p>
+ 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:</p><ol><li>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.</li>
+ <li>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.</li>
+ </ol><p>
+ 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:</p><ol><li>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).</li>
+ <li>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).</li>
+ <li>Remove nodes from the list that are LOC'd to a specific location since we're not allowed to move them.</li>
+ <li>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.</li>
+ <li>Pick a node from the remainder of the list at random. Call this our pivot.</li>
+ <li>Find a list of candidate placements for the pivot: </li>
+ <ol><li>Consider all routable placements in the other half of the device.</li>
+ <li>If none were found, consider all routable placements anywhere in the device.</li>
+ <li>If none were found, consider all placements anywhere in the device even if they're not routable.</li>
+ </ol><li>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.</li>
+ <li>Re-compute the score for the design. If it's better, accept this change and start the next iteration.</li>
+ <li>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.</li>
+ </ol><p>
+ 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.</p><p> The design is then routed. This is quite simple due to the crossbar structure of the device. For each edge in the netlist:</p><ol><li>If dedicated (non-fabric) routing is used for this path, configure the destination's input mux appropriately and stop.</li>
+ <li>If the source and destination are in the same half of the device, configure the destination's input mux appropriately and stop.</li>
+ <li>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.</li>
+ <li>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.</li>
+ <li>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.</li>
+ </ol><p>
+ Once routing is finished, run a series of post-PAR design rule checks. These currently include the following:</p><ul><li>If any node has no loads, generate a warning</li>
+ <li>If an I/O buffer is connected to analog hard IP, fail with an error if it's not configured in analog mode.</li>
+ <li>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.</li>
+ </ul><p>
+ If DRC passes with no errors, configure all of the individual cells in the netlist based on the HDL parameters. Fail with an error if an invalid configuration was requested.</p><p> Finally, generate the bitstream from all of the per-cell configuration and write it to a file.</p><p><h2>
+ Great, let's get started!</h2></p><p>
+ If you don't already have one, you'll need to buy a <a href="http://www.silego.com/buy/index.php?main_page=product_info&amp;products_id=388">GreenPak4 development kit</a>. The kit includes samples of the SLG46620V (among other devices) and a programmer/emulation board. While you're waiting for it to arrive, install <a href="http://www.silego.com/softdoc/software.html">GreenPak Designer</a>.</p><p> Download and install Yosys. Although Clifford is pretty good at merging my pull requests, only <a href="https://github.com/azonenberg/yosys/">my fork on Github</a> is guaranteed to have the most up-to-date support for GreenPak devices so don't be surprised if you can't use a bleeding-edge feature with mainline Yosys.</p><p> Download and install gp4par. You can get it from <a href="https://github.com/azonenberg/openfpga/">the Github repository</a>.</p><p> Write your HDL, compile with Yosys, P&amp;R with gp4par, and import the bitstream into GreenPak Designer to program the target device. The most current gp4par manual is included in LaTeX source form in the source tree and is automatically built as part of the compile process. If you're just browsing, there's a <a href="http://thanatos.virtual.antikernel.net/unlisted/gp4-hdl.pdf">relatively recent PDF version</a> on my web server.</p><p> If you'd like to see the Verilog that produced the nightmare of a schematic I showed above, <a href="https://github.com/azonenberg/openfpga/blob/master/tests/greenpak4/Blinky/Blinky.v">here it is</a>.</p><p> Be advised that this project is still very much a work in progress and there are still a number of SLG46620V features I don't support (see the manual for exact details).</p><p><h2>
+ I love it / it segfaulted / there's a problem in the manual!</h2></p><p>
+ Hop in our IRC channel (##openfpga on Freenode) and let me know. Feedback is great, pull requests are even better,</p><p><h2>
+ You're competing with Silego's IDE. Have they found out and sued you yet?</h2></p><p>
+ Nope. They're fully aware of what I'm doing and are rolling out the red carpet for me. They love the idea of a HDL flow as an alternative to schematic entry and are pretty amazed at how fast it's coming together.</p><p> After I reported a few bugs in their datasheets they decided to skip the middleman and give me direct access to the engineer who writes their documentation so that I can get faster responses. The last time I found a problem (two different parts of the datasheet contradicted each other) an updated datasheet was in my inbox and on their website by the next day. I only wish Xilinx gave me that kind of treatment!</p><p> They've even <a href="https://twitter.com/SilegoTech/status/717018987771469824">offered me free hardware</a> to help me add support for their latest product family, although I plan to get GreenPak4 support to a more stable state before taking them up on the offer.</p><p><h2>
+ So what's next?</h2></p>
+ <p> Better testing, for starters. I have to verify functionality by hand with a DMM and oscilloscope, which is time consuming.</p><p> My contact at Silego says they're going to be giving me documentation on the SRAM emulation interface soon, so I'm going to make a hardware-in-loop test platform that connects to my desktop and the Silego ZIF socket, and lets me load new bitstreams via a scriptable interface. It'll have FPGA-based digital I/O as well as an ADC and DAC on every device pin, plus an adjustable voltage regulator for power, so I can feed in arbitrary mixed-signal test waveforms and write PC-based unit tests to verify correct behavior.</p><p> Other than that, I want to finish support for the SLG46620V in the next month or two. The SLG46621V will be an easy addition since only one pin and the relevant configuration bits have changed from the 46620 (I suspect they're the same die, just bonded out differently).</p><p> Once that's done I'll have to do some more extensive work to add the SLG46140V since the architecture is a bit different (a lot of the combinatorial logic is merged into multi-function blocks). Luckily, the 46140 has a lot in common architecturally with the GreenPak5 family, so once that's done GreenPak5 will probably be a lot easier to add support for.</p><p> My thanks go out to Clifford Wolf, whitequark, the IRC users in ##openfpga, and everyone at Silego I've worked with to help make this possible. I hope that one day this project will become mature enough that Silego will ship it as an officially supported extension to GreenPak Designer, making history by becoming the first modern programmable logic vendor to ship a fully open source synthesis and P&amp;R suite.
+ </p>
+ </div> \ No newline at end of file
diff --git a/test/test-pages/buzzfeed-1/expected-metadata.json b/test/test-pages/buzzfeed-1/expected-metadata.json
index d5eca27..5b04b83 100644
--- a/test/test-pages/buzzfeed-1/expected-metadata.json
+++ b/test/test-pages/buzzfeed-1/expected-metadata.json
@@ -1,5 +1,4 @@
{
"Title": "Student Dies After Diet Pills She Bought Online \"Burned Her Up From Within\"",
- "Author": "Mark Di Stefano",
- "Excerpt": "An inquest into Eloise Parry's death has been adjourned until July..."
+ "Excerpt": "An inquest into Eloise Parry's death has been adjourned until July."
}
diff --git a/test/test-pages/clean-links/expected.html b/test/test-pages/clean-links/expected.html
index 15d4347..eb62077 100644
--- a/test/test-pages/clean-links/expected.html
+++ b/test/test-pages/clean-links/expected.html
@@ -1,4 +1,4 @@
-<div id="readability-page-1" class="page">
+
<div>
<div>
<h3>Study Webtext</h3>
diff --git a/test/test-pages/cnn/expected.html b/test/test-pages/cnn/expected.html
index 0aafe57..552455f 100644
--- a/test/test-pages/cnn/expected.html
+++ b/test/test-pages/cnn/expected.html
@@ -1,38 +1,51 @@
-<div id="readability-page-1" class="page">
- <div id="storytext">
- <h2>The U.S. has long been heralded as a land of opportunity -- a place where anyone can succeed regardless of the economic class they were born into.</h2>
- <p> But a new report released on Monday by <a href="http://web.stanford.edu/group/scspi-dev/cgi-bin/" target="_blank">Stanford University's Center on Poverty and Inequality</a> calls that into question. </p>
- <p> The report assessed poverty levels, income and wealth inequality, economic mobility and unemployment levels among 10 wealthy countries with social welfare programs. </p>
- <div id="smartassetcontainer">
- <div>
- <div>
- <div id="smartasset-article">
- <div>
- <p> Powered by SmartAsset.com </p>
- </div>
- </div>
- </div>
- </div>
- </div>
- <p> Among its key findings: the class you're born into matters much more in the U.S. than many of the other countries. </p>
- <p> As the <a href="http://web.stanford.edu/group/scspi-dev/cgi-bin/publications/state-union-report" target="_blank">report states</a>: "[T]he birth lottery matters more in the U.S. than in most well-off countries." </p>
- <p> But this wasn't the only finding that suggests the U.S. isn't quite living up to its reputation as a country where everyone has an equal chance to get ahead through sheer will and hard work. </p>
- <p> <a href="http://money.cnn.com/2016/01/11/news/economy/rich-taxes/index.html?iid=EL"><span>Related: Rich are paying more in taxes but not as much as they used to</span></a> </p>
- <p> The report also suggested the U.S. might not be the "jobs machine" it thinks it is, when compared to other countries. </p>
- <p> 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. </p>
- <p> The overall rankings of the countries were as follows:<span> <br/>1. Finland <span> <br/>2. Norway<span> <br/>3. Australia <span> <br/>4. Canada<span> <br/>5. Germany<span> <br/>6. France<span> <br/>7. United Kingdom <span> <br/>8. Italy<span> <br/>9. Spain<span> <br/>10. United States </span></span>
- </span>
- </span>
- </span>
- </span>
- </span>
- </span>
- </span>
- </span>
- </p>
- <p> The low ranking the U.S. received was due to its extreme levels of wealth and income inequality and the ineffectiveness of its "safety net" -- social programs aimed at reducing poverty. </p>
- <p> <a href="http://money.cnn.com/2016/01/05/news/economy/chicago-segregated/index.html?iid=EL"><span>Related: Chicago is America's most segregated city</span></a> </p>
- <p> The report concluded that the American safety net was ineffective because it provides only half the financial help people need. Additionally, the levels of assistance in the U.S. are generally lower than in other countries. </p>
- <p><span> CNNMoney (New York) </span> <span>First published February 1, 2016: 1:28 AM ET</span> </p>
- </div>
-</div> \ No newline at end of file
+<div id="storytext">
+
+
+ <h2>The U.S. has long been heralded as a land of opportunity -- a place where anyone can succeed regardless of the economic class they were born into.</h2>
+ <p> But a new report released on Monday by <a href="http://web.stanford.edu/group/scspi-dev/cgi-bin/" target="_blank">Stanford University's Center on Poverty and Inequality</a> calls that into question. </p>
+
+ <p> The report assessed poverty levels, income and wealth inequality, economic mobility and unemployment levels among 10 wealthy countries with social welfare programs. </p>
+ <div id="smartassetcontainer">
+ <div>
+ <div>
+ <div id="smartasset-article">
+ <div>
+ <p>
+ Powered by SmartAsset.com
+ </p>
+
+
+
+
+
+
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <p> Among its key findings: the class you're born into matters much more in the U.S. than many of the other countries. </p>
+ <p> As the <a href="http://web.stanford.edu/group/scspi-dev/cgi-bin/publications/state-union-report" target="_blank">report states</a>: "[T]he birth lottery matters more in the U.S. than in most well-off countries." </p>
+
+ <p> But this wasn't the only finding that suggests the U.S. isn't quite living up to its reputation as a country where everyone has an equal chance to get ahead through sheer will and hard work. </p>
+ <p> <a href="http://money.cnn.com/2016/01/11/news/economy/rich-taxes/index.html?iid=EL"><span>Related: Rich are paying more in taxes but not as much as they used to</span></a> </p>
+
+ <p> The report also suggested the U.S. might not be the "jobs machine" it thinks it is, when compared to other countries. </p>
+ <p> 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. </p>
+ <p> The overall rankings of the countries were as follows:<span> <br></br>1. Finland <span> <br></br>2. Norway<span> <br></br>3. Australia <span> <br></br>4. Canada<span> <br></br>5. Germany<span> <br></br>6. France<span> <br></br>7. United Kingdom <span> <br></br>8. Italy<span> <br></br>9. Spain<span> <br></br>10. United States </span></span>
+ </span>
+ </span>
+ </span>
+ </span>
+ </span>
+ </span>
+ </span>
+ </span>
+ </p>
+ <p> The low ranking the U.S. received was due to its extreme levels of wealth and income inequality and the ineffectiveness of its "safety net" -- social programs aimed at reducing poverty. </p>
+ <p> <a href="http://money.cnn.com/2016/01/05/news/economy/chicago-segregated/index.html?iid=EL"><span>Related: Chicago is America's most segregated city</span></a> </p>
+ <p> The report concluded that the American safety net was ineffective because it provides only half the financial help people need. Additionally, the levels of assistance in the U.S. are generally lower than in other countries. </p>
+
+
+ <p><span> CNNMoney (New York) </span> <span>First published February 1, 2016: 1:28 AM ET</span> </p>
+ </div> \ No newline at end of file
diff --git a/test/test-pages/ehow-2/expected-metadata.json b/test/test-pages/ehow-2/expected-metadata.json
index 653912e..2967b61 100644
--- a/test/test-pages/ehow-2/expected-metadata.json
+++ b/test/test-pages/ehow-2/expected-metadata.json
@@ -1,5 +1,5 @@
{
- "Title": "How to Throw a Graduation Party on a Budget (with Pictures)",
+ "Title": "How to Throw a Graduation Party on a Budget | eHow",
"Author": "Gina Roberts-Grey",
- "Excerpt": "How to Throw a Graduation Party on a Budget. Graduation parties are a great way to commemorate the years of hard work teens and college co-eds devote to education. They’re also costly for mom and dad.The average cost of a graduation party in 2013 was a whopping $1,200, according to Graduationparty.com; $700 of that was allocated for food...."
+ "Excerpt": "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..."
}
diff --git a/test/test-pages/ehow-2/expected.html b/test/test-pages/ehow-2/expected.html
index e3d4256..ea7d138 100644
--- a/test/test-pages/ehow-2/expected.html
+++ b/test/test-pages/ehow-2/expected.html
@@ -6,11 +6,7 @@
<p><a href="http://fakehost/contributor/gina_robertsgrey/" id="img-follow-tip" target="_top">
<img data-failover="//img-aws.ehowcdn.com/60x60/ehow-cdn-assets/test15/media/images/authors/missing-author-image.png" onerror="var failover = this.getAttribute('data-failover');&#xA; if (failover) failover = failover.replace(/^https?:/,'');&#xA; var src = this.src ? this.src.replace(/^https?:/,'') : '';&#xA; if (src != failover){&#xA; this.src = failover;&#xA; }" src="http://img-aws.ehowcdn.com/60x60/cme/cme_public_images/www_demandstudios_com/sitelife.studiod.com/ver1.0/Content/images/store/9/2/d9dd6f61-b183-4893-927f-5b540e45be91.Small.jpg"></img></a></p>
</div>
- <div data-author-url="/contributor/gina_robertsgrey/" id="author_powertip">
- <p><a href="http://fakehost/contributor/gina_robertsgrey/" target="_top">
- <img data-failover="//img-aws.ehowcdn.com/60x60/ehow-cdn-assets/test15/media/images/authors/missing-author-image.png" onerror="var failover = this.getAttribute('data-failover');&#xA; if (failover) failover = failover.replace(/^https?:/,'');&#xA; var src = this.src ? this.src.replace(/^https?:/,'') : '';&#xA; if (src != failover){&#xA; this.src = failover;&#xA; }" src="http://img-aws.ehowcdn.com/60x60/cme/cme_public_images/www_demandstudios_com/sitelife.studiod.com/ver1.0/Content/images/store/9/2/d9dd6f61-b183-4893-927f-5b540e45be91.Small.jpg"></img></a></p>
- <p>Follow</p>
- </div>
+
<p><time datetime="2016-09-14T07:07:00-04:00" itemprop="dateModified">Last updated September 14, 2016</time></p>
</div>
diff --git a/test/test-pages/engadget/expected.html b/test/test-pages/engadget/expected.html
index f80f9a4..29d4c03 100644
--- a/test/test-pages/engadget/expected.html
+++ b/test/test-pages/engadget/expected.html
@@ -1,4 +1,4 @@
-<div id="readability-page-1" class="page">
+
<div data-nav-drawer-slide-panel="">
<main role="main">
<nav data-behavior="ContextNav" data-context-nav-offset="200"> </nav>
diff --git a/test/test-pages/gmw/expected.html b/test/test-pages/gmw/expected.html
index 9535494..13ed014 100644
--- a/test/test-pages/gmw/expected.html
+++ b/test/test-pages/gmw/expected.html
@@ -1,45 +1,58 @@
-<div id="readability-page-1" class="page">
- <div id="contentMain">
- <p>  翱翔于距地球数千公里的太空中,进入广袤漆黑的未知领域,是一项艰苦卓绝的工作。这让人感到巨大压力和极度恐慌。那么,为什么不能让宇航员来一杯“地球末日”鸡尾酒来放松一下?</p>
- <p>  不幸的是,对于希望能喝上一杯的太空探险者,那些将他们送上太空的政府机构普遍禁止他们染指包括酒在内的含酒精饮料。</p>
- <p>  但是,很快普通人都会有机会向人类“最终的边疆”出发——以平民化旅行的形式,去探索和殖民火星。确实,火星之旅将是一次令人感到痛苦的旅行,可能一去不复返并要几年时间才能完成,但是否应该允许参与者在旅程中痛饮一番?或至少携带能在火星上发酵自制酒精饮料的设备?</p>
- <p><img id="45395168" alt="(Credit: Nasa)" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e5929.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重" /></p>
- <p> <span face="楷体">  图注:巴兹?奥尔德林(Buzz Aldrin)可能是第二个在月球上行走的人,但他是第一个在月球上喝酒的人</span> </p>
- <p>  事实是,历史上酒与太空探险有一种复杂的关系。让我们来看看喝了酒的航天员究竟会发生什么—— 如果我们开始给予进入太空的人类更大的自由度,又可能会发生什么。</p>
- <p>  人们普遍认为,当一个人所处的海拔越高,喝醉后会越容易感到头昏。因此,人们自然地想到,当人身处地球轨道上时,饮酒会对人体有更强烈的致眩作用。但这种说法可能不是正确的。</p>
- <p>  事实上,有证据表明,早在上世纪八十年代就澄清了这一传言。1985年,美国联邦航空管理局(UFAA)开展了一项研究,以验证人在不同的海拔高度饮酒,是否会影响执行复杂任务时的表现和酒精测定仪的读数。</p>
- <p>  在这项研究中,17名男子被要求在地面和一间模拟海拔3.7公里的房间内喝下一些伏特加。然后,他们被要求完成各种任务,包括心算口算问题、用操纵杆在示波器上跟踪灯光以及各种其它测试。研究人员发现,“酒精和海拔高度对酒精测定仪读数或完成任务的表现情况没有交互作用”。</p>
- <p>  所以,人乘坐飞机时醉得更快是个传说?纽约州立大学(State University of New York,SUNY)社会学荣誉教授戴夫·汉森(Dave Hanson)研究酒精和饮酒超过40年,他认为确实如此。他说:“我不认为它(在太空中饮酒)会有任何不同。”</p>
- <p>  他认为高原反应可能类似于宿醉,但它也可能类似于中毒。他说:“如果人们没有感受到充分的大气压力,他们也会觉得喝醉了一样。”</p>
- <p>  相反,那些声称在飞机上比在地面上醉得更快的人,可能只是经历了“自认喝醉(think-drink)”效应,这种效应多年来已被广泛研究。它表明,如果人们认为自己喝醉了,那他们的一举一动会真的像喝醉了一样—— 而不是实际上他们真的醉了。</p>
- <p>  汉森指出:“如果人们脑子里一直认为在飞机上酒精会对他们产生与平常不同的作用,那么他们乘坐飞机时真的会觉得酒精对他们产生了不同的作用。”</p>
- <p>  所以,如果酒精对人体的物理效应与海拔高度无关,那么在国际空间站上睡前小饮一杯不应该是一个大问题,对吧?错了。</p>
- <p>  美国宇航局约翰逊航天中心发言人丹尼尔·霍特(Daniel Huot)表示:“国际空间站上的宇航员不允许喝酒。在国际空间站上,酒精和其它挥发性化合物的使用受到控制,因为它们的挥发物可能对该站的水回收系统产生影响。”</p>
- <p>  为此,国际空间站上的宇航员甚至没有被提供含有酒精的产品,例如漱口水、香水或须后水。如果在国际空间站上饮酒狂欢,溢出的啤酒也可能存在损坏设备的风险。</p>
- <p><img id="45395150" alt="(Credit: iStock)" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e592a.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重" /></p>
- <p> <span face="楷体">  图注:测试表明,有关人在高空中喝酒更容易醉的传言是不正确的</span> </p>
- <p>  然后是责任的问题。我们不允许汽车司机或飞机飞行员喝醉后驾驶,所以并不奇怪同样的规则适用于国际空间站上的宇航员。毕竟国际空间站的造价高达1500亿美元,而且在接近真空的太空中其运行速度达到了每小时27680公里。</p>
- <p>  然而,2007年,美国宇航局(NASA)成立了一个负责调查宇航员健康状况的独立小组,称历史上该机构至少有两名宇航员在即将飞行前喝了大量的酒,但仍然被允许飞行。Nasa安全负责人随后的审查发现并没有证据支持这一指控。宇航员在飞行前12小时是严禁饮酒的,因为他们需要充分的思维能力和清醒的意识。</p>
- <p>  出台这一规则的原因很清楚。在1985年UFAA开展的关于酒精在不同海拔高度影响的研究中,研究人员得出结论,酒精的影响与海拔高度无关。无论参与测试的人员在什么海拔高度喝酒,其酒精测量仪的读数都是一样的。他们的行为表现受到的影响也相同,但如果提供给测试人员的是安慰剂,则身处高空比身处海平面的行为表现要更差一些。这表明,无论是否摄入酒精,海拔高度可能对心理表现有轻微的影响。</p>
- <p>  国际空间站禁止享用啤酒等有大量泡沫的饮料,可能有另一个原因:没有重力的帮助,液体和气体会在宇航员的胃里不停地翻滚,导致他们不断地打嗝。</p>
- <p>  然而,尽管有严格的规则,这并不意味着太空中的人类不会接触发酵液体。在国际空间站上进行了大量有关酒精的实验—— 但没有发生让众人去饮酒的情况,所以没有人真正了解太空中人体对酒精具体有怎样的反应。</p>
- <p>  NASA发言人斯蒂芬妮?席尔霍尔茨(Stephanie Schierhol)表示:“我们研究了太空中宇航员身体的各种变化,包括微生物层面的。我们有一个营养计划,以确保他们的身体获得保持健康所需要的营养。显然,在实施‘天空实验室(skylab)’项目时,他们曾将雪利酒与宇航员一起送到太空中,但宇航员在零重力飞行时使用雪利酒的测试结果不太好。”天空实验室是美国第一座空间站。</p>
- <p>  席尔霍尔茨补充说,在测试中使用雪利酒“引发呕吐反射,公众也反对”。</p>
- <p>  也许最令人惊讶的是,人类在月球表面上喝的第一种液体是葡萄酒。前NASA宇航员巴兹·奥尔德林(Buzz Aldrin)在采访和他撰写的书中表示,1969年,在和尼尔·阿姆斯特朗(Neil Armstrong)走出登月舱之前的圣餐仪式上,他喝了少量葡萄酒。举行这一仪式时与地面的通信出现了暂停,因此这一过程从来没有播出。</p>
- <p>  虽然Nasa对太空中酒精的使用有严格的规定,但在这方面俄罗斯过去似乎更为宽松。在其“和平号”空间站上,宇航员允许喝点干邑和伏特加。当他们发现国际空间站将严格禁止饮酒时,显然有不少怨言。</p>
- <p>  然而,奇怪的是,酒仍然能通过各种方式出现在国际空间站上。2015年,日本酿酒商三得利(Suntory)的全球创新中心将该公司一些获奖的威士忌运送到国际空间站,参与一项旨在验证“能否通过利用微重力环境增强酒精饮料醇厚性”的实验。换句话说,在微重力下酒的陈酿过程可能不同,导致它的陈酿进程更快、味道更好。对此,地球上的每家酿酒商都想进一步地了解。</p>
- <p>  几年前,即2011年9月至2014年9月,Nasa赞助了一个试验,研究微重力环境对威士忌中未发酵麦芽与烧焦橡木颗粒的影响,这两种物质能对威士忌的陈酿起帮助作用。在太空中逗留将近1000天后,用于测试的威士忌的单宁成分保持不变——但是太空中橡木颗粒产生了更高浓度的木质素分解产物,这种物质能赋予威士忌特别的风味。</p>
- <p>  Nasa表示:“这种试验不仅对麦芽威士忌行业有影响,而且对整个食品和饮料行业也有影响。送上太空的威士忌与对照样品之间的风味差异是如此显著,需要进一步分析以破解不同口味产生的原因。”</p>
- <p>  因此,即使宇航员自己被禁止在地球轨道上饮酒,但他们正在做的工作可以提高在地上消费的酒的质量。</p>
- <p>  相比之下,执行登陆火星任务的人将远离家乡几年,而不是几个月,因此可能会有人提出有关禁止饮酒的规定可以放松一些。</p>
- <p>  然而,像戴夫?汉森这样的专家认为,继续禁止饮酒并没有什么害处。除了实际的安全问题,饮酒还可能有其它挑战。汉森认为,地球人存在许多社会文化方面的差异,而且人连续几年时间呆在一个狭小的空间里,很容易突然发怒,这些因素都使饮酒问题变得很棘手。</p>
- <p><img id="45395153" alt="(Credit: David Frohman/Peachstate Historical Consulting Inc)" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e592d.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重" /> </p>
- <p> <span face="楷体">  图注:奥尔德林的圣餐杯回到了地球上</span> </p>
- <p>  他说:“这是一个政治问题,也是一个文化方面的问题,但不是一个科学上的问题。这将是未来一个可能产生冲突领域,因为人们具有不同的文化背景,他们对饮酒的态度不同。”他进一步指出,如果你与穆斯林、摩门教徒或禁酒主义者分配在同一间宿舍怎么办?面对未来人们可能在一个没有期限的时间内呆在一个有限的空间里,需要“尽早解决”如何协调不同文化观点的问题。</p>
- <p><ins></ins>  所以,当宇航员在地球轨道上时,将还不得不满足于通过欣赏外面的景色来振作精神,而不要指望沉溺于烈酒中。我们留在地球上的人,则可以准备好适量的香槟酒,以迎接他们的归来。</p>
- <p>  原标题:他晚于阿姆斯特朗登月 却是首个敢在月球喝酒的人</p>
- <p><strong>  出品︱网易科学人栏目组 胖胖</strong></p>
- <p><strong>  作者︱春春</strong> <a href="http://www.gmw.cn/" target="_blank"><img src="https://img.gmw.cn/pic/content_logo.png" title="返回光明网首页"/></a> </p>
- <p>[责任编辑:肖春芳]</p>
- </div>
-</div> \ No newline at end of file
+<div id="contentMsg">
+ <p><span id="pubTime">2017-03-10 09:58</span> <span id="source">来源:<a href="http://tech.163.com/17/0228/00/CEAPST9C00097U81.html" target="_blank">网易科学人</a></span> <span id="author"></span></p></div><div id="contentMain">
+
+
+
+ <p>  翱翔于距地球数千公里的太空中,进入广袤漆黑的未知领域,是一项艰苦卓绝的工作。这让人感到巨大压力和极度恐慌。那么,为什么不能让宇航员来一杯“地球末日”鸡尾酒来放松一下?</p>
+ <p>  不幸的是,对于希望能喝上一杯的太空探险者,那些将他们送上太空的政府机构普遍禁止他们染指包括酒在内的含酒精饮料。</p>
+ <p>  但是,很快普通人都会有机会向人类“最终的边疆”出发——以平民化旅行的形式,去探索和殖民火星。确实,火星之旅将是一次令人感到痛苦的旅行,可能一去不复返并要几年时间才能完成,但是否应该允许参与者在旅程中痛饮一番?或至少携带能在火星上发酵自制酒精饮料的设备?</p>
+ <p><img alt="(Credit: Nasa)" id="45395168" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e5929.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重"></img></p>
+ <p>
+ <span face="楷体">  图注:巴兹?奥尔德林(Buzz Aldrin)可能是第二个在月球上行走的人,但他是第一个在月球上喝酒的人</span>
+ </p>
+ <p>  事实是,历史上酒与太空探险有一种复杂的关系。让我们来看看喝了酒的航天员究竟会发生什么—— 如果我们开始给予进入太空的人类更大的自由度,又可能会发生什么。</p>
+ <p>  人们普遍认为,当一个人所处的海拔越高,喝醉后会越容易感到头昏。因此,人们自然地想到,当人身处地球轨道上时,饮酒会对人体有更强烈的致眩作用。但这种说法可能不是正确的。</p>
+ <p>  事实上,有证据表明,早在上世纪八十年代就澄清了这一传言。1985年,美国联邦航空管理局(UFAA)开展了一项研究,以验证人在不同的海拔高度饮酒,是否会影响执行复杂任务时的表现和酒精测定仪的读数。</p>
+ <p>  在这项研究中,17名男子被要求在地面和一间模拟海拔3.7公里的房间内喝下一些伏特加。然后,他们被要求完成各种任务,包括心算口算问题、用操纵杆在示波器上跟踪灯光以及各种其它测试。研究人员发现,“酒精和海拔高度对酒精测定仪读数或完成任务的表现情况没有交互作用”。</p>
+ <p>  所以,人乘坐飞机时醉得更快是个传说?纽约州立大学(State University of New York,SUNY)社会学荣誉教授戴夫·汉森(Dave Hanson)研究酒精和饮酒超过40年,他认为确实如此。他说:“我不认为它(在太空中饮酒)会有任何不同。”</p>
+ <p>  他认为高原反应可能类似于宿醉,但它也可能类似于中毒。他说:“如果人们没有感受到充分的大气压力,他们也会觉得喝醉了一样。”</p>
+ <p>  相反,那些声称在飞机上比在地面上醉得更快的人,可能只是经历了“自认喝醉(think-drink)”效应,这种效应多年来已被广泛研究。它表明,如果人们认为自己喝醉了,那他们的一举一动会真的像喝醉了一样—— 而不是实际上他们真的醉了。</p>
+ <p>  汉森指出:“如果人们脑子里一直认为在飞机上酒精会对他们产生与平常不同的作用,那么他们乘坐飞机时真的会觉得酒精对他们产生了不同的作用。”</p>
+ <p>  所以,如果酒精对人体的物理效应与海拔高度无关,那么在国际空间站上睡前小饮一杯不应该是一个大问题,对吧?错了。</p>
+ <p>  美国宇航局约翰逊航天中心发言人丹尼尔·霍特(Daniel Huot)表示:“国际空间站上的宇航员不允许喝酒。在国际空间站上,酒精和其它挥发性化合物的使用受到控制,因为它们的挥发物可能对该站的水回收系统产生影响。”</p>
+ <p>  为此,国际空间站上的宇航员甚至没有被提供含有酒精的产品,例如漱口水、香水或须后水。如果在国际空间站上饮酒狂欢,溢出的啤酒也可能存在损坏设备的风险。</p>
+ <p><img alt="(Credit: iStock)" id="45395150" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e592a.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重"></img></p>
+ <p>
+ <span face="楷体">  图注:测试表明,有关人在高空中喝酒更容易醉的传言是不正确的</span>
+ </p>
+ <p>  然后是责任的问题。我们不允许汽车司机或飞机飞行员喝醉后驾驶,所以并不奇怪同样的规则适用于国际空间站上的宇航员。毕竟国际空间站的造价高达1500亿美元,而且在接近真空的太空中其运行速度达到了每小时27680公里。</p>
+ <p>  然而,2007年,美国宇航局(NASA)成立了一个负责调查宇航员健康状况的独立小组,称历史上该机构至少有两名宇航员在即将飞行前喝了大量的酒,但仍然被允许飞行。Nasa安全负责人随后的审查发现并没有证据支持这一指控。宇航员在飞行前12小时是严禁饮酒的,因为他们需要充分的思维能力和清醒的意识。</p>
+ <p>  出台这一规则的原因很清楚。在1985年UFAA开展的关于酒精在不同海拔高度影响的研究中,研究人员得出结论,酒精的影响与海拔高度无关。无论参与测试的人员在什么海拔高度喝酒,其酒精测量仪的读数都是一样的。他们的行为表现受到的影响也相同,但如果提供给测试人员的是安慰剂,则身处高空比身处海平面的行为表现要更差一些。这表明,无论是否摄入酒精,海拔高度可能对心理表现有轻微的影响。</p>
+ <p>  国际空间站禁止享用啤酒等有大量泡沫的饮料,可能有另一个原因:没有重力的帮助,液体和气体会在宇航员的胃里不停地翻滚,导致他们不断地打嗝。</p>
+ <p>  然而,尽管有严格的规则,这并不意味着太空中的人类不会接触发酵液体。在国际空间站上进行了大量有关酒精的实验—— 但没有发生让众人去饮酒的情况,所以没有人真正了解太空中人体对酒精具体有怎样的反应。</p>
+ <p>  NASA发言人斯蒂芬妮?席尔霍尔茨(Stephanie Schierhol)表示:“我们研究了太空中宇航员身体的各种变化,包括微生物层面的。我们有一个营养计划,以确保他们的身体获得保持健康所需要的营养。显然,在实施‘天空实验室(skylab)’项目时,他们曾将雪利酒与宇航员一起送到太空中,但宇航员在零重力飞行时使用雪利酒的测试结果不太好。”天空实验室是美国第一座空间站。</p>
+ <p>  席尔霍尔茨补充说,在测试中使用雪利酒“引发呕吐反射,公众也反对”。</p>
+ <p>  也许最令人惊讶的是,人类在月球表面上喝的第一种液体是葡萄酒。前NASA宇航员巴兹·奥尔德林(Buzz Aldrin)在采访和他撰写的书中表示,1969年,在和尼尔·阿姆斯特朗(Neil Armstrong)走出登月舱之前的圣餐仪式上,他喝了少量葡萄酒。举行这一仪式时与地面的通信出现了暂停,因此这一过程从来没有播出。</p>
+ <p>  虽然Nasa对太空中酒精的使用有严格的规定,但在这方面俄罗斯过去似乎更为宽松。在其“和平号”空间站上,宇航员允许喝点干邑和伏特加。当他们发现国际空间站将严格禁止饮酒时,显然有不少怨言。</p>
+ <p>  然而,奇怪的是,酒仍然能通过各种方式出现在国际空间站上。2015年,日本酿酒商三得利(Suntory)的全球创新中心将该公司一些获奖的威士忌运送到国际空间站,参与一项旨在验证“能否通过利用微重力环境增强酒精饮料醇厚性”的实验。换句话说,在微重力下酒的陈酿过程可能不同,导致它的陈酿进程更快、味道更好。对此,地球上的每家酿酒商都想进一步地了解。</p>
+ <p>  几年前,即2011年9月至2014年9月,Nasa赞助了一个试验,研究微重力环境对威士忌中未发酵麦芽与烧焦橡木颗粒的影响,这两种物质能对威士忌的陈酿起帮助作用。在太空中逗留将近1000天后,用于测试的威士忌的单宁成分保持不变——但是太空中橡木颗粒产生了更高浓度的木质素分解产物,这种物质能赋予威士忌特别的风味。</p>
+ <p>  Nasa表示:“这种试验不仅对麦芽威士忌行业有影响,而且对整个食品和饮料行业也有影响。送上太空的威士忌与对照样品之间的风味差异是如此显著,需要进一步分析以破解不同口味产生的原因。”</p>
+ <p>  因此,即使宇航员自己被禁止在地球轨道上饮酒,但他们正在做的工作可以提高在地上消费的酒的质量。</p>
+ <p>  相比之下,执行登陆火星任务的人将远离家乡几年,而不是几个月,因此可能会有人提出有关禁止饮酒的规定可以放松一些。</p>
+ <p>  然而,像戴夫?汉森这样的专家认为,继续禁止饮酒并没有什么害处。除了实际的安全问题,饮酒还可能有其它挑战。汉森认为,地球人存在许多社会文化方面的差异,而且人连续几年时间呆在一个狭小的空间里,很容易突然发怒,这些因素都使饮酒问题变得很棘手。</p>
+ <p><img alt="(Credit: David Frohman/Peachstate Historical Consulting Inc)" id="45395153" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e592d.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重"></img></p>
+ <p>
+ <span face="楷体">  图注:奥尔德林的圣餐杯回到了地球上</span>
+ </p>
+ <p>  他说:“这是一个政治问题,也是一个文化方面的问题,但不是一个科学上的问题。这将是未来一个可能产生冲突领域,因为人们具有不同的文化背景,他们对饮酒的态度不同。”他进一步指出,如果你与穆斯林、摩门教徒或禁酒主义者分配在同一间宿舍怎么办?面对未来人们可能在一个没有期限的时间内呆在一个有限的空间里,需要“尽早解决”如何协调不同文化观点的问题。</p>
+ <p><ins></ins>  所以,当宇航员在地球轨道上时,将还不得不满足于通过欣赏外面的景色来振作精神,而不要指望沉溺于烈酒中。我们留在地球上的人,则可以准备好适量的香槟酒,以迎接他们的归来。</p>
+ <p>  原标题:他晚于阿姆斯特朗登月 却是首个敢在月球喝酒的人</p>
+ <p><strong>  出品︱网易科学人栏目组 胖胖</strong></p>
+ <p><strong>  作者︱春春</strong>
+ <a href="http://www.gmw.cn" target="_blank"><img src="https://img.gmw.cn/pic/content_logo.png" title="返回光明网首页"></img></a>
+ </p>
+
+ <p>[责任编辑:肖春芳]</p>
+
+
+ </div> \ No newline at end of file
diff --git a/test/test-pages/hidden-nodes/expected.html b/test/test-pages/hidden-nodes/expected.html
index bb0e068..af27a06 100644
--- a/test/test-pages/hidden-nodes/expected.html
+++ b/test/test-pages/hidden-nodes/expected.html
@@ -1,4 +1,4 @@
-<div id="readability-page-1" class="page">
+
<p> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. </p>
<h2> Secondary header </h2>
</div> \ No newline at end of file
diff --git a/test/test-pages/hukumusume/expected.html b/test/test-pages/hukumusume/expected.html
index 9871087..5913395 100644
--- a/test/test-pages/hukumusume/expected.html
+++ b/test/test-pages/hukumusume/expected.html
@@ -1,4 +1,4 @@
-<div id="readability-page-1" class="page">
+
<div width="619">
<p> <a href="http://fakehost/index.html">福娘童話集</a> &gt; <a href="http://fakehost/index.html">きょうのイソップ童話</a> &gt; <a href="http://fakehost/itiran/01gatu.htm">1月のイソップ童話</a> &gt; 欲張りなイヌ </p>
<div>
diff --git a/test/test-pages/ietf-1/expected-metadata.json b/test/test-pages/ietf-1/expected-metadata.json
index 1431f27..f783f67 100644
--- a/test/test-pages/ietf-1/expected-metadata.json
+++ b/test/test-pages/ietf-1/expected-metadata.json
@@ -1,4 +1,4 @@
{
- "Title": "draft-dejong-remotestorage-04 - remoteStorage",
- "Author": "AUTHORING"
+ "Title": "remoteStorage",
+ "Author": "Jong, Michiel de"
}
diff --git a/test/test-pages/ietf-1/expected.html b/test/test-pages/ietf-1/expected.html
index 0202963..ff46f7a 100644
--- a/test/test-pages/ietf-1/expected.html
+++ b/test/test-pages/ietf-1/expected.html
@@ -1,5 +1,6 @@
-<div id="readability-page-1" class="page"> <span>[<a href="http://fakehost/html/" title="Document search and retrieval page">Docs</a>] [<a href="https://tools.ietf.org/id/draft-dejong-remotestorage-04.txt" title="Plaintext version of this document">txt</a>|<a href="http://fakehost/pdf/draft-dejong-remotestorage-04.txt" title="PDF version of this document">pdf</a>] [<a href="https://datatracker.ietf.org/doc/draft-dejong-remotestorage" title="IESG Datatracker information for this document">Tracker</a>] [<a href="mailto:[email protected]?subject=draft-dejong-remotestorage%20" title="Send email to the document authors">Email</a>] [<a href="http://fakehost/rfcdiff?difftype=--hwdiff&amp;url2=draft-dejong-remotestorage-04.txt" title="Inline diff (wdiff)">Diff1</a>] [<a href="http://fakehost/rfcdiff?url2=draft-dejong-remotestorage-04.txt" title="Side-by-side diff">Diff2</a>] [<a href="http://fakehost/idnits?url=https://tools.ietf.org/id/draft-dejong-remotestorage-04.txt" title="Run an idnits check of this document">Nits</a>] </span><br/> <span> </span><br/> <span>Versions: <a href="http://fakehost/test/draft-dejong-remotestorage-00">00</a> <a href="http://fakehost/test/draft-dejong-remotestorage-01">01</a> <a href="http://fakehost/test/draft-dejong-remotestorage-02">02</a> <a href="http://fakehost/test/draft-dejong-remotestorage-03">03</a> <a href="http://fakehost/test/draft-dejong-remotestorage-04">04</a> </span><br/> <span> </span><br/>
- <pre>INTERNET DRAFT Michiel B. de Jong
+<div>
+
+<span>[<a href="http://fakehost/test/../html/" title="Document search and retrieval page">Docs</a>] [<a href="https://tools.ietf.org/id/draft-dejong-remotestorage-04.txt" title="Plaintext version of this document">txt</a>|<a href="http://fakehost/pdf/draft-dejong-remotestorage-04.txt" title="PDF version of this document">pdf</a>] [<a href="https://datatracker.ietf.org/doc/draft-dejong-remotestorage" title="IESG Datatracker information for this document">Tracker</a>] [<a href="mailto:[email protected]?subject=draft-dejong-remotestorage%20" title="Send email to the document authors">Email</a>] [<a href="http://fakehost/rfcdiff?difftype=--hwdiff&amp;url2=draft-dejong-remotestorage-04.txt" title="Inline diff (wdiff)">Diff1</a>] [<a href="http://fakehost/rfcdiff?url2=draft-dejong-remotestorage-04.txt" title="Side-by-side diff">Diff2</a>] [<a href="http://fakehost/idnits?url=https://tools.ietf.org/id/draft-dejong-remotestorage-04.txt" title="Run an idnits check of this document">Nits</a>] </span><br></br><span> </span><br></br><span>Versions: <a href="http://fakehost/test/draft-dejong-remotestorage-00">00</a> <a href="http://fakehost/test/draft-dejong-remotestorage-01">01</a> <a href="http://fakehost/test/draft-dejong-remotestorage-02">02</a> <a href="http://fakehost/test/draft-dejong-remotestorage-03">03</a> <a href="http://fakehost/test/draft-dejong-remotestorage-04">04</a> </span><br></br><span> </span><br></br><pre>INTERNET DRAFT Michiel B. de Jong
Document: <a href="http://fakehost/test/draft-dejong-remotestorage-04">draft-dejong-remotestorage-04</a> IndieHosters
F. Kooman
Intended Status: Proposed Standard (independent)
@@ -52,8 +53,7 @@ Copyright Notice
<span>de Jong [Page 1]</span>
-</pre>
- <pre><a name="page-2" id="page-2" href="#page-2"> </a>
+</pre><pre><a href="#page-2" id="page-2" name="page-2"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -89,7 +89,7 @@ Table of Contents
<a href="#section-18">18</a>. Authors' addresses............................................<a href="#page-22">22</a>
-<span><a name="section-1" href="#section-1">1</a>. Introduction</span>
+<span><a href="#section-1" name="section-1">1</a>. Introduction</span>
Many services for data storage are available over the internet. This
specification describes a vendor-independent interface for such
@@ -103,8 +103,7 @@ Table of Contents
<span>de Jong [Page 2]</span>
-</pre>
- <pre><a name="page-3" id="page-3" href="#page-3"> </a>
+</pre><pre><a href="#page-3" id="page-3" name="page-3"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -123,7 +122,7 @@ Table of Contents
The exact details of these four actions are described in this
specification.
-<span><a name="section-2" href="#section-2">2</a>. Terminology</span>
+<span><a href="#section-2" name="section-2">2</a>. Terminology</span>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
@@ -136,7 +135,7 @@ Table of Contents
implement the general requirement when such failure would result in
interoperability failure.
-<span><a name="section-3" href="#section-3">3</a>. Storage model</span>
+<span><a href="#section-3" name="section-3">3</a>. Storage model</span>
The server stores data in nodes that form a tree structure.
Internal nodes are called 'folders' and leaf nodes are called
@@ -154,8 +153,7 @@ Table of Contents
<span>de Jong [Page 3]</span>
-</pre>
- <pre><a name="page-4" id="page-4" href="#page-4"> </a>
+</pre><pre><a href="#page-4" id="page-4" name="page-4"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -165,7 +163,7 @@ Table of Contents
* content length
* content
-<span><a name="section-4" href="#section-4">4</a>. Requests</span>
+<span><a href="#section-4" name="section-4">4</a>. Requests</span>
Client-to-server requests SHOULD be made over https [<a href="#ref-HTTPS">HTTPS</a>], and
servers MUST comply with HTTP/1.1 [<a href="#ref-HTTP">HTTP</a>]. Specifically, they
@@ -205,8 +203,7 @@ Table of Contents
<span>de Jong [Page 4]</span>
-</pre>
- <pre><a name="page-5" id="page-5" href="#page-5"> </a>
+</pre><pre><a href="#page-5" id="page-5" name="page-5"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -256,8 +253,7 @@ Table of Contents
<span>de Jong [Page 5]</span>
-</pre>
- <pre><a name="page-6" id="page-6" href="#page-6"> </a>
+</pre><pre><a href="#page-6" id="page-6" name="page-6"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -307,12 +303,11 @@ Table of Contents
<span>de Jong [Page 6]</span>
-</pre>
- <pre><a name="page-7" id="page-7" href="#page-7"> </a>
+</pre><pre><a href="#page-7" id="page-7" name="page-7"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
-<span><a name="section-5" href="#section-5">5</a>. Response codes</span>
+<span><a href="#section-5" name="section-5">5</a>. Response codes</span>
Response codes SHOULD be given as defined by [HTTP, <a href="#section-6">section 6</a>] and
[BEARER, <a href="#section-3.1">section 3.1</a>]. The following is a non-normative checklist
@@ -345,7 +340,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.
-<span><a name="section-6" href="#section-6">6</a>. Versioning</span>
+<span><a href="#section-6" name="section-6">6</a>. Versioning</span>
All successful requests MUST return an 'ETag' header [<a href="#ref-HTTP">HTTP</a>] with, in
the case of GET, the current version, in the case of PUT, the new
@@ -358,8 +353,7 @@ Table of Contents
<span>de Jong [Page 7]</span>
-</pre>
- <pre><a name="page-8" id="page-8" href="#page-8"> </a>
+</pre><pre><a href="#page-8" id="page-8" name="page-8"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -376,14 +370,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.
-<span><a name="section-7" href="#section-7">7</a>. CORS headers</span>
+<span><a href="#section-7" name="section-7">7</a>. CORS headers</span>
All responses MUST carry CORS headers [<a href="#ref-CORS">CORS</a>]. 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.
-<span><a name="section-8" href="#section-8">8</a>. Session description</span>
+<span><a href="#section-8" name="section-8">8</a>. Session description</span>
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
@@ -409,8 +403,7 @@ Table of Contents
<span>de Jong [Page 8]</span>
-</pre>
- <pre><a name="page-9" id="page-9" href="#page-9"> </a>
+</pre><pre><a href="#page-9" id="page-9" name="page-9"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -425,7 +418,7 @@ Table of Contents
* https://storage.example.com/bob/public/documents/
* https://storage.example.com/bob/public/documents/draft.txt
-<span><a name="section-9" href="#section-9">9</a>. Bearer tokens and access control</span>
+<span><a href="#section-9" name="section-9">9</a>. Bearer tokens and access control</span>
A bearer token represents one or more access scopes. These access
scopes are represented as strings of the form &lt;module&gt; &lt;level&gt;,
@@ -460,13 +453,12 @@ Table of Contents
<span>de Jong [Page 9]</span>
-</pre>
- <pre><a name="page-10" id="page-10" href="#page-10"> </a>
+</pre><pre><a href="#page-10" id="page-10" name="page-10"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
-<span><a name="section-10" href="#section-10">10</a>. Application-first bearer token issuance</span>
+<span><a href="#section-10" name="section-10">10</a>. Application-first bearer token issuance</span>
To make a remoteStorage server available as 'the remoteStorage of
&lt;account&gt; at &lt;host&gt;', exactly one link of the following format
@@ -511,8 +503,7 @@ Table of Contents
<span>de Jong [Page 10]</span>
-</pre>
- <pre><a name="page-11" id="page-11" href="#page-11"> </a>
+</pre><pre><a href="#page-11" id="page-11" name="page-11"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -542,7 +533,7 @@ Table of Contents
client_id parameter in favor of relying on the redirect_uri
parameter for client identification.
-<span><a name="section-11" href="#section-11">11</a>. Storage-first bearer token issuance</span>
+<span><a href="#section-11" name="section-11">11</a>. Storage-first bearer token issuance</span>
The provider MAY also present a dashboard to the user, where they
have some way to add open web app manifests [<a href="#ref-MANIFEST">MANIFEST</a>]. Adding a
@@ -562,8 +553,7 @@ Table of Contents
<span>de Jong [Page 11]</span>
-</pre>
- <pre><a name="page-12" id="page-12" href="#page-12"> </a>
+</pre><pre><a href="#page-12" id="page-12" name="page-12"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -601,20 +591,19 @@ Table of Contents
debug tool, thus bypassing the need for an OAuth dance. Clients
SHOULD NOT rely on this in production.
-<span><a name="section-12" href="#section-12">12</a>. Example wire transcripts</span>
+<span><a href="#section-12" name="section-12">12</a>. Example wire transcripts</span>
The following examples are not normative ("\" indicates a line was
wrapped).
-<span><a name="section-12.1" href="#section-12.1">12.1</a>. WebFinger</span>
+<span><a href="#section-12.1" name="section-12.1">12.1</a>. WebFinger</span>
In application-first, an in-browser application might issue the
following request, using XMLHttpRequest and CORS:
<span>de Jong [Page 12]</span>
-</pre>
- <pre><a name="page-13" id="page-13" href="#page-13"> </a>
+</pre><pre><a href="#page-13" id="page-13" name="page-13"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -654,7 +643,7 @@ motestorage-04",
}]
}
-<span><a name="section-12.2" href="#section-12.2">12.2</a>. OAuth dialog form</span>
+<span><a href="#section-12.2" name="section-12.2">12.2</a>. OAuth dialog form</span>
Once the in-browser application has discovered the server's OAuth
end-point, it will typically redirect the user to this URL, in
@@ -664,8 +653,7 @@ motestorage-04",
<span>de Jong [Page 13]</span>
-</pre>
- <pre><a name="page-14" id="page-14" href="#page-14"> </a>
+</pre><pre><a href="#page-14" id="page-14" name="page-14"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -685,16 +673,16 @@ unhosted.5apps.com&amp;response_type=token HTTP/1.1
&lt;title&gt;Allow access?&lt;/title&gt;
...
-<span><a name="section-12.3" href="#section-12.3">12.3</a>. OAuth dialog form submission</span>
+<span><a href="#section-12.3" name="section-12.3">12.3</a>. OAuth dialog form submission</span>
When the user submits the form, the request would look something
like this:
POST /oauth HTTP/1.1
Host: 3pp.io:4439
- Origin: <a href="https://3pp.io:4439/">https://3pp.io:4439</a>
+ Origin: <a href="https://3pp.io:4439">https://3pp.io:4439</a>
Content-Type: application/x-www-form-urlencoded
- Referer: <a href="https://3pp/">https://3pp</a>.io:4439/oauth/michiel?redirect_uri=https%3\
+ Referer: <a href="https://3pp">https://3pp</a>.io:4439/oauth/michiel?redirect_uri=https%3\
A%2F%2Fdrinks-unhosted.5apps.com%2F&amp;scope=myfavoritedrinks%3Arw&amp;client_\
id=https%3A%2F%2Fdrinks-unhosted.5apps.com&amp;response_type=token
@@ -710,13 +698,12 @@ low
Location:https://drinks-unhosted.5apps.com/#access_token=j2YnGt\
XjzzzHNjkd1CJxoQubA1o%3D&amp;token_type=bearer&amp;state=
-<span><a name="section-12.4" href="#section-12.4">12.4</a>. OPTIONS preflight</span>
+<span><a href="#section-12.4" name="section-12.4">12.4</a>. OPTIONS preflight</span>
<span>de Jong [Page 14]</span>
-</pre>
- <pre><a name="page-15" id="page-15" href="#page-15"> </a>
+</pre><pre><a href="#page-15" id="page-15" name="page-15"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -727,47 +714,46 @@ XjzzzHNjkd1CJxoQubA1o%3D&amp;token_type=bearer&amp;state=
OPTIONS /storage/michiel/myfavoritedrinks/ HTTP/1.1
Host: 3pp.io:4439
Access-Control-Request-Method: GET
- Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
Access-Control-Request-Headers: Authorization
Referer: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com/</a>
To which the server can for instance respond:
HTTP/1.1 200 OK
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
Access-Control-Allow-Methods: GET, PUT, DELETE
Access-Control-Allow-Headers: Authorization, Content-Length, Co\
ntent-Type, Origin, X-Requested-With, If-Match, If-None-Match
-<span><a name="section-12.5" href="#section-12.5">12.5</a>. Initial PUT</span>
+<span><a href="#section-12.5" name="section-12.5">12.5</a>. Initial PUT</span>
An initial PUT may contain an 'If-None-Match: *' header, like this:
PUT /storage/michiel/myfavoritedrinks/test HTTP/1.1
Host: 3pp.io:4439
Content-Length: 91
- Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
Authorization: Bearer j2YnGtXjzzzHNjkd1CJxoQubA1o=
Content-Type: application/json; charset=UTF-8
Referer: <a href="https://drinks-unhosted.5apps.com/?">https://drinks-unhosted.5apps.com/?</a>
If-None-Match: *
- {"name":"test","@context":"<a href="http://remotestorage/">http://remotestorage</a>.io/spec/modules\
+ {"name":"test","@context":"<a href="http://remotestorage">http://remotestorage</a>.io/spec/modules\
/myfavoritedrinks/drink"}
And the server may respond with either a 201 Created or a 200 OK
status:
HTTP/1.1 201 Created
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
ETag: "1382694045000"
-<span><a name="section-12.6" href="#section-12.6">12.6</a>. Subsequent PUT</span>
+<span><a href="#section-12.6" name="section-12.6">12.6</a>. Subsequent PUT</span>
<span>de Jong [Page 15]</span>
-</pre>
- <pre><a name="page-16" id="page-16" href="#page-16"> </a>
+</pre><pre><a href="#page-16" id="page-16" name="page-16"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -778,7 +764,7 @@ ntent-Type, Origin, X-Requested-With, If-Match, If-None-Match
PUT /storage/michiel/myfavoritedrinks/test HTTP/1.1
Host: 3pp.io:4439
Content-Length: 91
- Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
Authorization: Bearer j2YnGtXjzzzHNjkd1CJxoQubA1o=
Content-Type: application/json; charset=UTF-8
Referer: <a href="https://drinks-unhosted.5apps.com/?">https://drinks-unhosted.5apps.com/?</a>
@@ -790,17 +776,17 @@ e.io/spec/modules/myfavoritedrinks/drink"}
And the server may respond with a 412 Conflict or a 200 OK status:
HTTP/1.1 200 OK
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
ETag: "1382694048000"
-<span><a name="section-12.7" href="#section-12.7">12.7</a>. GET</span>
+<span><a href="#section-12.7" name="section-12.7">12.7</a>. GET</span>
A GET request would also include the bearer token, and optionally
an If-None-Match header:
GET /storage/michiel/myfavoritedrinks/test HTTP/1.1
Host: 3pp.io:4439
- Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
Authorization: Bearer j2YnGtXjzzzHNjkd1CJxoQubA1o=
Referer: <a href="https://drinks-unhosted.5apps.com/?">https://drinks-unhosted.5apps.com/?</a>
If-None-Match: "1382694045000", "1382694048000"
@@ -808,7 +794,7 @@ e.io/spec/modules/myfavoritedrinks/drink"}
And the server may respond with a 304 Not Modified status:
HTTP/1.1 304 Not Modified
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
ETag: "1382694048000"
Or a 200 OK status, plus a response body:
@@ -817,12 +803,11 @@ e.io/spec/modules/myfavoritedrinks/drink"}
<span>de Jong [Page 16]</span>
-</pre>
- <pre><a name="page-17" id="page-17" href="#page-17"> </a>
+</pre><pre><a href="#page-17" id="page-17" name="page-17"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
Content-Type: application/json; charset=UTF-8
Content-Length: 106
ETag: "1382694048000"
@@ -836,7 +821,7 @@ ge.io/spec/modules/myfavoritedrinks/drink"}
body:
HTTP/1.1 200 OK
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
Content-Type: application/ld+json
Content-Length: 171
ETag: "1382694048000"
@@ -851,15 +836,15 @@ charset=UTF-8","Content-Length":106}}}
Not Found status, and no ETag header:
HTTP/1.1 404 Not Found
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
-<span><a name="section-12.8" href="#section-12.8">12.8</a>. DELETE</span>
+<span><a href="#section-12.8" name="section-12.8">12.8</a>. DELETE</span>
A DELETE request may look like this:
DELETE /storage/michiel/myfavoritedrinks/test HTTP/1.1
Host: 3pp.io:4439
- Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
Authorization: Bearer j2YnGtXjzzzHNjkd1CJxoQubA1o=
Content-Type: application/json; charset=UTF-8
Referer: <a href="https://drinks-unhosted.5apps.com/?">https://drinks-unhosted.5apps.com/?</a>
@@ -868,18 +853,17 @@ charset=UTF-8","Content-Length":106}}}
<span>de Jong [Page 17]</span>
-</pre>
- <pre><a name="page-18" id="page-18" href="#page-18"> </a>
+</pre><pre><a href="#page-18" id="page-18" name="page-18"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
And the server may respond with a 412 Conflict or a 200 OK status:
HTTP/1.1 412 Conflict
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
ETag: "1382694048000"
-<span><a name="section-13" href="#section-13">13</a>. Distributed versioning</span>
+<span><a href="#section-13" name="section-13">13</a>. Distributed versioning</span>
This section is non-normative, and is intended to explain some of
the design choices concerning ETags and folder listings. At the
@@ -919,8 +903,7 @@ charset=UTF-8","Content-Length":106}}}
<span>de Jong [Page 18]</span>
-</pre>
- <pre><a name="page-19" id="page-19" href="#page-19"> </a>
+</pre><pre><a href="#page-19" id="page-19" name="page-19"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -942,7 +925,7 @@ charset=UTF-8","Content-Length":106}}}
but it is up to whichever client discovers a given version
conflict, to resolve it.
-<span><a name="section-14" href="#section-14">14</a>. Security Considerations</span>
+<span><a href="#section-14" name="section-14">14</a>. Security Considerations</span>
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
@@ -970,8 +953,7 @@ charset=UTF-8","Content-Length":106}}}
<span>de Jong [Page 19]</span>
-</pre>
- <pre><a name="page-20" id="page-20" href="#page-20"> </a>
+</pre><pre><a href="#page-20" id="page-20" name="page-20"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -988,7 +970,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.
-<span><a name="section-15" href="#section-15">15</a>. IANA Considerations</span>
+<span><a href="#section-15" name="section-15">15</a>. IANA Considerations</span>
This document registers the 'remotestorage' link relation, as well
as the following WebFinger properties:
@@ -998,7 +980,7 @@ charset=UTF-8","Content-Length":106}}}
* "<a href="http://tools.ietf.org/html/rfc7233">http://tools.ietf.org/html/rfc7233</a>"
* "<a href="http://remotestorage.io/spec/web-authoring">http://remotestorage.io/spec/web-authoring</a>"
-<span><a name="section-16" href="#section-16">16</a>. Acknowledgements</span>
+<span><a href="#section-16" name="section-16">16</a>. Acknowledgements</span>
The authors would like to thank everybody who contributed to the
development of this protocol, including Kenny Bentley, Javier Diaz,
@@ -1011,97 +993,95 @@ charset=UTF-8","Content-Length":106}}}
Rick van Rein, Mark Nottingham, Julian Reschke, and Markus
Lanthaler, among many others.
-<span><a name="section-17" href="#section-17">17</a>. References</span>
+<span><a href="#section-17" name="section-17">17</a>. References</span>
-<span><a name="section-17.1" href="#section-17.1">17.1</a>. Normative References</span>
+<span><a href="#section-17.1" name="section-17.1">17.1</a>. Normative References</span>
- [<a name="ref-WORDS" id="ref-WORDS">WORDS</a>]
+ [<a id="ref-WORDS" name="ref-WORDS">WORDS</a>]
Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", <a href="http://fakehost/test/bcp14">BCP 14</a>, <a href="http://fakehost/test/rfc2119">RFC 2119</a>, March 1997.
<span>de Jong [Page 20]</span>
-</pre>
- <pre><a name="page-21" id="page-21" href="#page-21"> </a>
+</pre><pre><a href="#page-21" id="page-21" name="page-21"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
- [<a name="ref-IRI" id="ref-IRI">IRI</a>]
+ [<a id="ref-IRI" name="ref-IRI">IRI</a>]
Duerst, M., "Internationalized Resource Identifiers (IRIs)",
<a href="http://fakehost/test/rfc3987">RFC 3987</a>, January 2005.
- [<a name="ref-WEBFINGER" id="ref-WEBFINGER">WEBFINGER</a>]
+ [<a id="ref-WEBFINGER" name="ref-WEBFINGER">WEBFINGER</a>]
Jones, P., Salguerio, G., Jones, M, and Smarr, J.,
"WebFinger", <a href="http://fakehost/test/rfc7033">RFC7033</a>, September 2013.
- [<a name="ref-OAUTH" id="ref-OAUTH">OAUTH</a>]
+ [<a id="ref-OAUTH" name="ref-OAUTH">OAUTH</a>]
"<a href="#section-4.2">Section 4.2</a>: Implicit Grant", in: Hardt, D. (ed), "The OAuth
2.0 Authorization Framework", <a href="http://fakehost/test/rfc6749">RFC6749</a>, October 2012.
-<span><a name="section-17.2" href="#section-17.2">17.2</a>. Informative References</span>
+<span><a href="#section-17.2" name="section-17.2">17.2</a>. Informative References</span>
- [<a name="ref-HTTPS" id="ref-HTTPS">HTTPS</a>]
+ [<a id="ref-HTTPS" name="ref-HTTPS">HTTPS</a>]
Rescorla, E., "HTTP Over TLS", <a href="http://fakehost/test/rfc2818">RFC2818</a>, May 2000.
- [<a name="ref-HTTP" id="ref-HTTP">HTTP</a>]
+ [<a id="ref-HTTP" name="ref-HTTP">HTTP</a>]
Fielding et al., "Hypertext Transfer Protocol (HTTP/1.1):
Semantics and Content", <a href="http://fakehost/test/rfc7231">RFC7231</a>, June 2014.
- [<a name="ref-COND" id="ref-COND">COND</a>]
+ [<a id="ref-COND" name="ref-COND">COND</a>]
Fielding et al., "Hypertext Transfer Protocol (HTTP/1.1):
Conditional Requests", <a href="http://fakehost/test/rfc7232">RFC7232</a>, June 2014.
- [<a name="ref-RANGE" id="ref-RANGE">RANGE</a>]
+ [<a id="ref-RANGE" name="ref-RANGE">RANGE</a>]
Fielding et al., "Hypertext Transfer Protocol (HTTP/1.1):
Conditional Requests", <a href="http://fakehost/test/rfc7233">RFC7233</a>, June 2014.
- [<a name="ref-SPDY" id="ref-SPDY">SPDY</a>]
+ [<a id="ref-SPDY" name="ref-SPDY">SPDY</a>]
Mark Belshe, Roberto Peon, "SPDY Protocol - Draft 3.1", <a href="http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1">http://</a>
<a href="http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1">www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1</a>,
September 2013.
- [<a name="ref-JSON-LD" id="ref-JSON-LD">JSON-LD</a>]
+ [<a id="ref-JSON-LD" name="ref-JSON-LD">JSON-LD</a>]
M. Sporny, G. Kellogg, M. Lanthaler, "JSON-LD 1.0", W3C
Proposed Recommendation,
<a href="http://www.w3.org/TR/2014/REC-json-ld-20140116/">http://www.w3.org/TR/2014/REC-json-ld-20140116/</a>, January 2014.
- [<a name="ref-CORS" id="ref-CORS">CORS</a>]
+ [<a id="ref-CORS" name="ref-CORS">CORS</a>]
van Kesteren, Anne (ed), "Cross-Origin Resource Sharing --
W3C Candidate Recommendation 29 January 2013",
<span>de Jong [Page 21]</span>
-</pre>
- <pre><a name="page-22" id="page-22" href="#page-22"> </a>
+</pre><pre><a href="#page-22" id="page-22" name="page-22"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
<a href="http://www.w3.org/TR/cors/">http://www.w3.org/TR/cors/</a>, January 2013.
- [<a name="ref-MANIFEST" id="ref-MANIFEST">MANIFEST</a>]
+ [<a id="ref-MANIFEST" name="ref-MANIFEST">MANIFEST</a>]
Mozilla Developer Network (ed), "App manifest -- Revision
330541", <a href="https://developer.mozilla.org/en-">https://developer.mozilla.org/en-</a>
US/Apps/Build/Manifest$revision/566677, April 2014.
- [<a name="ref-DATASTORE" id="ref-DATASTORE">DATASTORE</a>]
+ [<a id="ref-DATASTORE" name="ref-DATASTORE">DATASTORE</a>]
"WebAPI/DataStore", MozillaWiki, retrieved May 2014.
<a href="https://wiki.mozilla.org/WebAPI/DataStore#Manifest">https://wiki.mozilla.org/WebAPI/DataStore#Manifest</a>
- [<a name="ref-KERBEROS" id="ref-KERBEROS">KERBEROS</a>]
+ [<a id="ref-KERBEROS" name="ref-KERBEROS">KERBEROS</a>]
C. Neuman et al., "The Kerberos Network Authentication Service
(V5)", <a href="http://fakehost/test/rfc4120">RFC4120</a>, July 2005.
- [<a name="ref-BEARER" id="ref-BEARER">BEARER</a>]
+ [<a id="ref-BEARER" name="ref-BEARER">BEARER</a>]
M. Jones, D. Hardt, "The OAuth 2.0 Authorization Framework:
Bearer Token Usage", <a href="http://fakehost/test/rfc6750">RFC6750</a>, October 2012.
- []
+ [<a id="ref-AUTHORING" name="ref-AUTHORING">AUTHORING</a>]
"Using remoteStorage for web authoring", reSite wiki, retrieved
September 2014. <a href="https://github.com/michielbdejong/resite/wiki">https://github.com/michielbdejong/resite/wiki</a>
/Using-remoteStorage-for-web-authoring
-<span><a name="section-18" href="#section-18">18</a>. Authors' addresses</span>
+<span><a href="#section-18" name="section-18">18</a>. Authors' addresses</span>
Michiel B. de Jong
IndieHosters
@@ -1124,6 +1104,7 @@ charset=UTF-8","Content-Length":106}}}
de Jong [Page 22]
-</pre><br/> <span><small><small>Html markup produced by rfcmarkup 1.111, available from
+</pre><br></br><span><small><small>Html markup produced by rfcmarkup 1.111, available from
<a href="https://tools.ietf.org/tools/rfcmarkup/">https://tools.ietf.org/tools/rfcmarkup/</a>
-</small></small></span> </div>
+</small></small></span>
+</div> \ 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 db2d56b..30597de 100644
--- a/test/test-pages/keep-images/expected.html
+++ b/test/test-pages/keep-images/expected.html
@@ -1,194 +1,381 @@
-<div id="readability-page-1" class="page">
- <div>
- <div>
- <section name="ef8c">
- <div>
- <div>
- <figure name="b9ad" id="b9ad">
- <div>
- <p><img data-image-id="1*sLDnS1UWEFIS33uLMxq3cw.jpeg" data-width="2100" data-height="1402" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*sLDnS1UWEFIS33uLMxq3cw.jpeg" /> </p>
- </div>
- </figure>
- </div>
- <div>
- <h4 name="9736" id="9736" data-align="center">Welcome to DoctorX’s Barcelona lab, where the drugs you bought online are tested for safety and purity. No questions asked.</h4>
- <figure name="7417" id="7417">
- <div>
- <p><img data-image-id="1*3vIhkoHIzcxvUdijoCVx6w.png" data-width="1200" data-height="24" data-action="zoom" data-action-value="1*3vIhkoHIzcxvUdijoCVx6w.png" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*3vIhkoHIzcxvUdijoCVx6w.png" /> </p>
- </div>
- </figure>
- <p name="8a83" id="8a83">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.</p>
- <p name="b675" id="b675">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 <a href="http://en.wikipedia.org/wiki/MDMA" data-href="http://en.wikipedia.org/wiki/MDMA" rel="nofollow">MDMA</a> (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.</p>
- <p name="3c0b" id="3c0b">“Here we have speed, MDMA, cocaine, pills,” Lladanosa says, pointing to vials full of red, green, blue and clear solutions sitting in labeled boxes.</p>
- </div>
- <div>
- <figure name="c4e6" id="c4e6">
- <div>
- <p><img data-image-id="1*4gN1-fzOwCniw-DbqQjDeQ.jpeg" data-width="2100" data-height="1402" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*4gN1-fzOwCniw-DbqQjDeQ.jpeg" /> </p>
- </div>
- <figcaption>Cristina Gil Lladanosa, at the Barcelona testing lab | photo by Joan Bardeletti</figcaption>
- </figure>
- </div>
- <div>
- <p name="7a54" id="7a54">Since 2011, with the launch of <a href="http://en.wikipedia.org/wiki/Silk_Road_%28marketplace%29" data-href="http://en.wikipedia.org/wiki/Silk_Road_%28marketplace%29" rel="nofollow">Silk Road</a>, 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 <a href="http://energycontrol.org/" data-href="http://energycontrol.org/" rel="nofollow">Energy Control</a>, 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.</p>
- <p name="4395" id="4395">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.</p>
- <p name="0c18" id="0c18">After weighing out the crystals, aggressively mixing it with methanol until dissolved, and delicately pouring the liquid into a tiny brown bottle, Lladanosa, a petite woman who is nearly engulfed by her lab coat, is now ready to test the sample. She loads a series of three trays on top of a large white appliance sitting on a table, called a gas chromatograph (GC). A jungle of thick pipes hang from the lab’s ceiling behind it.</p>
- </div>
- <div>
- <figure name="559c" id="559c">
- <div>
- <p><img data-image-id="1*2KPmZkIBUrhps-2uwDvYFQ.jpeg" data-width="2100" data-height="1402" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*2KPmZkIBUrhps-2uwDvYFQ.jpeg" /> </p>
- </div>
- <figcaption>Photo by Joan Bardeletti</figcaption>
- </figure>
- </div>
- <div>
- <p name="1549" id="1549">“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.</p>
- <p name="5d0f" id="5d0f">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.</p>
- </div>
- <div>
- <figure name="d6aa" id="d6aa">
- <div>
- <p><img data-image-id="1*PU40bbbox2Ompc5I3RE99A.jpeg" data-width="2013" data-height="1241" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*PU40bbbox2Ompc5I3RE99A.jpeg" /> </p>
- </div>
- <figcaption>Photo by Joan Bardeletti</figcaption>
- </figure>
- </div>
- <div>
- <p name="15e0" id="15e0">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.</p>
- <p name="2574" id="2574">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.”</p>
- <p name="2644" id="2644">About a week after testing, those results are sent in a PDF to an email address provided by the anonymous client.</p>
- <p name="9f91" id="9f91">“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.</p>
- <figure name="b821" id="b821">
- <div>
- <p><img data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" data-height="24" data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png" /> </p>
- </div>
- </figure>
- <p name="39a6" id="39a6">The deep web drug lab is the brainchild of Fernando Caudevilla, a Spanish physician who is better known as “DoctorX” on the deep web, a nickname given to him by his Energy Control co-workers because of his earlier writing about the history, risks and recreational culture of MDMA. In the physical world, Caudevilla has worked for over a decade with Energy Control on various harm reduction focused projects, most of which have involved giving Spanish illegal drug users medical guidance, and often writing leaflets about the harms of certain substances.</p>
- </div>
- <div>
- <figure name="eebc" id="eebc">
- <div>
- <p><img data-image-id="1*mKvUNOAVQxl6atCbxbCZsg.jpeg" data-width="2100" data-height="1241" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*mKvUNOAVQxl6atCbxbCZsg.jpeg" /> </p>
- </div>
- <figcaption>Fernando Caudevilla, AKA DoctorX. Photo: Joseph Cox</figcaption>
- </figure>
- </div>
- <div>
- <p name="c099" id="c099">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 <a href="http://web.archive.org/web/20131015051405/https://dkn255hz262ypmii.onion.to/index.php?topic=147607.0" data-href="http://web.archive.org/web/20131015051405/https://dkn255hz262ypmii.onion.to/index.php?topic=147607.0" rel="nofollow">introductory post</a>, 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.”</p>
- <p name="ff1d" id="ff1d">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.</p>
- <p name="1f35" id="1f35">“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 <a href="http://motherboard.vice.com/read/one-of-the-darknets-biggest-markets-may-have-just-stole-all-its-users-bitcoin" data-href="http://motherboard.vice.com/read/one-of-the-darknets-biggest-markets-may-have-just-stole-all-its-users-bitcoin" rel="nofollow">pulled a scam</a>, shutting the market down and escaping with an estimated $12 million worth of Bitcoin.</p>
- <p name="b20f" id="b20f">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.</p>
- <p name="f739" id="f739">“I thought, we are doing this in Spain, why don’t we do an international drug testing service?” Caudevilla told me when I visited the other Energy Control lab, in Madrid. Caudevilla, a stocky character with ear piercings and short, shaved hair, has eyes that light up whenever he discusses the world of the deep web. Later, via email, he elaborated that it was not a hard sell. “It was not too hard to convince them,” he wrote me. Clearly, Energy Control believed that the reputation he had earned as an unbiased medical professional on the deep web might carry over to the drug analysis service, where one needs to establish “credibility, trustworthiness, [and] transparency,” Caudevilla said. “We could not make mistakes,” he added.</p>
- </div>
- <div>
- <figure name="4058" id="4058">
- <div>
- <p><img data-image-id="1*knT10_FNVUmqQIBLnutmzQ.jpeg" data-width="4400" data-height="3141" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*knT10_FNVUmqQIBLnutmzQ.jpeg" /> </p>
- </div>
- <figcaption>Photo: Joseph Cox</figcaption>
- </figure>
- </div>
- <div>
- <figure name="818c" id="818c">
- <div>
- <p><img data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" data-height="24" data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png" /> </p>
- </div>
- </figure>
- <p name="7b5e" id="7b5e">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.</p>
- <p name="0f0e" id="0f0e">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.</p>
- <p name="e002" id="e002">“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.</p>
- <p name="db1b" id="db1b">By the time of my visit in February, Energy Control had received over 150 samples from the deep web and have been receiving more at a rate of between 4 and 8 a week. Traditional drugs, such as cocaine and MDMA, make up about 70 percent of the samples tested, but the Barcelona lab has also received samples of the prescription pill codeine, research chemicals and synthetic cannabinoids, and even pills of Viagra.</p>
- </div>
- <div>
- <figure name="b885" id="b885">
- <div>
- <p><img data-image-id="1*Vr61dyCTRwk6CemmVF8YAQ.jpeg" data-width="2100" data-height="1402" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*Vr61dyCTRwk6CemmVF8YAQ.jpeg" /> </p>
- </div>
- <figcaption>Photo by Joan Bardeletti</figcaption>
- </figure>
- </div>
- <div>
- <p name="e76f" id="e76f">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.</p>
- <p name="5352" id="5352">“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 <a href="http://www.unodc.org/documents/wdr2014/Cocaine_2014_web.pdf" data-href="http://www.unodc.org/documents/wdr2014/Cocaine_2014_web.pdf" rel="nofollow">United Nations Office on Drugs and Crime World Drug Report 2014</a>, 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.”</p>
- <p name="a71c" id="a71c">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.</p>
- <p name="cb5b" id="cb5b">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.”</p>
- <p name="d80d" id="d80d">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.</p>
- <p name="36de" id="36de">“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%.”</p>
- </div>
- <div>
- <figure name="8544" id="8544">
- <div>
- <p><img data-image-id="1*a-1_13xE6_ErQ-QSlz6myw.jpeg" data-width="2100" data-height="1402" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*a-1_13xE6_ErQ-QSlz6myw.jpeg" /> </p>
- </div>
- <figcaption>Photo by Joan Bardeletti</figcaption>
- </figure>
- </div>
- <div>
- <figure name="d521" id="d521">
- <div>
- <p><img data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" data-height="24" data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png" /> </p>
- </div>
- </figure>
- <p name="126b" id="126b">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 <a href="http://www.independent.co.uk/news/uk/crime/teenager-patrick-mcmullen-who-died-while-on-skype-had-bought-drugs-from-silk-road-8942329.html" data-href="http://www.independent.co.uk/news/uk/crime/teenager-patrick-mcmullen-who-died-while-on-skype-had-bought-drugs-from-silk-road-8942329.html" rel="nofollow">Patrick McMullen,</a> 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 <em>The Independent</em> “You never know the purity of what you are taking and you can easily come unstuck.”</p>
- <p name="5e9e" id="5e9e">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.</p>
- <p name="19a6" id="19a6">“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.”</p>
- <p name="9fef" id="9fef">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 <a href="http://www.ncbi.nlm.nih.gov/pubmed/22127712" data-href="http://www.ncbi.nlm.nih.gov/pubmed/22127712" rel="nofollow">documented in a study</a> 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.</p>
- <p name="7886" id="7886">“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.”</p>
- <p name="18d3" id="18d3">“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.”</p>
- </div>
- <div>
- <figure name="552a" id="552a">
- <div>
- <p><img data-image-id="1*IWXhtSsVv0gNnCwnDEXk-Q.jpeg" data-width="2100" data-height="1192" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*IWXhtSsVv0gNnCwnDEXk-Q.jpeg" /> </p>
- </div>
- <figcaption>Photo by Joan Bardeletti</figcaption>
- </figure>
- </div>
- <div>
- <p name="839a" id="839a">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.”</p>
- <p name="18dc" id="18dc">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. <a href="https://blockchain.info/address/1Mi6VjMFqjcD48FPV7cnPB24MAtQQenRy3" data-href="https://blockchain.info/address/1Mi6VjMFqjcD48FPV7cnPB24MAtQQenRy3" rel="nofollow">He set up a Bitcoin wallet</a>, 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.</p>
- <p name="dcbd" id="dcbd">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.</p>
- </div>
- <div>
- <figure name="9d32" id="9d32">
- <div>
- <p><img data-image-id="1*NGcrjfkV0l37iQH2uyYjEw.jpeg" data-width="1368" data-height="913" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*NGcrjfkV0l37iQH2uyYjEw.jpeg" /> </p>
- </div>
- <figcaption>Photo by Joan Bardeletti</figcaption>
- </figure>
- </div>
- <div>
- <p name="bff6" id="bff6">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.”</p>
- <p name="bb78" id="bb78">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.</p>
- <p name="5638" id="5638">But the spirit is contagious: elmo666, the other deep web user testing cocaine, originally kept the results of the drug tests to himself, but he, too, saw a benefit to distributing the data. “It is clear that it is a useful service to other users, keeping vendors honest and drugs (and their users) safe,” he told me. He started to report his findings to others on the forums, and then created a thread with summaries of the test results, as well as comments from the vendors if they provided it. Other users were soon basing their decisions on what to buy on elmo666‘s tests.</p>
- <p name="de75" id="de75">“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.</p>
- <p name="6b72" id="6b72">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.)</p>
- <p name="b008" id="b008">Meanwhile, some in the purchasing community are arguing that those running markets on the deep web should be providing quality control themselves. PlutoPete told me over the phone that he had been in discussions about this with Dread Pirate Roberts, the pseudonymous owner of the original Silk Road site. “We [had been] talking about that on a more organized basis on Silk Road 1, doing lots of anonymous buys to police each category. But of course they took the thing [Silk Road] down before we got it properly off the ground,” he lamented.</p>
- <p name="49c8" id="49c8">But perhaps it is best that the users, those who are actually consuming the drugs, remain in charge of shaming dealers and warning each other. “It’s our responsibility to police the market based on reviews and feedback,” elmo666 wrote in an Evolution forum post. It seems that in the lawless space of the deep web, where everything from child porn to weapons are sold openly, users have cooperated in an organic display of self-regulation to stamp out those particular batches of drugs that are more likely to harm users.</p>
- <p name="386d" id="386d">“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.</p>
- </div>
- <div>
- <figure name="890b" id="890b">
- <div>
- <p><img data-image-id="1*WRlKt3q3mt7utmwxcbl3sQ.jpeg" data-width="2100" data-height="1373" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*WRlKt3q3mt7utmwxcbl3sQ.jpeg" /> </p>
- </div>
- <figcaption>Photo by Joan Bardeletti</figcaption>
- </figure>
- </div>
- <div>
- <p name="b109" id="b109">“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.</p>
- <p name="e3a4" id="e3a4">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.</p>
- <figure name="31cf" id="31cf">
- <div>
- <p><img data-image-id="1*320_4I0lxbn5x3bx4XPI5Q.png" data-width="1200" data-height="24" data-action="zoom" data-action-value="1*320_4I0lxbn5x3bx4XPI5Q.png" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*320_4I0lxbn5x3bx4XPI5Q.png" /> </p>
- </div>
- </figure>
- <p name="9b87" id="9b87" data-align="center"><em>Top photo by Joan Bardeletti</em> </p>
- <p name="c30a" id="c30a" data-align="center">Follow Backchannel: <a href="https://twitter.com/backchnnl" data-href="https://twitter.com/backchnnl" rel="nofollow"><em>Twitter</em></a> <em>|</em><a href="https://www.facebook.com/pages/Backchannel/1488568504730671" data-href="https://www.facebook.com/pages/Backchannel/1488568504730671" rel="nofollow"><em>Facebook</em></a> </p>
- </div>
- </div>
- </section>
- </div>
- </div>
-</div> \ No newline at end of file
+<div>
+ <div>
+ <section name="ef8c">
+ <div>
+ <div>
+ <figure id="b9ad" name="b9ad"><div>
+
+ <p><img data-height="1402" data-image-id="1*sLDnS1UWEFIS33uLMxq3cw.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*sLDnS1UWEFIS33uLMxq3cw.jpeg"></img></p></div>
+ </figure></div>
+ <div>
+
+
+ <h4 data-align="center" id="9736" name="9736">Welcome to DoctorX’s Barcelona lab, where the drugs you bought online are tested for safety and purity. No questions asked.</h4>
+
+ <figure id="7417" name="7417"><div>
+
+ <p><img data-action="zoom" data-action-value="1*3vIhkoHIzcxvUdijoCVx6w.png" data-height="24" data-image-id="1*3vIhkoHIzcxvUdijoCVx6w.png" data-width="1200" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*3vIhkoHIzcxvUdijoCVx6w.png"></img></p></div>
+ </figure><p id="8a83" name="8a83">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.</p>
+ <p id="b675" name="b675">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 <a data-href="http://en.wikipedia.org/wiki/MDMA" href="http://en.wikipedia.org/wiki/MDMA" rel="nofollow">MDMA</a> (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.</p>
+ <p id="3c0b" name="3c0b">“Here we have speed, MDMA, cocaine, pills,” Lladanosa says, pointing to
+ vials full of red, green, blue and clear solutions sitting in labeled boxes.</p>
+ </div>
+ <div>
+ <figure id="c4e6" name="c4e6"><div>
+
+ <p><img data-height="1402" data-image-id="1*4gN1-fzOwCniw-DbqQjDeQ.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*4gN1-fzOwCniw-DbqQjDeQ.jpeg"></img></p></div>
+ <figcaption>Cristina Gil Lladanosa, at the Barcelona testing lab | photo by Joan Bardeletti</figcaption></figure></div>
+ <div>
+ <p id="7a54" name="7a54">Since 2011, with the launch of <a data-href="http://en.wikipedia.org/wiki/Silk_Road_%28marketplace%29" href="http://en.wikipedia.org/wiki/Silk_Road_%28marketplace%29" rel="nofollow">Silk Road</a>, 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 <a data-href="http://energycontrol.org/" href="http://energycontrol.org/" rel="nofollow">Energy Control</a>,
+ 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.</p>
+ <p id="4395" name="4395">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.</p>
+ <p id="0c18" name="0c18">After weighing out the crystals, aggressively mixing it with methanol
+ until dissolved, and delicately pouring the liquid into a tiny brown bottle,
+ Lladanosa, a petite woman who is nearly engulfed by her lab coat, is now
+ ready to test the sample. She loads a series of three trays on top of a
+ large white appliance sitting on a table, called a gas chromatograph (GC).
+ A jungle of thick pipes hang from the lab’s ceiling behind it.</p>
+ </div>
+ <div>
+ <figure id="559c" name="559c"><div>
+
+ <p><img data-height="1402" data-image-id="1*2KPmZkIBUrhps-2uwDvYFQ.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*2KPmZkIBUrhps-2uwDvYFQ.jpeg"></img></p></div>
+ <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
+ <div>
+ <p id="1549" name="1549">“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.</p>
+ <p id="5d0f" name="5d0f">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.</p>
+ </div>
+ <div>
+ <figure id="d6aa" name="d6aa"><div>
+
+ <p><img data-height="1241" data-image-id="1*PU40bbbox2Ompc5I3RE99A.jpeg" data-width="2013" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*PU40bbbox2Ompc5I3RE99A.jpeg"></img></p></div>
+ <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
+ <div>
+ <p id="15e0" name="15e0">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.</p>
+ <p id="2574" name="2574">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.”</p>
+ <p id="2644" name="2644">About a week after testing, those results are sent in a PDF to an email
+ address provided by the anonymous client.</p>
+ <p id="9f91" name="9f91">“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.</p>
+ <figure id="b821" name="b821"><div>
+
+ <p><img data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" data-height="24" data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png"></img></p></div>
+ </figure><p id="39a6" name="39a6">The deep web drug lab is the brainchild of Fernando Caudevilla, a Spanish
+ physician who is better known as “DoctorX” on the deep web, a nickname
+ given to him by his Energy Control co-workers because of his earlier writing
+ about the history, risks and recreational culture of MDMA. In the physical
+ world, Caudevilla has worked for over a decade with Energy Control on various
+ harm reduction focused projects, most of which have involved giving Spanish
+ illegal drug users medical guidance, and often writing leaflets about the
+ harms of certain substances.</p>
+ </div>
+ <div>
+ <figure id="eebc" name="eebc"><div>
+
+ <p><img data-height="1241" data-image-id="1*mKvUNOAVQxl6atCbxbCZsg.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*mKvUNOAVQxl6atCbxbCZsg.jpeg"></img></p></div>
+ <figcaption>Fernando Caudevilla, AKA DoctorX. Photo: Joseph Cox</figcaption></figure></div>
+ <div>
+ <p id="c099" name="c099">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 <a data-href="http://web.archive.org/web/20131015051405/https://dkn255hz262ypmii.onion.to/index.php?topic=147607.0" href="http://web.archive.org/web/20131015051405/https://dkn255hz262ypmii.onion.to/index.php?topic=147607.0" rel="nofollow">introductory post</a>,
+ 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.”</p>
+ <p id="ff1d" name="ff1d">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.</p>
+ <p id="1f35" name="1f35">“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 <a data-href="http://motherboard.vice.com/read/one-of-the-darknets-biggest-markets-may-have-just-stole-all-its-users-bitcoin" href="http://motherboard.vice.com/read/one-of-the-darknets-biggest-markets-may-have-just-stole-all-its-users-bitcoin" rel="nofollow">pulled a scam</a>,
+ shutting the market down and escaping with an estimated $12 million worth
+ of Bitcoin.</p>
+ <p id="b20f" name="b20f">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.</p>
+ <p id="f739" name="f739">“I thought, we are doing this in Spain, why don’t we do an international
+ drug testing service?” Caudevilla told me when I visited the other Energy
+ Control lab, in Madrid. Caudevilla, a stocky character with ear piercings
+ and short, shaved hair, has eyes that light up whenever he discusses the
+ world of the deep web. Later, via email, he elaborated that it was not
+ a hard sell. “It was not too hard to convince them,” he wrote me. Clearly,
+ Energy Control believed that the reputation he had earned as an unbiased
+ medical professional on the deep web might carry over to the drug analysis
+ service, where one needs to establish “credibility, trustworthiness, [and]
+ transparency,” Caudevilla said. “We could not make mistakes,” he added.</p>
+ </div>
+ <div>
+ <figure id="4058" name="4058"><div>
+
+ <p><img data-height="3141" data-image-id="1*knT10_FNVUmqQIBLnutmzQ.jpeg" data-width="4400" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*knT10_FNVUmqQIBLnutmzQ.jpeg"></img></p></div>
+ <figcaption>Photo: Joseph Cox</figcaption></figure></div>
+ <div>
+ <figure id="818c" name="818c"><div>
+
+ <p><img data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" data-height="24" data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png"></img></p></div>
+ </figure><p id="7b5e" name="7b5e">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.</p>
+ <p id="0f0e" name="0f0e">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.</p>
+ <p id="e002" name="e002">“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.</p>
+ <p id="db1b" name="db1b">By the time of my visit in February, Energy Control had received over
+ 150 samples from the deep web and have been receiving more at a rate of
+ between 4 and 8 a week. Traditional drugs, such as cocaine and MDMA, make
+ up about 70 percent of the samples tested, but the Barcelona lab has also
+ received samples of the prescription pill codeine, research chemicals and
+ synthetic cannabinoids, and even pills of Viagra.</p>
+ </div>
+ <div>
+ <figure id="b885" name="b885"><div>
+
+ <p><img data-height="1402" data-image-id="1*Vr61dyCTRwk6CemmVF8YAQ.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*Vr61dyCTRwk6CemmVF8YAQ.jpeg"></img></p></div>
+ <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
+ <div>
+ <p id="e76f" name="e76f">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.</p>
+ <p id="5352" name="5352">“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 <a data-href="http://www.unodc.org/documents/wdr2014/Cocaine_2014_web.pdf" href="http://www.unodc.org/documents/wdr2014/Cocaine_2014_web.pdf" rel="nofollow">United Nations Office on Drugs and Crime World Drug Report 2014</a>,
+ 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.”</p>
+ <p id="a71c" name="a71c">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.</p>
+ <p id="cb5b" name="cb5b">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.”</p>
+ <p id="d80d" name="d80d">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.</p>
+ <p id="36de" name="36de">“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%.”</p>
+ </div>
+ <div>
+ <figure id="8544" name="8544"><div>
+
+ <p><img data-height="1402" data-image-id="1*a-1_13xE6_ErQ-QSlz6myw.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*a-1_13xE6_ErQ-QSlz6myw.jpeg"></img></p></div>
+ <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
+ <div>
+ <figure id="d521" name="d521"><div>
+
+ <p><img data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" data-height="24" data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png"></img></p></div>
+ </figure><p id="126b" name="126b">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 <a data-href="http://www.independent.co.uk/news/uk/crime/teenager-patrick-mcmullen-who-died-while-on-skype-had-bought-drugs-from-silk-road-8942329.html" href="http://www.independent.co.uk/news/uk/crime/teenager-patrick-mcmullen-who-died-while-on-skype-had-bought-drugs-from-silk-road-8942329.html" rel="nofollow">Patrick McMullen,</a> 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 <em>The Independent</em> “You
+ never know the purity of what you are taking and you can easily come unstuck.”</p>
+ <p id="5e9e" name="5e9e">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.</p>
+ <p id="19a6" name="19a6">“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.”</p>
+ <p id="9fef" name="9fef">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 <a data-href="http://www.ncbi.nlm.nih.gov/pubmed/22127712" href="http://www.ncbi.nlm.nih.gov/pubmed/22127712" rel="nofollow">documented in a study</a> 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.</p>
+ <p id="7886" name="7886">“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.”</p>
+ <p id="18d3" name="18d3">“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.”</p>
+ </div>
+ <div>
+ <figure id="552a" name="552a"><div>
+
+ <p><img data-height="1192" data-image-id="1*IWXhtSsVv0gNnCwnDEXk-Q.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*IWXhtSsVv0gNnCwnDEXk-Q.jpeg"></img></p></div>
+ <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
+ <div>
+ <p id="839a" name="839a">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.”</p>
+ <p id="18dc" name="18dc">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.
+ <a data-href="https://blockchain.info/address/1Mi6VjMFqjcD48FPV7cnPB24MAtQQenRy3" href="https://blockchain.info/address/1Mi6VjMFqjcD48FPV7cnPB24MAtQQenRy3" rel="nofollow">He set up a Bitcoin wallet</a>, 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.</p>
+ <p id="dcbd" name="dcbd">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.</p>
+ </div>
+ <div>
+ <figure id="9d32" name="9d32"><div>
+
+ <p><img data-height="913" data-image-id="1*NGcrjfkV0l37iQH2uyYjEw.jpeg" data-width="1368" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*NGcrjfkV0l37iQH2uyYjEw.jpeg"></img></p></div>
+ <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
+ <div>
+ <p id="bff6" name="bff6">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.”</p>
+ <p id="bb78" name="bb78">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.</p>
+ <p id="5638" name="5638">But the spirit is contagious: elmo666, the other deep web user testing
+ cocaine, originally kept the results of the drug tests to himself, but
+ he, too, saw a benefit to distributing the data. “It is clear that it is
+ a useful service to other users, keeping vendors honest and drugs (and
+ their users) safe,” he told me. He started to report his findings to others
+ on the forums, and then created a thread with summaries of the test results,
+ as well as comments from the vendors if they provided it. Other users were
+ soon basing their decisions on what to buy on elmo666‘s tests.</p>
+ <p id="de75" name="de75">“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.</p>
+ <p id="6b72" name="6b72">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.)</p>
+ <p id="b008" name="b008">Meanwhile, some in the purchasing community are arguing that those running
+ markets on the deep web should be providing quality control themselves.
+ PlutoPete told me over the phone that he had been in discussions about
+ this with Dread Pirate Roberts, the pseudonymous owner of the original
+ Silk Road site. “We [had been] talking about that on a more organized basis
+ on Silk Road 1, doing lots of anonymous buys to police each category. But
+ of course they took the thing [Silk Road] down before we got it properly
+ off the ground,” he lamented.</p>
+ <p id="49c8" name="49c8">But perhaps it is best that the users, those who are actually consuming
+ the drugs, remain in charge of shaming dealers and warning each other.
+ “It’s our responsibility to police the market based on reviews and feedback,”
+ elmo666 wrote in an Evolution forum post. It seems that in the lawless
+ space of the deep web, where everything from child porn to weapons are
+ sold openly, users have cooperated in an organic display of self-regulation
+ to stamp out those particular batches of drugs that are more likely to
+ harm users.</p>
+ <p id="386d" name="386d">“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.</p>
+ </div>
+ <div>
+ <figure id="890b" name="890b"><div>
+
+ <p><img data-height="1373" data-image-id="1*WRlKt3q3mt7utmwxcbl3sQ.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*WRlKt3q3mt7utmwxcbl3sQ.jpeg"></img></p></div>
+ <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
+ <div>
+ <p id="b109" name="b109">“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.</p>
+ <p id="e3a4" name="e3a4">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.</p>
+ <figure id="31cf" name="31cf"><div>
+
+ <p><img data-action="zoom" data-action-value="1*320_4I0lxbn5x3bx4XPI5Q.png" data-height="24" data-image-id="1*320_4I0lxbn5x3bx4XPI5Q.png" data-width="1200" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*320_4I0lxbn5x3bx4XPI5Q.png"></img></p></div>
+ </figure><p data-align="center" id="9b87" name="9b87"><em>Top photo by Joan Bardeletti</em>
+ </p>
+ <p data-align="center" id="c30a" name="c30a">Follow Backchannel: <a data-href="https://twitter.com/backchnnl" href="https://twitter.com/backchnnl" rel="nofollow"><em>Twitter</em></a>
+ <em>|</em><a data-href="https://www.facebook.com/pages/Backchannel/1488568504730671" href="https://www.facebook.com/pages/Backchannel/1488568504730671" rel="nofollow"><em>Facebook</em></a>
+ </p>
+ </div>
+ </div>
+ </section></div>
+ </div> \ No newline at end of file
diff --git a/test/test-pages/links-in-tables/expected.html b/test/test-pages/links-in-tables/expected.html
index 4fe422a..12777fc 100644
--- a/test/test-pages/links-in-tables/expected.html
+++ b/test/test-pages/links-in-tables/expected.html
@@ -1,4 +1,4 @@
-<div id="readability-page-1" class="page">
+
<div id="post-body-2701400044422363572" itemprop="articlesBody">
<p> <em>Posted by Andrew Hayden, Software Engineer on Google Play</em> </p>
<p> Android users are downloading tens of billions of apps and games on Google Play. We're also seeing developers update their apps frequently in order to provide users with great content, improve security, and enhance the overall user experience. It takes a lot of data to download these updates and we know users care about how much data their devices are using. Earlier this year, we announced that we started using <a href="https://android-developers.blogspot.com/2016/07/improvements-for-smaller-app-downloads.html">the
diff --git a/test/test-pages/msn/expected-metadata.json b/test/test-pages/msn/expected-metadata.json
index e4fff27..4916e95 100644
--- a/test/test-pages/msn/expected-metadata.json
+++ b/test/test-pages/msn/expected-metadata.json
@@ -1,5 +1,5 @@
{
"Title": "Nintendo's first iPhone game will launch in December for $10",
- "Author": "Alex Perry",
+ "Author": "Alex Perry\n \n 1 day ago",
"Excerpt": "Nintendo and Apple shocked the world earlier this year by announcing \"Super Mario Run,\" the legendary gaming company's first foray into mobile gaming.&nbsp;"
}
diff --git a/test/test-pages/qq/expected.html b/test/test-pages/qq/expected.html
index d8de933..557cc8a 100644
--- a/test/test-pages/qq/expected.html
+++ b/test/test-pages/qq/expected.html
@@ -1,4 +1,4 @@
-<div id="readability-page-1" class="page">
+
<div accesskey="3" tabindex="-1">
<div id="Cnt-Main-Article-QQ" bosszone="content">
<div>
diff --git a/test/test-pages/remove-extra-brs/expected.html b/test/test-pages/remove-extra-brs/expected.html
index f731d75..71ff530 100644
--- a/test/test-pages/remove-extra-brs/expected.html
+++ b/test/test-pages/remove-extra-brs/expected.html
@@ -1,4 +1,4 @@
-<div id="readability-page-1" class="page">
+
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
diff --git a/test/test-pages/table-style-attributes/expected.html b/test/test-pages/table-style-attributes/expected.html
index 48d1851..75a5b35 100644
--- a/test/test-pages/table-style-attributes/expected.html
+++ b/test/test-pages/table-style-attributes/expected.html
@@ -1,44 +1,57 @@
-<div id="readability-page-1" class="page">
- <p> <span size="+3"><b>linux usability
- <span size="4"><br/>...or, why do I bother.</span></b>
- </span><br/> © 2002, 2003 <a href="mailto:/dev/[email protected]?subject=Please%20delete%20this%20message%20without%20reading%20it.">Jamie Zawinski</a> </p>
+<div>
+ <p>
+ <span size="+3"><b>linux usability
+ <span size="4"><br></br>...or, why do I bother.</span></b></span><br></br> © 2002, 2003
+ <a href="mailto:/dev/[email protected]?subject=Please%20delete%20this%20message%20without%20reading%20it.">Jamie Zawinski</a> </p>
+
+
<div>
- <table>
- <tbody>
- <tr>
- <td>
+ <table><tbody><tr><td>
<p> 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. </p>
<p> Then in January, the jackasses over at Slashdot <a href="http://slashdot.org/article.pl?sid=03/01/24/1440207">posted</a> 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 <i>rant</i> 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. </p>
<p> 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: </p>
- <ul>
- <li> "Right on! I had exactly the same experience! Thank you for putting it into words." <i>(This was about 1/3 of the replies.)</i> </li>
- <li> "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." <i>(Oddly, all of these messages used the word</i> `clearly' <i>repeatedly.)</i> </li>
- <li> "If you don't like it, fix it yourself." </li>
- <li> "Netscape sucks! XEmacs sucks! You suck! I never liked you anyway! And you swear too much!" </li>
- <li> "How dare you criticize someone else's work! You got it for free! You should be on your knees thanking them for wasting your time!" </li>
- <li> "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!" </li>
- <li> "It's your fault for using Red Hat! You should be using Debian/<wbr/>Mandrake/<wbr/>Gentoo instead!" </li>
+
+ <ul><li> "Right on! I had exactly the same experience! Thank you for putting it into words." <i>(This was about 1/3 of the replies.)</i>
+
+ </li>
+ <li> "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." <i>(Oddly, all of these messages used the word</i> `clearly' <i>repeatedly.)</i>
+
+ </li>
+ <li> "If you don't like it, fix it yourself."
+
+ </li>
+ <li> "Netscape sucks! XEmacs sucks! You suck! I never liked you anyway! And you swear too much!"
+
+ </li>
+ <li> "How dare you criticize someone else's work! You got it for free! You should be on your knees thanking them for wasting your time!"
+
+ </li>
+ <li> "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!"
+
+ </li>
+ <li> "It's your fault for using Red Hat! You should be using Debian/<wbr></wbr>Mandrake/<wbr></wbr>Gentoo instead!"
+
+ </li>
<li> "Red Hat 7.2 is totally obsolete! It's almost 14 months old! What were you expecting!" </li>
- </ul>
- </td>
+ </ul></td>
<td>
<p> 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: </p>
- <ul>
- <ul type="A">
- <li> I've heard it before; and </li>
+
+ <ul><ul type="A"><li> I've heard it before; and </li>
<li> I didn't care the first time. </li>
- </ul>
- </ul>
- <p> 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. </p>
+ </ul></ul><p> 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.
+
+
+ </p>
</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p> <span size="+3"><b>that said...</b></span> </p>
+ </tr></tbody></table></div>
+
+ <p>
+ <span size="+3"><b>that said...</b></span>
+ </p>
<p> 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. </p>
- <ul> (Really my eventual goal is to be able to <i>create</i> video on Linux, but I figured I'd start small, and see if I could just get <i>playback</i> working before trying something that is undoubtedly ten thousand times harder.) </ul>
- <p> I finally found <a href="http://mirrors.sctpc.com/dominik/linux/pkgs/mplayer/">RPMs</a> of <a href="http://www.mplayerhq.hu/">mplayer</a> 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." <i>Why do people do this?</i> 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
+
+ <ul> (Really my eventual goal is to be able to <i>create</i> video on Linux, but I figured I'd start small, and see if I could just get <i>playback</i> working before trying something that is undoubtedly ten thousand times harder.) </ul><p> I finally found <a href="http://mirrors.sctpc.com/dominik/linux/pkgs/mplayer/">RPMs</a> of <a href="http://www.mplayerhq.hu/">mplayer</a> 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." <i>Why do people do this?</i> 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
<nobr>screen --</nobr> conveniently <i>under</i> my panel where I can't reach it. </p>
<p> Resizing the window changes the aspect ratio of the video! Yeah, I'm sure someone has <i>ever</i> wanted that. </p>
<p> 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. </p>
@@ -51,39 +64,39 @@ RPMs</a>, and it sucks about the same as mplayer, and in about the same ways, th
<p> Then I checked out <a href="http://www.dtek.chalmers.se/groups/dvd/">Ogle</a> again, and it hasn't been updated since the last time I tried, six months ago. It's a pretty decent DVD player, if you have the physical DVD. It does on-screen menus, and you can click on them with the mouse. But I don't need a DVD player (I have a hardware DVD player that works just fine.) It can't, as far as I can tell, play anything but actual discs. </p>
<p> 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. </p>
<p> 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 <i>also</i> 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!'' </p>
- <hr/> <b>And here's the Random Commentary section:</b>
+
+ <hr></hr><b>And here's the Random Commentary section:</b>
+
<blockquote> <b><a href="http://www.lazycat.org/">Makali</a> wrote:</b>
<ul><i>
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></ul>
- <p> I am fully in support of this proposed audio-cock technology. </p>
+ </i></ul><p> I am fully in support of this proposed audio-cock technology. </p>
<p><b>Various people wrote:</b> </p>
<ul><i>
You shouldn't even bother compiling the GUI into mplayer!
- </i></ul>
- <p> 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. </p>
+ </i></ul><p> 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. </p>
<p><b>Various other people wrote:</b> </p>
<ul><i>
You didn't try <a href="http://www.videolan.org/vlc/">vlc</a>!
- </i></ul>
- <p> 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. <i>*plonk*</i> </p>
+ </i></ul><p> 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. <i>*plonk*</i> </p>
<p><b>Someone else wrote:</b> </p>
<ul><i>
Have you considered changing distributions?
- </i></ul>
- <p> Yes, every single time I try something like this, I very seriously consider <a href="http://fakehost/gruntle/bittybox.html">getting a Mac</a>. </p>
+ </i></ul><p> Yes, every single time I try something like this, I very seriously consider <a href="http://fakehost/test/../gruntle/bittybox.html">getting a Mac</a>. </p>
<p> Really the only thing that's stopping me is that I fear the <a href="http://www.xemacs.org/">Emacs situation</a>. </p>
<p> (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 <i>whole
point?</i>) </p>
- <ul> <span size="-1"> (I understand there is an almost-functional Aqua version of <a href="http://fakehost/hacks/why-cooperation-with-rms-is-impossible.mp3">
+
+ <ul><span size="-1"> (I understand there is an almost-functional Aqua version of <a href="http://fakehost/test/../hacks/why-cooperation-with-rms-is-impossible.mp3">
RMSmacs</a> now. I'll probably check it out at some point, but the problem with <i><a href="http://fakehost/test/lemacs.html">me</a></i> switching from XEmacs to RMSmacs is that it would probably result in another <a href="http://slashdot.org/article.pl?sid=03/01/24/1440207">
- Slashdork</a> 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.)</span> </ul>
- <p> 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 <a href="http://fakehost/test/linux.html">it is</a>. But I've been saturated with Unix-peanut-gallery effluvia for so long that it no longer even surprises me when every
+ Slashdork</a> 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.)</span>
+ </ul><p> 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 <a href="http://fakehost/test/linux.html">it is</a>. But I've been saturated with Unix-peanut-gallery effluvia for so long that it no longer even surprises me when every
<nobr>question --</nobr> no matter how
<nobr>simple --</nobr> results in someone suggesting that you either A) patch your kernel or B) change distros. It's inevitable and inescapable, like Hitler. </p>
</blockquote>
- <hr/>
- <p> <a href="http://fakehost/"><img alt="[ up ]" src="http://fakehost/compass1.gif" onmouseover="this.src=&quot;../compass2.gif&quot;" onmouseout="this.src=&quot;../compass1.gif&quot;"/></a> </p>
+
+ <hr></hr>
+ <p> <a href="http://fakehost/test/../"><img alt="[ up ]" onmouseout="this.src=&quot;../compass1.gif&quot;" onmouseover="this.src=&quot;../compass2.gif&quot;" src="http://fakehost/test/../compass1.gif"></img></a> </p>
</div> \ 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 0664ae6..468d79a 100644
--- a/test/test-pages/telegraph/expected-metadata.json
+++ b/test/test-pages/telegraph/expected-metadata.json
@@ -1,6 +1,6 @@
{
"Title": "Zimbabwe coup: Robert Mugabe and wife Grace 'insisting he finishes his term', as priest steps in to mediate",
- "Author": null,
+ "Author": "",
"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 &quot;Blue House&quot; compound in Harare and are insisting the 93 year-old finishes his presidential term, a source said."
}
diff --git a/test/test-pages/tmz-1/expected.html b/test/test-pages/tmz-1/expected.html
index 48f65bd..5429f9a 100644
--- a/test/test-pages/tmz-1/expected.html
+++ b/test/test-pages/tmz-1/expected.html
@@ -1,4 +1,4 @@
-<div id="readability-page-1" class="page">
+
<div id="post-2015_02_26_lupita-nyongo-pearl-dress-stolen-oscars">
<p>
<h2>Lupita Nyong'o</h2>
diff --git a/test/test-pages/yahoo-4/expected.html b/test/test-pages/yahoo-4/expected.html
index 83b5863..fde4c1e 100644
--- a/test/test-pages/yahoo-4/expected.html
+++ b/test/test-pages/yahoo-4/expected.html
@@ -1,4 +1,4 @@
-<div id="readability-page-1" class="page">
+
<div>
<div>
<p> トレンドマイクロは3月9日、Wi-Fi利用時の通信を暗号化し保護するスマホ・タブレット向けのセキュリティアプリ「フリーWi-Fiプロテクション」(iOS/Android)の発売を開始すると発表した。1年版ライセンスは2900円(税込)で、2年版ライセンスは5000円(税込)。</p>