Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the simple-lightbox domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /www/htdocs/w010b2f5/page_m/wp-includes/functions.php on line 6121

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the advanced-responsive-video-embedder domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /www/htdocs/w010b2f5/page_m/wp-includes/functions.php on line 6121

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501
mkleine.de https://mkleine.de Alles rund um Softwareentwicklung Tue, 08 Oct 2019 05:52:14 +0000 de hourly 1 Amazon-Partnernet – beliebte Fehler https://mkleine.de/blog/2019/10/08/amazon-partnernet-beliebte-fehler/ Tue, 08 Oct 2019 05:52:10 +0000 http://mkleine.de/?p=2066 Ich bin jetzt schon einige Jahre im Amazon Partnernet aktiv und refinanziere damit meine kostenlosen Projekte im Netz. Viele da draußen möchten ebenfalls mit Amazon Geld verdienen und melden sich schnell beim Partnernet an und teilen die Links dann auf Blogs und Webseiten. Allerdings sehe ich dabei immer wieder die gleichen Fehler, welche ich hier gerne einmal zusammenschreiben möchte.

Kurz zur Info: Ich bin kein Steuerberater und dieser Beitrag stellt auch keine Steuerberatung dar. Bei Fragen oder Unsicherheit hilft nur der Weg zur professionellen Beratung. Alle Angaben ohne Gewähr.

Mythos 1: Ich muss gar nichts versteuern

Ja, man hat im Jahr 2019 einen Grundfreibetrag von 9.168 Euro. Die ersten 9168 Euro muss niemand versteuern – auch Millionäre nicht.

Aber: alles darüber muss versteuert werden und somit auch in der Steuererklärung angegeben werden. Hast Du also einen Hauptjob und machst Amazon „nur so nebenbei“ musst Du diese Einnahmen ebenfalls in der Steuererklärung angeben – denn Du bist ja längst (hoffe ich jedenfalls für Dich) über dem Grundfreibetrag.

Mythos 2: Ich brauche kein Gewerbe

In diesem Punkt bin ich mir selbst nicht so ganz sicher. Ich weiß, dass man für „unregelmäßige Einnahmen“ kein Gewerbe braucht. Also, wenn man mal für den Nachbarn ein Carport aufbaut und dafür 500 Euro bekommt, dann gibt man das einfach in der Steuererklärung an und fertig. Auch unregelmäßige Einnahmen müssen versteuert werden (siehe Punkt 1).

Für regelmäßige Einnahmen (was Affiliate-Marketing ja wohl sein dürfte) braucht man allerdings ein Gewerbe – immerhin muss man ja auch Rechnungen an Amazon schreiben. Also fix zum Finanzamt laufen, ein Gewerbe beantragen und jedes Jahr eine Einnahmenüberschussrechnung über die normale Steuererklärung abgeben. Fertig.

Solltest Du über 60.000 Euro Gewinn im Jahr kommen, wird das Gewerbe Bilanzpflichtig. Aber das ist ein anderes Thema.

Mythos 3: Ich brauche keine USt-ID

Jetzt gibt es die Kleingewerberegelung. Diese vereinfacht die Bürokratie und den monatlichen Aufwand etwas, da man nicht zum Vorsteuerabzug (MwSt) berechtigt ist. Dafür darf man im Jahr auch nicht mehr als 17.500 Euro Gewinn machen (was nur mit Affiliate eh sportlich wäre). Man könnte also denken, dass beim Affiliate-Marketing mit Amazon auch keine USt-ID notwendig sei.

Aber: Sobald man Geld von Amazon bekommt, hat man eine Leistung für ein Unternehmen im EU-Ausland (Luxemburg) erbracht. Und diese Leistung muss über die Zusammenfassende Meldung angemeldet werden. Diese Meldung kann aber nur mit einer gültigen USt-ID abgegeben werden. Ergo braucht man auch als Kleingewerbetreibender so eine ID. Einfach beantragen.

Denn: „Im Bestimmungsland müssen die Waren vom Erwerber der Umsatzsteuer unterworfen werden.“ Das heißt, man selbst zahlt auf diese Einnahmen keine Umsatzsteuer, sondern der Leistungsempfänger – also Amazon. In diesem Fall hat Amazon ja Deine Leistung (das Verteilen von Links) in Anspruch genommen und Du hast dafür Geld bekommen. Stichwort für Google ist hier Reverse Charge.

Einkommensteuer zahlst Du natürlich trotzdem für diese Leistung. Nur eben keine Umsatzsteuer in Deutschland, diese zahlt Amazon dann in Luxemburg.

Fazit

Angemeldet ist man bei dem Programm super schnell. Und die Einnahmen laufen dann einfach in Form von Gutscheinen in dein Amazon-Konto oder werden Dir überwiesen. Ich sehe super viele YouTuber, Blogger und co, welche keine USt-ID im Impressum angegeben haben. Soweit ich weiß, ist diese Angabe Pflicht, sobald man diese hat. Steht dort keine, hat derjenige es entweder vergessen, oder meldet die Umsätze nicht richtig an.

Dennoch folgt dann etwas bürokratischer Aufwand. Jeden Monat muss die Zusammenfassende Meldung übermittelt werden und die Einnahmen müssen richtig versteuert werden. Alles andere ist strafbar.

Also: Befass Dich in jedem Fall mit der Thematik. Stichworte sind wie gesagt

  • Umsatzsteuer-Identifikationsnummer
  • Reverse Charge
  • Zusammenfassende Meldung
  • (Klein-) Gewerbe

Dein Steuerberater kann Dir dabei helfen. Es ist nicht so schwer – es gibt eben nur ein paar Punkte zu beachten.

Die korrekte Kennzeichnung von solchen Links ist nochmal ein ganz anderes Thema.

]]>
Meine Videplattform auf Basis von Magento 2 https://mkleine.de/blog/2018/10/03/meine-videplattform-auf-basis-von-magento-2/ Wed, 03 Oct 2018 08:24:05 +0000 http://mkleine.de/?p=2061 Wie der ein oder andere sicher mitbekommen hat, verkaufe ich online Trainings zum Thema Smart Home. Angefangen habe ich damit auf Udemy – doch die Plattform habe ich aus diversen Gründen verlassen und mein eigenes Ding gestartet. In diesem Beitrag möchte ich einmal zusammenfassen, was mein Online-Shop eigentlich alles können musste und was ich dazu alles programmieren musste.

Nachdem ich ziemlich genau 5 Jahre in einer Agentur täglich mit Magento (2) tolle Projekte auf die Beine gestellt habe, war für mich sofort klar, dass Magento die Basis für mein neues Trainingsportal werden soll. Also habe ich mir ein paar Anforderungen notiert und diese dann nach und nach umgesetzt. Natürlich unterstützt Magento von Haus aus schon die ganze Produktverwaltung usw. Aber dennoch ist es nur eine Basis, auf welche man aufbauen muss. Auf dem Zettel stand so etwas wie:

  • Tutorials im Kundenkonto verwalten
    • Übersicht aller Trainings
    • Kostenlose Trainings nach Registrierung
    • Unterteilung in Kapitel und Lektionen je Training
    • Lektionen als gesehen markieren können
    • Kommentare zu Lektionen schreiben + Mailbenachrichtigung
    • Downloads zu Lektionen (alle Dateitypen – für Source-Code, PDF-Dateien usw.)
    • Fortschritt im Training anzeigen
    • Bewertungen zu den Trainings abgeben
    • Übersicht der Kursinhalte auf Produktdetailseiten (+ Vorschau-Lektionen)
    • Laufzeit der Videos über Vimeo API synchronisieren
  • Dann ziemlich viel organisatorisches
    • Automatische Freischaltung nach Bezahlung per PayPal + Mail
    • Anhang von PDF-Dateien (AGB, Datenschutz, …) an Bestellbestätigung
    • PDF-Rechnungen schöner machen
    • Automatischer Export der Rechnungen als PDF
    • Verschiedene MwSt-Sätze für das EU-Ausland (Privatkunden)
    • PDF-Reports für die verschiedenen Länder (MOSS)
    • Export des Produkt-Kataloges zu Facebook
    • Newsletter-Modul auf KlickTipp umbiegen (+ automatisches Tagging)
    • DSGVO-Tools zum Export aller Kundendaten auf Wunsch usw.

Vieles davon hatte die erste Version natürlich noch nicht. Aber mittlerweile ist es ziemlich umfangreich geworden. Auch wenn das Shopdesign dabei noch komplett im Standard-Theme hängen geblieben ist. Unter der Haube passiert fast wöchentlich etwas neues. So auch das Update auf Magento 2.2.6 vor wenigen Tagen. Ich probiere immer auf der aktuellsten Version zu bleiben. Dabei kommt mir immer wieder die Illustration eines Eisbergs in den Sinn, bei welchem man auch nur die Spitze sieht, und auf den ersten Blick nicht vermutet, was sich alles darunter befindet.

Um dies alles umsetzen zu können, brauchte ich natürlich nich nur das technische KnowHow, sondern musste auch noch einiges im Bereich Steuern und Datenschutz nachholen. Dabei darf natürlich der wöchentliche Content für YouTube, Instagram und die anderen Plattformen nicht zu kurz kommen. Support per Kommentarfunktion und per Mail gibt es zwischendurch auch immer wieder.

Von Docker-Containern und Backup-Strategien möchte ich gar nicht erst anfangen.

Nach gut 6 Monaten kann ich aber sagen: Es war der richtige Schritt. Die Teilnehmer begrüßen den Umstieg auf die Plattform. Viele wollten ihre Kurse von Udemy in den Shop portieren lassen. Genauso häufig höre ich allerdings die Rufe nach einer Offline-Funktion. Aktuell werden die Kurse nur online und direkt über die Plattform angeboten. Das hat den Grund, dass die Kurse immer mal wieder umgebaut und erweitert werden. Ich möchte, dass es kein starres Produkt ist. Die Kurse leben durch Interaktion und Dynamik.

Natürlich ist alles viel mehr Arbeit gewesen, aber es war richtig so. Nun bin ich unabhängig von den Machenschaften Dritter und kann genau das umsetzen, was ich selbst für richtig halte.

Als nächstes kümmere ich mich dann endlich mal um die Optik des Shops. Das Auge isst ja schließlich mit. Dabei bin ich allerdings auf Hilfe von Extern angewiesen – Design ist nun wirklich nicht mein Steckenpferd.

Und wer weiß, eventuell mache ich aus dem Ergebnis irgendwann auch mal ein ganz eigenes Produkt.

]]>
YouTube-Abos gekauft? Woran erkennt man das? https://mkleine.de/blog/2018/07/14/youtube-abos-gekauft-woran-erkennt-man-das/ Sat, 14 Jul 2018 12:44:08 +0000 http://mkleine.de/?p=2053 Seit längerem beobachte ich diverse Kanäle auf YouTube. Probiere zu lernen, wie diese große Abonnenten-Zahlen aufbauen und welche Mittel dafür benutzt werden. Viele der Mittel möchte ich dabei gar nicht anwenden – zum Beispiel diese Click-Bait-Titel oder rote Pfeile und Kreise in den Thumbnails. Das finde ich einfach nur peinlich, aber das muss eben jeder selbst wissen :)

Dabei ist mir in der Vergangenheit ein Kanal besonders aufgefallen. Diesen werde ich hier nich nennen, da dieser Beitrag niemandem schaden soll. Aber werfen wir einen Blick auf ein paar Zahlen.

Wie kommt man überhaupt an Zahlen? Natürlich kann ich (leider) nicht auf den YouTube-Analytics-Account zugreifen. Das wäre aber auch zu einfach. Man hat nur die Chance, extern die Zahlen zu beobachten. Also wie verhalten sich Abos und Views (gesamt) zu einem bestimmten Zeitraum. Dafür nutze ich SocialBlade. Hier wird jeden Tag aufgezeichnet, wieviele Views und Abos ein Kanal hat und dies ins Verhältnis zum Vortag gesetzt. Schauen wir uns also mal meinen Kanal zum heutigen Zeitpunkt an.

Hat man nun nicht gerade einen super viralen Hit gelandet, schaltet irgendwo Werbung oder macht Kooperationen mit anderen YouTubern, verhält es sich relativ linear. Also gibt es keine großen Ausreißer nach oben oder unten. Die Views und Abos wachsen stetig weiter. Das kann man auch bei größeren Kanälen beobachten und auch hier passieren nur selten Wunder.

Nur zur Info: Die Zahlen der Einnahmen kann man hier total ignorieren. Da kann man auch würfeln. Es könnte sich so gut wieder jeder denken, dass man mit den Views am Tag zwischen 0,60€ und 10€ verdient hat. Die spanne ist so groß, dass die Angabe wirklich unnötig ist. Ja, ich liege irgendwo dazwischen. Aber wo? Das schwankt von Monat zu Monat.

Und jetzt?

Okay, so weit, so langweilig. Aber wenn ich mir nun diese Seite des besagten Kanals anschaue, dann stelle ich viele komische Dinge fest. Erst einmal ein Screenshot.

Was fällt auf? Die Abo und View-Zahlen schwanken extrem. Warum sollte jemand über mehrere Tage hinweg ordentlich Abos verlieren? Ganz einfach: YouTube löscht Fake-Accounts. Man kann in China, Russland, usw. gegen Geld neue Abonnenten, Views, Daumen hoch oder runter kaufen. Diese müssen natürlich dann automatisiert Millionen von Accounts anlegen, welche dann auch den Kanal abonnieren.

Irgendwann fällt das YouTube/Google dann auf, und die Accounts werden gelöscht. Abos kann man natürlich verlieren. Views theoretisch nicht. Wenn Views abgezogen werden, ist das meistens kein gutes Zeichen. Dann korrigiert YouTube die Statistiken praktisch im Nachgang. Heißt: Dort ging es nicht mit rechten Dingen zu.

Warum sollte der besagte Kanal also an einem Tag mehr als 2.000 Abos dazu bekommen (also eine Steigerung von fast 10%), und am nächsten Tag 139 Abos wieder verlieren? Ganz einfach: die 2.000 Abos waren gekauft. Die Zahl ist dabei auch viel zu gerade. Schaut man sich die anderen Tage an, sind am 13.07. einfach nur +43 Abos dazu gekommen. Das würde ins Bild passen. Die restlichen 2.000 eher nicht.

Weiterhin stimmt das Verhältnis zwischen Views und Abos nicht. Warum sollten am 12.07. aus 2.333 Views nur 34 Abonneten werden, aber einen Tag spät aus 3x (DREI MAL) so vielen Views plötzlich 60x (SECHZIG MAL) so viele Abos?

Wartet man nun ein paar Tage, steht dort sicherlich wieder irgendwann ein dickes Minus.

Könnte man nun in die Statistiken schauen, würde man schnell feststellen, dass ein Großteil der Abonnenten gar nicht aus Deutschsprachigen Ländern stammt (was für einen Deutschen Kanal schon ziemlich seltsam ist).

Was hat man davon?

Eigentlich erstmal gar nichts. Man kann höchstens (mehr) Geld für Kooperationen etc. rausschlagen, bekommt Produkte zugesendet oder kann den Kanal anderweitig vermarkten. Nach außen sieht das natürlich toll für Firmen aus.

Außerdem habe ich auf diesem Kanal beobachtet, dass Videos über Nacht richtig viele Views und „Daumen hoch“ dazu bekommen. Nachts um 0 Uhr stehen dort beispielsweise 500 Views für das neueste Video. Das ist okay. Am nächsten Tag plötzlich 7.000! Also entweder der Kanal richtet sich an Schichtarbeiter die Nachts nichts zu tun haben, oder hier stimmt etwas nicht. Und das passiert bei jedem einzelnen Video.

Was möchte ich damit sagen?

Liebe Firmen, lasst Euch von den Zahlen nicht blenden. Lasst Euch (vollständige!) Screenshots von den Analytics-Seiten der „Partner“ senden. Befasst euch mit dem Thema. Schmeißt den Leuten kein Geld oder Produkte hinterher, welches sie zum Teil verwenden um neue Views auf Euer bezahltes Werbe-Video zu kaufen. Das soll nur suggerieren, dass es gut lief und ist in meinen Augen schlicht und ergreifend Betrug.

Interessante Links mit wichtigen Infos wären zum Beispiel (extra nicht verlinkt, führt nur zu den eigenen Statistiken):

https://www.youtube.com/analytics?o=U#dt=lt,fe=17724,fr=lw-001,fs=16907;fc=0,fcr=0,r=subscribers,rpa=a,rpbm=31-30-,rpd=117,rpg=32,rpm=l,rpp=0,rpr=d,rps=32,rpsd=1

(Abonnenten: Zeitraum seit Erstellung / Darstellung auf einer Karte, wo welche Abonnenten herkommen / Aufgeschlüsselt nach Region / Gewonnene vs. Verlorene Abonnenten)

oder

https://www.youtube.com/analytics?o=U#dt=lt,fe=17724,fr=lw-001,fs=16907;fc=0,fcr=0,r=ratings,rpa=a,rpbm=40-39-93,rpd=117,rpg=39,rpm=l,rpp=0,rpr=d,rps=39,rpsd=1

(Bewertungen: Zeitraum seit Erstellung / Darstellung auf einer Karte, wo welche Bewertungen herkommen / Aufgeschlüsselt nach Region / Mag ich vs. Mag ich nicht)

Tauchen hier (im Verhältnis) hohe Zahlen aus Fernost auf, würde ich es einfach sein lassen. Unvollständige oder teilweise geschwärzte Screenshots halte ich ebenfalls für Zensur. Warum sollte man hier etwas verheimlichen, wenn alles gut läuft?

Natürlich könnte theoretisch auch jemand anderes Abos, Views und Likes für einen anderen Kanal kaufen. Aber im Ernst: Wie wahrscheinlich ist das UND was hätte derjenige davon?

Natürlich kann es auch sein, dass durch Kooperationen oder ehrliche Werbung auf einen Schlag mehr Abos gewonnen werden, als an „normalen“ Tagen. Aber erstens nicht so „rund“ im obigen Beispiel, und zweitens wären die Abos dann nicht im Laufe der nächsten Woche wieder weg.

]]>
Meine Meinung zu Udemy https://mkleine.de/blog/2018/06/18/meine-meinung-zu-udemy/ Mon, 18 Jun 2018 11:18:50 +0000 http://mkleine.de/?p=2044 Jetzt bin ich über ein Jahr auf der Plattform und habe gut 1.000 Kurse verkauft. Davon genau 0 (NULL) über irgendwelche Werbeaktionen Seitens Udemy, in welchen die Kurse für Kleinstbeträge „verramscht“ werden. Wie das geklappt hat, und wem genau ich die Plattform noch empfehlen würde, erfährst Du in diesem Beitrag.

Vor ziemlich genau einem Jahr ging mein erster Kurs auf Udemy online. Dies ist eine Plattform, auf welcher man Online-Kurse hochladen und verkaufen kann. Udemy streicht dabei selbstverständlich einen Teil der Einnahmen ein. Soweit klingt das erstmal auch alles sehr gut, oder? Immerhin muss ich den Kunden keine Rechnungen schreiben, bekomme am Ende eine einzelne Überweisung und alles ist super.

Die Situation

Mein großes Problem mit der Plattform ist allerdings, dass immer mehr Kurse praktisch zum Nulltarif verramscht werden. Eine Aktion jagt die nächste und der Kunde bekommt den Eindruck, dass man praktisch blöd sein muss, wenn man den Normalpreis zahlt. So bekommt man nahezu jeden Kurs früher oder später für unter 10 Euro. Warum nur nahezu? Ganz einfach: Man kann sich als Dozent aus diesen Werbeaktionen austragen lassen. Und das würde ich auch jedem wärmstens ans Herz legen.

Denn sobald Udemy einen Kurs vermarktet, ändert sich auch das Provisionsmodell. In diesem Fall streicht sich Udemy also satte 50% vom Nettoumsatz ein. Wird der Kurs also für 10 Euro verkauft, bleibt nicht mehr viel für den Dozenten übrig. Da müsste man wirklich tausende von neuen Teilnehmern monatlich dazu bekommen, um nachher überhaupt etwas von den Umsätzen zu merken. Mehr Teilnehmer heißt natürlich auch mehr Arbeit – denn die Teilnehmer stellen ja auch Fragen im Kurs und wollen betreut werden. Wie lange kannst Du für ~4 Euro vor Steuern einen Kunden betreuen? Eben.

Das sind dann Preisregionen, welche von der Umsatzstärke eher Affiliate-Marketing für Waschmaschinen gleichzusetzen sind – nur eben mit Nacharbeit und Fragen. Klingt nicht unbedingt nach einem erstrebenswerten Ziel, oder?

So kommt es, dass in der deutschsprachigen Facebook-Gruppe von Udemy immer wieder Posts auftauchen, welche ganz stolz nach einem Jahr harter Arbeit die 1.000 Dollar-Grenze geknackt haben. Da blutet mir wirklich das Herz. Verkauft Euch nicht so günstig!

Also auf diesen Zug würde ich auf keinen Fall aufspringen. Daher noch einmal: Tragt Euch in jedem Fall aus den Werbemaßnahmen bei Udemy aus. Dann nehmt ihr daran nicht mehr Teil und könnt die Kurse selbst für anständige Preise verkaufen, von welchen man am Ende auch etwas hat. Wenn man einmal in diesem System gefangen ist, kann man auch nicht plötzlich seine Preispolitik komplett umkrempeln – das wirkt unglaubwürdig.

Wenn man dann dieses Preisdumping nicht mehr mitmacht, muss man seine Kurse natürlich irgendwie an den Mann / die Frau bringen. Wichtig ist, dass man den Preis bei Udemy dann so hoch ansetzt, dass diese Kurse über die Plattform ohne einen Eurer Gutscheine praktisch nicht mehr gekauft werden. Denn ein Kauf ohne Gutschein heißt: Udemy hat den Kurs verkauft, 50% vom Nettoumsatz sind weg.

Die Auszahlung

Dann kommt es zur ersten Auszahlung, auf welche man drei Monate gewartet hat. Hier ist es so, dass Udemy nur in US-Dollar und per PayPal auszahlt (mittlerweile gibt es auch eine zweite Möglichkeit, welche aber für mich keinen Vorteil bietet). Hier wird es dann auch noch einmal teuer, da man das Geld bei PayPal umrechnen lassen muss, bevor man es auszahlen lassen kann.

Am 6. April 2018 habe ich z.B. von Udemy 2.454,07 USD erhalten. Dafür habe ich umgerechnet 1.948,62 EUR erhalten. Ich bekomme also 0,79403603 EUR pro Dollar an diesem Tag. Laut finanzen.net lag der Kurs an diesem Tag bei 0,8131. Also hätte ich 1995,40 EUR erhalten müssen. Das sind satte 46,78 EUR Unterschied (schon bei so kleinen Beträgen). Und so läppern sich diese Werte natürlich auch über die Zeit.

Der Witz ist ja, dass die meisten Leute in EUR bezahlen, dann wird USD draus gemacht und am Ende wieder EUR. Auf dem Weg geht sicher einiges verloren.

Am besten wäre es, wenn Udemy in einer Wunsch-Währung das Dozenten-Konto führen könnte. Sodass man in EUR bezahlt werden kann wenn man möchte. Wenn jemand einen Kurs in EUR kauft, bleibt es EUR (99% der Fälle im Deutschsprachigen Raum). Wenn jemand in einer Fremdwährung kauft, wird es EUR. Aber zweimal Umrechen ist wohl einfacher.

Weiterhin ist am Anfang nachteilig, dass Udemy natürlich MwSt erheben muss. Wenn man nun ein Kleingewerbe ohne Umsatzsteuer betreibt, „verschenkt“ man praktisch diese 19%. Gut, auf der anderen Seite könnte man mit einem eigenen Shop ohne MwSt gar nicht ins Ausland verkaufen.

Der „beste“ Weg?

Der einzige wünschenswerte Fall ist also: Der Kunde kauft den Kurs zu einem für Dich fairen Preis über einen von Dir vorher generierten Gutschein auf der Plattform (welchen man direkt in der URL übergeben kann). Du nutzt also Udemy nur als Hosting-Anbieter für deine Videos. Kostet ein Kurs also zum Beispiel 100€ regulär auf der Plattform, bietest Du einen Gutschein an, sodass der Endpreis bei 40€ liegt. Das kannst Du natürlich frei entscheiden. Von diesen 40€ über einen deiner Gutscheine, erhältst Du satte 97% des Netto-Umsatzes. Das sind dann auf jeden Fall vernünftigere Beträge.

Von diesem Geld kannst Du dann sogar Landingpages hosten, selber bauen oder in Auftrag geben, Facebook-Werbung schalten oder Traffic aus anderen Quellen generieren. Man hat plötzlich ganz andere Optionen und ist nicht mehr so stark abhängig von der Plattform. Unabhängig ist man leider dennoch nicht.

Dennoch abhängig!

Selbst wenn man das alles so macht, kann man zwar vernünftige Preise erzielen, aber ist trotzdem eingeschränkt und abhängig. Man sagt ja: Bau kein Haus auf fremdem Grund.

Man hat nach wie vor keinen Zugriff auf die Kundendaten und spielt diese Kunden Udemy zu. Man selbst kann nur begrenzt Newsletter schreiben und diese Kontakte nutzen. Man kann mit den Kundendaten nicht auf eine andere Plattform umziehen – die Daten gehören einem einfach nicht.

Sollte Udemy irgendwann mal nicht mehr existieren (was ich nicht hoffe), ist alles weg. Man steht mit seinen Inhalten wieder bei Null und ohne Einnahmen dar.

Weiterhin ist es richtig ärgerlich, dass man die Auszahlung seiner eigenen Umsätze immer erst drei Monate später bekommt. Man kann mit dem Geld nicht arbeiten. Wenn das Ganze erstmal angelaufen ist, ist das nicht schlimm. Dann bekommt man ja jeden Monat das Geld für die vergangenen Monate. Aber es fühlt sich komisch an und macht den Start schwieriger.

Zudem hat man nicht die Möglichkeiten selbst Werbung auszuspielen, da man nicht weiß, welcher Kunde gekauft hat. Man kann also keine Tracking-Events im Online-Marketing einsetzen um Werbung auf anderen Plattformen zu schalten. Ich denke, dass Udemy das auch nicht möchte.

Großer Vorteil

Man darf nicht vergessen, dass Udemy allerdings auch super Vorteile hat. Man muss sich nicht um Steuern kümmern, kann weltweit seine Kurse vertreiben und bekommt am Ende nur eine Zahlung. Das macht die Buchhaltung natürlich super einfach.

Dass einem die Kundendaten nicht gehören, hat auch einen großen Vorteil: Themen wie die DSGVO können einem egal sein – man ist ja nur Nutzer der Plattform.

Alleine diese beiden Punkte sind ein extrem großes Plus. Man kann sich als Einzelkämpfer auf genau das konzentrieren, was man machen möchte: Videos. Wahrscheinlich hätte ich schon zwei Kurse mehr, wenn mich um diese Themen aktuell nicht kümmern müsste.

Fazit

Am Ende bist genau Du als Dozent das, was Udemy braucht. Du brauchst Udemy nicht, es ist eigentlich eher umgekehrt. Ohne Dozenten gibt es keine Kurse. Du hast alle Karten in der Hand – spiele sie richtig. Hilf mit Deinem Handeln, das Preis-Dumping auf der Plattform zu stoppen. Arbeite nicht ein Jahr für 1.000 Dollar.

Die Plattform war für mich eine gute und günstige Möglichkeit, zu testen ob mein Thema gut vom Markt angenommen wird. Dafür bin ich auch sehr dankbar – ohne Udemy wäre das ein enormer Kraftaufwand gewesen, von welchem man am Ende nicht einmal weiß, ob das alles hinhauen wird. Man muss also weniger in Vorleistung gehen und kann das Ökosystem nutzen.

Ohne Udemy wäre ich nicht da, wo ich heute bin. Das ist klar.

Wenn man „nur“ auf Udemy ist, keine Webseite oder andere Kanäle hat um Traffic auszuspielen, ist Udemy sicher eine super Plattform um ein paar Euro dazu zu verdienen. Möchte man das Ganze aber ersthaft betreiben, eigenes Marketing auf die Beine stellen und seine Kurse zu fairen Preisen verkaufen, kommt man nicht drumherum selber Traffic aufzubauen.

Ich habe Udemy für neue Inhalte allerdings den Rücken gekehrt, da ich mich für meine Selbstständigkeit nicht in diese Abhängigkeit begeben möchte. In einem eigenen Online-Shop auf meinen eigenen Servern betreibe ich nun eben diese Lösung. Ich verstehe auch, dass das nicht jeder leisten kann. Der Shop hätte im Einkauf sicherlich mehrere 10.000 Euro gekostet. Als Softwareentwickler aus dem eCommerce-Bereich kann ich mir dabei natürlich super selber helfen.

Die schon genannten zusätzlichen Aufwände in Sachen Backups, Datenschutz, Serverkosten, Buchhaltung etc. kommen dann ja noch on Top. Alleine die Abrechnung in unterschiedliche EU-Länder ist echt ätzend. Am Ende muss man schauen, welche Vorteile sich für einen ergeben.

Ich mag die Plattform sehr gerne, die Kommunikation in der geschlossenen Facebook-Gruppe für Dozenten ist ebenfalls sehr angenehm. Man findet immer Hilfe und muss nicht alleine Kämpfen bei Fragen – das ist super positiv!

Wenn Udemy jetzt

  • die Preisstrategie in den Griff bekommt,
  • vernünftige Wege zur Auszahlung findet
  • und weitere Möglichkeiten des Conversion-Trackings einräumt,

wäre es eine optimale Plattform. So ist es „nur“ eine gute Plattform, welche ein paar Nachteile mitbringt. Diese sollte man kennen und für sich persönlich abwägen.

Für einen Start als Online-Dozent gibt es meiner Meinung nach dennoch keine bessere Alternative zur Zeit.

]]>
Migration von Disqus zu isso https://mkleine.de/blog/2018/05/01/migration-von-disqus-zu-isso/ Tue, 01 May 2018 10:30:29 +0000 http://mkleine.de/?p=1924 Bald ist es soweit. Die DSGVO greift und die Übergangszeit ist zu Ende. Für mich ist es also an der Zeit, Disqus abzulösen und durch eine eigene Plattform zu ersetzen. Erst dachte ich: Das programmierst Du eben selbst. Aber warum so kompliziert, wenn es auch einfacher geht? Mit isso wurde nämlich schon genau so eine Lösung geschaffen.

Mir ging es darum, dass ich die Webseite eigentlich genauso lassen kann wie zuvor. Also weiterhin statischer Content und ein JavaScript lädt dann die Kommentare dazu. Genau wie bei Disqus also. Und das habe ich getan. Zum Glück gibt es auch schon fertige Docker-Images. Zusammen mit LetsEncrypt und der Apache-Konfiguration hatte ich Ablösung innerhalb weniger Stunden stehen.

Docker-Container starten

Der Container war schnell gestartet. In /config liegt nur eine isso.conf, welche ich danach beschreibe.

docker run -itd --restart=always -v /docker/isso/config:/config -v /docker/isso/db:/db -e GID=1000 -e UID=1000 --hostname=comment-haus-automatisierung-com.docker --name isso-comment-haus-auto wonderfall/isso

Hier der Inhalt der isso.conf

[general]
dbpath = /db/comments.db
host = https://haus-automatisierung.com/
max-age = 15m
[server]
listen = http://0.0.0.0:8095/
[moderation]
enabled = false
[guard]
enabled = true
ratelimit = 2
direct-reply = 3
reply-to-self = true
require-author = true
require-email = true

Das ist auch schon alles. Host die die Webseite, welche später die Kommentare laden soll. Diese Angabe ist für die CORS-Geschichten notwendig. Der Teil läuft also schonmal. Nur ist nun noch nichts von extern erreichbar. Man könnte natürlich die Ports direkt freigeben und das Ganze auf Port 8080 oder so laufen lassen. Aber ich habe mich für eine Variante mit https über den Apache per ReverseProxy entschieden:

<Macro comment-haus-automatisierung-com>
        ServerName comment.haus-automatisierung.com

        ServerAdmin postmaster@emailu.de

        DocumentRoot "/blabla/htdocs/comment/"
        ErrorLog "/blabla/logs/comment.error.log"
        CustomLog "/blabla/logs/comment.access.log" combined

        ProxyPreserveHost On
        ProxyRequests off
        ProxyPass / http://localhost:8095/
        ProxyPassReverse / http://localhost:8095/
</Macro>

<VirtualHost *:80>
        Use comment-haus-automatisierung-com
</VirtualHost>
<VirtualHost *:443>
        Use comment-haus-automatisierung-com

        SSLEngine on
        SSLCertificateFile /blabla/comment.cert.cer
        SSLCertificateKeyFile /blabla/comment.private.key
        SSLCertificateChainFile /blabla/comment.fullchain.cer
</VirtualHost>

Das wars. Zertifikat erstellt und gestartet. Läuft alles. Eigentlich arbeite ich intern ebenfalls mit Namensauflösung. Für diesen Beitrag habe ich das aber in localhost geändert. Müsste eigentlich auch klappen.

Kommentare migrieren

Auf dieser Seite kann man sich einen Export der aktuellen Kommentare laden. Sobald man dies getan hat, sollte man Disqus abschalten. Ansonsten bekommt man logischerweise eventuell eine Differenz. Danach bekommt man per Mail einen öffentlich zugänglichen Link auf die XML-Datei mit den Kommentaren. Alleine an dieser Stelle sollte man sich schon fragen, wie groß Datenschutz dort wirklich geschrieben wird. Meine Datei enthält gut 32.000 Zeilen und ziemlich viele Kommentare.

Jetzt muss diese Datei natürlich noch importiert werden. Dazu kopiere ich die XML-Datei auf den Server und schiebe sie einfach in das DB-Verzeichnis (da dieses ja eh schon ein Volume von Docker ist). Dann führe im Container den folgenden Befehl aus:

isso -c /config/isso.conf import /db/haus-automatisierung-2018-05-01T09_00_33.682754-all.xml

Der Fortschritt wird dann mit einer Prozentanzeige angezeigt und am Ende hoffentlich wie folgt quittiert:

[100%]  98 threads, 1876 comments

Das sollte der wichtigste Schritt auch schon gewesen sein. Gar nicht so schwer bis hier hin.

Client-Seite ändern

Wie man gesehen hat, lautet meine Domain für die Kommentare comment.haus-automatisierung.com. Entsprechend binde ich nun das JavaScript dafür ein.

        <script data-isso="//comment.haus-automatisierung.com/"
                data-isso-css="true"
                data-isso-lang="de"
                data-isso-reply-to-self="true"
                data-isso-require-author="true"
                data-isso-require-email="true"
                data-isso-max-comments-top="inf"
                data-isso-avatar="false"
                data-isso-vote="true"
                src="//comment.haus-automatisierung.com/js/embed.min.js"></script>

        <section id="isso-thread"></section>

Fertig. Läuft!

Leider steht jetzt noch die Aufgabe an, das Design an den Rest der Seite etwas anzupassen.

Zum Backup gehört nun noch das comments.db-File, welches eine sqllite-Datenbank ist.

]]>
Das Jahr 2017 https://mkleine.de/blog/2017/12/28/das-jahr-2017/ Thu, 28 Dec 2017 09:35:05 +0000 http://mkleine.de/?p=1896 Wie schon 2012, 2013, 2014, 2015 und auch 2016 möchte ich natürlich auch dieses Mal wieder mein Jahr kurz und knackig zusammenfassen. Dabei verschiebt sich aber der Fokus nun etwas. Was genau damit gemeint ist, merkst Du schon, wenn Du die anderen Beiträge vergleichst.

Beginnen wir also wie immer mit ein paar Zahlen:

  • Beiträge: 369 (+23)
  • Klicks: 77.400 (-33%)
  • Besucher: 49.800 (-30%)

Wie man sieht, wird es hier immer dünner. Warum? Erzähle ich gerne.

  • Endlich Selbstständig! Nach 5 Jahren als Softwareentwickler in einer Agentur habe ich den Schritt in die Selbstständigkeit gewagt. Seit 01.11.17 bin ich also nun für mich selbst verantwortlich. Mehr dazu im nächsten Punkt.
  • DIY-Smart-Home ist jetzt mein Business geworden. Ich habe alles andere abgebrochen und setze nun auf diese Karte. Daher ist dieser Blog auch ein wenig eingeschlafen und es kommen wesentlich weniger Beiträge als früher.
  • In diesem Jahr sind gut 5.000 Abonnenten auf YouTube dazu gekommen. Das sind 80% aller Abonnenten. Fast 1.000 davon sogar nur im November.
  • Das liegt aber auch daran, dass ich im November über 20 neue Videos hochgeladen habe. Also Content ist wirklich King. Oder eher Mehrwert. Ich bin super happy mit der Entwicklung und dem Feedback aus der Community.
  • Ich war im Jahr 2017 komplett mit dabei, als Ben Schneider seiner Insidergruppe beigebracht hat, wie man einen eigenen Blog aufbaut und monetarisiert. Für mich war es natürlich sehr sehr viel Wiederholung und das meiste wusste ich schon. Allerdings lernt man immer wieder kleine Tricks dazu und 2018 starten wir mit Online-Marketing richtig durch. Da ist für mich sicher auch viel Wiederholung dabei, aber da ich noch mehr digitale Produkte erstellen werde, brauche ich das Know-How auf jeden Fall. An die Hand genommen zu werden schadet auf jeden Fall nicht.
  • Das Thema Persönlichkeitsentwicklung und Unternehmertum begeistert mich weiterhin. Ich lese viele Bücher und war dieses Jahr auf der Vertriebsoffensive von Dirk Kreuter in Dortmund. Ein tolles Event, über welches ich bereits hier berichtet hatte.
  • Als Magento-Freelancer bin ich weiterhin nebenbei tätig – kontaktiert mich gerne bei Fragen und kleineren Projekten. Allerdings nehme ich nur Projekte an, welche ich auch wirklich schaffen kann. Ich habe Anfragen für große und sehr komplexe Shops bekommen, welche mich sicher ein halbes Jahr beschäftigen würden. Diese kann ich natürlich nicht alleine umsetzen.
  • Unser Kochblog (elegant-kochen.de) ist jetzt auf 4K umgestiegen. Gefilmt wird jetzt mit einer GH5. Wirklich unglaublich was diese Kamera liefert. Natürlich fordert dies auch mein MacBook wirklich heraus. Weiterhin erscheint jede Woche ein neues Video. 2018 starten wir gemeinsam aber noch einmal richtig durch. Auch dort wurden gegen Ende des Jahres die 5.000 Abonnenten durchbrochen.
  • Nadine war mit elegant-kochen bereits 2x im Radio, in den Lokalzeitungen, es wurde in der Zeitung „für Sie“ berichtet und sie durfte auf der Landesgartenschau einen kompletten Tag in einer Showküche kochen. Also in dieser Richtung ebenfalls ein sehr erfolgreiches Jahr. So ist auch der Bereich „Presse“ auf der Webseite entstanden.

Die Webseiten selbst haben sich in diesem Jahr optisch fast gar nicht verändert. Nur Kleinigkeiten wurden angepasst. Aber mittlerweile sind diese meiner Meinung nach auch alle zusammen auf einem relativ hohen Level, sodass ich gar nicht mehr das Bedürfnis habe, diese oft anzufassen. Zumindest nicht mit so großen Schritten wie in den letzten Jahren. Es gibt eher viele kleine Optimierungen.

Technik

  • Ich habe einen eigenen Root-Server gebucht, auf welchen fast alle meiner Seiten schon umgezogen sind. Diese hier gehört übrigens noch nicht dazu.
  • Dieser ist natürlich mit Docker ausgestattet und alle Webseiten laufen in einzelnen Docker-Containern.
  • Wie schon erwähnt bin ich von der Fotografie auf die Videografie umgestiegen. Hier setze ich auf eine GH5 und filme fast alles in 4K. Die Datenmengen sind natürlich enorm. Wenige Minuten sind schnell mehrere GB groß.
  • Weiterhin wurde unser Unitymedia-Anschluss ein wenig „verschnellert“. Jetzt gibt es 400MBit down und 20MBit up.
  • Ich bin von CleverReach zu KlickTipp umgezogen und probiere im E-Mail-Marketing mehr zu lernen und auch per Mail super viel Mehrwert für meine Abonnenten zu liefern.
  • 2017 habe ich dann auch meine ersten Google- und Facebook-Anzeigen geschaltet. Die meisten Umsätze generiere ich aber ganz ohne Werbung auf diesen Plattformen.

Bestimmt ist noch viel mehr passiert. Eigentlich möchte ich immer über das Jahr dokumentieren, vergesse es dann aber wieder. Ich bin jedenfalls sehr stolz auf die Entwicklung der einzelnen Seiten und dass ich 2018 so richtig durchstarten kann. Ich weiß nicht, wann ich mal so viel gelernt habe wie in diesem Jahr. Ich hoffe, dass das so weitergeht. Ich bin sehr dankbar dafür, dass ich das alles so machen kann.

]]>
Docker-Container per DNS auflösen https://mkleine.de/blog/2017/12/27/docker-container-per-dns-aufloesen/ Wed, 27 Dec 2017 19:52:54 +0000 http://mkleine.de/?p=1915 Ich habe auf meinem Root-Server alle in Docker-Containern laufen. Also WordPress für mehrere Webseiten. Alles PHP-FPM. Jetzt starte ich meine Docker-Container alle mit einem entsprechenden Hostnamen. Also meistens so wie die Domain heißt plus „.docker“. Also zum Beispiel „klein0r-de.docker“. Dieses Ziel gebe ich dann in meinem Apache für ProxyPathMath an.

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://kleine-photo-com.docker:9000/usr/src/myapp/$1

Soweit, so gut. Apache läuft bei mir übrigens nicht in einem Container. Warum eigentlich nicht? Könnte ich mir auch noch überlegen.

Jedenfalls habe ich dann das Problem, dass mein Host diese Domain nicht auflösen kann! Also habe ich anfangs die einzelnen Seiten in die etc/hosts eingetragen. Blöd ist dabei nur, dass die IPs natürlich rotieren können, sobald der Server mal neugestartet wird. Also habe ich plötzlich andere Inhalte hinter den Domains – extrem nervig. Das ist mir jetzt 2x passiert und nun habe ich mich mit einer Lösung beschäftigt. Am einfachsten war dabei für mich der Weg über einen weiteren Docker-Container für DNS.

docker run -itd --restart=always --hostname dns.docker --name dns-proxy-server -p 5380:5380 -v /var/run/docker.sock:/var/run/docker.sock -v /etc/resolv.conf:/etc/resolv.conf defreitas/dns-proxy-server

Nun werden alle DNS-Anfragen in den Container gejagt. Außerdem werden nun die Hostnamen der Docker-Container richtig aufgelöst und alles funktioniert wunderbar wie ich mir das vorgestellt habe. Sobald man den Container stoppt ist übrigens wieder alles wie vorher. Also kein Risiko. Danke restart=always wird der Container also nun auch immer brav mitgestartet und alles überlebt ebenfalls einen Neustart des Servers. Puh, das war einfacher als ich dachte!

Nun bin ich kein Sysadmin, sondern Softwareentwickler. Daher lese ich mir solche Themen immer an und bin froh, dass es so einfache Lösungen wie diese gibt. Wenn Du eine bessere oder einfachere Idee hast: Immer her damit!

]]>