Sonntag, 11. November 2018

Shirtee-Shop für die eigene Webseite

Ein Tutorial mit dem ein Shirtee-Shop/Store in die eigene Webseite eingebunden werden kann.

Stand: 11/2018

Den folgenden PHP Code in eine Datei schreiben und diese per Kommandozeile aufrufen und dabei das Ergebnis in eine Datei schreiben. Beispiel:
[user@server ~]$ cd /path/to/the/phpcodefile/
[user@server phpcodefile]$ cd /path/to/the/phpcodefile/
[user@server phpcodefile]$ php phpcodefile.php >shirteeshop.txt
Danach das Ergebnis in der Datei in die eigene Webseite per include einbinden. Beispiel:
<?php
include __DIR__ . ("/shirteeshop.txt");
?>
Danach noch das zugehörige CSS in eine Datei schreiben und im Webseite <head> einbinden. Beispiel:
<link rel="stylesheet" type="text/css" href="shirteeshopstyle.css">

PHP Code:
1.) die URL vom Shop eintragen.
2.) die Anzahl der Shopseiten eintragen.
3.) eine Bild-Datei als "shirteebrokenimage.png" in das gleiche Verzeichnis wie die PHP Code Datei speichern.
4.) eventuell: den Namen vom Pfad für die Image-Dateien anpassen.
<?php
// YOUR SHIRTEE store URL
$shirteestoreurl = "https://www.shirtee.com/de/store/shopname/";
//
// THE LIMIT FOR STORE PAGES
$shirteestorelimitpages = "4";
//
// THE FOLDER-NAME FOR IMAGE SAVING ON YOUR WEBHOST
$shirteestoreimagesdir = "shirteeimages"; // relative path
//
// Extract the Store Name for the URL Query String
$shirteestoreurlexplode = explode("/", $shirteestoreurl);
$shirteestorename = $shirteestoreurlexplode[5];
//
$shirtee_mkdir = __DIR__ . "/" . $shirteestoreimagesdir;
if (file_exists($shirtee_mkdir)) {
$shirteestoreimagesscandir = scandir($shirtee_mkdir);
foreach (array_slice($shirteestoreimagesscandir, 2) as $unlinkshirteeimages) {
unlink($shirtee_mkdir . "/" . $unlinkshirteeimages);
}
}
//
if (!file_exists($shirteestoreimagesdir)) {
mkdir($shirteestoreimagesdir, 0755);
}
//
// The PAGES for while
$shirteestorenewarray = [];
for ($p = 1; $p <= $shirteestorelimitpages; $p++) {
//
$shirteestoreurllimitpages = $shirteestoreurl . "?p=" . $p;
//
$shirteestore = file_get_contents($shirteestoreurllimitpages);
//
if (((bool) $shirteestore === true)) {
$shirteestoreexplodeone = explode('<ul class="products-grid-campaigns products-grid products-grid--max-4-col">', $shirteestore);
$shirteestoreexplode = explode('</div></div></div></div></li></ul>', $shirteestoreexplodeone[1]);
$shirteestoreold = $shirteestoreexplode[0] . '</div></div></div></div></li>';
//
// match all img src="" in the original sourcecode
preg_match_all("/(src=(.*?) )/", $shirteestoreold, $shirteestoreimgsrcmatches, PREG_PATTERN_ORDER);
//
//
// the IMAGE for while
$shirteestoreimagesrcurlarray = [];
$shirteestorenewimagessourcepatharray = [];
for ($i = 0; $i < count($shirteestoreimgsrcmatches[2]); $i++ ) {
//
array_push($shirteestoreimagesrcurlarray, $shirteestoreimgsrcmatches[2][$i]);
//
$shirteestoreimagesrcurlpreview = urldecode(str_replace('"', '', $shirteestoreimgsrcmatches[2][$i]));
//
if (strpos($shirteestoreimgsrcmatches[2][$i], "shirtee.com/preview")) {
//
$file_get_contents_opts = array(
'http' => array(
'follow_location' => false,
'timeout' => 60,
)
);
$file_get_contents_context = stream_context_create($file_get_contents_opts);
//
if (false !== ($file_get_contents_content = @file_get_contents($shirteestoreimagesrcurlpreview, false, $file_get_contents_context))) {
//$shirteestoreimgurlpreviewcontent = $file_get_contents_content;
preg_match_all("/(content=\"0;url=(.*?)\")/", $file_get_contents_content, $shirteestoreimgsrcpreviewmatches, PREG_PATTERN_ORDER);
$shirteestoreimgsrcmatchesnew[2][$i] = $shirteestoreimgsrcpreviewmatches[2][0];
} elseif ((bool)$file_get_contents_content === false) {
// BROKEN image elseif
// extract img filename from preview-url
$shirteestoreimagesrcurlpreviewpur = urldecode(str_replace('"', '', str_replace('&s=i320', '', $shirteestoreimgsrcmatches[2][$i])));
$shirteestoreimagesrcurlpreviewpurexplode = explode("/", $shirteestoreimagesrcurlpreviewpur);
$shirteestoreimagespreviewfilenameend = end($shirteestoreimagesrcurlpreviewpurexplode);
//
// BROKEN img copy and rename to /shirteeimages
copy(__DIR__ . "/shirteebrokenimage.png", __DIR__ . "/" . $shirteestoreimagesdir . "/" . $shirteestoreimagespreviewfilenameend);
//
$shirteestoreimgsrcmatchesnew[2][$i] = $shirteestoreimagesrcurlpreviewpur;
}
}
else {
$shirteestoreimgsrcmatchesnew[2][$i] = $shirteestoreimgsrcmatches[2][$i];
}
//
// extract the img file name
$shirteestoreimagesrcurlexplode = explode("/", $shirteestoreimgsrcmatchesnew[2][$i]);
$shirteestoreimagesfilenameend = end($shirteestoreimagesrcurlexplode);
//
$shirteestoreimagesdirfilename = $shirteestoreimagesdir . "/" . $shirteestoreimagesfilenameend;
//
// create the img file
if (file_exists($shirteestoreimagesdirfilename) === false) {
if (!strpos($shirteestoreimgsrcmatchesnew[2][$i], "shirtee.com/preview")) {
$shirteestoreimagecreatefrompng = imagecreatefrompng($shirteestoreimgsrcmatchesnew[2][$i]);
imagealphablending($shirteestoreimagecreatefrompng, false);
imagesavealpha($shirteestoreimagecreatefrompng, true);
imagepng($shirteestoreimagecreatefrompng, $shirteestoreimagesdirfilename, 9, PNG_ALL_FILTERS);
}
}
//
// YOUR ABSOLUTE OR RELATIVE PATH TO THE SAVED IMAGES (for the source code <img src="...">)
$shirteestorenewimagessourcepath = '"' . "/" . $shirteestoreimagesdirfilename . '"';
array_push($shirteestorenewimagessourcepatharray, $shirteestorenewimagessourcepath);
//
}
$shirteestoreold = str_replace($shirteestoreimagesrcurlarray, $shirteestorenewimagessourcepatharray, $shirteestoreold);
//
// Extract the Shirtee Store Campaign URLs
preg_match_all("/(href=\"(.*?)\")/", $shirteestoreold, $shirteestorecampaignhrefmatches, PREG_PATTERN_ORDER);
//
// Put the URL Querystring at the campaign URLs START
$shirteestorecampaignhrefarray = [];
$shirteestorecampaignhrefnewarray = [];
$shirteestorecampaignhrefmatchesunique = array_unique($shirteestorecampaignhrefmatches[2]);
$shirteestorecampaignhrefmatchesuniquenew = array_values($shirteestorecampaignhrefmatchesunique);
//
for ($i = 0; $i < count($shirteestorecampaignhrefmatchesuniquenew); $i++ ) {
//
$shirteestorecampaignhref = $shirteestorecampaignhrefmatchesuniquenew[$i];
array_push($shirteestorecampaignhrefarray, $shirteestorecampaignhref);
//
if (strpos($shirteestorecampaignhref, "?")) {
$shirteestorecampaignhrefnew = $shirteestorecampaignhref . '&amp;shop=' . $shirteestorename;
} else {
$shirteestorecampaignhrefnew = $shirteestorecampaignhref . '?shop=' . $shirteestorename;
}
//
array_push($shirteestorecampaignhrefnewarray, $shirteestorecampaignhrefnew);
//
}
$shirteestoreold = str_replace($shirteestorecampaignhrefarray, $shirteestorecampaignhrefnewarray, $shirteestoreold);
//
//
$shirteestorenewline = preg_replace("/>\s</", ">\n<", $shirteestoreold);
$shirteestorelidiv = preg_replace("/<\/li><li/", "</div>\n\n<div", $shirteestorenewline);
$shirteestorelidiv = str_replace("<li", "\n\n<div", $shirteestorelidiv);
$shirteestorelidiv = str_replace("li>", "div>\n\n", $shirteestorelidiv);
$shirteestorenewarray[$p] = str_replace('href="', 'target="_blank" href="', $shirteestorelidiv);
//
}
//
}
//
echo '<div class="products-grid-campaigns products-grid products-grid--max-4-col">';
echo implode("", $shirteestorenewarray);
echo '</div>';
//
?>

Shirteeshop CSS:
/* Shirteeshop CSS BEGIN */
.shirteeshopdiv {
max-width: 970px;
margin: 0 auto;
text-align: center;
padding-bottom: 20px;
}
.shirteeshopheader {
font-size: 3em;
font-weight: bold;
margin-top: 20px;
margin-bottom: 20px;
}
.shirteeshopdescription {
font-size: 1.4em;
margin-bottom: 20px;
}
/* Shirteeshop Original CSS BEGIN */
.shirteeshopdiv .products-grid {
max-width: 970px;
margin: 0 auto;
padding: 0;
text-align: center;
}
.shirteeshopdiv .products-grid > li {
text-align: center;
}
.shirteeshopdiv .products-grid .item {
width: 23%;
margin: 0.5%;
display: inline-block;
}
.shirteeshopdiv .products-grid-campaigns .item {
margin-bottom: 12px;
background: #fff;
border-radius: 1px;
border: 1px solid #ccc;
-webkit-transition: transform .2s linear 0s;
-moz-transition: transform .2s linear 0s;
-o-transition: transform .2s linear 0s;
transition: transform .2s linear 0s;
z-index: 1;
vertical-align: top;
}
.shirteeshopdiv .products-grid-campaigns .product-image .product-image-zoom {
-webkit-transition: all .2s linear 0s;
-moz-transition: all .2s linear 0s;
-o-transition: all .2s linear 0s;
transition: all .2s linear 0s;
}
.shirteeshopdiv .products-grid .product-image img {
width: 100%;
height: auto;
}
.shirteeshopdiv .products-grid .product-image {
position: relative;
padding: 0;
margin: 10px;
display: block;
overflow: hidden;
width: calc(100% - 20px);
}
.shirteeshopdiv .products-grid .product-info {
position: relative;
padding-bottom: 95px;
}
.shirteeshopdiv .products-grid .product-info {
padding: 10px 18px 10px;
padding: 10px 18px 10px;
padding-bottom: 10px;
background: #f0f0f0;
border-top: 1px solid #b5b5b5;
}
.shirteeshopdiv .products-grid .product-name, .products-list .product-name {
text-transform: uppercase;
margin-bottom: 5px;
font-size: 14px;
font-family: "Raleway","Helvetica Neue",Verdana,Arial,sans-serif;
}
.shirteeshopdiv .products-grid .product-name {
font-weight: normal;
color: #000;
margin: 0 0 7px;
line-height: 1.4em;
}
.shirteeshopdiv .products-grid .product-name a {
display: block;
font-family: 'Open Sans',sans-serif;
text-transform: initial;
text-overflow: ellipsis;
text-decoration: none;
font-weight: 600;
color: #333c4e;
}
.shirteeshopdiv .products-grid .price-box-text {
display: none;
}
.shirteeshopdiv .products-grid .price-box {
margin: 7px 0;
font-family: "Helvetica Neue",Verdana,Arial,sans-serif;
}
.shirteeshopdiv .products-grid .price-box .price {
font-weight: 700;
font-family: 'Open Sans',sans-serif;
font-size: 16px;
color: #333c4e;
line-height: 22px;
}
.shirteeshopdiv .products-grid .item:hover {
-webkit-box-shadow: 0 2px 30px 0 rgba(0,0,0,.2);
box-shadow: 0 2px 30px 0 rgba(0,0,0,.2);
}
.shirteeshopdiv .products-grid .item:hover .product-image-zoom {
-webkit-transform: scale(1.4);
-moz-transform: scale(1.4);
-ms-transform: scale(1.4);
-o-transform: scale(1.4);
transform: scale(1.4);
}
.shirteeshopdiv .products-grid .item:hover .product-name {
height: auto;
white-space: normal;
}
.shirteeshopdiv .products-grid h2.product-name a:hover, h3.product-name a:hover, h4.product-name a:hover, h5.product-name a:hover, p.product-name a:hover {
color: #39c;
text-decoration: none;
}
/* Shirteeshop Original CSS END */

Keine Garantie. Keine Gewährleistung. Kein Support.
Verwendung auf eigenes Risiko.

Weiterlesen »

PHP Warning file_get_contents() best solution

PHP Warning:  file_get_contents(https://example.com/): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /var/www/virtual/blabla/test.php on line 123

There are many solutions to the problem posted on the Internet. Not all of these solutions really solve the problem. The challenge with this problem is the use of boolean (false / true).
$file_get_contents_url = "";
if (false !== ($content = @file_get_contents($file_get_contents_url))) {
// use here the filled variable $content for your code.
} elseif ($check === false) {
// here your code for "false".
} else {
// here your possible "fallback" code.
}
No guarantee. No warranty. No support.
Use at your own risk.
Weiterlesen »

Samstag, 1. September 2018

Wetterbericht mit Wunschwetter

Allgemein bekannt ist, dass Wetterberichte das Wetter maximal für 3 Tage vorhersagen können. Bei unbeständigem Wetter weniger als 3 Tage und manchmal auch nur weniger als 1 Tag. Doch was Wetterberichte zusätzlich machen ist, dass sie nicht das wahrscheinlichste Wetter vorhersagen, sondern das wahrscheinlich angenehmste Wetter. Die Wetterberichte vorhersagen nicht das wahrscheinlichste Wetter, sondern ein Wunschwetter, das kurz vor knapp auf das wahrscheinlichste Wetter korrigiert wird.

Wetterbericht mit Wunschwetter
Bilder: The people from the Tango! project. gemeinfrei.

Seitdem es mehrere Wetterberichte mit Wettervorhersagen gibt, gibt es auch Unterschiede in den Wettervorhersagen. Diese unterscheiden sich nicht nur in den Langzeitvorhersagen zwischen 4 und 16 Tagen, sondern auch in den Vorhersagen bis zu 3 Tage. In den Kurzzeitvorhersagen bis maximal 24 Stunden sind sie alle ziemlich gleich.

Die Wetterberichte haben das Problem etwas sehr unvorhersebares vorherzusagen, eben das Wetter. OK, dass es im Sommer warm und im Winter kalt ist, ist damit nicht gemeint. Die Wetterberichte sind heutzutage in der Lage das Wetter für maximal 3 Tage vorherzusagen und geben zudem Prognosen für die nächsten 16 Tage. Jeder Wetterbericht verwendet für seine Vorhersage andere Parameter, die zu unterschiedlichen Ergebnissen führen. Die Parameter, die zu den Unterschieden führen, sind nicht wettertechnische. Denn wenn alle nach dem neuesten wettertechnisch-wissenschaftlichen Stand vorhersagen würden, wären alle Wettervorhersagen gleich.

Wetterbericht mit Wunschwetter
Bild: The Norwegian Meteorological Institute. met.no.

Mit zunehmendem zeitlichen Abstand in die Zukunft wird die Toleranz des möglichen Wetters immer größer. Das ergibt einen Spielraum, der von den Wetterberichten für ihre Wettervorhersagen genutzt wird. Die Wetterberichte verwenden zusätzliche Parameter, die nichts mit der wissenschaftlichen Wettervorhersage zu tun haben - die Wetterlaune der Menschen. Ein Wetterbericht, der eher angenehmes Wetter vorhersagt ist beliebter als einer, der eher unangenehmes Wetter vorhersagt - so tickt der Mensch. Ausnahmen, wie Pessimisten, die sich in Vorhersagen mit unangenehmen Wetter, dass dann auch eintrifft, bestätigt fühlen, sowie Optimisten, die sich in Vorhersagen mit angenehmen Wetter, dass dann auch eintrifft, bestätigt fühlen, aussen vor gelassen.

Insbesondere in den Langzeitvorhersagen, aber mittlerweile auch bei unbeständigem Wetter in den 3-Tages-Vorhersagen, wird der Parameter "angenehm" verwendet. Ein zunehmend unbeständiges Wetter gelangt den Wetterberichten also zum Vorteil. Mit abnehmendem Zeitabstand wird der Parameter "angenehm" bis auf Null verkleinert. Das Verwenden des Parameters "angenehm" reduziert die Wettervorhersagen auf 24-Stunden-Vorhersagen. Bei den 3-Tages-Vorhersagen und insbesondere bei den Langzeit-Vorhersagen wird von den Wetterberichten nicht der Mittelwert der Wetter-Toleranz, und schon gar nicht die Wetter-Toleranz an sich, sondern wenn dann immer eine Wetter-Tendenz mit Toleranz oder eben ein tendenziell angenehmes Wetter vorhergesagt.

Was ein angenehmes Wetter ist, darin unterscheiden sich die Leute. Von daher haben Wetterberichte, die ein tendenziell angenehmes Wetter vorhersagen, ein Klientel, das sich durch die unterschiedlichen Wettervorhersagen unterscheidet. Die Leute in Gruppen zu unterscheiden hat zudem den Vorteil der personalisierten Werbung. Die Leute, für die ein kühles Wetter angenehm ist, sind ein Klientel für andere Produkte und Dienstleistungen als Leute, für die ein warmes Wetter angenehm ist.

Der Markt regelt das Wetter?
Der Markt regelt die Wettervorhersagen!
Weiterlesen »

HaveIBeenPwned Password Cracker

Die Website HaveIBeenPwned bietet für jeden eine Möglichkeit per Emailadresse zu checken, ob diese zusammen mit dem dazugehörigen Passwort (unverschlüsselt/ungehasht) in eine der im Internet "geleakten" Listen enthalten ist. Diese Listen wurden durch Hacker von Webseiten gedownloadet, deren Server und Software Sicherheitslücken hatten. Darunter Myspace (360 Millionen, 2009), LinkedIn (164 Millionen, 2012), Tumblr (65 Millionen, 2013), Fling.com (40 Millionen) und VK (171 Millionen, 2016). Insgesamt hat HaveIBeenPwned 517 Millionen Datensätze (Emailadresse + Passwort) vorrätig.

Die Datensätze enthalten also neben einer Zuordnung von Emailadresse-Passwort, mittels der ein Account, der diese beiden zusammenhängend verwendet, geknackt werden kann, auch eine riesige Emailadressen-Liste, mittels der Spam versendet werden kann, und auch eine riesige Passwort-Liste, mittels der Passwörter geknackt werden können.

Das Problem mit Passwortlisten: Riesige Passwortlisten sind ziemlich unnütz um einen Account auf herkömmliche Weise zu knacken, da die Software die Anzahl der Versuche eingrenzt einen Account zu knacken. Wenn dann muss sich Zugang zu Userdatenbanken verschafft werden und es muss die Verschlüsselungsmethode der Passwörter bekannt sein, die meist durch eine Generierung der Passwörter als Hashes realisiert wird. Dann werden die geleakten ungehashten Passwörter mittels der Hashmethode gehasht und mit den Hashwerten der Passwörter in der Userdatenbank verglichen. Bei einem Treffer wird dann das zugehörige ungehashte Passwort dem geleakten Datensatz mit Emailadresse zugeordnet und die Accounts geknackt.

Das Problem der Emailadressenlisten: Riesige Listen an Emailadressen sind für das Versenden von Spam ziemlich unnütz, da sie viele ungenutzte Emailadressen enthalten, deren Emails niemand mehr liest. Zudem erzeugen ungültige Emailadressen zusätzlichen Traffic via Mailer-Daemon und dergleichen. Die riesigen geleakten Emailadressenlisten müssen also gefiltert werden. Dies ist am besten zu realisieren, wenn dies die User selbst tun, via einer Webseite wie HaveIBeenPwned. Somit entstehen hochwertige Emailadresslisten für Spam, die im Darknet Höchstpreise erzielen ("filtered").

Im Sommer 2018 entschied sich Github für eine Partnerschaft (Partnership) mit HaveIBeenPwned um die Passwörter seiner User zu knacken, die in den geleakten Listen, die HaveIBeenPwned vorrätig hat, vorhanden sind. Die Userdatenbank von Github selbst wurde nach Angaben von Github nicht gehackt und geleakt. Github verspricht zwar wie jede andere Plattform, dass sie selbst die Passwörter der User nicht unverschlüsselt/ungehasht einsehen können, doch umgeht das mittels der Partnerschaft mit HaveIBeenPwned. Github hat es sich zur Aufgabe gemacht, seine User darüber zu informieren, ob ihre Passwörter in eine der Passwortlisten von HaveIBeenPwned vorhanden ist. Dabei werden nur die Passwörter geprüft, nicht der Zusammenhang Emailadresse-Passwort. Damit entschlüsselt/enthasht Github die Passwörter seiner User, wenn diese in einer der HaveIBeenPwned-Passwortlisten vorhanden sind, auch wenn der User nie einen Account bei einer der Plattformen der geleakten Listen hatte. Freundlicherweise informiert Github die User darüber, wenn dem so ist, und legitimiert sich das als Dienst im Namen der Sicherheit. Die Idee dahinter: Die User sollen keine Passwörter verwenden, die in einer der geleakten Listen sind. Das sind viele Millionen Passwörter, die nicht mehr verwendet werden sollen.

Das Github-Problem: Github enthasht die Passwörter seiner User nicht im Zusammenhang mit den Emailadressen, wie sie in den geleakten Listen vorhanden sind. Das kommt einem Knacken der Passwörter eines Hackers gleich. Github kann somit nicht mehr behaupten, dass sie die Passwörter der User nur gehasht einsehen können, da Github via HaveIBeenPwned die Passwörter seiner User knackt.

Zurzeit informiert Github seine User nur, wenn das Passwort des Users von Github-HaveIBeenPwned geknackt wurde. Möglich ist, dass diese Accounts in naher Zukunft gesperrt werden, wenn der User sein Passwort nicht ändert.

HaveIBeenPwned Github Password Cracker

Was Github will: Github will, dass seine User keine der Passwörter aus den geleakten Listen verwenden. Dazu muss Github die Passwörter seiner bereits registrierten User knacken. Zudem werden keine neuen Accounts mit einem Passwort, dass in den geleakten Listen vorhanden ist, registriert.

HaveIBeenPwned Github Password Cracker

Weiterlesen »

Dienstag, 3. Juli 2018

Affiliate Direktwerbung & DSGVO (personalisierte Anzeigen)


Die Umsetzung der DSGVO im Affiliatemarketing läuft völlig in die falsche Richtung. Affiliates (Publisher) werden von den Affiliatenetzwerkbetreibern zwar nicht zu Allein-Verantwortlichen, aber doch zu Mit-Verantwortlichen gemacht und den Affiliates (Publishern) werden dadurch von den Affiliatenetzwerkbetreibern Pflichten aufgedrückt. So ist die DSGVO nicht zu verstehen, bzw. wird völlig falsch verstanden.

Das Ganze läuft völlig aus dem Ruder, wenn es zu Ende gedacht wird. Affiliatenetzwerkbetreiber können Affiliates (Publishern) jetzt drohen, wenn sie den aufdoktrinierten Pflichten nicht nachkommen. Dabei ist es für die Affiliates (Publisher) unmöglich diese Pflichten, die eigentlich die Affiliatenetzwerkbetreiber erfüllen müssen, zu erfüllen. Affiliates (Publisher) werden verantwortlich gemacht für die Realisierung des Rechts auf Widerspruch bei Direktwerbung (direct marketing) und der Hinweispflicht auf dieses Widerspruchrechts bei Direktwerbung. Wovon die wenigsten Affiliates (Publisher) wissen, die Direktwerbung auf ihren Webeseiten einblenden.
Art. 21 DSGVO Widerspruchsrecht

(2) Werden personenbezogene Daten verarbeitet, um Direktwerbung zu betreiben, so hat die betroffene Person das Recht, jederzeit Widerspruch gegen die Verarbeitung sie betreffender personenbezogener Daten zum Zwecke derartiger Werbung einzulegen;

(4) Die betroffene Person muss spätestens zum Zeitpunkt der ersten Kommunikation mit ihr ausdrücklich auf das in den Absätzen 1 und 2 genannte Recht hingewiesen werden; dieser Hinweis hat in einer verständlichen und von anderen Informationen getrennten Form zu erfolgen.
Quelle: https://dsgvo-gesetz.de/art-21-dsgvo/

Bei Adsense Direktwerbung müssen alle Beteiligten in der Datenschutzerklärung gelistet werden, was bei Adsense Direktwerbung (personalisierte Anzeigen) an die 700 Firmen sind, die mit Anschrift und Ansprechpartner erwähnt werden müssen. Der Affiliate (Publisher) weiß nicht, welche der 700 gerade aktiv Werbung auf seinen Webseiten liefert, er kann die 700 nur in der Anzahl begrenzen, was eine Beschränkung darstellt. Auch die von Adsense angebotene Abschaltung von Personalisierten Anzeigen ist nur eine Einschränkung, die auf einen Denkfehler bezüglich der DSGVO beruht.

Nicht nur technisch, sondern auch logisch sind die Forderungen der DSGVO so nicht realisierbar, indem Affiliates (Publisher) zu Mit-Verantwortlichen gemacht werden. Einzig Verantwortlicher ist und bleibt der Affiliatenetzwerkbetreiber.

In bisherigen Lösungen werden unter anderem für ein Widerspruchsrecht Cookies eingesetzt, auch Drittanbieter-Cookies (Adcell). Wenn ein Viewer in seinem Browser Cookies und/oder Drittanbieter-Cookies nicht akzeptiert, was sein Recht ist, wird der Widerspruch nicht realisiert und der Affiliate (Publisher) soll nun dafür verantwortlich sein.

Die Affiliatenetzwerkbetreiber drücken den Affiliates (Publisher) eine "Vereinbarung zur Auftragsdatenvereinbarung" oder "Datenverarbeitungsvereinbarung" auf um die Verantwortung auf die Affiliates (Publisher) abzuwälzen (Adcell, Awin, Affili.net). Die Affiliates (Publisher) wiederum können die Pflichten gar nicht erfüllen.

Ein Widerspruch per Drittanbieter-Cookie ist nicht rechtssicher, weil diese blockiert werden können und sogar jeder Viewer ein Recht darauf hat diese zu blockieren. Hier müsste ein Recht entfernt werden, damit ein anderes realisiert werden kann, was völliger Nonsens ist. Wenn ein Affiliate (Publisher) ein Widerspruch Opt-Out per Cookie selbst programmiert, dann gilt dieses nur für seine Website und ist so kein wirklicher Widerspruch gegen Direktwerbung eines Affiliatenetzwerkbetreibers, der die personenbezogenen Daten erhebt, verarbeitet und speichert, sondern nur einer für eine Domain. Das ist so kein Widerspruch, wie er von der DSGVO verlangt wird.

Die einzig richtige Umsetzung der DSGVO ist, wenn Affiliates (Publisher) nur Vermieter von Werbefläche sind, was sie rechtlich schon immer waren, und nie mehr. Sie sind keine Mit-Verantwortlichen laut DSGVO. Sie werden nur dazu gedrängt. Ein Vermieter von Werbefläche ist nur für die Inhalte der Werbung verantwortlich, mehr nicht (also zB kein Porno).

Die einzig richtige Umsetzung der DSGVO ist, wenn »in« und »mit« der Werbung die Pflichten laut DSGVO erfüllt werden. In und mit der Werbung muss sowohl der Hinweis auf das Recht auf Widerspruch erfolgen und der Widerspruch mittels Opt-Out stattfinden können (Mit vorheriger Prüfung ob Cookies akzeptiert werden. Werden keine Cookies akzeptiert, dann keine Direktwerbung.). Nur so ist es erstens technisch rechtssicher realisierbar und zweitens logisch. Aber davor scheinen sich die Affiliatenetzwerkbetreiber zu sträuben, warum auch immer.

Die Affiliates (Publisher) müssen Widerstand zeigen, indem sie sich nicht die Pflichten der DSGVO, die von den Affiliatenetzwerkbetreibern erfüllt werden müssen, aufdrängen lassen. Hiervon ist aber leider nichts zu merken. Viel eher macht die Runde, dass alle Affiliates (Publisher) kuschen.

Ein Affiliate (Publisher) ist kein Verantwortlicher im Sinne der DSGVO. Ein Affiliate (Publisher) vermietet nur Werbefläche gegen Provision. Ein Affiliate (Publisher) hat rein gar nichts mit den Daten zu tun, die über die vermietete Werbefläche erhoben, gespeichert und verarbeitet werden. Alle Affiliates (Publisher) sind Vermieter. Affiliates (Publisher) betrifft die DSGVO, was Affiliate betrifft, rein gar nicht.

Ein Beispiel: Ein Werbeflächenvermieter im Straßenraum hat keinerlei Verantwortung darüber, dass die angezeigte Werbung das Heilmittelwerbegesetz ("Zu Risiken und Nebenwirkungen...") erfüllt. Das wäre auch völlig irre, wenn dem so wäre. Aber die Affiliates (Publisher) als Werbeflächenvermieter sollen dafür verantwortlich sein? Alles was da zurechtgesponnen wird, damit die Affiliates (Publisher) auch Verantworliche sind, sind alles Denkfehler.


Adsense OptOut Funktion:

Solange die Affiliate Netzwerk Betreiber die Pflicht zum Hinweis und Realisierung des Rechts auf Widerspruch an die Publisher weiterreichen, hilft nur, dass sich jeder Publisher selbst schützt und zumindest auf seinen Webseiten die Direktwerbung DSGVO-konform macht.

Solange die Situation uneindeutig ist, können die Adsense Code-Snippets mit JavaScript um wichtige DSGVO-bezügliche Funktionen erweitert werden. Auf der folgenden verlinkten Webseite werden 3 Möglichkeiten zur Realisierung der aufgedrückten DSGVO Pflichten angeboten:
https://www.penultima.de/opt/adsense.php




Ausschluss-Klausel: Dies ist keine Rechtsberatung. Dies ist nur eine laienhafte Mindermeinung über die Sachlage. Die hier zu empfangenden Informationen werden unter Ausschluss jeglicher Garantie und Gewährleistung angeboten. Es wird keine, bzw. es kann keine Verantwortung für die dargestellten Informationen übernommen werden. Keine Gewähr für Richtigkeit, Vollständigkeit und Aktualität.
Weiterlesen »

Samstag, 30. Juni 2018

Zecken sicher entfernen

Die milden Winter bevorteilen die Ausbreitung von Parasiten, wie Stechmücken und Zecken. Dadurch wird der Mensch öfters von Zecken, wie den Gemeinen Holzbock, gestochen (umgangssprachlich: gebissen). Am heimtückischsten sind dabei die Zecken-Larven, die nur ein Bruchteil eines Millimeters groß sind und dadurch schlecht erkennbar. Zecken-Larven sind zudem schlecht zu erkennen, wenn die Haut keine rote Entzündung am Zeckenstich (Zeckenbiss) erzeugt.


Zecke - Gemeiner Holzbock - Zecke entfernen - Zeckenzange - Zeckenkarte
Zecken in einem Leimtropfen gefangen. Der Linseneffekt der Leimtropfen vergrößert die Zecken um das 5-fache. Links eine Nymphe und rechts eine Larve.


Infos zu Zecken


Zecken sind parasitäre Milben. Hausstaubmilben sind hingegen nicht parasitär. Eine Zecken-Larve ist nur 0,5 mm groß und dadurch schlecht zu erkennen. Hausstaubmilben sind bis zu 0,5 mm groß. Zecken-Larven sind, insbesondere an schlecht einsehbaren Körperstellen, schlecht zu unterscheiden von kleinen Pigmentflecken (Pigmentnävi, Leberflecken), die eine hellbraune bis dunkelbraune oder violette bis rote Farbe haben, oder von Anginomen (Gefäßnävi, Hämangiome, kleine Wucherungen der Hautgefäße, Blutflecken, Blutschwämmchen).

Die Larven der Zecken sind das erste Stadium im Leben einer Zecke. Als nächstes Stadium folgt das Stadium der Zecken-Nymphe und danach das Stadium der adulten (geschlechtsreifen) Zecke. Das Weibchen einer adulten Zecke legt bis zu 20.000 Eier, aus denen 20.000 Zecken-Larven schlüpfen. Das Weibchen vom Gemeinen Holzbock legt bis zu 5.000 Eier. Einige Zeckenarten sterben nach dem ersten Eierlegen, andere legen bis zu sieben Mal Eier. Zecken-Larven haben nur 6 Beine und Nymphe sowie Adult haben 8 Beine.

Einige Zecken, wie der Gemeine Holzbock, sind sogenannte Lauerer-Zecken und unterscheiden sich dadurch von Jäger-Zecken. Lauerer-Zecken lauern im Gras und in Büschen auf ihre Wirte. Sie halten sich mit den hinteren Beinen fest und strecken die forderen aus, so dass sie, wenn der Wirt sie streift, an diesen hängen bleiben. Es ist allerdings auch zu beobachten, dass Lauerer-Zecken sich auf den Wirt zubewegen, wenn dieser in der Nähe verweilt. Zecken erkennen ihre Wirte an dem Austoß von Kohlendioxid (Atem) und Ammoniak (Urin) sowie Milchsäure und Buttersäure (beides Schweiß). Zecken bewegen sich mit bis zu 8 Metern pro Stunde schneller als Weinbergschnecken (4,2 m/h).

Zecken ritzen die Haut ihres Wirtes an und stechen ihren Rüssel in diese Wunde. Dies ist der sogenannte Zeckenstich, der umgangssprachlich Zeckenbiss genannt wird. Dabei geben sie Speichel mit einer Mixture aus Proteinen ab, durch die beim Wirt sowohl Entzündungsreaktion als auch Schmerzempfinden sowie Blutgerinnung unterdrückt werden. Der Speichel kann Bakterien, Viren und intrazelluläre Parasiten enthalten, die auf den Wirt übertragen werden können und die für die Zecken selbst harmlos sind.

Durch einen Zeckenstich können Erkrankungen wie Borreliose, Frühsommer-Meningoenzephalitis (FSME), Babesiose (ähnlich Malaria), Ehrlichiose, Neoehrlichiose oder Rickettsiosen sowie das Q-Fieber übertragen werden. Von den übertragbaren Krankheiten können einige tödlich sein. Im Jahr 2009 starben in Niederlande 25 Menschen an Q-Fieber. Rickettsien sind intrazelluläre Parasiten, die Krankheiten, wie Fleckfieber, Zeckenstichfieber, Rickettsienpocken, Brill-Zinsser-Krankheit, Boutonneuse-Fieber (Mittelmeer-Zeckenfleckfieber) und Rocky-Mountain-Fleckfieber, auslösen können. Deren Entdecker, Howard Taylor Ricketts (1871-1910), starb an einer Erkrankung durch Rickettsien.

Es sind bisher weltweit mehr als 850 Arten von Zecken bekannt. Der Mensch ist hauptsächlich Wirt von den Zeckenarten Gemeiner Holzbock und Taigazecke sowie auch Wirt von den Zeckenarten Hirschzecke, Igelzecke, Fuchszecke, Schafzecke, Auwaldzecke und Hundezecke sowie Fehlwirt der Zeckenart Taubenzecke, die zwar wenige Tage später daran stirbt, aber auch Krankheiten überträgt.

Einige Zeckenarten können viele Jahre ohne Nahrung überleben. Eine Art der Lederzecken kann bis zu 11 Jahre ohne Nahrung überleben. Die Wirte von Lederzecken sind unter anderem Zugvögel, was diese Nahrungspausen notwendig macht. Die Wirte von Lederzecken sind im allgemeinen Vögel, Reptilien und Menschen.

Zecke - Gemeiner Holzbock - Zecke entfernen - Zeckenzange - Zeckenkarte
Größe einer Zeckenlarve. Ein Pixel am Computer-Monitor ist zwischen 0,23 und 0,29 mm groß. Eine Zecken-Larve ist 0,5 mm groß. Der schwarze Punkt in der Grafik ist 2x2 Pixel groß, also an einem Computer-Monitor ungefähr so groß wie eine Zecken-Larve.
Smartphones haben zu unterschiedliche Pixelgrößen für eine Darstellung mittels Grafik.


Aufbau einer Zecke


Zecken bestehen hauptsächlich aus zwei Teilen, dem Capitulum (Gnathosoma, Zeckenkopf) mit dem Mundwerkzeug und dem Idiosoma mit Beinen und Blutsack. Am Zeckenkopf befindet sich ein zu Tastern ausgebildetes Beinpaar, womit Zecken eigentlich 10 Beine haben. Zudem befinden sich am Zeckenkopf die beiden Kieferklauen und der Saugrüssel, der beim Gemeinen Holzbock mit Zähnen (Wiederhaken) bestückt ist. Am Idiosoma befinden sich zwei Öffnungen für die Trachee, durch die eine Zecke atmet.
Milbe Zecke Anatomie von unten

drawing by David Walter, Invasive Mite Identification, CSU and USDA APHIS ITP


Der Zeckenstich (Zeckenbiss)


Bei einem Zeckestich wird Speichel auf die Haut aufgetragen, welcher zuerst das Schmerzempfinden unterdrückt. Dann wird mit den Kieferklauen die Haut angeritzt und dadurch sammelt sich Blut in der Wunde. Jetzt verhindert der Speichel die Blutgerinnung und die Entzündung der Wunde. Als nächstes sticht die Zecke ihren Rüssel in die Wunde (bei manchen Zeckenarten ist es nur ein hineintauchen in das angesammelte Blut) und saugt das Blut auf. Zudem klebt der Speichel die beiden Taster wie Leim an die Haut fest. Der Leim ist so fest, dass er das Vorderteil (Zeckenkopf) abtrennen kann, wenn am Hinterteil gezogen wird.

Zecken bevorzugen Körperstellen mit gut durchbluteter dünner Haut und geschützte Körperpartien. Dazu zählen unter anderem die Kniekehlen, die Leistengegenden, die Achselhöhlen, die Ohren und der Haaransatz am Hals sowie auch der Penis. Es werden allerdings auch sehr häufig alle Stellen der Beine, von den Füßen bis zur Hüfte, wahllos von Zecken gestochen. Auch die Hände und Arme sind ebenso betroffen, wenn diese Zecken berühren.


Entfernen von Zecken


Nach dem Aufenthalt in der Natur


Es ist zu beachten, dass nach einem Aufenthalt in der Natur die Zecken eventuell noch nicht zugestochen haben und sich noch in der Kleidung befinden. Wenn dem so ist, dann ist es möglich, dass die Zecken in der Nacht und am folgenden Tag in der Wohnung nach ihrem Wirt suchen und diesen dann erst einige Stunden oder Tage später stechen. Deshalb ist es ratsam die Kleidung sofort zu waschen, oder zumindest vorübergehend in einem Plastiksack luftdicht zu verpacken, der dann beim Waschen der Wäsche mit Wasser (Brauseschlauch) ausgespült wird.

Vor dem Entfernen


Es ist nicht ratsam die Zecke samt Zeckenstich-Wunde vor dem Entfernen zu desinfizieren. Krankheitserreger von Zecken werden zwar mit Desinfektionsmittel vernichtet, doch die Zecke selbst reagiert darauf wie auf einen Angriff, bei dem die Zecke vermehrt Speichel absondert und eventuell sogar ihren Darminhalt in die Wunde übergibt, womit noch mehr Krankheitserreger in die Wunde gelangen.

Da Zecken atmen, sterben diese, wenn sie keinen Sauerstoff bekommen. Bei der Entfernung einer Zecke ist es nicht ratsam, diese vorher zu töten, damit sie nach dem Entfernen schon tot ist. Das wäre zwar ratsam, denn wenn die Zecke nach dem Entfernen herunterfällt, ist sie meist schwer zu finden, doch wenn sie bereits tot ist, wäre dies nicht so schlimm. Doch das Töten der noch festgebissenen Zecke ist für die Zecke ein Angriff und deshalb ist dies zu unterlassen.

Für eine Zecke ist es ein Angriff, wenn diese vor dem Entfernen mit Öl, Zahnpasta, Klebstoff, Nagellack, Nagellackentferner oder Desinfektionsmittel betupft wird. Dadurch stirbt eine Zecke zwar innerhalb weniger Minuten, weil sie nicht mehr atmen kann, doch es gelangen möglichweise auch mehr Krankheitserreger in die Wunde.


Was nicht nachgewiesen aber möglich ist, dass Zecken auch sterben, wenn in einem See gebadet und geschwommen wird. Allerdings fallen tote Zecken, die bereits gestochen haben, wegen des Leims im Speichel und den Wiederhaken am Rüssel nicht unbedingt von alleine ab.

Während des Entfernens


Beim Entfernen der Zecke ist wegen des Festklebens des Zeckenkopfes an der Haut durch deren Speichel dringend zu beachten, dass die Zecke am Zeckenkopf angefasst/angepackt wird und nicht nur am Hinterteil gezogen wird, weil sonst der Zeckenkopf abreissen könnte. Jeder, der schon einmal eine Zecke entfernt hat, wird dieses abreissen der Zecke von der Haut kennen, das mit einem Geräusch verbunden ist. Das Geräusch ist dem Festkleben und den Widerhaken am Rüssel zu verdanken. Wird der Zeckenkopf vom Hinterteil abgerissen ist das Geräusch anders.

Der Zeckenkopf einer Zeckenlarve ist mit ca. 0,1 mm (100 µm) mit blosem Auge so gut wie nicht sichtbar.

Damit der Zeckenkopf angepackt wird, muss unter das Hinterteil gegriffen werden. Wenn die Zecke mit Fingernägeln gepackt wird, dann sollten die Fingernägel direkt über der Haut zukneifen, also fest auf die Haut gedrückt werden. Wenn die Fingernägel nicht den Zeckenkopf kneifen, sondern das Hinterteil einer Zecke, oder wenn die Zecke mit den Fingerkuppen gepackt wird, anstatt mit den Fingernägel, kann der Zeckenkopf abreissen.

Zeckenzangen (insbesondere aus Plastik, aber auch aus Metall) greifen die gesamte Zecke und nicht unbedingt nur den Zeckenkopf. Damit ist ein abreissen des Zeckenkopfs möglich.

Zeckenhaken ziehen am Hinterteil der Zecken und somit kann der Zeckenkopf abreissen.

Zeckenkarten ziehen am Hinterteil der Zecken und somit kann der Zeckenkopf abreissen.

Herkömmliche Pinzetten quetschen die komplette Zecke und ziehen am Hinterteil der Zecke, wordurch der Zeckenkopf abreissen kann.

Spezielle Zecken-Pinzetten haben Spitzen, die sehr fein auslaufen und mit denen eine Zecke nicht von oben, sondern seitlich gepackt werden kann. Dabei muss die Pinzette an der Spitze sehr fein sein (0,1 mm) und zudem fest zupacken können, damit sie nicht vom Zeckenkopf abrutscht und am Hinterteil zieht.

Eine ideale Zeckenzange greift direkt seitlich mit zwei sehr flachen Kanten direkt über der Haut von zwei Seiten (oben und unten) am Zeckenkopf zu. Dabei müssen die beiden flachen Kanten nicht zu grob sein, damit sie nicht das Hinterteil quetschen, und nicht zu fein sein, damit sie die Zecke nicht zerschneiden, was natürlich auch auf die Kraft vom Zupacken ankommt.

Nach dem Entfernen


Es ist ratsam die Zeckenstich-Wunde nach dem Entfernen der Zecke sofort zu desinfizieren. Krankheitserreger von Zecken werden mit Desinfektionsmittel vernichtet.

Die ausgerissene Zecke kann auf einem Blatt Papier mit einem Tropfen Leim konserviert werden. Falls die Zecke noch nicht tot ist, so wird sie es dann sein.
Zecken sicher entfernen - Zeckenzange - Zeckenkarte - Zecken - Gemeiner Holzbock

Zecken sicher entfernen - Zeckenzange - Zeckenkarte - Zecken - Gemeiner Holzbock

Zecken sicher entfernen - Zeckenzange - Zeckenkarte - Zecken - Gemeiner Holzbock

Dies ist keine fachärztliche Beratung, Auskunft oder Betreuung.
Bei Fragen zu Risiken und Nebenwirkungen fragen Sie einen Arzt oder Apotheker.
Weiterlesen »

Dienstag, 26. Juni 2018

CSS color transition animation

Mit der CSS Eigenschaft (Property) "transition" können HTML-Elemente animiert werden, doch die Möglichkeiten sind begrenzt. CSS transition benötigt ein auslösendes Event. Mit Javascript ist es ebenfalls möglich HTML-Elemente zu animieren, auch ohne auslösendes Event.

Die CSS Eigenschaft "transition" ist erst ab IE 10 verfügbar.
Einige der Selektoren (Selector) für auslösende Events sind erst ab IE 10 verfügbar.

Liste der Selektoren für auslösende Events bei CSS transition:

  • :hover (mouse hover, IE7) 
  • :target (link clicking, IE9)
  • :focus (IE8)
  • :valid (form fields, IE10)
  • :checked (checkboxes, IE9)
  • :active (link clicking, IE7)
  • :disabled (form fields, IE9)
  • :invalid (form fields, IE10)

Mit Javascript eröffnen sich viel mehr Möglichkeiten HTML-Elemente zu animieren. Im folgenden ein Beispiel zur Animierung von "border-color" einer div-box.

Mittels Javascript wird der Wert von "border-color" einer div-box geändert. Dazu wird der hexadezimale Farbwert (#ff0000) als RGB Farbwert (255000000) als Anfangswert genutzt. Zur Berechnung neuer Übergangswerte wird der hexadezimale Farbwert als RGB Ausgangs-Farbwert in die einzelnen Farbwerte Rot Grün Blau (255 000 000) aufgespalten. Nach der Neuberechnung der einzelnen RGB-Farbwerte werden diese zu einzelnen hexadezimalen Farbwerten umgewandelt (ff cc cc) und anschließend zu einem neuen hexadezimalen Farbwert zusammengefügt (#ffcccc).

CSS
.divborder {
  border-style: dashed;
  border-color: #ff0000;
}
HTML
<div class="divborder">CSS color transition animation</div>
<div id="divcolor"></div>
Javascript
var bordercolorr = 255;
var bordercolorgb = 0;
var bordercolorinterval = setInterval(frame, 50);
function frame() {
if (bordercolorr == 204) {
clearInterval(bordercolorinterval);
} else {
bordercolorr = bordercolorr;
bordercolorgb = bordercolorgb + 4;
if (bordercolorgb > 203) {
bordercolorr = bordercolorr - 1;
bordercolorgb = 204;
}
bordercolorrxhex = bordercolorr.toString(16);
bordercolorgbxhex = bordercolorgb.toString(16);
if (bordercolorgbxhex.length == 1) {
bordercolorgbxhex = "0" + bordercolorgbxhex;
}
document.getElementsByClassName("divborder")[0].style.borderColor = '#' + bordercolorrxhex + "" + bordercolorgbxhex + "" + bordercolorgbxhex;
document.getElementById("divcolor").innerHTML = "border-color: "+ "#" + bordercolorrxhex + "" + bordercolorgbxhex + "" + bordercolorgbxhex;
}}
JSFIDDLE:  http://jsfiddle.net/ocd3ujtb/94/

Das Javascript kann beliebig verändert und umgestaltet werden. Es ist möglich jedes HTML-Element zu animieren. Nicht nur "border-color", sondern auch "background-color" oder "color", sowie width and height oder vieles mehr.

Keine Garantie. Keine Gewähr. Kein Support.
Weiterlesen »