Samstag, 2. November 2019

Autobahn A100 Berlin Bauabschnitte Ring

Darstellungen von Projektionen der Autobahn 100 / A100 / A 100 in Berlin in Plänen.

Folgende Bauabschnitte sind im Jahr 2020 noch in Bau, noch nicht realisiert, oder noch nicht projektiert:

A100 Bauabschnitt 16 (im Bau): Autobahnkreuz Neukölln - Treptower Park
A100 Bauabschnitt 17 (Projektion): Treptower Park - Frankfurter Allee/Storkower Straße
A100 Bauabschnitt 18: Storkower Straße - Michelangelostraße

Der A100 Bauabschnitt 16 ist seit dem Jahr 2013 in Bau.
Der A100 Bauabschnitt 17 ist bereits in mehreren Verläufen projektiert. Die favorisierte Projektion ist umstritten. Die Autobahn würde dabei auf langen Strecken in einem doppelstöckigen Tunnel verlaufen.
Der A100 Bauabschnitt 18 wurde bis auf weiteres verworfen.

Die Autobahn A100 sollte ursprünglich einen Ring um die Innenstadt von Berlin bilden. Im Nordwesten beginnt die A100 an der Anschlussstelle Seestraße und endet zurzeit am Autobahnkreuz Neukölln. Im Norden von Berlin bilden die Michelangelostraße, Oststeestraße, Wisbyer Straße, Bornholmer Straße, Osloer Straße und Seestraße eine Verlängerung der Autobahn A100.

Neben den Plänen der drei Bauabschnitte am Ende noch ein Plan für die A100 Bauabschnitte 17 und 18 mit einer alternativen Trassenführung.

A100 Bauabschnitt 18
Autobahn A100 Bauabschnitt 18 A 100 Berlin

A100 Bauabschnitt 17 (Projektion)
Autobahn A100 Bauabschnitt 17 A 100 Berlin

A100 Bauabschnitt 16 (im Bau)
Autobahn A100 Bauabschnitt 16 A 100 Berlin

A100 Bauabschnitt 17/18 mit Alternative
Autobahn A100 Bauabschnitt 17 Bauabschnitt 18 A 100 Berlin

Eine alternative Trassenführung im A100 Bauabschnitt 17 und 18 besteht in folgendem Verlauf [mit zusätzlicher Alternative]:
#Görlitzer Bahn
- Herkomerstraße (Schuckert Höfe)
- Treptower Park (Liegewiese, Parkplatz)
#Spree
- Halbinsel Stralau: Engelwiese
#Rummelsburger See
#Hauptstraße
#Schlesische Bahn + Preußische Ostbahn
- Victoriastadt: Kernhofer Straße und KGA Kynast eV
- Wohngebiet Frankfurter Allee Süd: zwischen Schulze-Boysen-Straße und Coppistraße
#Frankfurter Allee
- Ruschestraße - Vulkanstraße
#Landsberger Allee
- Stellerweg [oder Altenhofer Straße]
#Konrad-Wolf-Straße + Weißenseer Weg + Hohenschönhauser Straße
#[Konrad-Wolf-Straße]
- [Sportforum]
- [Weißenseer Weg]
- [KGA Langes Höhe]
- KGA Prenzlauer Berg: Hauptweg
#Michelangeloweg

In diesem alternativen Verlauf wäre eine durchgängige oberirdische Trassenführung möglich, wenn einige Abrisse in Kauf genommen würden.
- Herkomerstraße: 3 Altbauten mit je 2 Gartenhäuser + Botschaft Weissrussland [oder Tunnel]
- Halbinsel Stralau: 1 Penthouse von 3 + Penthouse-Komplex Upper Spreegold + Altenheim Haus an der Spree
- Rummelsburg: Kita Seepiraten
- Victoriastadt: Schiefes Haus + 3 Altbau + 11 Altbau + 1 Hinterhaus [oder Tunnel]
- Wohngebiet Frankfurter Allee Süd: 3 Neubauten (DDR)
- Ruschestraße: Teile vom Stasikomplex + 2 Discounter
- Stellerweg: Einkaufspassage Hohenschönhauser Tor [oder über Altenhofer Weg: Kongresszentrum Sportforum Hohenschönhausen]

Weiterlesen »

Donnerstag, 3. Oktober 2019

Thunderbird: Weißer Pfeil im grüner Kreis

Weißer Pfeil im grüner Kreis in Thunderbird oben rechts neben Kalender Tab Button und Aufgaben Tab Button.

Der Button Grüner Kreis mit weißer Pfeil kann nicht angeklickt werden und hat kein rechte Maustaste Kontextmenü.

Was bedeutet in Thunderbird der Grüner Pfeil?

Thunderbird Grüner Pfeil Weißer Pfeil Grüner Kreis
Thunderbird Grüner Pfeil
Ein neues Update für Thunderbird ist verfügbar.
Weiterlesen »

Montag, 1. Juli 2019

ORAL-B Elektrische Zahnbürste Langzeittest

Zwei Langzeittest mit einem Modell einer Elektrischen Zahnbürste von Oral-B und deren Defekten nach wenigen Jahren Gebrauch.

1. Defekt nach 3 Jahren: Akku der Elektrischen Zahnbürste defekt.
2. Defekt nach 4 Jahren: Elektrische Zahnbürste lässt sich nicht einschalten, schaltet sich von alleine ein und lässt sich nicht mehr ausschalten.
Fazit: Nach 2 Jahren nicht mehr zu gebrauchen. Garantie: 2 Jahre.

Oral-B PRO 3000 Elektrische Zahnbürste. UVP 139,99 Euro pro Stück.

ORAL-B Elektrische Zahnbürste Langzeittest

2x ORAL-B Professional Care 3000 / Oral-B PRO 3000 Elektrische Zahnbürste

Kaufdatum: 2012, Doppelpack (2 Stück), 99 Euro. € 139,99 UVP pro Stück.

Mit den zwei Elektrischen Zahnbürsten wurden zwei verschiedene Langzeittests durchgeführt.


1. Langzeittest

Der erste Langzeittest testete den Akku der Elektrischen Zahnbürste. Dabei wurde der Akku erst aufgeladen, nachdem er leer war. Dies funktionierte circa 1 Jahr. Nach einem Jahr war die Ladezeit länger als der Abstand zwischen dem Zähneputzen. Die Elektrische Zahnbürste musste also bevor der Akku vollständig aufgeladen war vom Ladegerät entfernt werden. Dieser Umstand verlängerte die Ladezeit kontinuierlich. Nach einigen Monaten lud der Akku gar nicht mehr vollständig auf, da der zwischenzeitliche Betrieb den Akku mehr entlud als er in der Zeit zwischen dem Zähneputzen auflud. Nach wenigen Wochen lies der Akku so stark nach, dass er irgendwann gar nicht mehr auflud und die Elektrische Zahnbürste sich nicht mehr einschalten lies. Nach ungefähr 3 Jahren war die erste Elektrische Zahnbürste wegen des Akkus defekt. Die Garantie-Zeit beträgt nur 2 Jahre. Zudem zeigten sich schon Anzeichen, die im 2. Langzeittest zum Defekt führten.

ORAL-B Elektrische Zahnbürste Langzeittest

Der Gummi am Handstück (Handgriff) wird klebrig und löst sich ab. Oral-B PRO 3000 Elektrische Zahnbürste.


2. Langzeittest

Der zweite Langzeittest testete insoweit die Lebensdauer der Elektrischen Zahnbürste im Allgemeinen mit stetigem Aufladen des Akkus. Das Ladegerät war ständig an den Strom angeschlossen und die Elektrische Zahnbürste stand stetig - außer zum Zähneputzen - auf der Ladestation. Nach circa 3 Jahren zeigten sich die selben Anzeichen, die beim 1. Test nicht zum Defekt führten, da der Akku dort vorher defekt war. Der Gummigriff - die Gummierung löste sich auf. Das war eine ziemlich ekelhafte Angelegenheit, da das Gummi klebrig wurde und allmählich abbröselte. Nachdem ein Großteil der Gummierung ab war, dauerte es einige Zeit bis es zum Defekt kam. Dabei zeigte sich eine Schwachstelle. Der Einschaltknopf ist von dieser Gummierung umgeben und direkt dahinter liegt ungeschützt die Elektronik der Elektrischen Zahnbürste. Es passierte folgendes in kurzer Zeit. Die Elektrische Zahnbürste lies sich nicht mehr einschalten. Dann schaltete sich die Elektrische Zahnbürste von alleine ein und lies sich nicht mehr ausschalten. Mitten am Tag fing die Elektrische Zahnbürste im Ladegerät stehend an zu vibrieren und hörte nicht mehr auf, bis der Akku leer war, und das dauerte sehr lange. Wenn die Elektrische Zahnbürste ohne Last frei vibriert, dann hält der Akku sie ziemlich lange am Vibrieren. Erst mit Last, also dem Aufdrücken auf die Zähne, oder dem Festhalten des Rotationsstabes, wird der Akku ziemlich schnell leer. Im zweiten Langzeittest war die Elektrische Zahnbürste nach gut 4 Jahren defekt.

ORAL-B Elektrische Zahnbürste Langzeittest
Oral-B PRO 3000 Elektrische Zahnbürste.
ORAL-B Elektrische Zahnbürste Langzeittest

Die Elektrische Zahnbürste schaltet sich von allein ein und lässt sich nicht mehr ausschalten, oder die Elektrische Zahnbürste schaltet sich nicht ein, wenn der Knopf gedrückt wird.

Von der Umweltverschmutzung durch das sich ablösende Gummi und dem eventuellen Verschlucken desselben einmal abgesehen, ist auch der Gummi selbst im Neuzustand ein Gesundheitsrisiko. Denn damit der Gummi sich in eine klebrige Masse verwandelt, die zerbröselt, werden stetig Chemikalien freigesetzt, die eingeatmet werden.

Für ein elektrisches Gerät mit einem Neupreis von 69 Euro (im Test ein Angebot mit 2 Stück für 99 Euro. UVP 139,99 Euro pro Stück) ist eine Lebensdauer von 3 bis 4 Jahren zu wenig. Ganz davon abgesehen von der Erzeugung von Elektronikschrott. Die Hersteller sind fein raus mit einer Garantieleistung von nur 2 Jahren, da die Geräte nur 2 Jahre funktionieren müssen.

Fazit: Beide Test zeigten, dass die Elektrische Zahnbürste bereits kurz nach dem Abblauf der Garantie nach 2 Jahren schon nicht mehr voll funktionstüchtig oder unansehnlich bis gesundheitsgefährdend sind.
Weiterlesen »

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.

08/2019: Der PHP Code ist veraltet. Bei Bedarf eines neuen PHP Codes bitte Kontakt aufnehmen.

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 »