Freitag, 23. Mai 2014

Keine Rechnung von Amazon für Kindle-E-Book?

Erhalten Sie keine Rechnung von Amazon für Ihr Kindle-E-Book?
Möchten Sie das E-Buch steuerlich absetzen bzw. handelt es sich sogar um eine geschäftliche Fachliteratur für die Sie eine Rechnung mit ausgewiesener Mehrwertsteuer (Umsatzsteuer) benötigen?

Im Amazon-Forum liest man hier nichts gutes; es würden keine Rechnungen ausgestellt, da Kindle-Bücher nur an Privatpersonen verkauft werden. Das stimmt so aber nicht, und auch Privatpersonen können Fachliteratur von der Steuer absetzen und benötigen dafür eine Rechnung. Trotzdem muss man bei Amazon anfragen, autom. geht hier (aktuell) nichts.

=> Lösung (inkl. ausgewiesener MwSt.)


Kindle Lese-App von Amazon stürzt beim Einloggen/Anmelden ab oder hängt sich bei der Anmeldung auf?

Von Amazon gibt es mittlerweile kostenlose Kindle Lese-Apps für PC/Mac, Tablet und Smartphone; damit kann man dann Kindle-E-Books beziehen und lesen.

Dazu muss man sich in der App bei Amazon einloggen, erst danach kann man gekaufte Inhalte wie etwa Fachliteratur herunterladen bzw. synchronisieren.

Die Kindle Lese-App stürzt bei Ihnen nun beim Versuch sich einzuloggen/anzumelden aber immer ab oder hängt sich bei der Anmeldung auf? Befinden Sie sich in einem Firmennetz?

=> Das Problem kann hier nämlich ein verwendeter Proxy sein, damit kommt die Kindle Lese-App aktuell wohl nicht immer ganz klar. Also zur Anmeldung den Proxy umgehen und ohne ins Netz, dann geht es.


Die (individuellen) Dateien *.azw und *.mbp sind übrigens DRM-geschützt und können nur auf dem gleichen Gerät und vom gleichen Benutzer genutzt werden (Kopierschutz). So kann man leider auch mit Calibre keine Konvertierung vornehmen (z.B. PDF). Es ist aber durchaus möglich mehrere Kindles und Kindle Lese-Apps zu nutzen, solange man das Buch selbst erworben hat.



Was ist eine "Märchensteuer"?

Schon mal über den Begriff "Märchensteuer" gestolpert?
Was für eine gesetzliche Steuerart das wohl sein soll?

Eine "Märchensteuer" gibt es nicht, der Begriff ist lediglich ein scherzhafter Ausdruck (Wortspiel) für die "Mehrwertsteuer", also die gesetzliche Umsatzsteuer. (Ein Märchen ist diese natürlich nicht, auch wenn mittlerweile märchenhaft hoch.)

Und man muss schon gar nicht für Märchen Steuern zahlen oder dergleichen; Schriftsteller können also getrost aufatmen. ;)


Große E-Mail-Anhänge lassen sich in iOS 'Mail' (iPhone/iPad) nicht öffnen/laden?

Große E-Mail-Anhänge (etwa ab 10 MB) lassen sich auf dem iPhone oder iPad nicht öffnen bzw. laden? Nach einer Fehlermeldung scheint der Anhang zu laden, aber es tut sich nichts?

Dann beweist Apples iOS (7) mal wieder seine scheinbar achso intuitive Benutzerführung und Benutzerfreundlichkeit. ;)

=> Ganz unten in der Mail ist dann nämlich ein unscheinbarer Hinweis zu sehen (ala „Die E-Mail wurde nur im Textformat geladen.“, oder so ähnlich); dieser ist anzutippen.

Danach klappt es auch mit sehr großen Anhängen, ... also das Laden, Öffnen bzw. Speichern.


Rücksendekosten trägt nun generell der Käufer - Dank sei der EU!

Mal was richtig Gutes von der EU: Rücksendekosten trägt dank einer EU-Angleichung ab dem 13. Juni 2014 auch in Deutschland nun generell der Käufer!

Bisher war es in Deutschland so, dass der Rückversand einer online oder aus dem Katalog gekauften bzw. erst einmal nur "bestellten" Ware ohne Angabe von Gründen erfolgen konnte; die Kosten musste rechtlich zudem der Verkäufer tragen, sofern der Warenwert bei 40 € oder darüber lag. Darunter entschied die Kulanz des Verkäufers, der meist erst gar nicht mit unliebsamen Kunden zu streiten beginnen mochte.

Das waren natürlich paradiesische Verhältnisse für Onlinekäufer, einfach kaufen und zurückschicken; also das typische "Zalando"-Modell (die Firma schreibt bis heute keine schwarzen Zahlen). Zahlen musste man i.d.R. nichts, außer vllt. den Verpackungs- und Versandkosten der ursprünglichen Bestellung an sich.

Man bestellte sich 10 Paar Schuhe und schickte davon 9 oder gar alle wieder zurück, weil sie einem nicht gefielen oder weil man sie sich nicht leisten konnte, oder warum auch immer. Am Besten ging beim Anprobieren sogar auch noch etwas kaputt.

Der Verkäufer war vom Gesetz her gezwungen die Kosten für den Rückversand zu übernehmen (sofern Warenwert über 40 €). Die Ware die zurück kam war weder neu noch originalverpackt, und wenn kein Grund angegeben wurde, dann war es auch möglich, dass z.B. irgendetwas kaputt war, nur was? Im schlimmsten Fall war der Wert gemindert oder die Ware sogar nicht weiter verwendbar, also u.U. sogar schlicht unverkäuflich (gerade bei Spezialanfertigungen, etwa auf DaWanda & Co.).

Im Extremfall blieb man als Verkäufer also auf den gesamten Kosten sitzen, plus Rücksendekosten die ganz klar vom Käufer verursacht wurden. Und man wusste nicht mal was denn nun mit der Ware nicht stimmte.

Das wird sich nun gerechterweise ändern. Der Käufer muss, wie es sich gehört, einen Grund angeben, damit man dann auch weiß warum (zurücknehmen muss man den Artikel als Verkäufer aber weiterhin (Gesetz bzw. Recht des Käufers), denn bei einer Onlinebestellung kann die Ware ja letztlich auch mal anders "ausfallen" als gedacht, und im Laden vor Ort hätte man sich dann z.B. erst gar nie dafür entschieden).

Und wenn der Käufer meint den Artikel doch nicht mehr haben zu wollen, dann soll er bitte auch die Kosten für die Rücksendung der Ware an den Eigentümer tragen (wie beim Kauf ja auch der Fall) - der Kunde ist dann ja auch immerhin der Kostenverursacher. Und wieso soll der Verkäufer dafür bezahlen dass doch der Käufer (s)ein offensichtliches Risiko (unbesehen) eingeht?

Reklamationen sind hiervon natürlich ausgenommen (Nachbesserung), denn da behält der Kunde ja die Ware bzw. muss eine intakte bekommen!


Samstag, 17. Mai 2014

MySQL-Datenbank - Übersicht für Anfänger

Hier eine kleine Übersicht/Sammlung der grundlegenden Schritte, um eine MySQL-Datenbank auf Linux-Ebene (CentOS) zu installieren, einzurichten, eine Datenbank mit Tabellen zu erstellen und damit zu arbeiten - ideal für Anfänger.

MySQL installieren


yum install mysql
yum install mysql-server

Wichtiger Hinweis:
Unter CentOS 6.5 (RHEL 6.5) kommt z.B. noch die Version 5.1 von MySQL zum Einsatz. Wer eine neuere Version verwenden möchte, der kann diese auch über ein MySQL-Repository beziehen!

MySQL einrichten/starten


chkconfig --levels 235 mysqld on (mysqld beim Serverstart mit starten)
/etc/init.d/mysqld start (mysqld gleich starten)

MySQL sicher machen (Passwort)

MySQL ist der Einfachheit halber zuerst einmal ziemlich offen was die Berechtigungen angeht, ohne ein Passwort, mit Vollzugriff auf die Datenbanken und mit einem anonymen Benutzer. Das wäre natürlich fatal für die Sicherheit im produktiven Einsatz!

Ganz besonders wichtig ist daher das Ausführen des folgenden Befehls:

mysql_secure_installation
  1. Altes Passwort eingeben (leer)
  2. Neues Kennwort eingeben!
  3. Anonyme Benutzer entfernen!
  4. Login von Extern untersagen!
  5. Testdatenbank (Zugriff) entfernen
  6. Rechtetabellen neu laden
Hierbei geht es aber erst einmal nur um den 'root'-Zugang; zum weiteren Abhärten (Steigerung der Sicherheit) sollte man dann auch noch Benutzer anlegen, die ggf. nur eingeschränkte Rechte auf bestimmte Tabellen besitzen, siehe MySQL-Benutzerkontenverwaltung.

MySQL-Datenbank und Tabelle erstellen


mysqladmin -u root -p create DATENBANK (Datenbank erstellen)
 (Passwort ist standardmäßig leer)

mysql -p
mysql>use DATENBANK;

mysql>CREATE TABLE Tabelle (id INT NOT NULL AUTO_INCREMENT, Text VARCHAR(10) NOT NULL, PRIMARY KEY (id)); (Tabelle erstellen, siehe auch Datentypen und deren Speicherbedarf)

mysql>ALTER TABLE Tabelle MODIFY Text VARCHAR(255); (nachträgliche Änderung vornehmen)
mysql>ALTER TABLE Tabelle ADD eMail VARCHAR(50); (nachträgliche Erweiterung)

mysql>CREATE INDEX Textindex on Tabelle (Text); (Index erstellen)

mysql>LOAD INDEX INTO CACHE Tabelle; (Tabellenindex gleich in den Speicher laden (MyISAM))

mysql>ALTER TABLE Tabelle DROP INDEX Textindex; (Index löschen; auch für Spalten mgl.)

mysql>TRUNCATE TABLE Tabelle; (Tabelle leeren (FLUSH ist für Cache))

mysql>DROP TABLE Tabelle; bzw. DROP DATABASE DATENBANK; (löscht Tabelle/Datenbank)
mysql>exit

Dateien auf Dateisystemebene finden


Die erzeugten Datenbankdateien kann man sich dann auf Dateisystemebene gleich schon mal anzeigen lassen:

cat /etc/mysql/my.cnf oder cat /etc/my.cnf ("datadir="); my.ini unter Windows (C:\Programme)
ls -la /var/lib/mysql/DATENBANK

MyISAM-Struktur:

./db.opt (Datenbankeigenschaften)
./Tabelle.frm (Spalten (Tabellendefinition))
./Tabelle.MYD (Daten)
./Tabelle.MYI (Indizes)

InnoDB-Struktur:

./db.opt (Datenbankeigenschaften)
./Tabelle.frm (Spalten (Tabellendefinition))
./Tabelle.ibd (Daten und Indizes)

Hierfür ist die Option innodb_file_per_table in der Konfigurationsdatei "my.cnf" zu beachten; ohne jene werden Tabellen in einem gemeinsamen "Tablespace" gespeichert, ohne diesen aber auch einzelne IBD-Dateien nicht zugänglich wären (umständlicher als bei MyISAM). Es gibt natürlich Vor- und ggf. Nachteile, aber der File-per-Table-Modus ist ab MySQL 5.6.6 der Standard.

MySQL-Datenbank nutzen/verwenden


mysql -p
mysql>use DATENBANK;
mysql>INSERT INTO Tabelle (Text) values ("Hallo!"); (Daten einfügen; Vorsicht mit DELAYED)

mysql>SELECT * FROM Tabelle; (Inhalt der Tabelle ausgeben)

mysql>UPDATE Tabelle SET Text = "Ciao!" WHERE id = 1; (Inhalt ändern)

mysql>REPLACE INTO Tabelle (Text) values ("Hallo!"); (Ersetzung; klappt aber nur, wenn "Text" ein Schlüsselfeld ist (PRIMARY oder UNIQUE KEY), ansonsten wird ein INSERT vorgenommen)

mysql>DELETE FROM Tabelle WHERE id=1; (Datensatz löschen)

mysql>INSERT INTO Tabelle (id, Text) VALUES (1, "Hallo!") ON DUPLICATE KEY UPDATE Text="Ciao!"; ("Upsert"; entweder INSERT oder UPDATE; macht nur Sinn wenn "Text" PRIMARY oder UNIQUE KEY wäre, statt hier mit der fortlaufenden ID (autoinkrementeller Wert) als Primärschlüssel)

mysql>CREATE VIEW Sicht AS SELECT Text FROM Tabelle WHERE id<10; (virtuelle Tabelle erstellen, hier mit den ersten 10 Einträgen)

mysql>SELECT * FROM Tabelle WHERE Text="Ciao!"; (bestimmten Inhalt der Tabelle ausgeben)
mysql>exit

Mit SELECT kann man dann übrigens ganz viele tolle Sachen machen, etwa mittels JOINs.


Des Weiteren gibt es übrigens noch LOAD DATA INFILEHANDLER und DO, aber das hier rein nur zur Vollständigkeit. Für Fortgeschrittene gibt es auch sog. "Subqueries" (auch "Subselects" genannt), also Unterabfragen innerhalb einer Abfrage.

Siehe auch



Wichtig: Wenn Sie Eingaben von Benutzern verarbeiten, etwa über PHP (Formulareingaben oder über Parameter in der URL), dann verwenden Sie unbedingt Platzhalter (Prepared Statements), Escapes/Typumwandlungen oder Data Objects um eine SQL-Injection (Verarbeitung von Code) zu verhindern!

Tipp: Eingegebene Befehle kann man auf Konsolenebene (Terminal) mit der [Pfeil-nach-oben]-Taste erneut aufrufen, gespeichert werden diese im Benutzerprofilverzeichnis als .bash_history und für MySQL in der .mysql_history (als einfacher Text); die kann man sich dann auch sichern!


Donnerstag, 15. Mai 2014

Priorisierung unter Linux - nice, renice, cpulimit, ionice, trickle und Quota

Unter Linux kann man Prozesse wunderbar priorisieren oder limitieren, der wohl geläufigste Befehl ist nice bzw. renice, mit dem man die Priorität von Prozessen verändern kann.

Doch da gibt es noch mehr: cpulimit (CPU), ionice (Festplatte), trickle (Netzwerk/Bandbreite) oder auch die Möglichkeit von Disk Quota (Kontingent).

Mit "Runter vom Gas – Prozesse unter Linux drosseln" (extern) gibt es zusammengefasst einen beschreibenden Blogeintrag zu diesen Werkzeugen.