Lustige Fehlermeldungen bei Ebay:
Archiv für die Kategorie ‘Allgemein’
ebay: AdWords fatal error
Donnerstag, 01. September 2011Linux SERVER als Webserver einrichten – Grundinstallation Teil 3
Mittwoch, 25. Mai 2011MYSQL installieren:
1.) Es sollte standardmäßig der MYSQL SERVER, der MYSQL CLient sowie die mysql-libs sollten bereits installiert sein, aber da wir den reinen SERVER selber kompieren wollen, löschen wir per YAST den MYSQL SERVER (mysql).
2.) Da hier systemseitig bereits ein Benutzer”mysql” angelegt wurde, diesen löschen und neu anlegen als benutzerdefinierten Benutzer. Als Standardgruppe bitte “daemon” festlegen, mehr Gruppenzugehörigkeit braucht der Mysql Server dann nicht mehr.
3.) Dann bitte bei www.mysql.com den Sourcecode runterziehen, das sollte in etwas das Paket “mysql-5.5.12.tar.gz” sein, je nach Version. Ich habe das unter “Plattform >> Source Code” gefunden.
4.) Ich selber nehme noch meine Version 5.1.31, welche mir als tar.gz Archiv vorliegt. Diese entpacke ich, um so ein Verzeichnis “mysql-5.1.31″ zu bekommen.
5.) Unter “/U1″ lege ich das Verzeichnis “MYSQL_5131″ an, in welchem der MYSQL SERVER dann läuft
6.) bitte noch die termcap installieren, sonst kann man mysql leider nicht kompilieren, mysql braucht das zum builden …
7.) jetzt erfolgt die Installation per 1–>”./configure –enable-static –with-debug –prefix=/U1/MYSQL_5131 –localstatedir=/U1/MYSQL_5131/data –with-mysql-ldflags=-all-static –without-innodb –without-docs –without-bench –without-man” 2–> “make” 3–> “make install”
8.) Es liegt nun die DB unter “/U1/MYSQL_5131″. Die Rechtedatenbank “mysql” legen wir an, indem wir einfach unter “/U1/MYSQL_5131/bin” das Script “./mysql_install_db” aufrufen.
9.) Nun müssen wir den DB SERVER zum Starten überreden, indem wir das Script “/U1/MYSQL_5131/share/mysql/mysql.server” nach “/etc/init.d/” kopieren und unter dem Scriptnamen mysql5131.server ablegen.
10.) Jetzt zur sagenumwobenen Datei my.cnf, diese unter “/U1/MYSQL_5131/data” ablegen und konfigurieren.
11.) Das Verzeichnis “/U1/MYSQL_5131/data” komplett und rekursiv mit den Rechten mysql:www versehen und dann die DB mit “/etc/init.d/mysql5131.server start” starten. Auf die DB kommt man jezt nur unter Angabe des korrekten MYSQL Socket, der sollte unter /tmp/mywsql.sock” liegen. Damit lautet der Befehl für den MYSQL CLient: “mysql -S/tmp/mysql.sock”
Linux SERVER als Webserver einrichten – Grundinstallation Teil 2
Mittwoch, 25. Mai 20111.) Neztwerkadresse einrichtne, um die Kiste remote konfigurieren zu können
2.) FTP SERVER (vsftp) installieren:
2.1 – den Dienst VSFTP per yast2 installieren
2.2 – einen Benutzer “webserver” mit dem HOME “/U1/WEBSERVER” anlegen mit der Gruppe: www,users, daemon
2.3 – in der vsftpd.conf alle nötigen einstellungen vornehmen und 2 weitere Dateien unter /etc anlegen: “vsftpd.chroot_list,vsftpd.user_list” -> in beiden einfach den Benutzernamen “webserver” reinschreiben abspeichern. Die Rechte dieser Dateien sollten den Rechten der vsftpd.cond entsprechen
2.4 – unter/etc/xinetd.d/vsftpd den Punkt “disable=yes” auf disable = “no” setzen und per “rcxinetd restart” den Dienst neu starten – empfehlenswert ist nun, den Dienst im “Runlevel Editor” so zu konfigurieren, dass der rcxinetd bei Systemstart automatisch mit gestartet wird.
Linux SERVER als Webserver einrichten – Grundinstallation Teil 1
Mittwoch, 25. Mai 20111.) Hardware: Dell 1950, 2 x E5400 2.83GHz, 8GB RAM, PERC 5/i RAIDCONTROLLER, welcher 2 73GB 15k SAS Platten als Raid1 (Mirror) antreibt.
2.) OS = SLES 11
3.) Wir konfigurieren das HardwareRaid – das SLES 11 erkennt den PERC 5/i Controller sofort, als Bootmedum sollte der Controller noch im Bios eingerichtet werden.
4.) Wir haben folgende Partitionen erstellt:
“swap” = 4GB
“/” = 15GB ext3
“/var” = 10GB
“/U1″ = 38GB, also den Rest für den Webserver und die Datenbanken
HTML Werbemail erstellen- Teil 4
Montag, 04. April 2011Das HTML besteht aus wenigen Teilen, aber hier sind Besonderheiten zu beachten:
1.) DOCTYPE – wir versuchen es mit:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
2.) dem html und der language:
<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”de-de” lang=”de-de” dir=”ltr”>
3.) den html header informationen inkl. IsoCode:
<head>
<META http-equiv=Content-Type content=”text/html; charset=iso-8859-1″ />
<title>SHOPNAME – Sonderaktion</title>
4.) Im header die CSS Definitionen:
<style type=”text/css”>
img.test { margin: 0px; padding: 0px; border: 0px solid #B0B0B0; cursor: pointer;}
</style>
5.) denheader zumachen und den body starten … </head><body>
6.) wichtig für Freemailer: das CSS nochmal im Body in Kopie bringen:
<style type=”text/css”>
img.test { margin: 0px; padding: 0px; border: 0px solid #B0B0B0; cursor: pointer;}
</style>
7.) das eigentliche HTML: <p>hallo ich bin ein Angebot</p>
8.) HTML beenden: “</body></html>”
Nun ist das eigentliche Problem, das Teil W§C valide zu machen, hier sollte man auf korrekten Code achten.
HTM Werbemail erstellen- Teil 3
Montag, 04. April 2011Wie sieht nun eine solche Mail vom Body und Header her aus?
Die Mail wird per PHP zusammengesetzt und wird folgndermasse versendet:
if (mail($emailadresse,$subject,”",$inhalt,”-f $sendeadresse”))
Die $emailadresse ist klar, geht von anton@web.de bis zugvoegelfreunde-deutschland@gmx.de … das $subjekt ist dann sowas wie “neueste Technik zu kleinen Preis”. Zum $inhalt kommen wir gleich, nur das “-f” vor der $sendeadresse will erklärt sein. Sende ich per PHP oder PEARL oder sonstwas, dann istr die Sendeadresse für den Postfix IMMER der Dienst bzw der Besitzer der PHP-Datei, meistens dann sicher der Webserver selber. Läuft der Webserver also unter dem User “www” und der Gruppe “daemon”, dann sendet er als Benutzer www, aber auf dem Relay ist natürlich kein www unter der Domain als Benutzer mit einer Mailadresse hinterlegt, logo. Somit wird der Mailversand vom Relayserver oder bereits vom internen Postfix abgelehnt. Gebe ich ihm das Suffix “-f” für “force” mit, dann sendet er mit der Kennung “sendeadresse”, egal ob es diese gibt oder nicht.
Der Inhalt soll html sein, also rufe ich den HTML Mailinhalt auf, lasse diesen per PHP Befehl “ob_start();” in den Puffer mitschreiben und schließe den Puffer wieder mit “ob_end_flush ();”. Also:
ob_start();
echo “<html><body><p>Sonerangebote bei Shopname.de !!</p></body></html>” ;
$emailinhalt = ob_get_contents();
ob_end_flush ();
Damit habe ich bereits fast alles für “$inhalt” zusammen:
$boundary = strtoupper(md5(uniqid(time())));
$xtra = “From: SHOPNAME <”.$Email_Werbung.”>”;
$xtra .= “\nReturn-Path: <”.$Email_Werbung.”>”;
$xtra .= “\nX-Sender: “.$Email_Werbung.”";
$xtra .= “\nReply-To: “.$Email_Werbung.”";
$xtra .= “\nErrors-To: “.$Email_Werbung.”";
$xtra .= “\nMIME-Version: 1.0″;
$xtra .= “\nContent-Type: multipart/alternative; boundary=”.$boundary;
$xtra .= “\n\nThis is a multi-part message in MIME format”;
$xtra .= “\n–”.$boundary;
$xtra .= “\nContent-Type: text/html”;
$xtra .= “\nContent-Transfer-Encoding: 8bit”;
$xtra .= “\n\n”.$Emailvorlage;
$Email_Werbung ist natürlich die oben benannte Sendeadresse, also sowas wie “angebote@shopname.de”
weiter geht’s zu Teil 4, dem HTML Gerüst der Email, also dem eigentlichen Inhalt
HTML Werbemail erstellen – Teil 2
Montag, 04. April 2011Vorab werden wir ein wenig in die Server Technik gehen, um die Rahmenbedingungen für einen sauberen Versand zu bekommen. Viele Mails scheitern an einem korrekt eingerichteten Mailserver – wir verwenden in dem Fall sendmail auf dem Relayserver und Postfix auf den angebundenen Backendservern. Als erstes muss natürlich der Sendmail als Relay korrekt arbeiten und Mails von den Backendservern annehmen. Die sendmail config dafür liegt bei linux Servern regulär unter /etc/mail/access, hier tragen wir die nötigen IP’s unserer Server ein, welche über diesen Sendmail Emails versenden:
IP_Slaveserver1 RELAY
IP_Slaveserver2 RELAY
die access speichern und den Dienst neu starten. Sollte jemand den sendemail per “sendmail.mc” flotter machen wollen oder die Queues verändern wollen, dann bitte die sendmail.cf per “m4 sendmail.mc > sendmail.cf” neu schreiben lassen und dann den Dienst beenden und neu starten.
Ok, aber was noch fehlt, sind die SPF Einträge in der Domain, also das SenderPolicyFramework. Prüfen kann man die bei Heise.de unter http://www.heise.de/netze/Netzwerk-Tools-475022.html und dann auf die DNS Abfrage. Hier einfach das TextLookup für die Domain abfragen und es sollte dann sowas ausgeben:
name: shopname.de
txtdata: v=spf1 mx ip4:111.222.333.444 ip4:222.333.444.555 a:backendserver1.shopname.de a:backendserver2.shopname.de -all
Denn so sollte der SPF Eintrag im Nameserver aussehen, ansonsten landet eine per RelayServer versendete Mail bei fast allen Freemailern im Spam, logo.
HMTL Werbemail erstellen – Teil 1
Montag, 04. April 2011Ende 2008 haben wir für einen Kunden das gesamte Mailing “umgekrempelt”. Die Hauptarbeit bestand darin, den wöchentlichen Newsletter, welcher an registrierte Kunden versendet wird, komplett zu überarbeiten. Das steht nun 2011 wieder an und ich möchte hier meine Erfahrungen mitteilen. Das Mailing geht an etwa 250.000 Emailadressen und ist der HTML Part ist aktuell etwa 143k gross. Ziel ist es, einen größtmöglichen Teil der Kunden zu erreichen, sprich, der Emailinhalt muss für möglichst viele Benutzer sichtbar sein.
Daher wird der Inhalt der Mail neu überarbeitet, um bei möglichst wenig Empfängern im Spamordner zu landen.
Das letzte HTML Gerüst wurde fast nur auf ein Tabellelayout aufgebaut. Wir wollen versuchen, darauf zu verzichten, um per CSS die Datenmenge zu reduzieren. Die Mail besteht aus mehreren Elementen:
- Link zur HTML Kopie
- Kopf mit Logo
- Textzeile
- Artikeldarstellungen mit Preis als Hauptcontent
- Infoleiste rechts
- Footer mit Adress- & Impressumsdaten
Worauf müssen wir im Layout achten, um NICHT im Spam zu landen:
- keine H Überschriften, wenig <b> Tags , wenig auffällige Schriftfarbe- oder Größe
- vernünftiges Verhältnis von sichtbarem Content zu Quellcode
- kein Javascript
- keine Spamschlagwörter wie “billig, Achtung, riesig, etc.”
- W3C & CSS valider Code
Technische Lösung
BGH Urteil Preissuchmaschinen ab 12.03.2010
Donnerstag, 18. März 2010
Am 12.03.2010 veröffentlichte der BGH das Urteil, dass Shopbetreiber Ihren Preis im Shop erst dann hoch setzen dürfen, wenn dieser auch in den Preissuchmaschinen, bei welchem der Shopbetreiber seine Artikel gelistet hat, angezeigt werden. Technisch ist das theoretisch erstmal nicht umsetzbar, da 95% aller Onlinehändler Ihre Artikeldaten aus dem Shop heraus an die Preissuchmaschinen übermitteln. Also entsteht hier ein Zeitfenster von mehreren Stunden, in welchem die Preise differieren.
Da wir als Programmierer auch vor dieser Problematik stehen, haben wir uns (trotz Krankheit, Grippe und hohes Fieber) auch unsere Gedanken gemacht und eine Lösung gefunden, welche abmahnsicher und wettbewerbskonform für den Shopbetreiber ist.
Der Link zum Artikel, welcher der Preissuchmaschine vom Shopbetreiber übermittelt wird, sieht aktuell etwa so aus:
http://www.shopname.de/html/product/details.html?artno=12345
Der Shop weiß also, dass er von der PSM auf das Produkt 12345 verweisen soll. Dieser Link wird, genauso wie alle anderen Links für eine PSM automatisch generiert. Wenn man nun dem Link die Zusatzinformation des Preises mitgibt, dann weiß der Shop auch, zu welchem Preis der Kunde das Produkt bei der PSM gefunden hat:
http://www.shopname.de/html/product/details.html?artno=12345&bruttopreis=199,00
Ruft nun der Kunde aus der PSM heraus diesen Link auf, dann weiß der Shop, dass dieses Produkt, auch wenn es aktuell im Shop bereits 210,00 EUR brutto kostet, diesem Kunden mit 199,00 EUR brutto angezeigt werden muss und der Shopbetreiber muss dieses Produkt dann laut Wettbewerbsrecht auch zu diesem Preis liefern, ist aber rechtlich auf der sicheren Seite – und – verärgert den Kunden nicht. Denn auch wenn ein Kunden einen Artikel in einer PSM zum Preis von 199,00 € findet und dieses Produkt im Shop mehr kostet, ist der Shopbetreiber verpflichtet, dieses Produkt zum niedrigeren Preis zu liefern – auch ohne Wettbewerbsrecht – hier greifen dann Verbraucherrechte.
Nun zu den Fragen für:
Irgendwie_herauswinden#> Kann ich den Kunden auf eine Seite weiterleiten, welche Ihn informiert, dass der Artikel nun teurer ist und nur zu dem neuen Preis bestellt werden kann? Nein, wettbewerbswidrig.
Menge_begrenzen#> Muss ich dem Kunden 100 Stück davon liefern? Vermutlich, aber wenn es der Shopprogrammierer schafft, bei “Preis_aus_der_PSM < Preis_im_Shop” eine Maximalmengenbegrenzung einzubauen, dann nicht mehr. Und wenn der Kunde im späteren Bestellablauf den Artikel aus dem Warenkorb löscht und neu bestellt – dann ist das nicht mehr Ihr Problem, denn Sie können ja (hoffentlich) in Ihren Statistiken & Logfiles einwandfrei nachweisen, dass der Kunde den Artikel gelöscht und neu bestellt hat. Hier greift kein Wettbewerbsrecht mehr, denn der Kunde befindet sich ja bereits auf Ihrer Seite, Sie haben also nicht versucht, Ihn mit falschen Preisangaben zu locken und teurer als angegeben zu liefern. Aber auch hier empfiehlt sich natürlich die Devise: “Natürlich liefern wir Ihnen gerne 2 Stück zu dem von Ihnen gefundenen Preis, Herr Müller, bitte verzeihen Sie vielmals, die Ware geht heute noch raus und wir berechnen Ihnen für Ihre Unannehmlichkeiten natürlich keine Versandkosten für die 12 Paletten Rasensteine.”
Sicherheitslücke patchen#> Da der Preis in der URL in Klartext unverschlüsselt übertragen wird, könnten sich hier ein paar kluge Kiddies für kleines, URL modifiziertes Geld und den Weiterverkauf über Ebay komfortabel ihr Taschengeld aufbessern:
http://www.shopname.de/html/product/details.html?artno=12345&bruttopreis=1,90
Also sollte hier ein Verfahren angewendet werden, welches die Variable ”bruttopreis=xy” codiert und beim Aufruf wieder entschlüsselt. MD5 & deren Freunde fallen hier weg, verständlich, also ist eine eigene Lösung zu finden, sollte aber nicht schwer sein.
Uralt#> Der Verlauf eines Userbrwosers ist des Programmierers größter Feind. Ich verfluche diese postmodernen Browser, welch die im Verlauf gespeicherten Lieblingsseiten des Besitzers über Slide- & Opacity Effekte ungefragt zum Leben erwecken. Da erscheint es nicht verwunderlich, dass selbst tote Links nach Jahren wieder aufgerufen werden. Damit das hier nicht passiert und ein schwer wieder beschaffbares Produkt nach Monaten zu einem nicht tragbaren Preis automatisch per Warenwirtschaft verkauft werden muss, empfiehlt sich hier, an die URL noch einen Zeitstempel anzuhängen:
D.h nach dem 5.5.2010 gegen 6 Uhr ist das Angebot nicht mehr gültig. Denn da PSM’s gewöhnlich nach spätestens 3 Tagen Ihren Daten gefressen haben sollten, ist hier ein Zeitfenster von +5 Tagen realistisch.
