Kategorien
IT-Recht

Was sind personenbezogene Daten?

„Personenbezogene Daten sind Einzelangaben über persönliche oder sachliche Verhältnisse einer bestimmten oder bestimmbaren natürlichen Person (Betroffener).“ (BDSG §3 Abs. 1).

Wenn ich nur  … speichere, sind das schon personenbezogene Daten?

Der Nachname? Ja, weil z.B. „Schmidt“ oder „Al Gaddafi“ auf die ethnische Herkunft schließen lassen könnte.

Der Vorname? Ja, weil man auf das Geschlecht schließen kann.

Die Adresse? Ja, weil darüber (vollkommen legal: Geoscoring) die Bonität von Stadtbezirken ermittelt werden kann.

Die E-Mail Adresse? Nicht geklärt, weil über Websuche zuordenbar.

Die IP-Adresse? Ja. Bei Anonymisierung nicht, wenn die letzten 3 Zahlen genullt werden.

Pseudonyme? Nein, Zauberelfe und alterSack84 sind keine personenbezogenen Daten.

Worauf muss beim Speichern von personenbezogenen Daten geachtet werden?

  • der User muss einwilligen zum Speichern der Daten oder es liegt eine gesetzliche Grundlage dafür vor (Grundsatz der Gesetzmäßigkeit)
  • so wenig Daten wie nötig (Grundsatz der Datensparsamkeit/Datenvermeidung)
  • verständliche Beschreibung, wofür die Daten gespeichert werden (Grundsatz der Normenklarheit)
  • Nutzung der Daten nur für den vorgesehenen Zweck (Grundsatz der Zweckbindung)
  • die Einwilligung muss schriftlich erfolgen (immer gegeben im Internet)

Datenschutzbedingungen

  • das Kopieren von anderen Seiten ist verboten (Urheberrecht)
  • ab 10 Mitarbeiter muss es einen Datenschutzbeauftragten geben mit Sachkenntnis und rechtlichem Wissen (meist Informatiker)

Dieser Artikel ersetzt keine Rechtsberatung beim Anwalt und es wird auch nicht für die Richtigkeit gehaftet. Ich empfehle einen IT-Recht Anwalt zu kontaktieren: Kanzlei Bilk & Keil.

Kategorien
IT-Recht XT-Commerce

Buttonlösung Gesetzesänderung für Online Shops

Bis zum 01.08.2012 müssen Onlinehändler, die über ihren Online Shop (auch) an Endkunden Produkte verkaufen, die Vorgaben der so genannten Buttonlösung umsetzen auf der finalen Seite, auf der der Verbraucher seine Bestellung auslöst.

  1. Erfüllung erweiterter Informationspflichten
  2. Gestaltung des Bestellbuttons

Bei einer Missachtung der Gesetzänderung handelt der Onlinehändler wettbewerbswidrig. Bei falscher Beschriftung des Button kommt kein Vertrag mit dem Kunden zustande.

Für die Schweiz/Österreich gilt der deutsche Gesetzesentwurf auch, sofern sich das Angebot auch an deutsche Kunden richtet: siehe Buttonlösung Schweiz.

1. Erfüllung erweiterter Informationspflichten

Es muss klar und verständlich (deutlich hervorgehoben) für den Verbraucher dargestellt werden, wenn

  • markanten Produktmerkmale
  • Angabe der Mindestlaufzeit von Verträgen (wenn vorhanden)
  • „den Gesamtpreis der Ware oder Dienstleistung einschließlich aller damit verbundenen Preisbestandteile sowie alle über den Unternehmer abgeführten Steuern oder, wenn kein genauer Preis angegeben werden kann, seine Berechnungsgrundlage, die dem Verbraucher eine Überprüfung des Preises ermöglicht“
  • Angabe aller Versandkosten und Zusatzkosten (z.B: Zoll): „gegebenenfalls zusätzlich anfallende Liefer- und Versandkosten sowie einen Hinweis auf mögliche weitere Steuern oder Kosten, die nicht über den Unternehmer abgeführt oder von ihm in Rechnung gestellt werden“
  • die Befristung bei zeitlich beschränkten Angeboten

Der genaue Gesetzestext: § 1 Informationspflichten bei Fernabsatzverträgen.

2. Der Button auf der finalen Verkaufsabschlusseite

Der Button muss unterhalb der in Punkt 1 benannten Informationen platziert sein und nicht mehrmals auf der Seite vorkommen. Zwischen diesen Informationen dürfen keine weiteren sichtbaren Elemente platziert werden, wie z.B: Checkboxen oder Input-Felder.

Die Button sollte folgender Maßen beschriftet sein ohne weitere Zusätze:

  • Zahlungspflichtig bestellen (Musterbeschriftung vom Gesetzgeber)
  • Kaufen
  • Kostenpflichtig bestellen
  • Zahlungspflichtigen Vertrag schließen
  • Kauf abschließen

Unzulässige Beschriftungen:

  • Bestellung absenden
  • Weiter
  • Bestellen
  • Entscheiden Sie sich für uns!
  • Kauf abschließen und sich verwöhnen lassen

Beispiel für eine erfolgreiche Umsetzung der neuen Regelungen: zeedee-shop.com

empfehlenswerte weiterführende Lektüre: Leitenfaden Buttonlösung IT-Recht Kanzlei München.

Dieser Artikel ersetzt keine Rechtsberatung beim Anwalt und es wird auch nicht für die Richtigkeit gehaftet. Ich empfehle einen IT-Recht Anwalt zu kontaktieren: Kanzlei Bilk & Keil.

Kategorien
Android Mobil

Android Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-1.xml, reason: Connection to https://dl-ssl.google.com refused

Bei folgender Fehlermeldung Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-1.xml, reason: Connection to https://dl-ssl.google.com refused hat bei mir folgendes geholfen:

Testen der XML Webseite

https://dl-ssl.google.com/android/repository/addons_list-1.xml

wenn die Seite im Browser ohne Probleme angezeigt wird (es steht Text da, keine Fehlermeldung), muss man folgende Schritte unternehmen:

Firewall konfigurieren

  • Firewall deaktivieren, bzw. Ausnahme für SDK Manager.exe hinzufügen (das war es bei mir)

Force https aktivieren

  • starten des sdk managers (nicht aus Eclipse heraus!): C:\Program Files (x86)\Android\android-sdk\SDK Manager.exe
  • Tools/Options
  • ankreuzen: force https:// ….

Installieren von SDK Paketen

Damit die SDK Dateien korrekt installiert werden können, muss die SDK Manager.exe als Administrator gestartet werden: rechte Maustaste auf die Datei und als Administrator ausführen.

Kategorien
iPhone/iOS

iTunes kopiert keine Musik auf iPhone

Ich hatte das Problem, dass ich einen neuen PC gekauft hatte und iTunes neu installieren musste. Danach hat iTunes keine Musik  mehr auf mein Handy rüber ziehen/kopieren. Der Trick war, die Option „Musik und Videos manuell verwalten“ zu aktivieren in iTunes.

iTunes Musik manuell kopieren aktivieren
Kategorien
PHP

PHP Rätsel: Wieso hat das Umlaute Array nur 35 Einträge?

Ich arbeite gerade an einer Funktion mit der man String, die mit PHP htmlentities() Funktion Umgewandelt worden sind:

Rauml;tsel

zurück zu wandeln in

Rätsel

weil jemand die Werte so in die Datenbank gespeichert hat, wahrscheinlich ich 🙂

Dazu hab ich die folgende Funktion gebaut, die mir komischerweise ein Array durchläuft, dass nicht die Werte beinhaltet, die man erwarten würde:

HtmlEntitesReplacer::displayHtmlEntities();
class HtmlEntitesReplacer
{

    public static function displayHtmlEntities()
    {
        $i = 0;
        $umlaute = HtmlEntitesReplacer::getUmlauteArray();
        echo "Das Umlaute Array hat ".count($umlaute)." Werte<br>";
        foreach($umlaute  as $umlautFalsch  =>$umlaut)
        {
            $htmlEnties = str_replace("&amp;", "&amp;amp;",htmlentities($umlaut));
            echo "$i) $umlautFalsch <=> $htmlEnties' <=> $umlaut <br> ";
            $i++;
        }
        die();
    }

    private function getUmlauteArray()
    {
        return array(
            'ü'=>'ü',
            'ä'=>'ä',
            'ö'=>'ö',
            'Ö'=>'Ö',
            'ß'=>'ß',
            'Ã '=>'à',
            'á'=>'á',
            'â'=>'â',
            'ã'=>'ã',
            'ù'=>'ù',
            'ú'=>'ú',
            'û'=>'û',
            'Ù'=>'Ù',
            'Ú'=>'Ú',
            'Û'=>'Û',
            'Ü'=>'Ü',
            'ò'=>'ò',
            'ó'=>'ó',
            'ô'=>'ô',
            'è'=>'è',
            'é'=>'é',
            'ê'=>'ê',
            'ë'=>'ë',
            'À'=>'À',
            'Á'=>'Á',
            'Â'=>'Â',
            'Ã'=>'Ã',
            'Ä'=>'Ä',
            'Ã…'=>'Å',
            'Ç'=>'Ç',
            'È'=>'È',
            'É'=>'É',
            'Ê'=>'Ê',
            'Ë'=>'Ë',
            'ÃŒ'=>'Ì',
            'Í'=>'Í',
            'ÃŽ'=>'Î',
            'Ï'=>'Ï',
            'Ñ'=>'Ñ',
            'Ã’'=>'Ò',
            'Ó'=>'Ó',
            'Ô'=>'Ô',
            'Õ'=>'Õ',
            'Ø'=>'Ø',
            'Ã¥'=>'å',
            'æ'=>'æ',
            'ç'=>'ç',
            'ì'=>'ì',
            'í'=>'í',
            'î'=>'î',
            'ï'=>'ï',
            'ð'=>'ð',
            'ñ'=>'ñ',
            'õ'=>'õ',
            'ø'=>'ø',
            'ý'=>'ý',
            'ÿ'=>'ÿ',
            '€'=>'€'
        );
    }

kommt bei der Ausgabe nur auf i=34, obwohl es 57 Sonderzeichen von der Methode getUmlauteArray() zurückgegeben werden.

Kategorien
PHP

Google Shopping API: gshoppingcontent-php für PHP 5.2 downgraden

Eine kleine Veränderungen der Hauptdatei der Google Shopping Bibliothek gshoppingcontent-php macht die Bibliothek auch unter PHP kleiner 5.3. nutzbar:

einfach ab Zeile 54 die Definition der Konstanten ändern, da nur PHP>5.2 die Defintion von Konstanten mit const ausserhalb von Klassen erlaubt:

define('CLIENTLOGIN_URI' , 'https://www.google.com/accounts/ClientLogin');

/**
 * Service name for ClientLogin.
 **/
define('CLIENTLOGIN_SVC' , 'structuredcontent');

/**
 * Auth scope for authorizing against the Content API for Shopping.
 **/
define('OAUTH_SCOPE' , 'https://www.googleapis.com/auth/structuredcontent');

/**
 * User Agent string for all requests.
 **/
define('USER_AGENT' , 'scapi-php');

/**
 * Base API URI.
 **/
define('BASE' , 'https://content.googleapis.com/content/v1/');

/**
 * Google's endpoint for OAuth 2.0 authentication.
 **/
define('AUTH_URI' , 'https://accounts.google.com/o/oauth2/auth');

/**
 * Google's endpoint for exchanging OAuth 2.0 tokens
 **/
define('TOKEN_URI' , 'https://accounts.google.com/o/oauth2/token');

/**
 * Google's endpoint for revoking OAuth 2.0 tokens
 **/
define('REVOKE_URI' , 'https://accounts.google.com/o/oauth2/revoke');
Kategorien
Diverses Web Frontend

Google Adsense zeigt keine Werbung an Bad Request 400

Ich hatte auf meiner Verdienst-Webseite das Problem, dass ich 5 Adsense Werbebanner in verschiedenen Formaten eingefügt habe. Davon haben 2 Werbebanner nicht funktioniert und auf dem Firefox konnte man sehen, dass die BannerJavascripte mit Fehlercode 400 Bad Request geladen wurden.

Adsense Bad Request 400 mit Firebug-Plugin

Um das Problem zu lösen, habe ich alle nicht angezeigten Banner entfernt aus der Webseite und einzeln wieder eingefügt. Das Ergebnis war, dass ein Skyscraper-Banner nicht funktioniert hat, weil es teilweise unter einem anderen angezeigt wurde und deswegen nicht geladen wurde.

Die Lösung ist also das böse Banner zu finden und alle anderen funktionieren nach dem Entfernen des Übeltäters.

Kategorien
C++

Einführung in C++ – Klassen: Vererbung, Adjustment, Friends, abstrakt – Teil5

Vererbung

Klassen können Funktionen und Member-Variablen vererben an anderen Klassen.

Class A{
public:
 void f();
};
Class B : public A{};//B erbt public von A
B* b = new B;
b.f(); //Funktion ist vorhanden, da geerbt
Kategorien
C++

Einführung in C++ – Funktionen und Operatoren überladen (Overloading) – Teil4

Funktionen Überladen

  • es ist möglich einen Funktionsnamen mehrmals zu verwenden, wenn die Übergabeparameter nicht gleich sind und damit für den Compiler klar ist, welche Funktion aufgerufen werden soll
int a(int b);
int a(double b);
int a(char*);

int x = a(5); //ist ok, 5 ist int, 5.0 wäre double
  • nicht eindeutig ist:
int a(int b);
double a(int b);

int x = a(5); //welche Funktion nehmen, error

sowie bei Default-Argumenten:

int a(int b, int c = 3);
int a(int b);

int x = a(5); //welche Funktion nehmen, error

Das Überladen der Funktionen ist möglich durch Name-Mangeling:

Kategorien
C++

Einführung in C++ – Datentypen, Casting, Klassen – Teil3

Datentypen

Implizite Typumwandlung

  • automatisches Casting bei Zahlen „von kleineren zu größeren“ Datentypen

Rangfolge:

unsigned long long ("größter Wert") long long long double double float unsigned long long unsigned (int) int short bool
  • casting non const zu const, Referenzen
T->T& T&->T T->const T T*->const T* T&->const T&

Explzite Typumwandlung

  • mit static_cast<>
  • bei elementaren (einfachen) Datentypen
bool i = true; int y = static_cast<int> i; //y ist 1
  • zu Konstanten casten, mit const_cast<>
  • kritische Typumwandlung mit  reinterpret_cast<>
struct A{} a; struct B{} b; struct A *pa = &a; struct B *pb = pa; //Fehler, nicht derselbe Datentyp, obwohl selber Struct-Inhalt struct B *pb = reinterpret_cast<B*>(pa); //ist ok

Inline Funktionen