From 548d0252abb27c7d484de93c78d4104a28045dea Mon Sep 17 00:00:00 2001 From: ganomi Date: Sat, 20 Dec 2014 19:13:47 +0100 Subject: [PATCH] Fix handling of website encoding. Exemplary case was Amazon.de which does not have UTF-8 Encoding. --- controller/lib/bookmarks.php | 48 +- tests/lib_bookmark_test.php | 203 ++- tests/res/amazonHtml.file | 2900 ++++++++++++++++++++++++++++++++++ tests/res/golemHtml.file | 1144 ++++++++++++++ 4 files changed, 4194 insertions(+), 101 deletions(-) create mode 100644 tests/res/amazonHtml.file create mode 100644 tests/res/golemHtml.file diff --git a/controller/lib/bookmarks.php b/controller/lib/bookmarks.php index 712b3cd6..02b07232 100644 --- a/controller/lib/bookmarks.php +++ b/controller/lib/bookmarks.php @@ -542,25 +542,41 @@ class Bookmarks { * @return array Metadata for url; * */ public static function getURLMetadata($url) { - //allow only http(s) and (s)ftp - $protocols = '/^[hs]{0,1}[tf]{0,1}tp[s]{0,1}\:\/\//i'; - //if not (allowed) protocol is given, assume http - if (preg_match($protocols, $url) == 0) { - $url = 'http://' . $url; - } + $metadata = array(); $metadata['url'] = $url; - $page = \OC_Util::getUrlContent($url); - if ($page) { - if (preg_match("/(.*)<\/title>/sUi", $page, $match) !== false) - if (isset($match[1])) { - $metadata['title'] = html_entity_decode($match[1], ENT_QUOTES, 'UTF-8'); - //Not the best solution but.... - $metadata['title'] = str_replace('™', chr(153), $metadata['title']); - $metadata['title'] = str_replace('‐', '‐', $metadata['title']); - $metadata['title'] = str_replace('–', '–', $metadata['title']); - } + $page = ""; + + try { + $page = \OC::$server->getHTTPHelper()->getUrlContent($url); + } catch (\Exception $e) { + throw $e; } + + //Check for encoding of site. + //If not UTF-8 convert it. + $encoding = array(); + preg_match('/charset="?(.*?)["|;]/i', $page, $encoding); + + if (isset($encoding[1])) { + $decodeFrom = strtoupper($encoding[1]); + } else { + $decodeFrom = 'UTF-8'; + } + + if ($page) { + + if ($decodeFrom != 'UTF-8') { + $page = iconv($decodeFrom, "UTF-8", $page); + } + + preg_match("/<title>(.*)<\/title>/si", $page, $match); + + if (isset($match[1])) { + $metadata['title'] = html_entity_decode($match[1]); + } + } + return $metadata; } diff --git a/tests/lib_bookmark_test.php b/tests/lib_bookmark_test.php index b85bd183..8b11cbbd 100644 --- a/tests/lib_bookmark_test.php +++ b/tests/lib_bookmark_test.php @@ -2,103 +2,136 @@ OC_App::loadApp('bookmarks'); -use OCA\Bookmarks\Controller\Lib\Bookmarks; +use \OCA\Bookmarks\Controller\Lib\Bookmarks; class Test_LibBookmarks_Bookmarks extends PHPUnit_Framework_TestCase { - private $userid; - private $db; + private $userid; + private $db; - protected function setUp() { - $this->userid = \OCP\User::getUser(); - $this->db = \OC::$server->getDb(); - } + protected function setUp() { + $this->userid = \OCP\User::getUser(); + $this->db = \OC::$server->getDb(); + } - function testAddBookmark() { - $this->cleanDB(); - $this->assertCount(0, Bookmarks::findBookmarks($this->userid, $this->db, 0, 'id', array(), true, -1)); - Bookmarks::addBookmark($this->userid, $this->db, 'http://owncloud.org', 'Owncloud project', array('oc', 'cloud'), 'An Awesome project'); - $this->assertCount(1, Bookmarks::findBookmarks($this->userid, $this->db, 0, 'id', array(), true, -1)); - } + function testAddBookmark() { + $this->cleanDB(); + $this->assertCount(0, Bookmarks::findBookmarks($this->userid, $this->db, 0, 'id', array(), true, -1)); + Bookmarks::addBookmark($this->userid, $this->db, 'http://owncloud.org', 'Owncloud project', array('oc', 'cloud'), 'An Awesome project'); + $this->assertCount(1, Bookmarks::findBookmarks($this->userid, $this->db, 0, 'id', array(), true, -1)); + } - function testFindBookmarks() { - $this->cleanDB(); - Bookmarks::addBookmark($this->userid, $this->db, "http://www.google.de", "Google", array("one"), "PrivateNoTag", false); - Bookmarks::addBookmark($this->userid, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); - Bookmarks::addBookmark($this->userid, $this->db, "http://www.golem.de", "Golem", array("one"), "PublicNoTag", true); - Bookmarks::addBookmark($this->userid, $this->db, "http://www.9gag.com", "9gag", array("two", "three"), "PublicTag", true); - $outputPrivate = Bookmarks::findBookmarks($this->userid, $this->db, 0, "", array(), true, -1, false); - $this->assertCount(4, $outputPrivate); - $outputPrivateFiltered = Bookmarks::findBookmarks($this->userid, $this->db, 0, "", array("one"), true, -1, false); - $this->assertCount(3, $outputPrivateFiltered); - $outputPublic = Bookmarks::findBookmarks($this->userid, $this->db, 0, "", array(), true, -1, true); - $this->assertCount(2, $outputPublic); - $outputPublicFiltered = Bookmarks::findBookmarks($this->userid, $this->db, 0, "", array("two"), true, -1, true); - $this->assertCount(1, $outputPublicFiltered); - } + function testFindBookmarks() { + $this->cleanDB(); + Bookmarks::addBookmark($this->userid, $this->db, "http://www.google.de", "Google", array("one"), "PrivateNoTag", false); + Bookmarks::addBookmark($this->userid, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); + Bookmarks::addBookmark($this->userid, $this->db, "http://www.golem.de", "Golem", array("one"), "PublicNoTag", true); + Bookmarks::addBookmark($this->userid, $this->db, "http://www.9gag.com", "9gag", array("two", "three"), "PublicTag", true); + $outputPrivate = Bookmarks::findBookmarks($this->userid, $this->db, 0, "", array(), true, -1, false); + $this->assertCount(4, $outputPrivate); + $outputPrivateFiltered = Bookmarks::findBookmarks($this->userid, $this->db, 0, "", array("one"), true, -1, false); + $this->assertCount(3, $outputPrivateFiltered); + $outputPublic = Bookmarks::findBookmarks($this->userid, $this->db, 0, "", array(), true, -1, true); + $this->assertCount(2, $outputPublic); + $outputPublicFiltered = Bookmarks::findBookmarks($this->userid, $this->db, 0, "", array("two"), true, -1, true); + $this->assertCount(1, $outputPublicFiltered); + } - function testFindBookmarksSelectAndOrFilteredTags() { - $this->cleanDB(); - $secondUser = $this->userid . "andHisClone435"; - Bookmarks::addBookmark($this->userid, $this->db, "http://www.google.de", "Google", array("one"), "PrivateNoTag", false); - Bookmarks::addBookmark($this->userid, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); - Bookmarks::addBookmark($this->userid, $this->db, "http://www.golem.de", "Golem", array("four"), "PublicNoTag", true); - Bookmarks::addBookmark($this->userid, $this->db, "http://www.9gag.com", "9gag", array("two", "three"), "PublicTag", true); - Bookmarks::addBookmark($secondUser, $this->db, "http://www.google.de", "Google", array("one"), "PrivateNoTag", false); - Bookmarks::addBookmark($secondUser, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); - Bookmarks::addBookmark($secondUser, $this->db, "http://www.golem.de", "Golem", array("four"), "PublicNoTag", true); - Bookmarks::addBookmark($secondUser, $this->db, "http://www.9gag.com", "9gag", array("two", "three"), "PublicTag", true); - $resultSetOne = Bookmarks::findBookmarks($this->userid, $this->db, 0, 'lastmodified', array('one', 'three'), true, -1, false, array('url', 'title'), 'or'); - $this->assertEquals(3, count($resultSetOne)); - $resultOne = $resultSetOne[0]; - $this->assertFalse(isset($resultOne['lastmodified'])); - $this->assertFalse(isset($resultOne['tags'])); - } + function testFindBookmarksSelectAndOrFilteredTags() { + $this->cleanDB(); + $secondUser = $this->userid . "andHisClone435"; + Bookmarks::addBookmark($this->userid, $this->db, "http://www.google.de", "Google", array("one"), "PrivateNoTag", false); + Bookmarks::addBookmark($this->userid, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); + Bookmarks::addBookmark($this->userid, $this->db, "http://www.golem.de", "Golem", array("four"), "PublicNoTag", true); + Bookmarks::addBookmark($this->userid, $this->db, "http://www.9gag.com", "9gag", array("two", "three"), "PublicTag", true); + Bookmarks::addBookmark($secondUser, $this->db, "http://www.google.de", "Google", array("one"), "PrivateNoTag", false); + Bookmarks::addBookmark($secondUser, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); + Bookmarks::addBookmark($secondUser, $this->db, "http://www.golem.de", "Golem", array("four"), "PublicNoTag", true); + Bookmarks::addBookmark($secondUser, $this->db, "http://www.9gag.com", "9gag", array("two", "three"), "PublicTag", true); + $resultSetOne = Bookmarks::findBookmarks($this->userid, $this->db, 0, 'lastmodified', array('one', 'three'), true, -1, false, array('url', 'title'), 'or'); + $this->assertEquals(3, count($resultSetOne)); + $resultOne = $resultSetOne[0]; + $this->assertFalse(isset($resultOne['lastmodified'])); + $this->assertFalse(isset($resultOne['tags'])); + } - function testFindTags() { - $this->cleanDB(); - $this->assertEquals(Bookmarks::findTags($this->userid, $this->db), array()); - Bookmarks::addBookmark($this->userid, $this->db, 'http://owncloud.org', 'Owncloud project', array('oc', 'cloud'), 'An Awesome project'); - $this->assertEquals(array(0 => array('tag' => 'cloud', 'nbr' => 1), 1 => array('tag' => 'oc', 'nbr' => 1)), Bookmarks::findTags($this->userid, $this->db)); - } + function testFindTags() { + $this->cleanDB(); + $this->assertEquals(Bookmarks::findTags($this->userid, $this->db), array()); + Bookmarks::addBookmark($this->userid, $this->db, 'http://owncloud.org', 'Owncloud project', array('oc', 'cloud'), 'An Awesome project'); + $this->assertEquals(array(0 => array('tag' => 'cloud', 'nbr' => 1), 1 => array('tag' => 'oc', 'nbr' => 1)), Bookmarks::findTags($this->userid, $this->db)); + } - function testFindUniqueBookmark() { - $this->cleanDB(); - $id = Bookmarks::addBookmark($this->userid, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); - $bookmark = Bookmarks::findUniqueBookmark($id, $this->userid, $this->db); - $this->assertEquals($id, $bookmark['id']); - $this->assertEquals("Heise", $bookmark['title']); - } + function testFindUniqueBookmark() { + $this->cleanDB(); + $id = Bookmarks::addBookmark($this->userid, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); + $bookmark = Bookmarks::findUniqueBookmark($id, $this->userid, $this->db); + $this->assertEquals($id, $bookmark['id']); + $this->assertEquals("Heise", $bookmark['title']); + } - function testEditBookmark() { - $this->cleanDB(); - $id = Bookmarks::addBookmark($this->userid, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); - Bookmarks::editBookmark($this->userid, $this->db, $id, "http://www.google.de", "NewTitle", array("three")); - $bookmark = Bookmarks::findUniqueBookmark($id, $this->userid, $this->db); - $this->assertEquals("NewTitle", $bookmark['title']); - $this->assertEquals("http://www.google.de", $bookmark['url']); - $this->assertEquals(1, count($bookmark['tags'])); - } + function testEditBookmark() { + $this->cleanDB(); + $id = Bookmarks::addBookmark($this->userid, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); + Bookmarks::editBookmark($this->userid, $this->db, $id, "http://www.google.de", "NewTitle", array("three")); + $bookmark = Bookmarks::findUniqueBookmark($id, $this->userid, $this->db); + $this->assertEquals("NewTitle", $bookmark['title']); + $this->assertEquals("http://www.google.de", $bookmark['url']); + $this->assertEquals(1, count($bookmark['tags'])); + } - function testDeleteBookmark() { - $this->cleanDB(); - Bookmarks::addBookmark($this->userid, $this->db, "http://www.google.de", "Google", array("one"), "PrivateNoTag", false); - $id = Bookmarks::addBookmark($this->userid, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); - $this->assertNotEquals(false, Bookmarks::bookmarkExists("http://www.google.de", $this->userid, $this->db)); - $this->assertNotEquals(false, Bookmarks::bookmarkExists("http://www.heise.de", $this->userid, $this->db)); - Bookmarks::deleteUrl($this->userid, $this->db, $id); - $this->assertFalse(Bookmarks::bookmarkExists("http://www.heise.de", $this->userid, $this->db)); - } + function testDeleteBookmark() { + $this->cleanDB(); + Bookmarks::addBookmark($this->userid, $this->db, "http://www.google.de", "Google", array("one"), "PrivateNoTag", false); + $id = Bookmarks::addBookmark($this->userid, $this->db, "http://www.heise.de", "Heise", array("one", "two"), "PrivatTag", false); + $this->assertNotEquals(false, Bookmarks::bookmarkExists("http://www.google.de", $this->userid, $this->db)); + $this->assertNotEquals(false, Bookmarks::bookmarkExists("http://www.heise.de", $this->userid, $this->db)); + Bookmarks::deleteUrl($this->userid, $this->db, $id); + $this->assertFalse(Bookmarks::bookmarkExists("http://www.heise.de", $this->userid, $this->db)); + } - protected function tearDown() { - $this->cleanDB(); - } + function testGetURLMetadata() { - function cleanDB() { - $query1 = OC_DB::prepare('DELETE FROM *PREFIX*bookmarks'); - $query1->execute(); - $query2 = OC_DB::prepare('DELETE FROM *PREFIX*bookmarks_tags'); - $query2->execute(); - } + $config = $this->getMockBuilder('\OCP\IConfig') + ->disableOriginalConstructor()->getMock(); + $certificateManager = $this->getMock('\OCP\ICertificateManager'); + $httpHelperMock = $this->getMockBuilder('\OC\HTTPHelper') + ->setConstructorArgs(array($config, $certificateManager)) + ->getMock(); + $returnAmazonDe = file_get_contents(__DIR__ . '/res/amazonHtml.file'); + $returnGolemDe = file_get_contents(__DIR__ . '/res/golemHtml.file'); + $httpHelperMock->expects($this->any())->method('getUrlContent')->with($this->anything())->will($this->onConsecutiveCalls($returnAmazonDe, $returnGolemDe)); + $this->registerHttpHelper($httpHelperMock); + + $metadataAmazon = Bookmarks::getURLMetadata('amazonHtml'); + $this->assertTrue($metadataAmazon['url'] == 'amazonHtml'); + $this->assertTrue(strpos($metadataAmazon['title'], 'ü') !== false); + + $metadataGolem = Bookmarks::getURLMetadata('golemHtml'); + $this->assertTrue($metadataGolem['url'] == 'golemHtml'); + $this->assertTrue(strpos($metadataGolem['title'], 'für') == false); + } + + protected function tearDown() { + $this->cleanDB(); + } + + function cleanDB() { + $query1 = OC_DB::prepare('DELETE FROM *PREFIX*bookmarks'); + $query1->execute(); + $query2 = OC_DB::prepare('DELETE FROM *PREFIX*bookmarks_tags'); + $query2->execute(); + } + + /** + * Register an http helper mock for testing purposes. + * @param $httpHelper http helper mock + */ + private function registerHttpHelper($httpHelper) { + $this->oldHttpHelper = \OC::$server->query('HTTPHelper'); + \OC::$server->registerService('HTTPHelper', function () use ($httpHelper) { + return $httpHelper; + }); + } } diff --git a/tests/res/amazonHtml.file b/tests/res/amazonHtml.file new file mode 100644 index 00000000..30e3de7c --- /dev/null +++ b/tests/res/amazonHtml.file @@ -0,0 +1,2900 @@ + + + + + + + + + + + + + + + + + + +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/html4/loose.dtd"> + + + +<html> +<head> + + + + <script>var BtechCF = {a:1,cf:function(){if(--BtechCF.a == 0){ uet('cf');amznJQ.declareAvailable('cf');}},inc:function(){BtechCF.a++;}};</script> + + + + + +<!--btech-iplc--> + <script type="text/javascript"> + + var btiplv; + new Image().src = "http://g-ecx.images-amazon.com/images/G/03/gno/sprites/global-sprite-v1._V339352741_.png"; + </script> + <meta http-equiv="x-dns-prefetch-control" content="on"> + <link rel="dns-prefetch" href="http://g-ecx.images-amazon.com"> + <link rel="dns-prefetch" href="http://z-ecx.images-amazon.com"> + <link rel="dns-prefetch" href="http://ecx.images-amazon.com"> + <link rel="dns-prefetch" href="http://completion.amazon.com"> + <link rel="dns-prefetch" href="http://fls-eu.amazon.de"> + <!-- ue --> +<style type="text/css"><!-- + + + +BODY { font-family: arial,verdana,helvetica,sans-serif; font-size: 13px; background-color: #FFFFFF; color: #000000; margin-top: 0px; } +TD, TH { font-family: arial,verdana,helvetica,sans-serif; font-size: 13px; } + +.serif { font-family: times,serif; font-size: 16px; } +.sans { font-family: arial,verdana,helvetica,sans-serif; font-size: 16px; } + +.small { font-family: arial,verdana,helvetica,sans-serif; font-size: 13px; } + +.h1 { font-family: arial,verdana,helvetica,sans-serif; color: #E47911; font-size: 16px; } +.h3color { font-family: arial,verdana,helvetica,sans-serif; color: #E47911; font-size: 13px; } +h2.small {margin-bottom: 0em; } +h2.h1 { margin-bottom: 0em; } +h2.h3color { margin-bottom: 0em; } +.tiny { font-family: arial,verdana,helvetica,sans-serif; font-size: 11px; } +.tinyprice { font-family: arial,verdana,helvetica,sans-serif; color: #990000; font-size: 11px; } +.highlight { font-family: arial,verdana,helvetica,sans-serif; color: #990000; font-size: 13px; } +.popover-tiny { font-size: 11px; font-family: arial,verdana,helvetica,sans-serif; } +.horizontal-search { font-weight: bold; font-size: 13px; color: #FFFFFF; font-family: arial,verdana,helvetica,sans-serif; } +.listprice { font-family: arial,verdana,helvetica,sans-serif; text-decoration: line-through; } +.price { font-family: arial,verdana,helvetica,sans-serif; color: #990000; } +.horizontal-websearch { font-size: 11px; font-family: arial,verdana,helvetica,sans-serif; padding-left: 12px; } +.big { font-size: 18px; font-family: arial,verdana,helvetica,sans-serif; } +.amabot_widget .headline { color: #E47911; font-size: 16px; display: block; font-weight: bold; } +div.unified_widget .headline { color: #E47911; font-size: 16px; display: block; font-weight: bold; } + +div#page-wrap { min-width: 980px; } + +* html div#page-wrap { border-right: 980px solid #fff; width: 100%; margin-right: 25px;} +* html div#content { float: left; position:relative; margin-right: -980px; } +div#leftcol, div#leftcolhidden { float: left; width: 180px; margin:5px 0px 0px 5px; display: inline; } + +div#rightcol, div#rightcolhidden { float: right; width: 300px; margin-top:15px;} + +div#leftcolhidden { clear:left;} +div#rightcolhidden { clear:right; } + + div#center1, div#centercol, div#centerrightspancol { overflow: hidden; } + +* html div#center1 { width: auto; } +* html div#centercol { width: auto; } + +* html div#centerrightspancol { width: 100%; } +div#page-footer { clear: both; } + +a:link { font-family: arial,verdana,helvetica,sans-serif; color: #004B91; } +a:visited { font-family: arial,verdana,helvetica,sans-serif; color: #996633; } +a:active { font-family: arial,verdana,helvetica,sans-serif; color: #FF9933; } + +a.noclick, a.noclick:visited { color: #000000; } + +.noLinkDecoration a { text-decoration: none; border-bottom: none; } +.noLinkDecoration a:hover { text-decoration: underline; } +.noLinkDecoration a.dynamic:hover { text-decoration: none; border-bottom: 1px dashed; } +.noLinkDecoration a.noclick:hover { color: #000000; text-decoration: none; border-bottom: 1px dashed; } + +.attention { background-color: #FFFFD5; } +.alertgreen { color: #009900; font-weight: bold; } +.alert { color: #FF0000; font-weight: bold; } +.topnav { font-family: arial,verdana,helvetica,sans-serif; font-size: 12px; text-decoration: none; } +.topnav a:link, .topnav a:visited { text-decoration: none; color: #003399; } +.topnav a:hover { text-decoration: none; color: #E47911; } +.topnav-active a:link, .topnav-active a:visited { font-family: arial,verdana,helvetica,sans-serif; font-size: 12px; color: #E47911; text-decoration: none; } +.eyebrow { font-family: arial,verdana,helvetica,sans-serif; font-size: 10px; font-weight: bold;text-transform: uppercase; text-decoration: none; color: #FFFFFF; } +.eyebrow a:link { text-decoration: none; } +.popover-tiny a, .popover-tiny a:visited { text-decoration: none; color: #003399; } +.popover-tiny a:hover { text-decoration: none; color: #E47911; } +.tabon a:hover, .taboff a:hover { text-decoration: underline; } +.tabon div, .taboff div { margin-top: 7px; margin-left: 9px; margin-bottom: 5px; } +.tabon a, .tabon a:visited { font-size: 10px; color: #FFCC66; font-family: arial,verdana,helvetica,sans-serif; text-decoration: none; text-transform: uppercase; font-weight: bold; line-height: 10px; } +.taboff a, .taboff a:visited { font-size: 10px; color: #000000; font-family: arial,verdana,helvetica,sans-serif; text-decoration: none; text-transform: uppercase; font-weight: bold; line-height: 10px; } +.indent { margin-left: 1em; } +.half { font-size: .5em; } +.list div { margin-bottom: 0.25em; text-decoration: none; } +.hr-center { margin: 15px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dotted; border-right-style: none; border-bottom-style: none; border-left-style: none; border-top-color: #999999; border-right-color: #999999; border-bottom-color: #999999; border-left-color: #999999; } + + +.amabot_right .h1 { color: #E47911; font-size: .92em; } +.amabot_right .amabot_widget .headline, .amabot_left .amabot_widget .headline { color: #E47911; font-size: .92em; display: block; font-weight: bold; } +.amabot_left .h1 { color: #E47911; font-size: .92em; } +.amabot_left .amabot_widget, .amabot_right .amabot_widget, .tigerbox { padding-top: 8px; padding-bottom: 8px; padding-left: 8px; padding-right: 8px; border-bottom: 1px solid #C9E1F4; border-left: 1px solid #C9E1F4; border-right: 1px solid #C9E1F4; border-top: 1px solid #C9E1F4; } + +.amabot_center div.unified_widget, .amabot_center .amabot_widget { font-size: 12px; } +.amabot_right div.unified_widget, .amabot_right .amabot_widget { font-size: 12px; } +.amabot_left div.unified_widget, .amabot_left .amabot_widget { font-size: 12px; } + +.rightArrow { color: #E47911; font-weight: bold; padding-right: 6px; } +.nobullet { list-style-type: none } +.homepageTitle { font-size: 28pt; font-family: 'Arial Bold', Arial; font-weight: 800; font-variant: normal; color: #80B6CE; line-height:1em; } +div.unified_widget p { margin:0 0 0.5em 0; line-height:1.4em; } + +div.unified_widget h2 { color:#E47911; padding:0; } + +.amabot_right div.unified_widget .headline, .amabot_left div.unified_widget .headline { color: #E47911; font-size: .92em; display: block; font-weight: bold; } +div.unified_widget sup { font-weight:normal; font-size: 75%; } +div.unified_widget h2 sup { font-size: 50%; } + +td.amabot_left div.unified_widget h2, td.amabot_right div.unified_widget h2, div.amabot_left div.unified_widget h2, div.amabot_right div.unified_widget h2 { font-size:100%; margin:0 0 0.5em 0; } +td.amabot_center div.unified_widget h2, div.amabot_center div.unified_widget h2 { font-size:18px; font-weight:normal; margin:0 0 0.35em 0px; } +td.amabot_center, div.amabot_center { padding:5px 15px 5px 10px; } +div.unified_widget ul { margin: 1em 0; padding: 0 0 0 15px; list-style-position:inside; } + +div.unified_widget ol { margin:0; padding:0 0 0 2.5em; } + +div.unified_widget a:link, div.unified_widget a:visited { text-decoration:underline; } +div.unified_widget a:hover { text-decoration:underline; } +div.unified_widget p.seeMore { clear:both; font-family:arial,verdana,helvetica,sans-serif; margin:0; padding-left:1.15em; text-indent: -1.15em; font-size:100%; font-weight:normal; } +div.unified_widget p.seeMore a:link, div.unified_widget p.seeMore a:visited { text-decoration:underline; } +div.unified_widget p.seeMore a:hover { text-decoration: underline; } +div.unified_widget .carat, div.left_nav .carat { font-weight:bold; font-size:120%; font-family:verdana,arial,helvetica,sans-serif; color:#E47911; margin-right:0.20em; } +div.unified_widget a img { border:0; } + +div.h_rule { clear:both; } +div#centerrightspancol div.h_rule { clear:right; } +div.unified_widget { margin-bottom:2em; clear:both; } +div.unified_widget div.col1 { width: 100%; } +div.unified_widget div.col2 { width: 49%; } +div.unified_widget div.col3 { width: 32%; } +div.unified_widget div.col4 { width: 24%; } +div.unified_widget div.col5 { width: 19%; } +div.unified_widget table { border:0; border-collapse:collapse; width:100%; } +div.unified_widget td { padding:0 8px 8px 0; vertical-align:top; } +div.unified_widget table.col1 td { width:100%; } +div.unified_widget table.col2 td { width:49%; } +div.unified_widget table.col3 td { width:32%; } +div.unified_widget table.col4 td { width:24%; } +div.unified_widget table.col5 td { width:19%; } +div.unified_widget td.bottom { vertical-align:baseline; } +div.unified_widget table h4, div.unified_widget h4 { color:#000; font-size:100%; font-weight:normal; margin:0; padding:0; } +div.rcmBody div.prodImage, amabot_widget div.prodImage {float:left; margin:0px 0.5em 0.25em 0px;} + + +td.amabot_right div.unified_widget, td.amabot_left div.unified_widget, div.amabot_right div.unified_widget, div.amabot_left div.unified_widget { border: 1px solid #C9E1F4; padding: 8px; margin-bottom:20px; } + +* html td.amabot_right div.unified_widget, * html div.amabot_right div.unified_widget { height:100%; } +* html td.amabot_left div.unified_widget, * html div.amabot_left div.unified_widget { height:100%; } + +div.rcmBody, amabot_widget div.rcmBody { line-height:1.4em; } +div.rcmBody a:link, div.rcmBody a:visited { text-decoration: underline; } + +div.rcmBody p.seeMore, amabot_widget div.rcmBody p.seeMore { margin-top:0.5em; } +div.rcmBody div.bannerImage { text-align:center; } +div.rcmBody h2 span.homepageTitle { display:block; margin-bottom:-0.3em; margin-top:-0.12em; line-height:1em; } +div.rcmBody h2 img { float:none; } +table.coopTable div.rcmBody .headline { font-size: 110%; } +table.coopTable div.rcmBody h2 { font-size: 110%; font-weight:bold; } +table.promo div.rcmBody h2 { font-size: 100%; font-weight:bold; } + +div.left_nav { font-family: Arial, sans-serif; font-size:100%; margin:0; line-height:1.05em; width:100%; border: 1px solid #C9E1F4; padding-bottom:10px; } +div.left_nav h2 { margin:0 0 0 0; color: #000000; font-weight: bold; line-height: 1.25em; font-size: 100%; font-family: arial,verdana,helvetica,sans-serif; padding: 3px 6px; background-color: #EAF3FE; } +div.left_nav h3 { font-family: arial,verdana,helvetica,sans-serif; margin:0.5em 0 0.4em 0.5em; color: #E47911; font-weight: bold; line-height: 1em; font-size:100%; padding-right:0.5em; } +div.left_nav ul { margin:0; padding:0; } +div.left_nav li, div.left_nav p { list-style: none; margin:0.5em 0.5em 0 1em; line-height:1.2em; } + +div.left_nav hr { margin: 1em 0.5em; border-top:0; border-left:0; border-right:0; border-bottom: 1px dashed #cccccc; } + +div.left_nav a:link, div.left_nav a:visited { color: #003399; text-decoration: none; font-family: Arial, sans-serif; } +div.left_nav a:hover { color: #2a70fc; text-decoration: underline; } +div.left_nav p.seeMore { padding-left:0.9em; text-indent:-0.9em; margin-top: 0.35em; margin-bottom: 1em; } + +div.left_nav p.seeMore a:link, div.left_nav p.seeMore a:visited { text-decoration:none; } +div.left_nav p.seeMore a:hover { text-decoration:underline; } +div.seller_central li { font-size:95%; } + +div.leftnav_popover { width:35em; border:3px solid #ededd3; padding:10px; } + +div.leftnav_popover li { font-size: 100%; } + +div.leftnav_popover h2 { font-family:arial,verdana,helvetica,sans-serif; margin:0 0 0.5em 0; color:#E47911; line-height: 1em; font-size:100%; padding-right:0.5em; background-color: #FFFFFF; padding-left:0; } + +div.leftnav_popover ul.popover_col { float:left; width:33%; margin:0; padding:0; } +div.leftnav_popover ul.popover_col li { list-style:none; font-size:90%; line-height:1.5em; line-height:1.2em; margin: 0 5px 0.7em 0 } +div.leftnav_popover ul.popover_col li a { text-decoration:none; } +div.leftnav_popover ul.popover_col li a:hover { text-decoration:underline; } +div.leftnav_popover p.seeMore { margin-left:0; } +div.leftnav_popover div.h_rule_popup { clear:left; margin-bottom: 5px; border-bottom:1px dashed #cccccc; } + +div.asinItem { float:left; margin-bottom:1em; width:32%; } +div.asinTextBlock { padding:0 8px 8px 0; } +div.asinItem div.prodImage { height:121px; display:table-cell; vertical-align:bottom; } +div.asinItem div.localImage { display:table-cell; vertical-align:bottom; } + +div.asinItem span { margin: 0.5em 0 0.25em 0; } +div.asinItem ul { margin:0; padding:0 0 0.5em 1.3em; text-indent: -1.3em; font-size:90%; } + +div.asinTitle {padding-top:3px; padding-bottom:2px;} +div.row { clear:both; } +body.dp {} +body.dp div.h_rule { clear:none; } +body.dp div.unified_widget { clear:none; } +div.asinCoop div.asinItem { float:none; width:100%;} +div.asinCoop_header {} +div.asinCoop_footer {} + +div.newAndFuture div.asinItem ul { font-size:100%; } +div.newAndFuture div.asinItem li { list-style-position: outside; margin:0 0 0.35em 20px; padding:0; text-indent: 0; } +div.newAndFuture h3 { font-size:100%; margin:1em 0 ; } +div.newAndFuture a:link, div.newAndFuture a:visited { text-decoration:underline; } +div.newAndFuture a:hover { text-decoration:underline; } +div.newAndFuture p.seeMore { margin:-0.75em 0 0 35px; } + +div.unified_widget ol.topList { margin: 0; padding: 0; list-style: none; } +div.unified_widget ol.topList li { list-style: none; clear: both; display: list-item; padding-top: 6px; } +div.unified_widget ol.topList .productImage { display: block; float: left;vertical-align: top;text-align: center;width:60px; } +div.unified_widget ol.topList .productText { display: block; float: left; padding-left:10px; vertical-align: top; } +:root div.unified_widget span.productImage { display: table-cell; float: none; } +:root div.unified_widget span.productText { display: table-cell; float: none; } +div.unified_widget dl.priceBlock {margin:0 0 0.45em 0;} +div.unified_widget dl.priceBlock dt {clear:left; font-weight:bold; float:left; margin:0 0.3em 0 0;} +div.unified_widget dl.priceBlock dd {margin:0 0 0.2em 0;} +div.unified_widget .bold {font-weight:bold;} +div.unified_widget .byline { font-size: 95%; font-weight: normal; } +table.thirdLvlNavContent div.blurb { margin:10px; } + +div.pageBanner h1 { font-family:Arial, Helvetica, sans-serif; font-weight:normal; font-size:225%; color: #e47911; letter-spacing:-0.03em; margin:0; } +div.pageBanner p { font-size:90%; color:#888888; margin:0; } + +div.pageBanner h1.bkgnd { background-repeat:no-repeat; background-color:#FFFFFF; overflow:hidden; text-indent:-100em; } + +div.blurb div.title +{ + font-weight:bold; padding-top:5px; padding-bottom:2px; +} + +--></style> + +<style type="text/css"> +<!-- + +div#leftcol { + width: 185px; +} + +div#rightcolbtf2 div.unified_widget { + border: none; +} + +div#rightcolbtf2 h2 { + color: #333; + border-bottom: 1px solid #DDDDDD; + padding-bottom: 4px; + font-weight: normal; + line-height: 14px; + font-size: 14px; +} + +div.amabot_center div.unified_widget h2 { border-bottom:1px solid #ddd; padding-bottom:2px; } + +#centerA {overflow:hidden;padding:15px 15px 5px 0px;} +#centerB {overflow:hidden;padding:0px 15px 5px 0px;} +.gwcswWrap {width:660px;} +div#gwcswA {margin:auto;padding-bottom:15px;} +div#gwcswB {margin:4px auto 0 auto;padding-bottom:15px;} +.gwcswWrap .gwcswNav {height:33px;} +.gwcswWrap .gwcswSlots {line-height:0px;overflow:hidden;} +.gwcswSlots br {display:none;} +#gwCenterAd {margin:0 auto;} +#center2 {overflow:hidden;margin-top:4px;} +--> +</style> + + +<script language="Javascript1.1" type="text/javascript"> +<!-- +function amz_js_PopWin(url,name,options){ + var ContextWindow = window.open(url,name,options); + ContextWindow.focus(); + return false; +} +//--> +</script> + + + + + + <script type="text/javascript"> +var BtechShopAllState={UNKNOWN:0,SHOWING:1,HIDDEN:2};var BtechRSA={eDisplayShopAllOnLoad:BtechShopAllState.UNKNOWN,eDisplayShopAllStartingState:BtechShopAllState.UNKNOWN,iFinalWidthThreshold:1250,iFinalThrottle:100,iWindowWidth:function(){var a=0;if(typeof(window.innerWidth)=="number"&&!navigator.msMaxTouchPoints){a=window.innerWidth}else{if(document.documentElement&&(document.documentElement.clientWidth)){a=document.documentElement.clientWidth}else{if(document.body&&(document.body.clientWidth)){a=document.body.clientWidth}}}return a},shiftCenterDiv:function(g,f){var c=String.fromCharCode(92);var a=document.getElementById(g);if(a!=undefined){var b="bunkBedShifted";if(f){var e=new RegExp(c+"b"+b+c+"b");if(!e.test(a.className)){a.className+=" "+b}}else{var d=new RegExp("(?:^|"+c+"s)"+b+"(?!"+c+"S)");a.className=a.className.replace(d,"")}a.style.visibility="visible"}},preComputeMetrics:function(a){if(a){BtechRSA.eDisplayShopAllOnLoad=BtechRSA.eDisplayShopAllStartingState=BtechShopAllState.SHOWING}else{BtechRSA.eDisplayShopAllOnLoad=BtechRSA.eDisplayShopAllStartingState=BtechShopAllState.HIDDEN}},bunkBedRedraw:function(a){BtechRSA.shiftCenterDiv("centerA",a);BtechRSA.shiftCenterDiv("centerB",a);BtechRSA.shiftCenterDiv("center2",a)},wideEnoughForShopAll:function(){var a=BtechRSA.iWindowWidth();return a>BtechRSA.iFinalWidthThreshold},bunkBedResize:function(){BtechRSA.bunkBedRedraw(BtechRSA.wideEnoughForShopAll());BtechRSA.preComputeMetrics(BtechRSA.wideEnoughForShopAll())}}; +</script> + + +<script type="text/javascript"> + window.usePageContentReady = true; +</script> + + + + + + + + + + + + + +<style> +.tcg h2, .tcg h2 a, .tcg h2 a:active, .tcg h2 a:hover, .tcg h2 a:visited{ + font-family:Arial,Verdana,Helvetica,sans-serif; +} +.tcg1 .hdlnblk h2, .tcg2 .hdlnblk h2 { + font-size:37px; + line-height:1em; +} +.tcg1 .subhed { + font-size:23px; +} +.tcg4 .hdlnblk h2 { + font-size:29px; +} +.tcg4 .subhed { + font-size:1.6em; +} +</style> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<!--btech-iplc--> + <script type="text/javascript"> + + + btiplv = new Image(); + if (typeof uet == 'function') { + BtechCF.inc(); + btiplv.onload = function() { BtechCF.cf(); }; + } + btiplv.src = "http://g-ecx.images-amazon.com/images/G/03/kindle/merch/campaigns/2014/holidays/xmas_deals_week-gw_4D-d-4-de-660x180._V335168022_.jpg"; + + new Image().src = "http://g-ecx.images-amazon.com/images/G/03/kindle/merch/campaigns/2014/holidays/xmas_bueller-roto-d-de-300x120._V334682485_.jpg"; + </script> +<!-- MarkCF --> + + + + + + + + + + + + + + + + + + + + + + + + + + + +<title>Amazon.de: Gnstige Preise fr Elektronik & Foto, Filme, Musik, Bcher, Games, Spielzeug & mehr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + +
+ Amazon nutzt Cookies. +Was sind Cookies? +
+ +
+
Amazon Fire TV Amazon Fire TV

+ + + + + + +
Geschenkideen Die besten Geschenkideen und alles fr Weihnachten

Kinderweihnachtswelt Kinderweihnachtswelt

Sale 50% auf Sportbekleidung Sale 50% auf Sportbekleidung

50 EUR Sony-Rabatt-Aktion

Sony Xperia Aktion
Beim Kauf eines ausgewählten Sony Smartphones zusammen mit der neuen Sony Smartwatch 3. + Zur Sony-Aktion
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Bestseller

+ +
+ stndlich aktualisiert +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ Beechfield Morf +
+
+
+
+ 1. + + +
+ Beechfield Morf SupraFleece Schlauchschal, verschiedene… + + + +
+ + +
+
+
+
+ Myrtle Beach +
+
+
+
+ 2. + + +
+ Myrtle Beach - Lssige bergroe Hkelbeanie + + + +
+ + +
+
+
+
+ Brandit JERSEY +
+
+
+
+ 3. + + +
+ Brandit JERSEY BEANIE aus leichter Stretch-Baumwolle + + + +
+ + +
+
+
+
+ FLEXFIT Baseball +
+
+
+
+ 4. + + +
+ FLEXFIT Baseball Cap in versch. Farben + + + +
+ + +
+
+
+
+ Beechfield Unisex +
+
+
+
+ 5. + + +
+ Beechfield Unisex Wintermtze / Beanie / Mtze / Strickmtze + + + +
+ + +
+
+
+
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Bestseller

+ +
+ stndlich aktualisiert +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ Kneipp Badel +
+
+
+
+ 1. + + +
+ Kneipp Badel Kollektion, 6 x 20 ml + + + +
+ + + + EUR 6,99 (EUR 5,83 / 100 ml) + + + + + + +
+
+
+
+ Nivea Verwhnset +
+
+
+
+ 2. + + +
+ Nivea Verwhnset 2014, 1er Pack (1 x 5 Stck) + + + +
+ + + + EUR 11,99 EUR 11,95 (EUR 1,71 / 100 ml) + + + + + + +
+
+
+
+ Bomb Cosmetics +
+
+
+
+ 3. + + +
+ Bomb Cosmetics Badepralinen Geschenkset Chocolate Bath + + + +
+ + + + EUR 10,99 (EUR 6,87 / 100 g) + + + + + + +
+
+
+
+ Tangle Teezer +
+
+
+
+ 4. + + +
+ Tangle Teezer Salon Elite Schwarz + + + +
+ + + + EUR 16,95 EUR 12,26 + + + + + + +
+
+
+
+ Bomb Cosmetics +
+
+
+
+ 5. + + +
+ Bomb Cosmetics Sweet Heart, Badekugeln, Geschenkset + + + +
+ + + + EUR 17,38 + + + + + + +
+
+
+
+ +
+ +
+
+ + + + + + + + + + + + + + +
visa visa

+
+
+ + + +
+
+
+
+
+
+
Kindle Paperwhite Kindle Fire HD 7 Fire TV Weihnachtsangebote

+ +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+
+
+
+
+
+
+ + + + + + +
Amazon Logistikzentren Pnktliche Lieferung zum Fest garantiert
+ +
+
+
+
+
+ +
+ + + + + + + + + + +
+ + +
+

LSP: Sporternährung auf höchstem Niveau

Entdecken Sie LSP
Entdecken Sie jetzt bei uns LSP:
  • hochwertige Zutaten
  • hergestellt in Deutschland
  • große Auswahl an Produkten

Finden Sie hier das passende Produkt für Sie

+

Neu: Saeco Grandbaristo Avanti

GrandBaristo
+ + +Das Premium Kaffee-Erlebnis für die vernetzte Welt. Die +Saeco Grandbaristo Avanti: + + +
  • Ganz entspannt per Bluetooth bedienen
  • Bis zu 16 Kaffeespezialitäten per App einstellbar
  • Automatische Wartung und schrittweise Anleitungen durch die App
  • Variabler Brühdruck für kräftigen Espresso bis zum klassischen Kaffee
  • 6 Benutzerprofile: individuelle Vorlieben speichern

Mehr erfahren

+ +

PC Gaming - alles auf einen Blick

+ +
+ + +
+
+
+ +

Elektronik & Foto: Die beliebtesten Produkte

+ +
+ +
+
+
+ +

Buch-Geschenkideen aus dem Weihnachtsshop

+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + +
+
+
+ + + +

Die Bestseller: DJ-Equipment

+ +
+ + +
+
+
+ +

Computer- & Zubehör-Preishits: Jetzt Schnäppchen sichern

+ +
+ +
+
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/res/golemHtml.file b/tests/res/golemHtml.file new file mode 100644 index 00000000..e8a9501c --- /dev/null +++ b/tests/res/golemHtml.file @@ -0,0 +1,1144 @@ + + + + + + + + + + +Golem.de: IT-News für Profis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + +
+ + +
+ +
+ + +
+ +
+
+ +
+
+
+ +
+ +
+ + + + +
+ + +
+ +
+
+

Directory Authorities

Tor-Projekt befürchtet baldigen Angriff auf seine Systeme

+

+ Noch im Dezember 2014 könnte das Tor-Netzwerk vielleicht nicht mehr nutzbar sein. Die Macher des Projekts haben einen anonymen Tipp erhalten, der auf einen Angriff auf zentrale Komponenten des Netzes hindeutet. + 18 Kommentare +

+ Directory Authorities: Tor-Projekt befürchtet baldigen Angriff auf seine Systeme + +
    +
+
+
+
+ + +
+ +
+
+ +
+ +
+
+
+

Artikel

+
    +
  1. + Core M-5Y10 im Test: Kleiner Core M fast wie ein Großer

    Core M-5Y10 im Test

    Kleiner Core M fast wie ein Großer

    +

    + Kurz langsamer und danach fast genauso flott: Intels Core M-5Y10 leistet trotz Passivkühlung und offiziell weniger Takt ähnlich viel wie der Core M-5Y70. Manchmal dürfte weniger sogar mehr sein. + Von Marc Sauter
    + + 9 Kommentare +

    + +
  2. +
  3. + ODST: Gratis-Kampagne für Halo Collection wegen Bugs

    ODST

    Gratis-Kampagne für Halo Collection wegen Bugs

    +

    + Die Kampagne namens ODST aus Halo 3 gibt es demnächst in überarbeiteter Fassung für alle, die die Master Chief Collection bereits gekauft haben. Die Chefin des Studios 343 Industries plant auch weitere Gratis-Angebote, weil die Sammlung etliche Startprobleme hatte. + + 5 Kommentare + Video +

    + +
  4. +
+
+ +
+
+
+
Anzeige
+ + +
+
+
+ + +
+
    +
  1. + Zeitserver: Sicherheitslücken in NTP

    Zeitserver

    Sicherheitslücken in NTP

    +

    + In der Referenzimplementierung des Network Time Protocol (NTP) wurden mehrere Buffer Overflows gefunden, die die Ausführung von Code auf NTP-Servern erlauben. + + 16 Kommentare +

    + +
  2. +
  3. + Medienbericht: Axel Springer will T-Online.de übernehmen

    Medienbericht

    Axel Springer will T-Online.de übernehmen

    +

    + Der Wirtschaftswoche zufolge will sich die Deutsche Telekom von Teilen ihres Onlinegeschäfts trennen. Dabei soll die Axel-Springer-Gruppe vor allem das Portal T-Online.de übernehmen, was aber die Kartellwächter noch beschäftigen könnte. + + 38 Kommentare +

    + +
  4. +
  5. + Rohrpostzug: Hyperloop entsteht nach Feierabend

    Rohrpostzug

    Hyperloop entsteht nach Feierabend

    +

    + Mit Überschallgeschwindigkeit durch eine Röhre reisen - so stellt sich Elon Musk das Transportsystem der Zukunft vor. Ein Unternehmen mit rund 100 Mitarbeitern arbeitet fleißig daran. Nebenbei. + + 48 Kommentare +

    + +
  6. +
+
+
+
+
+
+
  1. + Guardians of Peace: Sony-Hack wird zum Politikum

    Guardians of Peace

    Sony-Hack wird zum Politikum

    +

    + Das FBI hat offiziell Nordkorea beschuldigt, Urheber des Hackerangriffs auf Sony Pictures zu sein. Laut der US-Bundespolizei weist die untersuchte Malware Parallelen zu vorherigen Angriffen auf, die ebenfalls dem Land zugeordnet sein sollen. + + 65 Kommentare +

    + +
  2. +
  3. + Lehrreiche Geschenke: Stille Nacht, Bastelnacht

    Lehrreiche Geschenke

    Stille Nacht, Bastelnacht

    +

    + Schluss mit geistlosen Geschenken: Warum nicht mal einen Bastelrechner unter den Weihnachtsbaum legen? Oder ein Roboter-Bastelset? Golem.de hat einige Vorschläge für Präsente, die Technik-Laien beim Einstieg in die IT helfen, und bei denen auch Profis noch etwas lernen. + + 46 Kommentare +

    + +
  4. +
  5. + Urheberrecht: Flickr Wall Art nutzt keine CC-Bilder mehr

    Urheberrecht

    Flickr Wall Art nutzt keine CC-Bilder mehr

    +

    + Flickr hat auf die Kritik an seinem Dienst Wall Art reagiert und erlaubt nun nicht mehr das Drucken fremder Bilder mit Creative-Commons-Lizenz auf Leinwand und Papier, obwohl dies legal gewesen ist. + + 7 Kommentare +

    + +
  6. +
  7. + i8-Smartphone: Linshof erliegt dem (T)Rubel

    i8-Smartphone

    Linshof erliegt dem (T)Rubel

    +

    + Aus und vorbei: Linshof ist geschlossen worden, da die angeblichen Investoren ihre Gelder zurückgezogen haben. Hintergrund soll eine politische Verstrickung sein, die Linshof kurz öffentlich machte. + + 46 Kommentare +

    + +
  8. +
+
+
+
+
+
+
  1. + Circuitscribe ausprobiert: Stromkreise malen für Teenies

    Circuitscribe ausprobiert

    Stromkreise malen für Teenies

    +

    + Mit den Circuitscribe-Sets von Electroninks können sich Jugendliche an der Elektrotechnik versuchen. Golem.de hat die Altersempfehlung ignoriert und selbst gemalt. + + 41 Kommentare + Video +

    + +
  2. +
  3. + Elite Dangerous: Einmal durch die Milchstraße und zurück

    Elite Dangerous

    Einmal durch die Milchstraße und zurück

    +

    + Die Weltraumsimulation lebt: Elite Dangerous bietet eine riesige Spielwelt, sieht umwerfend aus und könnte mit seiner Vielfalt sogar Eve Online den Rang ablaufen. + Von Achim Fehrenbach
    + + 116 Kommentare + Video +

    + +
  4. +
  5. + IT-Bereich: China will ausländische Technik durch eigene ersetzen

    IT-Bereich

    China will ausländische Technik durch eigene ersetzen

    +

    + Weg mit Microsoft, Cisco und Co., her mit den eigenen Produkten: China plant, ausländische IT-Technik in Behörden und staatlichen Unternehmen durch Produkte chinesischer Hersteller zu ersetzen. Damit verschärft das Land den bereits schwelenden Streit mit ausländischen Anbietern. + + 61 Kommentare +

    + +
  6. +
  7. + Kaufberatung: Worauf es bei einem Notebook ankommt

    Kaufberatung

    Worauf es bei einem Notebook ankommt

    +

    + Convertible oder Desktop Replacement, Business- oder Consumer-Gerät, AMD oder Intel, spiegelnd mit Touch oder matt: Es ist schwer, den Überblick auf dem Notebook-Markt zu behalten. Ein Wegweiser. + Von Marc Sauter
    + + 268 Kommentare + Video +

    + +
  8. +
+
+
+
+
+
+
  1. + Mobiltelefonie: UMTS-Verschlüsselung ausgehebelt

    Mobiltelefonie

    UMTS-Verschlüsselung ausgehebelt

    +

    + Berliner Sicherheitsforscher haben die Verschlüsselung in UMTS-Netzen ausgehebelt. Möglicherweise hat die NSA auf diesem Weg einst das Zweithandy der Kanzlerin überwacht. + + 6 Kommentare +

    + +
  2. +
  3. + Chaton: Samsung schaltet seinen Messenger ab

    Chaton

    Samsung schaltet seinen Messenger ab

    +

    + Es hat sich ausgechattet: Samsung schaltet Anfang 2015 seinen Messenger Chaton ab. Das Chat-Programm war seit 2011 Bestandteil von Samsungs Galaxy-Smartphones und wurde auch für andere mobile Betriebssysteme portiert. + + 110 Kommentare +

    + +
  4. +
  5. + Stacked Memory: Lecker, Stapelchips!

    Stacked Memory

    Lecker, Stapelchips!

    +

    + Größere SSDs, schnellere Grafikkarten und längere Akkulaufzeiten bei Smartphones: Speicherzellen oder DRAM-Chips, die wie die Etagen eines Hochhauses gestapelt werden, bieten viele Vorteile. + Von Marc Sauter
    + + 26 Kommentare +

    + +
  6. +
  7. + Samsung NX300: Unabhängige Firmware verschlüsselt Fotos

    Samsung NX300

    Unabhängige Firmware verschlüsselt Fotos

    +

    + Was passiert mit Fotos, wenn eine Kamera gestohlen wird? Nichts - wenn es eine Systemkamera von Samsung ist, auf der eine modifizierte Firmware installiert ist. Die gibt die Bilder nur für Befugte frei. + + 10 Kommentare +

    + +
  8. +
  9. + Misfortune Cookie: Sicherheitslücke in Routern angeblich weit verbreitet

    Misfortune Cookie  

    Sicherheitslücke in Routern angeblich weit verbreitet

    +

    + Laut einer Meldung von Check Point sind viele Router von einer Sicherheitslücke betroffen, die eigentlich schon 2005 behoben wurde. Doch die Firma geizt auch auf Anfrage von Golem.de mit Details, die Darstellung liest sich eher wie eine Werbekampagne für die Personal Firewall ZoneAlarm. + + 19 Kommentare +

    + +
  10. +
  11. + USBdriveby: Hackerwerkzeuge für die Halskette

    USBdriveby

    Hackerwerkzeuge für die Halskette

    +

    + Schick, aber perfide: Wer schnell einmal einen Rechner hacken will, der kann sich das passende Werkzeug um den Hals hängen, wie das Projekt USBdriveby vorschlägt. Es offenbart auch Schwachstellen in Mac OS X, die damit ausgenutzt werden können. + + 29 Kommentare +

    + +
  12. +
  13. + Arbeiter in China: BBC findet schlechte Arbeitsbedingungen bei Apple-Zulieferer

    Arbeiter in China

    BBC findet schlechte Arbeitsbedingungen bei Apple-Zulieferer

    +

    + Übermüdete Arbeiter, 16-Stunden-Schichten, 18 Tage Arbeit ohne freien Tag - Undercover-Journalisten der BBC haben beim Apple-Zulieferer Pegatron zahlreiche Verstöße gegen Apples Arbeitsvorschriften entdeckt. Auch bei den konfliktfrei geförderten Metallen scheint es noch Probleme zu geben. + + 33 Kommentare +

    + +
  14. +
  15. + Deutscher Entwicklerpreis 2014 Summit: Das dreifache Balancing für den E-Sport

    Deutscher Entwicklerpreis 2014 Summit

    Das dreifache Balancing für den E-Sport

    +

    + E-Sport boomt und bietet Entwicklern und Publishern viele Möglichkeiten etwa für die Vermarktung von Games. Allerdings ist es inzwischen extrem aufwendig, den Ansprüchen der anspruchsvollen Community zu genügen, so ESL-Veranstalter Turtle Entertainment. + + 32 Kommentare + Video +

    + +
  16. +
  17. + Sicherheitssystem: Volvo will Fahrradfahrer mit der Cloud schützen

    Sicherheitssystem

    Volvo will Fahrradfahrer mit der Cloud schützen

    +

    + Die Hälfte aller tödlichen Fahrradunfälle geschieht durch Zusammenstöße mit Autos. Damit beide Verkehrsteilnehmer künftig weniger Unfälle haben, will Volvo sie vernetzen. Dazu wird der Helm aufgerüstet. + + 106 Kommentare + Video +

    + +
  18. +
  19. + Security: Schwere Sicherheitslücke im Git-Client

    Security

    Schwere Sicherheitslücke im Git-Client

    +

    + Eine schwere Sicherheitslücke im Git-Client für Windows und Mac OS X macht Rechner von außen angreifbar. Es gibt bereits Aktualisierungen, die schnellstmöglich eingespielt werden sollten. + + 24 Kommentare +

    + +
  20. +
+
+
+ + + + +
+ +
+
Anzeige
+ + +
+ + +
+ +
+ +
    +
  1. Softwareentwickler (m/w) C# / .Net
    + SÜTRON electronic GmbH, Filderstadt bei Stuttgart +
  2. +
  3. SW-Entwickler (m/w)
    + Robert Bosch Car Multimedia GmbH, Hildesheim +
  4. +
  5. Testingenieur/in Software und Systeme
    + MOBIL ELEKTRONIK GMBH, Langenbrettach +
  6. +
  7. Projekt Office Mitarbeiter (m/w)
    + ADAC e.V., München +
  8. +
+

 

+

Detailsuche

+
+
+ +
+
Top-Angebote
+
    +
  1. TIPP: Amazon Last-Minute-Angebote Tag 9: Games, Blu-ray, Technik u. v. m.
  2. +
  3. NEU: Caseking Early Christmas
    (u. a. VTX3D Radeon R9 290 X-Edition V2 4GB DDR5 229,90€)
  4. +
  5. TOP-PREIS: Crysis 3 Download
    2,99€
  6. +
+

 

+

Weitere Angebote

+
+
+
+
Folgen Sie uns
+ + + + + + + +
    
+
+
+

Weitere Videos

+ +
+ + + +
+ + + + + + + +
+
+
+
+
+
Haben wir etwas übersehen?
+

E-Mail an news@golem.de

+
+
+ +
+
Anzeige
+ + +
+ +
+ +
+ + + +
+ +Netzverschlüsselung: Mythen über HTTPS
Netzverschlüsselung
Mythen über HTTPS
+

Google will HTTP zum unsicheren Protokoll degradieren, der Trend geht zum verschlüsselten Netz. Daran gibt es auch Kritik, doch die beruht oft auf Missverständnissen.

+
    +
  1. Websicherheit Chrome will vor HTTP-Verbindungen warnen
  2. +
  3. SSLv3 Kaspersky-Software hebelt Schutz vor Poodle-Lücke aus
  4. +
  5. TLS-Verschlüsselung Poodle kann auch TLS betreffen
  6. +
+
+
+ + + +
+ +ROM-Ecke: Pac Man ROM - Android gibt alles
ROM-Ecke
Pac Man ROM - Android gibt alles
+

Wer die Vorzüge von Cyanogenmod, Paranoid Android und AOKP schätzt, findet sie mit weiteren Optionen in Pac Man ROM: Halo, Gestensteuerung, Appbar, Benachrichtigungen im Standby-Modus, Heads-up-Benachrichtigungen und vieles mehr machen das ROM zu einer der umfangreichsten und besten auf dem Markt.

+
    +
  1. ROM-Ecke Slimkat - viele Einstellungen und viel Schwarz
  2. +
+
+
+ + + +
+ +Jahresrückblick: Was 2014 bei Golem.de los war
Jahresrückblick
Was 2014 bei Golem.de los war
+

Abomodell, Heft, Selbstdefinition - und viele schöne Texte: Nicht nur in der Technik hat sich 2014 viel getan, sondern auch bei Golem.de.

+
    +
  1. In eigener Sache Golem.de sucht (Junior) Concepter/-in für Onlinewerbung
  2. +
  3. In eigener Sache Golem.de offline und unplugged
  4. +
  5. In eigener Sache Golem.de sucht Videoredakteur/-in
  6. +
+
+
+ + + +
+ +Security: Smarthomes, offen wie Scheunentore
Security
Smarthomes, offen wie Scheunentore
+

Vernetzte Wohnungen und Häuser versprechen zwar mehr Komfort, sie bieten dann allerdings auch eine riesige Angriffsfläche.

+
    +
  1. Software-Plattform Bosch und Cisco gründen Joint Venture für Smart Home
  2. +
  3. Pantelligent Die funkende Bratpfanne
  4. +
  5. Smarthome Das intelligente Haus wird nie fertig
  6. +
+
+
+ + + +
+ +Nexus 6 gegen Moto X: Das Nexus ist tot
Nexus 6 gegen Moto X
Das Nexus ist tot
+

Mit dem neuen, teuren Nexus 6 hat sich Google von seiner bisherigen Preispolitik verabschiedet - und damit offenbar die Nexus-Reihe, wie wir sie kannten, begraben. Ein Alternativgerät ist das Moto X von Motorola, das einige Extrafunktionen und Designoptionen bietet.

+
    +
  1. Teardown Nexus 6 kommt mit wenig Kleber aus
  2. +
  3. Google Nexus 6 kommt doch erst viel später
  4. +
  5. Google Nexus 6 erscheint nächste Woche - doch nicht
  6. +
+
+
+ + + +
+ +E-Mail-Ausfall in München: Und wieder wars nicht Limux
E-Mail-Ausfall in München
Und wieder wars nicht Limux
+

Bei der Fehlersuche nach dem E-Mail-Ausfall in München offenbaren sich katastrophale Zustände bei der IT-Verwaltung sowie ein sehr seltsam anmutender Spamfilter. Dafür passt der öffentliche Umgang mit dem Problem durch OB Reiter in die Kritik an seinem Verhältnis zum Limux-Projekt.

+
    +
  1. Öffentliche Verwaltung Massiver E-Mail-Ausfall bei der Stadt München
  2. +
  3. Limux Kopf einziehen und über Verschwörung tuscheln
  4. +
  5. Limux Windows-Rückkehr würde München Millionen kosten
  6. +
+
+
+ + + +
+ +1.200-MBit-Powerline im Test: "Schatz, mach das Licht aus, das Netz ist so langsam!"
1.200-MBit-Powerline im Test
"Schatz, mach das Licht aus, das Netz ist so langsam!"
+

Sowohl per Steckdose als auch per WLAN soll Devolos neues Powerline-Kit 1.200 Megabit pro Sekunde erreichen. Im besten Fall bleibt davon ein Viertel übrig, wenn man alles richtig macht. Dennoch überzeugt das System - wenn nicht gerade Energiesparlampen stören.

+
    +
+
+
+ + + +
+ +Games-Verfilmungen: Videospiele erobern Hollywood
Games-Verfilmungen
Videospiele erobern Hollywood
+

Warcraft, Assassin's Creed, Angry Birds: Immer mehr populäre Computerspiele werden verfilmt. Denn Spiele unterhalten nicht nur auf dem heimischen Bildschirm.

+
    +
  1. Entwicklerpreis Summit 2014 Wiederspielbarkeit Reloaded
  2. +
  3. Adr1ft Mit Oculus Rift und UE4 ins All
  4. +
  5. The Game Awards 2014 Dragon Age ist bestes Spiel, Miyamoto zeigt neues Zelda
  6. +
+
+
+ + + +
+ +O2 Car Connection im Test: Der Spion unterm Lenkrad
O2 Car Connection im Test
Der Spion unterm Lenkrad
+

Das O2-Car-Connection-Kit soll alte Autos smart machen. Wie unser Test zeigt, macht es das Fahrzeug aber nicht viel schlauer - und auch den Fahrer kaum klüger.

+
    +
  1. Urteil Finger weg vom Handy beim Autofahren
  2. +
  3. Urban Windshield Jaguar bringt Videospiel-Feeling ins Auto
  4. +
  5. Tweak Carplay ohne passendes Auto verwenden
  6. +
+
+
+ + + +
+ +Parrot Bebop ausprobiert: Handliche Kameradrohne mit großem Controller
Parrot Bebop ausprobiert
Handliche Kameradrohne mit großem Controller
+

Fliegender Fisch: Parrot hat seine Kameradrohne mit Fischaugenobjektiv und den dazugehörigen Skycontroller gezeigt. Golem.de hat die Drohne ausprobiert.

+
    +
  1. Parrot Smartphone-Teleprompter für das Kameraobjektiv
  2. +
+
+
+ + + +
+ +Linshof: Die gut versteckte Firma hinter dem Wunder-Smartphone
Linshof
Die gut versteckte Firma hinter dem Wunder-Smartphone
+

Nach den ersten 24 Stunden Kontakt mit der Firma Linshof scheint sie ein Paradebeispiel dafür zu sein, wie man ein Startup nicht macht: Das Unternehmen versteckt sich, kommuniziert nur per E-Mail und droht einem Blogger mit rechtlichen Schritten.

+
    +
  1. Smartphone-Markt Samsung schwächelt weiter, Xiaomi drängt in die Top 5
  2. +
  3. Xodiom Spitzensmartphone scheint ein Schwindel zu sein
  4. +
  5. Puzzle Phone Neues modulares Smartphone soll 2015 erscheinen
  6. +
+
+
+ + + +
+ +Yotaphone 2 im Test: Das Smartphone neu gedacht - und endlich auch durchdacht
Yotaphone 2 im Test
Das Smartphone neu gedacht - und endlich auch durchdacht
+

Ein ganz neues Smartphone-Konzept: Das ist Yota im zweiten Anlauf gelungen. Das Yotaphone 2 kann komplett über seinen E-Paper-Touchscreen bedient werden. Das ergibt ein komplett neues Smartphone-Gefühl, wie sich im Test zeigte.

+
    +
+
+
+ + + +
+ +Grafiktreiber im Test: AMD wagt mit Catalyst Omega Neuanfang samt Downsampling
Grafiktreiber im Test
AMD wagt mit Catalyst Omega Neuanfang samt Downsampling
+

Downsampling so einfach wie noch nie, ruckelfreie Blu-rays, mehr Leistung und jede Menge Bugfixes: AMD legt mit Catalyst Omega ein neues Konzept für seine Grafiktreiber unter Windows und Linux vor, das überzeugt. Ein Kritikpunkt vieler Spieler ist aber noch nicht berücksichtigt.

+
    +
  1. Partikelsimulation Nvidias Flex rührt das Müsli an
  2. +
  3. Geforce GTX 980 Matrix Asus' Overclocker-Grafikkarte schmilzt Eis
  4. +
  5. Dual-GPU-Grafikkarte AMDs Radeon R9 295 X2 nur kurzfristig billiger
  6. +
+
+
+ + + +
+ +Zbox Pico im Test: Der Taschenrechner, der fast alles kann
Zbox Pico im Test
Der Taschenrechner, der fast alles kann
+

Ein Mini-PC für die Hosentasche oder das Wohnzimmer: Zotacs Zbox Pico ist ein Windows-Rechner im Smartphone-Format. Er streamt Filme oder Spiele, hat schnellen Flash-Speicher und arbeitet lautlos.

+
    +
+
+
+ + + +
+ +Rock n' Roll Racing (1993): Nachbrenner vom Schneesturm
Rock n' Roll Racing (1993)
Nachbrenner vom Schneesturm
+

Golem retro_ In Episode 4 treten wir aufs digitale Retro-Gaspedal und baggern in der Spielehistorie von Blizzard, den Machern von World of Warcraft, Hearthstone und Diablo. Gefunden haben wir Rock N' Roll Racing - das Actionrennspiel mit dem Wahnsinnssoundtrack.

+
    +
  1. Ultima Underworld (1992) Der revolutionäre Dungeon Simulator
  2. +
  3. Sid Meier's Colonization (1994) Auf Augenhöhe mit George Washington
  4. +
  5. Star Wars X-Wing (1993) Flugsimulation mit R2D2 im Nacken
  6. +
+
+
+
+ + + +
+ + + + + + + + + + + +
+ +
+ +
+
+ + + + + + + + + + + +
+
+ + + \ No newline at end of file