From 7c31b9fff0eb229054dad1d4a8a8d7bc46b23169 Mon Sep 17 00:00:00 2001 From: Mathias Kresin Date: Sun, 18 Jan 2015 15:20:36 +0100 Subject: [PATCH] update picoFeed to f3ed9fe and use icon from atom feeds as favicon --- models/feed.php | 8 +- vendor/autoload.php | 2 +- vendor/composer/autoload_real.php | 10 +- vendor/composer/installed.json | 4 +- .../fguillot/picofeed/docs/favicon.markdown | 15 + .../picofeed/lib/PicoFeed/Client/Curl.php | 1 + .../picofeed/lib/PicoFeed/Client/Grabber.php | 31 +- .../picofeed/lib/PicoFeed/Parser/Atom.php | 12 + .../picofeed/lib/PicoFeed/Parser/Feed.php | 21 +- .../picofeed/lib/PicoFeed/Parser/Parser.php | 10 + .../picofeed/lib/PicoFeed/Parser/Rss20.php | 12 + .../picofeed/lib/PicoFeed/Reader/Favicon.php | 14 +- .../PicoFeed/Rules/allgemeine-zeitung.de.php | 5 +- .../picofeed/tests/Client/GrabberTest.php | 8 + .../picofeed/tests/Filter/FilterTest.php | 4 + .../picofeed/tests/Parser/AtomParserTest.php | 11 + .../picofeed/tests/Reader/FaviconTest.php | 195 ++- .../picofeed/tests/Reader/ReaderTest.php | 148 ++- .../picofeed/tests/fixtures/html4_page.html | 286 ++--- .../picofeed/tests/fixtures/la-grange.xml | 1139 ----------------- 20 files changed, 557 insertions(+), 1379 deletions(-) delete mode 100644 vendor/fguillot/picofeed/tests/fixtures/la-grange.xml diff --git a/models/feed.php b/models/feed.php index c70177a..ddc3a2d 100644 --- a/models/feed.php +++ b/models/feed.php @@ -29,12 +29,12 @@ function store_favicon($feed_id, $link, $icon) } // Download favicon -function fetch_favicon($feed_id, $site_url) +function fetch_favicon($feed_id, $site_url, $icon_link) { if (Config\get('favicons') == 1 && ! has_favicon($feed_id)) { $favicon = new Favicon; - $link = $favicon->find($site_url); + $link = $favicon->find($site_url, $icon_link); $icon = $favicon->getDataUri(); if ($icon !== '') { @@ -189,7 +189,7 @@ function create($url, $enable_grabber = false, $force_rtl = false) $feed_id = $db->getConnection()->getLastId(); Item\update_all($feed_id, $feed->getItems()); - fetch_favicon($feed_id, $feed->getSiteUrl()); + fetch_favicon($feed_id, $feed->getSiteUrl(), $feed->getIcon()); Config\write_debug(); @@ -261,7 +261,7 @@ function refresh($feed_id) update_cache($feed_id, $resource->getLastModified(), $resource->getEtag()); Item\update_all($feed_id, $feed->getItems()); - fetch_favicon($feed_id, $feed->getSiteUrl()); + fetch_favicon($feed_id, $feed->getSiteUrl(), $feed->getIcon()); } update_parsing_error($feed_id, 0); diff --git a/vendor/autoload.php b/vendor/autoload.php index 7fae426..42e1071 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer' . '/autoload_real.php'; -return ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca::getLoader(); +return ComposerAutoloaderInitdd123afa0ab8d569c051c35ab70311cb::getLoader(); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 9d83a4a..8a6f371 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca +class ComposerAutoloaderInitdd123afa0ab8d569c051c35ab70311cb { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInitdd123afa0ab8d569c051c35ab70311cb', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInitdd123afa0ab8d569c051c35ab70311cb', 'loadClassLoader')); $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -42,14 +42,14 @@ class ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca $includeFiles = require __DIR__ . '/autoload_files.php'; foreach ($includeFiles as $file) { - composerRequire1aea6e0e97930d7617e83f53a5287aca($file); + composerRequiredd123afa0ab8d569c051c35ab70311cb($file); } return $loader; } } -function composerRequire1aea6e0e97930d7617e83f53a5287aca($file) +function composerRequiredd123afa0ab8d569c051c35ab70311cb($file) { require $file; } diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index b58beb8..0d1419d 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -162,12 +162,12 @@ "source": { "type": "git", "url": "https://github.com/fguillot/picoFeed.git", - "reference": "d3785fc54d0bf9d521fd85e369cc5600f66099cc" + "reference": "f3ed9fef18b4cd0d25a1fd389c8a2e2370bcb51b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/fguillot/picoFeed/zipball/d3785fc54d0bf9d521fd85e369cc5600f66099cc", - "reference": "d3785fc54d0bf9d521fd85e369cc5600f66099cc", + "reference": "f3ed9fef18b4cd0d25a1fd389c8a2e2370bcb51b", "shasum": "" }, "require": { diff --git a/vendor/fguillot/picofeed/docs/favicon.markdown b/vendor/fguillot/picofeed/docs/favicon.markdown index 1ac3ee1..b502169 100644 --- a/vendor/fguillot/picofeed/docs/favicon.markdown +++ b/vendor/fguillot/picofeed/docs/favicon.markdown @@ -21,6 +21,21 @@ PicoFeed will try first to find the favicon from the meta tags and fallback to t When the HTML page is parsed, relative links and protocol relative links are converted to absolute url. +Download a know favicon +----------------------- +It's possible to download a known favicon using the second optional parameter of Favicon::find(). The link to the favicon can be a relative or protocol relative url as well, but it has to be relative to the specified website. + +If the requested favicon could not be found, the HTML of the website is parsed instead, with the fallback to the `favicon.ico` located in the website's root. + +```php +use PicoFeed\Reader\Favicon; + +$favicon = new Favicon; + +$icon_link = $favicon->find('https://en.wikipedia.org/','https://bits.wikimedia.org/favicon/wikipedia.ico'); +$icon_content = $favicon->getContent(); +``` + Get Favicon file type --------------------- diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Curl.php b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Curl.php index 7b3cd65..c5c83dd 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Curl.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Curl.php @@ -183,6 +183,7 @@ class Curl extends Client curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, 'readHeaders')); curl_setopt($ch, CURLOPT_COOKIEJAR, 'php://memory'); curl_setopt($ch, CURLOPT_COOKIEFILE, 'php://memory'); + curl_setopt($ch, CURLOPT_SSLVERSION, 1); // Enforce TLS v1 $ch = $this->prepareProxyContext($ch); $ch = $this->prepareAuthContext($ch); diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Grabber.php b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Grabber.php index fc7634c..52f2f0b 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Grabber.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Grabber.php @@ -171,6 +171,35 @@ class Grabber return $this; } + /** + * Get URL to download. + * + * @access public + * @return string + */ + public function getUrl() + { + return $this->url; + } + + /** + * Set URL to download and reset object to use for another grab. + * + * @access public + * @param string $url URL + * @return string + */ + public function setUrl($url) + { + $this->url = $url; + $this->html = ""; + $this->content = ""; + $this->encoding = ""; + + $this->handleFiles(); + $this->handleStreamingVideos(); + } + /** * Get relevant content * @@ -284,7 +313,7 @@ class Grabber */ public function download() { - if (! $this->skip_processing) { + if (! $this->skip_processing && $this->url != '') { try { diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php index 154ed3c..0fbc302 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php @@ -74,6 +74,18 @@ class Atom extends Parser $feed->logo = (string) $xml->logo; } + /** + * Find the feed icon + * + * @access public + * @param SimpleXMLElement $xml Feed xml + * @param \PicoFeed\Parser\Feed $feed Feed object + */ + public function findFeedIcon(SimpleXMLElement $xml, Feed $feed) + { + $feed->icon = (string) $xml->icon; + } + /** * Find the feed title * diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Feed.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Feed.php index 99fc27e..74e9ab4 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Feed.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Feed.php @@ -75,13 +75,21 @@ class Feed public $language = ''; /** - * Feed logo URL (not the same as icon) + * Feed logo URL * * @access public * @var string */ public $logo = ''; + /** + * Feed icon URL + * + * @access public + * @var string + */ + public $icon = ''; + /** * Return feed information * @@ -140,6 +148,17 @@ class Feed return $this->logo; } + /** + * Get the icon url + * + * @access public + * $return string + */ + public function getIcon() + { + return $this->icon; + } + /** * Get feed url * diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Parser.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Parser.php index a25ef2e..42815d1 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Parser.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Parser.php @@ -149,6 +149,7 @@ abstract class Parser $this->findFeedId($xml, $feed); $this->findFeedDate($xml, $feed); $this->findFeedLogo($xml, $feed); + $this->findFeedIcon($xml, $feed); foreach ($this->getItemsTree($xml) as $entry) { @@ -549,6 +550,15 @@ abstract class Parser */ public abstract function findFeedLogo(SimpleXMLElement $xml, Feed $feed); + /** + * Find the feed icon + * + * @access public + * @param SimpleXMLElement $xml Feed xml + * @param \PicoFeed\Parser\Feed $feed Feed object + */ + public abstract function findFeedIcon(SimpleXMLElement $xml, Feed $feed); + /** * Get the path to the items XML tree * diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php index c0417f9..16c9f63 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php @@ -76,6 +76,18 @@ class Rss20 extends Parser } } + /** + * Find the feed icon + * + * @access public + * @param SimpleXMLElement $xml Feed xml + * @param \PicoFeed\Parser\Feed $feed Feed object + */ + public function findFeedIcon(SimpleXMLElement $xml, Feed $feed) + { + $feed->icon = ''; + } + /** * Find the feed title * diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Reader/Favicon.php b/vendor/fguillot/picofeed/lib/PicoFeed/Reader/Favicon.php index e030fc5..8e674af 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Reader/Favicon.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Reader/Favicon.php @@ -157,17 +157,21 @@ class Favicon * * @access public * @param string $website_link URL + * @param string $favicon_link optional URL * @return string */ - public function find($website_link) + public function find($website_link, $favicon_link = '') { $website = new Url($website_link); - $icons = $this->extract($this->download($website->getBaseUrl('/'))->getContent()); - $icons[] = $website->getBaseUrl('/favicon.ico'); + if ($favicon_link !== '') { + $icons = array($favicon_link); + } else { + $icons = $this->extract($this->download($website->getBaseUrl('/'))->getContent()); + $icons[] = $website->getBaseUrl('/favicon.ico'); + } foreach ($icons as $icon_link) { - $icon_link = $this->convertLink($website, new Url($icon_link)); $resource = $this->download($icon_link); $this->content = $resource->getContent(); @@ -175,6 +179,8 @@ class Favicon if ($this->content !== '') { return $icon_link; + } elseif ($favicon_link !== '') { + return $this->find($website_link); } } diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/allgemeine-zeitung.de.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/allgemeine-zeitung.de.php index 58e26e5..603bcdc 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/allgemeine-zeitung.de.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/allgemeine-zeitung.de.php @@ -1,17 +1,20 @@ 'http://www.allgemeine-zeitung.de/lokales/polizei/zweimal-totalschaden-nach-unfaellen-auf-eisglatten-fahrbahnen-bei-mainz-und-bei-bad-sobernheim-mit-baeumen-kollidiert_14904737.htm', + 'test_url' => 'http://www.allgemeine-zeitung.de/lokales/polizei/mainz-gonsenheim-unbekannte-rauben-esso-tankstelle-in-kurt-schumacher-strasse-aus_14913147.htm', 'body' => array( '//div[contains(@class, "article")][1]', ), 'strip' => array( '//read/h1', + '//*[@id="t-map"]', + '//*[contains(@class, "modules")]', '//*[contains(@class, "adsense")]', '//*[contains(@class, "linkbox")]', '//*[contains(@class, "info")]', '//*[@class="skip"]', '//*[@class="funcs"]', + '//span[@class="nd address"]', '//a[contains(@href, "abo-und-services")]' ) ); diff --git a/vendor/fguillot/picofeed/tests/Client/GrabberTest.php b/vendor/fguillot/picofeed/tests/Client/GrabberTest.php index a29414e..8fc9c58 100644 --- a/vendor/fguillot/picofeed/tests/Client/GrabberTest.php +++ b/vendor/fguillot/picofeed/tests/Client/GrabberTest.php @@ -36,6 +36,14 @@ class GrabberTest extends PHPUnit_Framework_TestCase $this->assertTrue(is_array($grabber->getRules())); } + // 01net.com - https://github.com/fguillot/miniflux/issues/267 + public function testGetRules_afterRedirection() + { + $grabber = new Grabber('http://rss.feedsportal.com/c/629/f/502199/s/422f8c8a/sc/44/l/0L0S0A1net0N0Ceditorial0C640A3130Cces0E20A150Eimprimer0Eune0Epizza0Eet0Edes0Ebiscuits0Evideo0C0T0Dxtor0FRSS0E16/story01.htm'); + $grabber->download(); + $this->assertTrue(is_array($grabber->getRules())); + } + public function testGrabContent() { $grabber = new Grabber('http://www.egscomics.com/index.php?id=1690'); diff --git a/vendor/fguillot/picofeed/tests/Filter/FilterTest.php b/vendor/fguillot/picofeed/tests/Filter/FilterTest.php index 08a57a1..bfcb8d9 100644 --- a/vendor/fguillot/picofeed/tests/Filter/FilterTest.php +++ b/vendor/fguillot/picofeed/tests/Filter/FilterTest.php @@ -14,6 +14,10 @@ class FilterTest extends PHPUnit_Framework_TestCase $expected = '

boo

'; $this->assertEquals($expected, Filter::stripHeadTags($input)); + $input = file_get_contents('tests/fixtures/html4_page.html'); + $expected = file_get_contents('tests/fixtures/html4_head_stripped_page.html'); + $this->assertEquals($expected, Filter::stripHeadTags($input)); + $input = file_get_contents('tests/fixtures/html_page.html'); $expected = file_get_contents('tests/fixtures/html_head_stripped_page.html'); $this->assertEquals($expected, Filter::stripHeadTags($input)); diff --git a/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php b/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php index fc807c6..04882c5 100644 --- a/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php +++ b/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php @@ -47,6 +47,17 @@ class AtomParserTest extends PHPUnit_Framework_TestCase $this->assertEquals('http://www.bbc.co.uk/urdu/images/gel/rss_logo.gif', $feed->getLogo()); } + public function testFeedIcon() + { + $parser = new Atom(file_get_contents('tests/fixtures/atom.xml')); + $feed = $parser->execute(); + $this->assertEquals('', $feed->getIcon()); + + $parser = new Atom(file_get_contents('tests/fixtures/lagrange.xml')); + $feed = $parser->execute(); + $this->assertEquals('http://www.la-grange.net/favicon.png', $feed->getIcon()); + } + public function testFeedUrl() { $parser = new Atom(file_get_contents('tests/fixtures/atom.xml')); diff --git a/vendor/fguillot/picofeed/tests/Reader/FaviconTest.php b/vendor/fguillot/picofeed/tests/Reader/FaviconTest.php index af1c193..e47c632 100644 --- a/vendor/fguillot/picofeed/tests/Reader/FaviconTest.php +++ b/vendor/fguillot/picofeed/tests/Reader/FaviconTest.php @@ -11,137 +11,218 @@ class FaviconTest extends PHPUnit_Framework_TestCase { $favicon = new Favicon; - $html = ' - -

boo

'; - - $this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html)); - $html = '

boo

'; $this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html)); + // multiple values in rel attribute + $html = ' + +

boo

'; + + $this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html)); + + // icon part of another string + $html = ' + +

boo

'; + + $this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html)); + + // with other attributes present $html = '

boo

'; $this->assertEquals(array('http://example.com/image.ico'), $favicon->extract($html)); + // ignore icon in other attribute $html = ' + +

boo

'; + + // ignores apple icon + $html = ' +

boo

'; $this->assertEquals(array('http://example.com/image.png'), $favicon->extract($html)); + // allows multiple icons $html = ' - -

boo

'; - - $this->assertEquals(array('http://example.com/image.gif'), $favicon->extract($html)); - - $html = ' - -

boo

'; - - $this->assertEquals(array('http://example.com/image.ico'), $favicon->extract($html)); - - $html = ' -

boo

'; $this->assertEquals(array('http://example.com/image.png', 'http://example.com/image.ico'), $favicon->extract($html)); + + // empty array with broken html + $html = '!DOCTYPE html html head + link rel="icon" type="image/png" href="http://example.com/image.png" / + link rel="icon" type="image/x-icon" href="http://example.com/image.ico"/ + /head body /p boo /p body /html'; + + $this->assertEquals(array(), $favicon->extract($html)); + + // empty array on no input + $this->assertEquals(array(), $favicon->extract('')); + + // empty array on no icon found + $html = ' +

boo

'; + + $this->assertEquals(array(), $favicon->extract($html)); } -/* - public function testHasFile() + + public function testExists() { $favicon = new Favicon; + $this->assertTrue($favicon->exists('https://en.wikipedia.org/favicon.ico')); $this->assertFalse($favicon->exists('http://minicoders.com/favicon.ico')); $this->assertFalse($favicon->exists('http://blabla')); + $this->assertFalse($favicon->exists('')); } -*/ + public function testConvertLink() { $favicon = new Favicon; + // relative link $this->assertEquals( 'http://miniflux.net/assets/img/favicon.png', $favicon->convertLink(new Url('http://miniflux.net'), new Url('assets/img/favicon.png')) ); + // relative link + HTTPS $this->assertEquals( 'https://miniflux.net/assets/img/favicon.png', $favicon->convertLink(new Url('https://miniflux.net'), new Url('assets/img/favicon.png')) ); + // absolute link + $this->assertEquals( + 'http://miniflux.net/assets/img/favicon.png', + $favicon->convertLink(new Url('http://miniflux.net'), new Url('/assets/img/favicon.png')) + ); + + // absolute link + HTTPS + $this->assertEquals( + 'https://miniflux.net/assets/img/favicon.png', + $favicon->convertLink(new Url('https://miniflux.net'), new Url('/assets/img/favicon.png')) + ); + + // Protocol relative link $this->assertEquals( 'http://google.com/assets/img/favicon.png', $favicon->convertLink(new Url('http://miniflux.net'), new Url('//google.com/assets/img/favicon.png')) ); + // Protocol relative link + HTTPS $this->assertEquals( 'https://google.com/assets/img/favicon.png', $favicon->convertLink(new Url('https://miniflux.net'), new Url('//google.com/assets/img/favicon.png')) ); + + // URL same fqdn + $this->assertEquals( + 'http://miniflux.net/assets/img/favicon.png', + $favicon->convertLink(new Url('https://miniflux.net'), new Url('http://miniflux.net/assets/img/favicon.png')) + ); + + // URL different fqdn + $this->assertEquals( + 'https://www.google.com/assets/img/favicon.png', + $favicon->convertLink(new Url('https://miniflux.net'), new Url('https://www.google.com/assets/img/favicon.png')) + ); + + // HTTPS URL + $this->assertEquals( + 'https://miniflux.net/assets/img/favicon.png', + $favicon->convertLink(new Url('https://miniflux.net'), new Url('https://miniflux.net/assets/img/favicon.png')) + ); + + // empty string on missing website parameter + $this->assertEquals( + '', + $favicon->convertLink(new Url(''), new Url('favicon.png')) + ); + + // website only on missing icon parameter + $this->assertEquals( + 'https://miniflux.net/', + $favicon->convertLink(new Url('https://miniflux.net'), new Url('')) + ); + + // empty string on missing website and icon parameter + $this->assertEquals( + '', + $favicon->convertLink(new Url(''), new Url('')) + ); } - public function testFind() + public function testFind_inMeta() { $favicon = new Favicon; - // Relative favicon in html + // favicon in meta $this->assertEquals( 'http://miniflux.net/assets/img/favicon.png', $favicon->find('http://miniflux.net') ); $this->assertNotEmpty($favicon->getContent()); + } - // Absolute html favicon - $this->assertEquals( - 'http://php.net/favicon.ico', - $favicon->find('http://php.net/parse_url') - ); +// public function testFind_inRootDir() +// { +// // favicon not in meta, only in website root (need example page) +// $favicon = new Favicon; +// +// $this->assertEquals( +// 'http://minicoders.com/favicon.ico', +// $favicon->find('http://minicoders.com') +// ); +// } - $this->assertNotEmpty($favicon->getContent()); + public function testFind_noIcons() + { + $favicon = new Favicon; - // Protocol relative favicon - $this->assertEquals( - 'https://bits.wikimedia.org/favicon/wikipedia.ico', - $favicon->find('https://en.wikipedia.org/') - ); - - $this->assertNotEmpty($favicon->getContent()); - - // fluid-icon + https - $this->assertEquals( - 'https://github.com/fluidicon.png', - $favicon->find('https://github.com') - ); - - $this->assertNotEmpty($favicon->getContent()); - - // favicon in meta - $this->assertEquals( - 'http://www.microsoft.com/favicon.ico?v2', - $favicon->find('http://www.microsoft.com') - ); - - $this->assertNotEmpty($favicon->getContent()); - - // no icon $this->assertEquals( '', - $favicon->find('http://minicoders.com/favicon.ico') + $favicon->find('http://minicoders.com') ); $this->assertEmpty($favicon->getContent()); } + public function testFind_directLinkFirst() + { + $favicon = new Favicon; + + $this->assertEquals( + 'http://miniflux.net/assets/img/touch-icon-ipad.png', + $favicon->find('http://miniflux.net', '/assets/img/touch-icon-ipad.png') + ); + + $this->assertNotEmpty($favicon->getContent()); + } + + public function testFind_fallsBackToExtract() + { + $favicon = new Favicon; + $this->assertEquals( + 'http://miniflux.net/assets/img/favicon.png', + $favicon->find('http://miniflux.net','/nofavicon.ico') + ); + + $this->assertNotEmpty($favicon->getContent()); + } + public function testDataUri() { $favicon = new Favicon; @@ -156,7 +237,7 @@ class FaviconTest extends PHPUnit_Framework_TestCase $this->assertEquals($expected, $favicon->getDataUri()); } - public function testDataUriWithBadContentType() + public function testDataUri_withBadContentType() { $favicon = new Favicon; $this->assertNotEmpty($favicon->find('http://www.lemonde.fr/')); diff --git a/vendor/fguillot/picofeed/tests/Reader/ReaderTest.php b/vendor/fguillot/picofeed/tests/Reader/ReaderTest.php index a7e287a..1bd60ff 100644 --- a/vendor/fguillot/picofeed/tests/Reader/ReaderTest.php +++ b/vendor/fguillot/picofeed/tests/Reader/ReaderTest.php @@ -15,14 +15,21 @@ class ReaderTest extends PHPUnit_Framework_TestCase $this->assertEquals('https://google.com', $reader->prependScheme('https://google.com')); } - public function testDownload() + public function testDownload_withHTTP() { $reader = new Reader; $feed = $reader->download('http://wordpress.org/news/feed/')->getContent(); $this->assertNotEmpty($feed); } - public function testDownloadWithCache() + public function testDownload_withHTTPS() + { + $reader = new Reader; + $feed = $reader->download('https://wordpress.org/news/feed/')->getContent(); + $this->assertNotEmpty($feed); + } + + public function testDownload_withCache() { $reader = new Reader; $resource = $reader->download('http://linuxfr.org/robots.txt'); @@ -78,30 +85,129 @@ class ReaderTest extends PHPUnit_Framework_TestCase $this->assertEquals('Rss20', $reader->detectFormat($content)); } - public function testFind() + public function testFind_rssFeed() { $reader = new Reader; - $resource = $reader->download('http://miniflux.net/'); - $feeds = $reader->find($resource->getUrl(), $resource->getContent()); - $this->assertTrue(is_array($feeds)); - $this->assertNotEmpty($feeds); - $this->assertEquals('http://miniflux.net/feed', $feeds[0]); - $reader = new Reader; - $resource = $reader->download('http://www.bbc.com/news/'); - $feeds = $reader->find($resource->getUrl(), $resource->getContent()); - $this->assertTrue(is_array($feeds)); - $this->assertNotEmpty($feeds); - $this->assertEquals('http://feeds.bbci.co.uk/news/rss.xml', $feeds[0]); + $html = ' + +

boo

'; + $feeds = $reader->find('http://miniflux.net/', $html); + $this->assertEquals(array('http://miniflux.net/feed'), $feeds); + } + + public function testFind_atomFeed() + { $reader = new Reader; - $resource = $reader->download('http://www.cnn.com/services/rss/'); - $feeds = $reader->find($resource->getUrl(), $resource->getContent()); - $this->assertTrue(is_array($feeds)); - $this->assertNotEmpty($feeds); - $this->assertTrue(count($feeds) > 1); - $this->assertEquals('http://rss.cnn.com/rss/cnn_topstories.rss', $feeds[0]); - $this->assertEquals('http://rss.cnn.com/rss/cnn_world.rss', $feeds[1]); + + $html = ' + +

boo

'; + + $feeds = $reader->find('http://miniflux.net/', $html); + $this->assertEquals(array('http://miniflux.net/feed'), $feeds); + } + + public function testFind_feedNotInHead() + { + $reader = new Reader; + + $html = ' + + +

boo

'; + + $feeds = $reader->find('http://miniflux.net/', $html); + $this->assertEquals(array('http://miniflux.net/feed'), $feeds); + } + + public function testFind_noFeedPresent() + { + $reader = new Reader; + + $html = ' +

boo

'; + + $feeds = $reader->find('http://miniflux.net/', $html); + $this->assertEquals(array(), $feeds); + } + + public function testFind_ignoreUnknownType() + { + $reader = new Reader; + + $html = ' + +

boo

'; + + $feeds = $reader->find('http://miniflux.net/', $html); + $this->assertEquals(array(), $feeds); + } + + public function testFind_ignoreTypeInOtherAttribute() + { + $reader = new Reader; + + $html = ' + +

boo

'; + + $feeds = $reader->find('http://miniflux.net/', $html); + $this->assertEquals(array(), $feeds); + } + + public function testFind_withOtherAttributesPresent() + { + $reader = new Reader; + + $html = ' + +

boo

'; + + $feeds = $reader->find('http://miniflux.net/', $html); + $this->assertEquals(array('http://miniflux.net/feed'), $feeds); + } + + public function testFind_multipleFeeds() + { + $reader = new Reader; + + $html = ' + + + +

boo

'; + + $feeds = $reader->find('http://www.cnn.com/services/rss/', $html); + $this->assertEquals( + array( + 'http://rss.cnn.com/rss/edition.rss', + 'http://rss.cnn.com/rss/edition_connecttheworld.rss', + 'http://rss.cnn.com/rss/edition_worldsportblog.rss' + ), + $feeds + ); + } + + public function testFind_withInvalidHTML() + { + $reader = new Reader; + + $html = '!DOCTYPE html html head + link type="application/rss+xml" href="http://miniflux.net/feed" + /head body /p boo /p body /html'; + + $feeds = $reader->find('http://miniflux.net/', ''); + $this->assertEquals(array(), $feeds); + } + + public function testFind_withHtmlParamEmptyString() + { + $reader = new Reader; + + $feeds = $reader->find('http://miniflux.net/', ''); + $this->assertEquals(array(), $feeds); } public function testDiscover() diff --git a/vendor/fguillot/picofeed/tests/fixtures/html4_page.html b/vendor/fguillot/picofeed/tests/fixtures/html4_page.html index a6ee111..815ffb5 100644 --- a/vendor/fguillot/picofeed/tests/fixtures/html4_page.html +++ b/vendor/fguillot/picofeed/tests/fixtures/html4_page.html @@ -1,6 +1,6 @@ - + Un bilan des plantes génétiquement modifiées aux USA - Résumé d'un rapport américain - Afis - Association française pour l'information scientifique @@ -10,7 +10,7 @@ (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; - po.src = 'https://apis.google.com/js/plusone.js'; + po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })(); @@ -64,121 +64,121 @@ - + @@ -186,19 +186,19 @@ Accueil Accueil - - - - - - - - + + + + + + + + > Articles - - - - + + + +
@@ -206,7 +206,7 @@
- @@ -216,7 +216,7 @@ relais et santé: des scientifiques répondent à l'ASEF

-->
- +
Imprimer @@ -224,13 +224,13 @@ relais et santé: des scientifiques répondent à l'ASEF

-->
-
+

Un bilan des plantes génétiquement modifiées aux USA

Résumé d’un rapport américain

- +
Nous publions ici, à titre d’information, un résumé du rapport du Service des études économiques (Economic Research Service) du ministère américain de l’agriculture (United States Department of Agriculture). Résumé rédigé par Louis-Marie Houdebine.

La culture des plantes génétiquement modifiées (PGM) a commencé aux USA en 1996. Et ce pays compte aujourd’hui, à lui seul, la moitié des PGM cultivées dans le monde. Un bilan économique de cette nouvelle technique de sélection génétique a été publié en février 2014. Il nous a semblé intéressant de porter à la connaissance ce document, afin d’aider nos lecteurs à se faire leur propre opinion sur un sujet controversé. En effet, si les OGM sont interdits à la culture en France (et dans plusieurs pays de l’Union Européenne), ils sont largement utilisés outre-Atlantique, et depuis près de deux décennies, ce qui permet une analyse a posteriori.

@@ -273,59 +273,59 @@ relais et santé: des scientifiques répondent à l'ASEF

-->

Une troisième génération de PGM est déjà une réalité et elle devrait prendre progressivement de l’importance. Ces PGM ne sont pas destinées à l’alimentation. Elles sont et seront productrices de biocarburants, de molécules d’intérêt pharmaceutique, d’huiles industrielles, de fibres, de plastiques etc.

- - + +
- +
Mis en ligne le 8 avril 2014
1116 visites
- - - - + + + + - - - + + + -
+
@@ -334,117 +334,117 @@ relais et santé: des scientifiques répondent à l'ASEF

-->

Explorer par thème


- + - +

@@ -473,7 +473,7 @@ relais et santé: des scientifiques répondent à l'ASEF

--> _gaq.push(['_setAccount', 'UA-1826589-10']); _gaq.push(['_trackPageview']); - (function() { + (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); diff --git a/vendor/fguillot/picofeed/tests/fixtures/la-grange.xml b/vendor/fguillot/picofeed/tests/fixtures/la-grange.xml deleted file mode 100644 index 8edfd23..0000000 --- a/vendor/fguillot/picofeed/tests/fixtures/la-grange.xml +++ /dev/null @@ -1,1139 +0,0 @@ - -Carnets de La Grange -Chroniques d'un poète urbain -tag:la-grange.net,2000-04-12:karl - 2014-10-04T06:55:00Z - - - -http://www.la-grange.net/favicon.png - - Karl Dubost - http://www.la-grange.net/karl/ - - - - tag:la-grange.net,2014-08-06:2014/08/06/eau - - Un barrage contre le porche - 2014-08-06T23:59:00+02:00 - 2014-10-04T06:55:00Z - -
-
- Flaque de pluie -
La Saussaye, France, 6 août 2014
-
- - -
-
-

Spring had truly arrived. Countless streams suddenly materialized all over the roads, fields, grasslands, and thickets; flowing as if the melting snow's waters were spilling over.

-
-

Takiji Kobayashi, Yasuko.

-
- -

La pluie abonde. La forêt humide resplendit. L'eau monte, l'eau déborde. Il reste pourtant notre humanité. Toute entière, resplendissante.

- -
-
-
- -
- - - tag:la-grange.net,2014-08-05:2014/08/05/foret - - Le sens de la forêt - 2014-08-05T23:59:00+02:00 - 2014-10-04T06:42:00Z - -
-
- Feuillage d'arbre et cheveux -
La Saussaye, France, 5 août 2014
-
- - -
-
-

Well, let's do it again, one more time!

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

L'arbre appelle le refuge. La forêt ouvre la pensée.

- -
-
-
- - -
- - tag:la-grange.net,2014-08-04:2014/08/04/grenier - - Le lieu du temps transposé - 2014-08-04T23:59:00+02:00 - 2014-10-04T05:56:00Z - -
-
- Pile de magazines de cinéma -
La Saussaye, France, 4 août 2014
-
- - -
-
-

Next they showed one foreign and one japanese movie, but the celluloid was so badly scratched that everything seemed streaked with rain. What was worse, the film seemed to have broken in places and been spliced together, imparting jerky movements to the actors. Yet no one cared about that. Everyone was completely engrossed in the film.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Le grenier est le lieu du temps transposé, une longue respiration. Ce n'est pas toujours là que l'on y trouve le souvenir, tant les choses peuvent être lointaines et étranges. Mais c'est certainement l'émerveillement du trésor que l'on découvre sans l'avoir même cherché. Aujourd'hui sur une étagère, entassés, quelques magazines de cinéma révèlent une actualité d'un autre moment et donnent l'envie de l'exploration. Un article donne les clés de l'érotisme au cinéma japonais à travers un film de Tetsuji Takechi.

- -
- Article de magazine sur l'érotique japonaise -
La Saussaye, France, 4 août 2014
-
- -
-
-
- -
- - tag:la-grange.net,2014-08-03:2014/08/03/rythme - - Le rythme du monde - 2014-08-03T23:59:00+02:00 - 2014-09-29T13:09:00Z - -
-
- Noisettes dans un bol -
La Saussaye, France, 3 août 2014
-
- - -
-
-

Far off to the right the light of the Shukutsu lighthouse, flashing each time it revolved, penetrated the gray expanse of sea-like fog. Its long and distant silvery beam swept mystically for miles around as it pivoted.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Sur la table, un bol de noisettes encore vertes, le parfum de la chlorophylle, l'involucre moelleux sous les ongles et le craquement de l'écale donnent l'essence du plaisir.

- -
- Brioches chaudes sorties du four -
Saint-Germain de Pasquier, France, 3 août 2014
-
- -

Dans le four à pain, des brioches encore chaudes, le beurre sous les narines, la mie du moment sous les dents et le chuchottement du jour donnent l'envie de la suspension.

- -
- Tas de bois -
La Saussaye, France, 3 août 2014
-
- -

Dans la forêt, des branches de bois mort, grisé par le champignon et l'humus, les insectes sous l'écorce et le poids sur les épaules vous tirent vers la cime des arbres.

- -

Le rythme du monde s'étale lentement entre les larges secondes d'une respiration.

-
-
-
- -
- - tag:la-grange.net,2014-08-02:2014/08/02/petales - - Une fois de plus, un pétale - 2014-08-02T23:59:00+02:00 - 2014-09-29T12:11:00Z - -
-
- Boutons de rose et pétales sur le sol -
La Saussaye, France, 2 août 2014
-
- - -
-
-

Well. Let's do it again. One more time.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Pain oublié dans le grille-pain, un peu de fumée. Je suis seul dans la cuisine. Décalage horaire. Il est tôt. Tout le monde dort. Le parfum de la forêt en bouffée quand on ouvre la porte d'entrée. Les pétales de rose vaincues par la rosée se sont posés au sol. Le thé dans un bol avec un motif floral, je trempe mes lèvres doucement, patiemment. Je goûte à l'amertume avec plaisir.

-

Il faudra plus d'un pétale pour disparaître.

- -
-
-
- -
- - tag:la-grange.net,2014-08-01:2014/08/01/riz - - Quand le voyage commence-t-il ? - 2014-08-01T23:59:00+09:00 - 2014-09-28T12:17:00Z - -
-
- Vues depuis le train de champs de riz -
Narita, Japon, 1er août 2014
-
- - -
-
-

Treasure every grain of rice. It's a gift of blood and sweat.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Je suis dans le Narita Express à destination de l'aéroport. Devant mes yeux défilent les collines, les maisons blotties près de la forêt et surtout les longues rizières. Tout est si vert, si troublant, si délicat. Je glisse à la surface des brins, je suis le vent. Ce voyage a-t-il débuté ? Était-ce lorsque j'ai réservé le billet d'avion ou bien avant lorsque j'ai conçu l'idée. Était-ce ce moment où j'ai fermé la porte, marché dans la rue ? Ou cela commence-t-il demain lorsque je serais à l'aéroport en France ?

- -

Le premier grain de riz au bout de mes baguettes qui me donne le goût est indéterminé et pourtant il est bien là.

- -

1er août 2014 : Mes écritures à rebours me donnent l'espace de la respiration, donnent de l'épaisseur à l'opacité et donc une plus grande liberté.

-
-
-
- -
- - - tag:la-grange.net,2014-07-31:2014/07/31/adresse - - Le lieu physique et son intimité - 2014-07-31T23:59:00+09:00 - 2014-09-27T07:16:00Z - -
-
- Boîtes aux lettres dans une entrée d'immeuble -
Atami, Japon, 12 juillet 2014
-
- - -
-
-

Not even a woman could captivate the fishermen and sailors as much as the supply ship did. This ship did not stink of fish, and it bore the fragrance of Hakodate. It carried a fragrance of that solid earth that they had not trodden for months, for hundreds of days. Moreover, the supply ship delivered long-delayed letters, shirts, underwear, magazines, and various other necessities.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Stéphane et Emmanuel ont démarré une conversation qui me tient à cœur. J'ai pris quelques notes rapides dans mon carnet.

- -
-
-

Emmanuel a lancé l’idée qu’on s’écrive les uns les autres des cartes postales, après qu’Olivier a noté que c’était fini, tout ça, à l’époque des emails. Alors joignons l’utile à l’agréable et dérouillons, avant les cartes, nos jointures vermoulues sur un cahier acheté à l’occasion des vacances, comme souvent.

-
-

Stéphane Deschamp, la belle langue en vacances.

-
- -

Donner son adresse postale à un tiers m'est devenu de plus en plus difficile. Je m'exécute quand les circonstances l'exigent. Les administrations, les services de livraison, les banques ont une dépendance de leurs systèmes sur l'identification physique du lieu de vie qu'il est très difficile d'y échapper. Je lutte déjà très souvent contre le requis du téléphone. Mais le propos n'est pas là. Non, il s'agit de délivrer la clé de l'accès à un lieu qui est sacré : le lieu où j'habite.

- -

Cela tient peut-être à la clairière dans la forêt, au lieu sanctuaire où l'on peut écrire les notes de sa cabane. Peut-être que c'est juste absurde et que je devrais me soucier beaucoup moins de cette inquiétude. Ce partage inconfortable s'est accentué avec tous les services de gestion du carnet d'adresses en ligne. Les personnes rentrent l'adresse dans le carnet d'adresses de leur ordinateur, la synchronise avec leurs téléphones en ligne et parfois avec un service de synchronisation distant. Certaines applications demandent l'accès au carnet d'adresse pour rechercher les adresses email et faire des croisements avec leur base de données et au même moment en profitent pour accéder à de nombreuses autres données, dont l'adresse.

- -

Lorsque je travaille avec un bureau physique quotidien, je donne souvent mon adresse de bureau. C'est une façon de permettre l'anonymat physique de l'intime sans bloquer la communication. Mais lorsque l'on travaille de chez soi, cet anonymat devient de plus en plus délicat. Je pense très souvent à ouvrir une case postale dans une poste afin de recréer ce tampon.

- -

Quand finalement, je me décide à donner confiance à mon interlocuteur, je précise de ne pas partager l'adresse avec qui que ce soit individus ou entités, et bien sûr, de ne pas partager avec les services en ligne. Ce qui rend la gestion de mon adresse quelque peu contraignante.

- -

Tout ceci n'est pas tout à fait rationnel, puisque j'ai plaisir à écrire ou dessiner sur le papier et à envoyer quelques mots dans la boite aux lettres postales d'une personne lorsque je voyage. Je trouve aussi que le rythme d'envoi et de réponse de la correspondance manuscrite est finalement beaucoup plus humain que celle du courrier. Non pas que l'électronique change quoi que ce soit, si ce n'est que les personnes ont construit une attente de réponse immédiate à un message, alors que préfère prendre du temps pour répondre.

- -

Donc tout comme Stéphane, oui j'aime cela écrire, et délier la langue dans le creux du papier, mais je note aussi que je suis un ours pour ce qui est de l'accès à mon adresse.

- -
-
-
- -
- - tag:la-grange.net,2014-07-30:2014/07/30/reparer - - Le choix de la durée - 2014-07-30T23:59:00+09:00 - 2014-09-26T13:37:00Z - -
-
- Noren avec des morceaux de scotch -
Atami, Japon, 12 juillet 2014
-
- - -
-
-

Each morning before starting to work, everybody gathered in one corner of the factory. Their faces all looked like those of mud dolls.

-

"I'm going to slow down," said the miner. "I just can't keep this up."

-

Worker's faces came to life but no one spoke. Then someone said, "You're going to get yourself branded, you know…"

-

I'm not trying to get out of the work. I just can't do it.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

En informatique, nous disons souvent « Si ce n'est pas cassé, on n'y touche pas. » Il y a plus de risques à modifier un système qui fonctionne avec satisfaction plutôt que de tenter de l'améliorer. Optimiser pour le seul but de la perfection n'est pas une action suffisamment intéressante. C'est le côté Confucius de l'informatique.

- -

Il y a ce restaurant de yakitori qui a réparé son enseigne avec des morceaux de scotchs transparents plutôt que de jeter l'ancien et de le remplacer par un nouveau noren. Cette fois-ci, il s'agit de patcher un système afin qu'il puisse durer un peu plus longtemps. Encore une fois, ce n'est pas une recherche de la perfection, mais bien plus de la longévité.

- -

Nous oublions bien souvent que nos systèmes peuvent durer très longtemps sans les mettre à jour et en les réparant juste de façon nécessaire. Est-ce un problème ? Moins souvent que l'on veuille bien le penser.

- - -
-
-
- -
- - tag:la-grange.net,2014-07-29:2014/07/29/protection - - La lutte du jardin - 2014-07-29T23:59:00+09:00 - 2014-09-26T12:39:00Z - -
-
- Une rue, deux femmes, et une haie coupée -
Tsujido, Japon, 27 juillet 2014
-
- - -
-
-

"The damned lice are going to devour us alive."

-

"Yeah, that'll be a wonderful way to go."

-

They could not help laughing.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Une femme agée coupe la haie. Aligner le feuillage avec la route, ne pas envahir, trop, l'espace commun. Elle s'est couverte, un chapeau, des gants, un masque facial, une serviette éponge autour du cou, un pantalon long et un tablier. Son armure souple la protège des moustiques voraces. Elle a tout de même une dernière botte secrète à son attirail. À sa ceinture, elle a accroché la boite métallique pour permettre les spirales vertes contre les insectes trop amoureux. Ce n'est pas l'encens du temple mais la fumée de l'anti-moustique que je sens.

- -

Et dans cette rue, la rêverie des boîtes de spirales anti-moustiques s'éveille. Les moustiques sont loin.

- -
- Boîte de spirales antimoustiques -
蚊取り線香 金鳥
-
- -
-
-
- - -
- - tag:la-grange.net,2014-07-28:2014/07/28/cendres - - La chaleur des cendres - 2014-07-28T23:59:00+07:00 - 2014-09-26T12:16:00Z - -
-
- Cinq tombes dans un pré -
Tsujido, Japon, 27 juillet 2014
-
- - -
-
-

The great storm had snatched away from the men any ability to steer the boat, making them more helpless than a chid gripped by the scruff of its neck. They had gone out the farthest, and now the wind was blowing them even farther. All were prepared for the worst. Fishermen are trained to bid life good-bye at a moment's notice.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Le feu permet la cendre. La cendre permet l'exigüité. L'exigüité permet la proximité. La proximité permet le souvenir. Le souvenir permet l'humanité.

- -
-
-
- -
- - - tag:la-grange.net,2014-07-27:2014/07/27/quartier - - La vie de quartier - 2014-07-27T23:59:00+07:00 - 2014-09-22T13:11:00Z - -
-
- Intérieur d'un atelier de tatami -
Tsujido, Japon, 27 juillet 2014
-
- - -
-
-

Recalling the previous day's horrendous work, everyone concluded that the man had been swept away by the waves. It made them feel awful. They were forced to resume work before dawn and had no chance to talk about it.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Par la fenêtre, le silence de l'atelier s'expose. L'artisan a délaissé ses tatamis pour la journée. Peut-être est-il avec les autres pour porter le « mikoshi » de son bloc. Ensemble. Dans le son tumultueux des tambours et du pipeau. Ensemble. Sous la chaleur et la poussière.

- -
- Mains sur une poutre du mikoshi -
Tsujido, Japon, 27 juillet 2014
-
- -
-
-
- - -
- - tag:la-grange.net,2014-07-26:2014/07/26/matsuri - - Matsuri de quartier - 2014-07-26T23:59:00+07:00 - 2014-09-22T12:57:00Z - -
-
- Groupes de personnes en face du temple -
Tsujido, Japon, 26 juillet 2014
-
- - -
-
-

Sitting cross-legged and placing plates of salted fish across their legs, they blew against the steam, filled their cheeks with hot bits of fish, and rolled them around inside their mouths. The food was the first hot object they had been near all day, and their noses kept running, threatening to drip into the dishes.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

C'est le temps de la fête de quartier. Les vendeurs s'alignent dans la rue. Les gens boivent, discutent, échangent, rient et mangent. Les jeunes femmes ont mis leur plus beau yukata. Nous traversons une barquette de pommes de terre au beurre dans la main.

- -
- Groupes de personnes dans la rue -
Tsujido, Japon, 26 juillet 2014
-
- -
-
-
- -
- - tag:la-grange.net,2014-07-25:2014/07/25/sacs - - Éco, éco - 2014-07-25T23:59:00+07:00 - 2014-09-22T12:45:00Z - -
-
- Deux poissons sur du papier -
Tsujido, Japon, 24 juillet 2014
-
- - -
-
-

Everyone was silent. All the same, they felt relieved.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Je refuse le sac en plastique à la caisse. La femme avec un large sourire me répond : « éco ! éco ! » C'est la première fois que la compréhension de mon geste est verbalisé. Nous avons tous les deux le sourire. Elle à sa caisse, et moi déjà sur le chemin.

- -
-
-
- - -
- - tag:la-grange.net,2014-07-23:2014/07/23/discussions - - Discussions ouvertes - 2014-07-23T23:59:00+07:00 - 2014-09-19T14:16:00Z - -
-
- personnages en tissu -
Tsurunoyu, Japon, 11 janvier 2008
-
- - -
-
-

It was highly convenient for the employers to assemble such a crew of unorganized migrant workers.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Dans un groupe social, si vous permettez une discussion sur un sujet conflictuel, vous devez être prêt à répondre à cette discussion de manière ouverte et franc-jeu. Si le but de la discussion est de donner l'illusion d'une concertation alors que la décision finale est déjà prise, vous non seulement manipulez cette communauté, mais vous la rendez aussi suspicieuse, divisée. Vous perdez la confiance et l'énergie du groupe à vouloir travailler ensemble. Ce n'est pas une bonne stratégie.

- -
-
-
- -
- - tag:la-grange.net,2014-07-22:2014/07/22/intime - - Vie privée et intimité - 2014-07-22T23:59:00+07:00 - 2014-09-19T11:59:00Z - -
-
- stalagtites sur mur de bois -
Tsurunoyu, Japon, 11 janvier 2008
-
- - -
-
-

They could not go home again. To survive the winter in snowy Hokkaido where they had no relatives, they had to "sell" their bodies as cheaply as dirt. Though they had done it over and over, they would calmly (if such a word is appropriate) do the same again the following year.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

privacy, intimacy sur Ngram donne un résultat différencié avec deux périodes. Je n'ai pas d'interprétation magique. Juste que le mot « privacy » semble émerger dans les années 1910 et intimacy reprend du poil de la bête dans les années 1960.

- -

Qu'est-ce qui fait le succès d'un mot ?

- -
- graphe -
Ngram des mots privacy et intimacy en langue anglaise
-
- -
-
-
- -
- - tag:la-grange.net,2014-07-20:2014/07/20/regex - - Regex 101 - 2014-07-20T23:59:00+07:00 - 2014-09-19T11:59:00Z - -
-
- Tuyaux sur fond de mur en béton -
Atami, Japon, 12 juillet 2014
-
- - -
-
-

A woman took caramels out of a box and handed two each to the nearby children, saying, "You be good to my Kenkichi, and work together like friends." The woman's hair and clothes were covered with cement dust. Her hands were ungainly, large and rough like roots of a tree.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Un de mes outils favoris lorsque j'ai des expressions régulières complexes à explorer est Regex 101. Il permet non seulement de comprendre les choix réalisés au fur et à mesure en expliquant les commandes que l'on choisit dans la boîte en haut à droite. Mais il montre également les succès dans la boite à droite juste en dessous. Il y a de nombreuses petites subtilités et aides dans l'interface.

- -
- copie d'écran -
Une expression régulière sur une chaîne de caractères
-
- -

Un atout supplémentaire et pratique, il possède un générateur automatique de code en JavaScript, PHP et Python.

- -
- copie d'écran -
Génération automatique de code
-
- - -
-
-
- -
- - - tag:la-grange.net,2014-07-19:2014/07/19/fantome - - Le voyage est un fantôme - 2014-07-19T23:59:00+07:00 - 2014-09-16T23:54:00Z - -
-
- Personnes en double dans une rue -
Shibuya, Japon, 19 juillet 2014
-
- - -
-
-

Two foreign sailors with pipes in mouth paced the deck back and forth like automatons.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

De passage. Un immeuble proche de sa destruction devient le canevas pour l'expression. Une transition, un état éphémère, nous voyageons avec notre passé et notre futur à quelques pas de nous-même. Je passe par un café. Six ans que je ne suis pas venu. Et pourtant. « Oh ! Cela fait longtemps ! » m'accueille l'employé. Des capsules de notre existence, images fixes, dans un continuum. Je ferme les yeux. J'ouvre les yeux. Déjà une fraction d'années de lumière. L'esthétique de l'automate. Déjà une fraction d'années de lumière. Le voyage est un fantôme.

- - -
-
-
- -
- tag:la-grange.net,2014-07-17:2014/07/17/expiration - - L'information se cache pour mourir - 2014-07-17T23:59:00+07:00 - 2014-09-15T12:40:00Z - -
-
- Daruman sur étagères vides -
Atami, Japon, 12 juillet 2014
-
- - -
-
-

Blown by the wind, smoke drifted over waves wafting a stifling smell of coal. From time to time a harsh rattle of winches traveling along the waves reverberated against the flesh.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Un article totalement bénin dans la rubrique sport d'un journal en ligne. Et pourtant, l'article a disparu. La rouille aura fait son effet. Il y a cependant trois éléments originaux :

- -
    -
  • L'URL est toujours la même
  • -
  • Le contenu de l'article a été remplacé par la mention The requested article has expired, and is no longer available. Any related articles, and user comments are shown below.
  • -
  • Les commentaires sont toujours présents. Ils sont devenus en fait le commentaire principal. Un peu si comme une œuvre avait été détruite et que nous n'avions plus que les commentaires périphériques pour la reconstruire.
  • -
- -

En fait tout comme un roman historique qui s'appuie sur l'information contextuelle et non directe, nous pourrions nous lancer dans le projet de réécrire ces articles disparus, expirés en utilisant uniquement comme source l'information des commentaires. Cela nous offrirait un champ du possible immensément riche et créatif.

- -
- Copie d'écran d'une page de journal -
JapanToday, 8 juin 2012
-
- - -
-
-
-
- - tag:la-grange.net,2014-07-16:2014/07/16/abandon - - Le premier pas dans la poussière - 2014-07-16T23:59:00+07:00 - 2014-09-15T12:25:00Z - -
-
- Maison abandonnée couverte de lierre -
Atami, Japon, 12 juillet 2014
-
- - -
-
-

Buddy, we're off to hell.

-
-

Takiji Kobayashi, The Crab Cannery Ship.

-
- -

Les lieux abandonnés sont ces endroits qui offrent la possibilité du territoire vierge, le premier pas dans la poussière, la trace dans la neige. On imagine le craquement de la branche morte dans la forêt étouffée. Nous désirons l'ombre, le silence et la suspension du temps, l'océan infini, la tempête de sable, le blizzard.

- -
-
-
- - -
- - tag:la-grange.net,2014-07-15:2014/07/15/cirque - - Le souvenir du cirque - 2014-07-15T23:59:00+07:00 - 2014-09-11T12:25:00Z - -
-
- Deux peluches d'ourson au bord d'une fenêtre -
Atami, Japon, 12 juillet 2014
-
- - -
-
-

Le coeur monte et s'ébat dans l'air mol et fleuri.
-- Mon coeur, qu'attendez-vous de la chaude journée,
-Est-ce le clair réveil de l'enfance étonnée
-Qui regarde, s'élance, ouvre les mains et rit ? -

-
-

Anna de Noailles, L'inquiet désir.

-
- -

Je lui disais « raconte moi l'histoire du cirque Narcisse. » Inlassablement avant que les paupières lourdes n'emportent la fin du récit, ma mère me racontait l'histoire que son père lui racontait dans son enfance. C'est ainsi que la légende du cirque vibre au son de la grande parade. Les rêves d'enfance n'ont pas d'âge. Ils habitent nos corps un à un, génération après génération. Ils vivent sur nos mots et nous les transmettons à la suivante.

- -

Alors ce soir encore, je rêve du cirque Narcisse.

- -
-
-
- - -
- - - tag:la-grange.net,2014-07-14:2014/07/14/amis - - Amis - 2014-07-14T23:59:00+07:00 - 2014-09-11T12:13:00Z - -
-
- Deux personnes marchant sur le trottoir -
Atami, Japon, 12 juillet 2014
-
- - -
-
-

Une averse a lavé le ciel. Il se fait tard.
-Le creux de la vallée est couvert de brouillard ;
-Mais sur les coteaux clairs luit au loin la feuillée,
-Et le firmament mêle à la forêt mouillée
-Des palpitations de clarté pâle. Amis,
-L'heure est propice : allons, par les bois endormis,
-Dans les champs, au-dessus de la prairie humide,
-Voir Vénus qui se lève à l'horizon limpide !

-
-

Émile Blémont, Vénus au ciel.

-
- -

Les décisions que l'on prend par amitié, les chemins que l'on explore ensemble sans toujours se croiser si ce n'est qu'au long des années trop distantes.

-
-
-
- - -
- - tag:la-grange.net,2014-07-13:2014/07/13/vestige - - Twitter et l'empire des bots - 2014-07-13T23:59:00+07:00 - 2014-09-08T10:05:00Z - -
-
- Escalier sans destination -
Atami, Japon, 12 juillet 2014
-
- - -
-
-

On n'estime plus maintenant
-Un homme, eût-il le sens d'Homère
-S'il n'est riche et grands biens tenant
-Quoi qu'il soit trompeur et faussaire.

-
-

Eustorg de Beaulieu, Ballade d'aucunes mauvaises coutumes qui règnent maintenant.

-
- -

Dans nos espaces, nos mots, nos pensées, nous rencontrons des vestiges du sens. Ils ont eu, à un moment donné, toute l'ampleur du signifiant et du signifié. Et puis un jour, ils ont perdu leur raison d'être.

- -

Quel est le sens de nos communications anonymes ? Hier et aujourd'hui, je voulais découvrir pour moi si les agents utilisateurs de l'application twitter et de Safari lui-même sur iOS étaient différents ou similaires. Je voulais comprendre comment le nom choix de son navigateur ou de sa bibliothèques de rendu Web gonflait les statistiques d'un navigateur plutôt qu'un autre.

- -

J'ai donc posté un URL qui n'a pas de représentation sur twitter afin de tester et j'ai suivi le journal des connexions du serveur afin de définir quels étaient les différentes modalités.

- -
http://www.la-grange.net/tmp/test
- -

Un premier test avec mon navigateur, puis avec l'application twitter sur iOS et puis finalement avec Safari sur iOS.

- - - - - - - - - - - -
Liste des accès pour un lien en fonction de la date
heurerefererUA
21:25:06Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0
21:30:00http://t.co/CpmEEUTIwnMozilla/5.0 (iPod; CPU iPhone OS 6_1_6 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B500 Twitter for iPhone
21:31:06Mozilla/5.0 (iPod; CPU iPhone OS 6_1_6 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B500 Safari/8536.25
- -

Comme prévu les deux clients diffèrent. Le début de la chaîne est la même et puis la fin devient :

- -
            Mobile/10B500 Twitter for iPhone
-Version/6.0 Mobile/10B500 Safari/8536.25
-
- -

Dans les statistiques de trafic, on sépare rarement pour les appareils iOS ce qui vient du navigateur directement et ce qui vient de l'utilisation par l'application native des WebViews.

- -

Les non conversations avec les robots

- -

Mais ce qui m'a surpris n'est finalement pas ce que je voulais tester mais le résultat du trafic que j'ai pu observer suite à la publication du lien. Aussitôt le lien publié sur twitter, ce sont les bots qui ont avalé le trafic. Immédiatement, certains avec un HEAD pour tester la ressource, d'autres directement avec un GET. Autres constats de ce trafic organique sur 113 requêtes :

- -
    -
  • 35 Safari, 23 Firefox, 9 chrome, 4 IE
  • -
  • 47 Macintosh, 7 iPhone, 3 iPad, 2 iPod, 7 Android, 10 Windows, 2 Windows Phone, 3 Linux
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Liste des accès pour un lien en fonction de la date
DateMéthodeAgent utilisateur
12T21:25:06GETMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0
12T21:29:01HEADMetaURI API/2.0 +metauri.com
12T21:29:01HEADpython-requests/1.2.3 CPython/2.7.2+ Linux/3.0.0-16-virtual
12T21:29:01GETMozilla/5.0 ()
12T21:29:02GETLivelapbot/0.1
12T21:29:02GETMozilla/5.0 (compatible; TweetmemeBot/3.0; +http://tweetmeme.com/)
12T21:29:03HEADGoogle-HTTP-Java-Client/1.17.0-rc (gzip)
12T21:29:03HEADGoogle-HTTP-Java-Client/1.17.0-rc (gzip)
12T21:29:03GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
12T21:29:10GETMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)
12T21:29:10GETMozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0
12T21:29:18GETJakarta Commons-HttpClient/3.1
12T21:29:45HEADJakarta Commons-HttpClient/3.0.1
12T21:29:56HEADMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
12T21:30:00GETMozilla/5.0 (iPod; CPU iPhone OS 6_1_6 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B500 Twitter for iPhone
12T21:30:14GETMozilla/5.0 (compatible; PaperLiBot/2.1; http://support.paper.li/entries/20023257-what-is-paper-li)
12T21:30:22GETMozilla/5.0 (compatible; PaperLiBot/2.1; http://support.paper.li/entries/20023257-what-is-paper-li)
12T21:31:06GETMozilla/5.0 (iPod; CPU iPhone OS 6_1_6 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B500 Safari/8536.25
12T21:35:05GETMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0
12T21:35:29GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
12T21:35:58GET-
12T21:36:30GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
12T21:37:14GETMozilla/5.0 (Linux; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36
12T21:39:45GETMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2
12T21:42:14GETMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 4.0.20506)
12T21:43:01GETMozilla/5.0 (compatible; EveryoneSocialBot/1.0; support@everyonesocial.com http://everyonesocial.com/)
12T21:43:20GETMozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0
12T21:43:27GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
12T21:43:55HEADMozilla/5.0 (compatible; Jetslide; +http://jetsli.de/crawler)
12T21:44:23GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
12T21:46:39GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/7.0.5 Safari/537.77.4
12T21:46:49GETMozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
12T21:51:06GETPython-urllib/2.7
12T21:51:58GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
12T21:56:06GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.90 Safari/537.1
12T21:59:04GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
12T22:00:35GETTwurly v1.0 (http://twurly.org)
12T22:03:56GETMozilla/5.0 (Linux; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36
12T22:12:56GETMozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 Twitter for iPhone
12T22:13:51GETMozilla/5.0 (Linux; Android 4.0.3; GT-P5110 Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36
12T22:13:58GETMozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 Twitter for iPhone
12T22:16:54GETjack
12T22:26:18GETMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204firefox/2.0.0.1
12T22:36:47GETMozilla/5.0 (compatible; TweetedTimes Bot/1.0; +http://tweetedtimes.com)
12T22:42:44GETMozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920) like Gecko
12T22:52:33GETnewsme/1.0; feedback@news.me
12T23:16:11GETMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
12T23:24:22GETMozilla/5.0 (compatible; TweetedTimes Bot/1.0; +http://tweetedtimes.com)
12T23:24:54GETGooglebot/2.1 (+http://www.google.com/bot.html)
12T23:28:29GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T00:01:06GETMozilla/5.0 (compatible; TweetedTimes Bot/1.0; +http://tweetedtimes.com)
13T00:14:51GETMozilla/5.0 (compatible; TweetedTimes Bot/1.0; +http://tweetedtimes.com)
13T00:23:36GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T00:59:08GETMozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D167 Twitter for iPhone
13T01:05:20GETMozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D201 Twitter for iPhone
13T01:12:28GETMozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 Twitter for iPhone
13T01:22:25HEADJava/1.7.0_51
13T01:36:20GETMozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920) like Gecko
13T01:37:17GETMozilla/5.0 (Android; Mobile; rv:30.0) Gecko/30.0 Firefox/30.0
13T01:47:20GETMozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257
13T01:53:46HEAD-
13T02:26:16GETMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:30.0) Gecko/20100101 Firefox/30.0 Cyberfox/30.0
13T02:33:35GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T03:02:33GETMozilla/5.0 (X11; Linux i686; rv:33.0) Gecko/20100101 Firefox/33.0
13T03:04:06GETMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:30.0) Gecko/20100101 Firefox/30.0
13T03:04:40HEAD-
13T03:16:00GETMozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 Twitter for iPhone
13T03:21:56GETMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0
13T03:39:51GETMozilla/5.0 (Windows NT 6.3; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0
13T03:49:57GETMozilla/5.0 (Mobile; rv:33.0) Gecko/33.0 Firefox/33.0
13T03:54:46GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T04:00:27GETMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0
13T04:03:55GETMozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 Twitter for iPhone
13T04:08:50GETMozilla/5.0 (compatible; TweetedTimes Bot/1.0; +http://tweetedtimes.com)
13T04:10:56GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T04:33:55GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T04:43:24GETMozilla/5.0 (Android; Mobile; rv:30.0) Gecko/30.0 Firefox/30.0
13T04:46:20GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T04:46:39GETMozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257
13T04:56:10GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
13T05:21:18GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T05:33:03GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T05:34:47GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T05:41:46GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T05:51:22GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T05:59:15GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T06:03:10GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T06:11:47GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T06:21:14GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T06:33:04GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T06:40:53GETMozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 Twitter for iPhone
13T06:41:42GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T06:51:18GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T07:02:51GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T07:08:46GETMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:33.0) Gecko/20100101 Firefox/33.0
13T07:11:49GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T07:21:21GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T07:31:49GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T07:41:28GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T07:50:22GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T08:02:41GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T08:15:09HEADlibwww-perl/6.05
13T08:19:42GETMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
13T08:44:23GETpython-requests/2.1.0 CPython/2.7.6 Linux/3.13.0-24-generic
13T08:55:11GETMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0
13T09:07:27GETMozilla/5.0 (Linux; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36
13T09:27:30GETMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0
13T12:24:58GETMozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0
13T12:45:43GETMozilla/5.0 (Android; Mobile; rv:30.0) Gecko/30.0 Firefox/30.0
13T13:10:12HEAD-
13T15:40:55GETMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:30.0) Gecko/20100101 Firefox/30.0
-
-
-
- -
- - tag:la-grange.net,2014-07-12:2014/07/12/atami - - Ce que l'on y cherche - 2014-07-12T23:59:00+07:00 - 2014-09-08T10:05:00Z - -
-
- Boutiques dans les rues -
Atami, Japon, 12 juillet 2014
-
- - -
-
-

Déjà la nuit s'avance, et, du sombre orient,
-Ses voiles par degrés dans les airs se déploient.
-Sommeil, doux abandon, image du néant,
-Des maux de l'existence heureux délassement,
-Tranquille oubli des soins où les hommes se noient ;
-Et vous, qui nous rendez à nos plaisirs passés,
-Touchante Illusion, déesse des mensonges,
-Venez dans mon asile, et sur mes yeux lassés
-Secouez les pavots et les aimables songes.

-
-

Évariste de Parny, Souvenir.

-
- -

Je ne sais pas très bien. Est-ce le fantôme de Atami qui me séduit ? Ou bien est-ce moi qui crée le fantôme dans Atami. Ce matin, je ne savais pas trop quelle direction prendre sur le quai de Tsujido. J'ai finalement le premier train qui venait. Il allait vers Atami et non vers Tokyo.

- -
- Chouette sur une chaise -
Atami, Japon, 12 juillet 2014
-
- -

Le soleil me pousse les épaules dans les rues étroites. La rue étroite me prend la main vers les lieux abandonnés. Une femme prend un verre dans un bar sombre. Sa chouette vivante sur la chaise attends patiemment le fond du verre. Un magasin de céramiques qui ne vend plus rien, juste de la poussière et des images.

- -
- Un pot en céramique sur une étagère -
Atami, Japon, 12 juillet 2014
-
- -

Et une surprise, presque inattendue, se présente. Il aura fallu le coin d'une rue, un premier rideau et puis une porte. Un restaurant de poisson sans fenêtres, une pièce sombre et des notes de jazz, je m'assoie. Je commande un salmon-ikura-don.

- -
- Plateau de repas -
Atami, Japon, 12 juillet 2014
-
- -

Après le repas je reprendrais ma dérive dans la ville fantôme. J'y recherche peut-être le sentiment d'abandon.

- -
- Façade d'immeuble -
Atami, Japon, 12 juillet 2014
-
- - -
-
-
- -
- - tag:la-grange.net,2014-07-11:2014/07/11/souvenir - - La mémoire du goût - 2014-07-11T23:59:00+07:00 - 2014-09-08T09:21:00Z - -
-
- Café en cours d'infusion -
Tsujido, Japon, 5 juillet 2014
-
- - -
-
-

Enfin, de ta liqueur lentement reposée,
-Dans le vase fumant la lie est déposée ;
-Ma coupe, ton nectar, le miel américain,
-Que du suc des roseaux exprima l'Africain,
-Tout est prêt : du Japon l'émail reçoit tes ondes,
-Et seul tu réunis les tributs des deux mondes.

-
-

Jacques Delille, Le café.

-
- -

Parfois nous avons juste besoin de prolonger le souvenir du voyage.

- -
- Café infusé au dessus de lait concentré -
Tsujido, Japon, 5 juillet 2014
-
- -
-
-
- - -
- - tag:la-grange.net,2014-07-10:2014/07/10/typhon - - Typhon discret - 2014-07-10T23:59:00+07:00 - 2014-09-07T13:21:00Z - -
-
- Lampions au dessus de la rue -
Hiratsuka, Japon, 4 juillet 2014
-
- - -
-
-

Je ne laisserai pas de Mémoires.
-La poésie n'est pas la tempête, pas plus que le cyclone. C'est un -fleuve majestueux et fertile.

-
-

Lautréamont, Poésies I.

-
- -

Un Typhon, phon, phon,
-Les magnifiques girouettes,
-Un Typhon, phon, phon,
-Trois p'tits tours et puis s'en vont.

- -

Nous avions fermé tous les volets métalliques de la maison. Okinawa avait subit de plein fouet le souffle du sud. Neoguri devait nous assommer de son marteau. Et puis… et puis… et puis… rien.

- -
-
-
- - -
- - tag:la-grange.net,2014-07-09:2014/07/09/frustration - - Frustration - 2014-07-09T23:59:00+07:00 - 2014-09-07T09:18:00Z - -
-
- bâtiments vus à travers un feuillage -
Omori, Japon, 6 juillet 2014
-
- - -
-
-

Chante donc ta douleur profonde,
-Ton désert au milieu du monde,
-Ton veuvage, ton abandon ;
-Dis, dis quelle amertume affreuse
-Rend la liberté douloureuse
-Pour qui n'en sait plus que le nom !

-
-

Marceline Desbordes-Valmore, Le rossignol aveugle.

-
- -

Il est parfois difficile de trouver le bon équilibre entre le plaisir quotidien que l'on a dans notre travail avec la politique générale de l'organisation qui nous fournit ce travail. Gérer la frustration, prendre du recul et se concentrer sur ce qui nous semble être plus important.

- -

Heureusement ce matin, il y a la bruine fine. Les épines de pin brillent des gouttes d'eau. Heureusement, il y a le souvenir de l'intime feuillage et de l'architecture.

- -
-
-
- -
- - tag:la-grange.net,2014-07-08:2014/07/08/echelle - - Échelle, capacité et opacité - 2014-07-08T23:59:00+07:00 - 2014-09-07T08:34:00Z - -
-
- Dessert en forme de poisson -
Togoshi-Ginza Shinagawa, Japon, 6 juillet 2014
-
- - -
-
-

Le mot local, très clair, s'entend ;
-Du puriste il choque l'oreille ;
-Malgré tout, comme il s'appareille,
-Et comme il s'accorde pourtant
-Avec la parlure d'antan.

-
-

Nérée Beauchemin, Le vieux parler.

-
- -

En me promenant le week-end dernier dans cette rue commerciale, je remarque de nombreuses boutiques, qui ne font pas partie d'une franchise. Elles sont là pour répondre à un besoin qui est local. Elles dépendent des personnes qui les font vivre et non d'une structure multinationale avec ses logiques de marché complètement différente. La question de la marque est une question d'identité personnelle avec son environnement proche et non celle de séduire des milliers de personnes.

- -

Sur le Web, nous tentons souvent de résoudre des problèmes que nous n'avons pas vraiment. La politique économique des infrastructures technologiques nous poussent à certains choix qui finalement sont idiots et en contrepartie créés de nombreux problèmes. Dans les zones urbaines, nous avons accès à des communications cablées ou ADSL de bonne qualité. Très souvent, ces connexions sont permanentes. Nous utilisons des logiciels clients qui sont finalement assez complexes et qui prennent en charge la communication à travers le réseau HTTP.

- -

Et pourtant dès qu'il s'agit d'héberger un service Web, email, etc. Tout devient beaucoup plus compliqué. Il faut louer un espace sur le Web, que ce soit machine unique ou tant de CPUs chez un hébergeur. Ou il est possible pour une personne d'utiliser un des services en ligne offert par l'une des grandes compagnies. Comme toutes ces structures veulent réaliser des bénéfices, leur stratégie est créer des infrastructures qui permettent de gérer un grand nombre. En réalisant ces ensembles, nous permettons une hypercentralisation des services. Les services de courrier, de listes, d'hébergement, de messagerie, de réseau sont alors définies par une poignée de grandes multinationales. Les protocoles sont ajustés afin de permettre à ces services hypercentralisés à haut trafic d'être efficaces.

- -

L'hypercentralisation favorise en retour la surveillance. Elle rend sa pratique efficace et moins coûteuse. Elle devient si accessible qu'il devient tentant d'abandonner un peu de son éthique pour tenter l'expérience et finalement enclencher un processus irréversible. Alors pour répondre à la menace d'une surveillance accrue, nous renforçons la sécurité. Nous rendons nos protocoles plus opaques. Nous créons des murs plus épais, plus hauts. Nous renforçons la résistance. Mais nous n'avons pas réglé le problème initial. Nous avons juste créé les circonstances pour une catastrophe globale plus importante. De la même manière que la course sécuritaire et aux armements ne rend pas le monde plus libre et plus anodin, mais au contraire beaucoup plus sous tension. L'équilibre de la riposte nucléaire tient dans la peur que les gens ne l'utiliseront pas. Elle ne répond pas le monde moins dangereux, bien au contraire.

- -

Alors que faire ?

- -

Pour retourner un réseau Web plus opaque, plus humain et moins victime de la surveillance massive. Il faut favoriser la décentralisation. La décentralisation commence par la réciprocité de la capacité à publier de chez soi, de pouvoir facilement démarrer un serveur Web, d'héberger son propre nom de domaine, sa prope liste de discussions. Nous n'avons pour la plupart aucun besoin des performances ultimes des serveurs Web des grands groupes de presse, des grandes sociétés. Le trafic généré sur nos sites pourrait être parfaitement absorbé par une machine locale. Les logiciels d'administration pourraient être très simplifiés. On ne réglera pas tous les problèmes. On ne garantira pas une sécurité ultime, mais on réduira nettement l'ampleur et l'intérêt des attaques.

- -
- Dessert avec pâte de haricot -
Togoshi-Ginza Shinagawa, Japon, 6 juillet 2014
-
- -

Dans cette rue, j'ai mangé un produit qui a été fait localement, qui n'avait pas de marque sur le paquet en papier, qui n'avait que son goût, qui m'offrait du plaisir et répondait à mon besoin de faim. Non seulement, ce produit peut exister ailleurs fait par une autre boutique, mais celui-ci est l'opportunité de la nostalgie, d'une ancre pour la mémoire, la possibilité d'un manque. Il en est de même de nos services Web, nous n'avons pas besoin d'être résistant à un trafic de millions de personnes lorsqu'uniquement quelques dizaines de personnes nous liront.

- -
-
-
- -
- -
\ No newline at end of file