Git Pull Request enthält fremde Commits

Vielleicht ist das euch auch schon mal passiert. Mir jedenfalls passiert das immer mal wieder mal. Ich checke in ein Branch ein um zum Beispiel ein Code Review vorzunehmen. Nachdem ich fertig bin, schnappe ich mir ein Ticket und eröffne einen neuen Feature Branche. Der eine oder andere ahnt bestimmt schon, worauf ich hinaus will? Richtig – ich habe meinen neuen Feature Branch aus einem Feature Branch eröffnet. In der Regel macht man aber das so nicht. Sondern man eröffnet meistens einen neuen Branch aus dem Master heraus. Es gibt Ausnahmen, dass so zu machen. Auf die Ausnahmen werde ich aber in diesem Artikel nicht näher eingehen. In den meisten Fällen führt aber der neu eröffnete Branch aus einem anderen Branch, zu Verwirrung. Spätestens beim Pull-Request.

So war es auch bei mir mit der Verwirrung. Nachdem ich meine Arbeiten an dem neuen Ticket vollendet habe commitete ich diese Änderungen und machte dann über die Konsole meinen push mit:

git push -u origin feature/xy-99
// oder
git push --set-upstream origin feature/xy-99 

Dann erhalte ich mein PR Link um diesen zu erstellen. Beim erstellen stelle ich dann mit schrecken fest. „Kacke! Da sind ja noch die Commits meines Kollegen drin.“ Wie gehen wir vor, bevor die Klugscheißer Kollegen auf Dein Pull-Request aufmerksam werden? Es gibt mehrere Möglichkeiten die Situation zu entspannen. Folgende Notfallbehandlung kann genutzt werden.

Folgendes Ausgangsszenario: (Ihr habt bereits ein PR für feature-99 gestellt und dort findet ihr die Commits des Kollegen)

Stack: Bitbucket

(local) git branch(remote) git branch
mastermaster
developmentdevelopment
feature-1feature-1
feature-2feature-2
feature-99feature-99*
* hier sind die Commits drin vom feature-2 Branch

Ein möglicher Lösungsansatz:

Wir löschen den PR über die UI (Bitbucket). Lokal wechseln wir auf den Master.

git checkout feature-99  
git log
// *schreibe dir die ersten 4 Zahlen deines Commits auf
Git checkout master
git branch -D/-d feature-99
git checkout -b feature-99
git cherry-pick "f12d*" // *die ersten vier Zahlen deines Commits
git push -u origin feature-99 –force
// dann erstellst Du wie gewohnt den Pull-Request 

Git branch -d
Das löschen eines Branches machst Du mit git branch -d <branch-name>. Falls der Branch Jungfreudig ist und noch nicht gemerged oder gepusht wurde, wir bei dem Flag -d („kleines d“) ein Git Error kommen. Git möchte dich somit bewahren, Deine commiteten Daten zu verlieren. Falls Du dir sicher bist, dass Du das willst, kannst Du den Branch mit -D „großes D“ löschen. Falls schon gemerged oder gepusht genügt das kleine D.

Git cherry-pick
Mit git cherry-pick kannst Du andere Commits anhand ihres Selektors (Commit ID) in deinen Branch holen. Das Prizip ist einwenig wie das git stashing zu verstehen. Cherry Pick setzt dir den anderen Commit einfach in dein Branch rein. Du musst nicht einmal adden und commiten. Git Status ist clean. Ich finde git Cherry Pick abgefahren und sehr nützlich. In unserem Fall holen wir uns unsere Änderungen in den neuen Branch.

Das war ein Weg nach Rom. Mich würde interessieren wie ihr das so macht. Schreibt mir einfach in den Kommentaren und ich werde drauf eingehen.

Eine einzelne Migration in Laravel ausführen

Aus unterschiedlichen Gründen kann es sein, dass man in einem Laravel Projekt eine spezielle Migration ausführen möchte. Zum Beispiel die zuletzt erstellte Migration. Ein anscheinend häufiger Grund für dieses Vorgehen könnte sein, dass in einer vorherigen Migrationsdatei ein Fehler auftreten würde. Und da Laravel die Migrationsdateien von der ältestesten zur jüngsten Migration abarbeitet, würde man durch den einen Fehler nie* in den Genuss der letzten Migration kommen. Mit jüngsten meine ich hier nicht das Dateialter sondern das vorrangestellte Datum im Migrationsnamen. Da der Fehler uns vorher mit einer Exception rauskicken und den Migrationsprozess an dieser Stelle abbrechen würde. Ein Hack wäre das Datum der Migration dahingehend zu ändern, dass sie älter wird als die fehlerbehaftete Migration Datei. Aber eleganter wäre folgender artisan migration command:

php artisan migrate --path=/database/migrations/xxxx_xx_xx_my_migration_table

*Aber am allerbesten wäre es natürlich, den Fehler der Bug Migration zu lösen und mit:

php artisan migrate

durchzustarten. Aber wir Entwickler sind ja faule Socken.

Git Commit Message Regeln

Lange Zeit war mir das auch nicht klar, dass es Regeln für Git Commit Messages gibt. Wie sinnvoll die Regeln sind erschließt sich spätestens dann wenn man in größeren Teams arbeitet. Diese 7 Regeln möchte ich euch hier kurz erklären. Die Regel hat der Softwareentwickler Chris Beams vor einiger Zeit erstellt und auf seinem Blog veröffentlicht. https://chris.beams.io/posts/git-commit/

  • Ausgehend davon, dass gut geschriebene Commit Nachrichten der beste Weg ist, um Kollegen (aber auch sich selbst) den Kontext einer Änderung mitzuteilen. Der Code bzw. ein git diff wird dir zeigen, was sich genau geändert hat, aber eine Commit Nachricht wird dir sagen warum sich das geändert hat.
  • Trennen Sie den Betreff vom Text mit einer Leerzeile
  • Begrenzen Sie die Betreffzeile auf 50 Zeichen
  • Starten Sie Betreffzeilen immer mit einem Großbuchstaben
  • Beenden Sie die Betreffzeile nie mit einem Punkt
  • Verwenden Sie den Imperativ in der Betreffzeile und nicht die Vergangenheitsform
  • Umfassen Sie den Textkörper mit 72 Zeichen
  • Erklären Sie im Textkörper das Was und Warum, nicht das Wie

<type>[optional scope]<description>

feat(IAD-123): Add type for something.

<type>
Die zwei gängigsten Typen wären fix und feat. Aber es gibt noch weitere:

  • fix (Nutzt du beim Bugfixing) |
  • feat(nutzt du bei code features)
  • build
  • docks
  • style
  • refactor
  • test
  • chore
  • ci

[optional scope]
Sind zusätzliche Infos wie zum Beispiel eine Ticketnummern oder ähnliches.


<description>
Hier schreibst Du eine kurze Nachricht rein. Nachrichten können sich zusammensetzen aus Betreff, Body, Fußnot. In den meisten Fällen genügt eine Betreffzeile. Im Optionalen Body schreibst Du dann ausführlich deine Änderungen rein und vor allem warum du diese gemacht hast. In der Fußnote kannst Du Tickets mit Hashtags angeben um dem Leser mehr Backgroundinformationen zu liefern.

Eine kleine Eselsbrücke für den Anfang: Du fängst den Commitsatz imaginär an: Dieser Commit möchte update readme file with new thinks.

SVG zu PNG konvertieren

Als Webentwickler kommt man um das SVG Format nicht mehr herum. Und das ist auch gut so! Das Thema SVG in der Webentwicklung ist vielseitig und umfänglich. Es fängt an, wie man SVG Grafiken am elegantesten in sein Projekt einbindet und endet wie man sein Webpack diesbezüglich konfiguriert. Wenn man überhaupt mit Webpack arbeitet und das wiederum ist ein ganz anderes Thema. Im aktuellen Projekt habe ich mir ein Ticket gezogen, wo ich die Favicons und Logos der Wesbite austauschen soll. Ich habe ein Bundle an SVG Grafiken bekommen. Aber keine PNGs und genau diese werden an wenigen Stellen dennoch benötigt. Ich sage nur apple-touch-icon. Es ist Freitag und das Designteam ist mental schon voll im Wochenende und ich will ja nicht stressen. Am Freitag wird sowieso nichts deployed.

Aber kein Problem ich kann ja alles soweit schon mal selbst vorbereiten . Dafür muss ich nicht mal meine Komfortzone – die Konsole – verlassen, denn ich hab ja Ubuntu. Hier gibt es Programme die genau für diese Arbeiten, also das arbeiten mit vektorisierten Grafiken prädestiniert sind.

Mit Inkscape SVG zu PNG konvertieren

Ein Programm heißt Inkscape. Es ist zwar nicht standardmäßig in der Distribution von Ubuntu enthalten aber in der offizielle Packed Library von Ubuntu schon. Also können wir einfach mit:

sudo apt  install inkscape 

Inkscape installieren.

Nach der fertigen Installation verbleiben wir im Terminal und navigieren zum Ordner wo wir unsere SVG Grafiken abgelegt haben. Dann geben wir ein:

inkscape -w 1024 -h 1024 input.svg -o output.png 

Und erhalten ein PNG mit der Skalierung 1024 zu 1024. Das war es auch schon mit Inkscape. Wenn der Parameter -o Probleme macht, dann verscuht es mit dem Parameter -e. Das ist von der inkscape Version abhängig.

Mit Imagemagick (convert) SVG zu PNG konvertieren

Die geniale Bildbearbeitungsbibliothek Imagemagick bietet ein Bundel an Konvertierungsmöglichkeiten an. Deshalb ist es auch nicht verwunderlich, dass man mit ihr SVG Grafiken zu PNG Grafiken konvertieren kann.

Wer jetzt, wie in meinem Fall, nur Favicons erstellen muss, kann getrost convert von Imagemagick nutzen. Bei komplexeren SVG Grafiken (Farben, viele Rundungen (zum Beispiel Blumen)) würde ich Inkscape nutzen. Da ihr hier echt unschöne und unbrauchbare Ergebnisse erhalten könntet. Wer Imagemagick noch nicht installiert hat, kann es mit:

sudo apt install imagemagick 

nachholen. Um zu testen, ob ihr es bereits installiert habt könnt ihr in der Konsole mit: convert.

Um zu konvertieren nutzt ihr den Command:

convert -density 1200 -resize 180x180 favicon\ 180x180.svg favicon\ 180x180.png 

Und weil wir schon dabei sind, können wir ganz leicht mit convert das Fallback Favicon generieren lassen.

Aus dem PNG ein ICO konvertieren

Mit dem Konsolen Command:

convert -resize x16 -gravity center -crop 16x16+0+0 input.png -flatten -colors 256 -background transparent output/favicon.ico 

Optimierung von SVG Grafiken

Ein Kollege hatte mich im Zuge dieses Tickets darauf aufmerksam gemacht, dass man SVG Grafiken in der Dateigröße verkleinern sollte, wenn man sie im Web einsetzt. SVG Grafiken die im Web häufig aufgerufen werden. Wie zum Beispiel das Logo oder Favicons können im Nachgang ihrer Erstellung minifyed werden. Das kann man auch online machen. Dafür gibt es ein Reihe von Webseiten. Ich nutze seit kurzem diese hier:

https://jakearchibald.github.io/svgomg/

Und Fertig!

Ubuntu VLC Player DVD spielt nicht ab

Man hat sich eine DVD Bestellt. In meinem Fall war es Fargo. Nicht die Serie sondern der Originalfilm aus dem Jahr 1996. Für alle die den Film nicht kennen: „Es lohnt sich“.

Jedenfalls wollte ich den Film über Laptop schauen. Ich leg die Scheibe ein und öffne den VLC Player. Menüpunkt Media → Open Disc . Disc device steht auf dev/sr0 und passt. Dann ab auf Play. Komisch es spielt nicht ab. Dann wurde mir klar, dass bei älteren DVDs noch ein alter Kopierschutz eingebaut wurde. Der Kopierschutz namens CSS. Das Akronym CSS steht in diesem Fall nicht für „Nicht Cascade Style Sheet“ sonder für „Content Scramble System”. Alt und längst geknackt. Trotzdem hat der VLC damit standardmäßig nichts entgegen zu setzen. Was ja auch irgendwie löblich ist. Aber ich will den Film jetzt schauen. Wenn Ihr das auch wollt, dann öffnet die Konsole und gebt folgenden Command ein:

sudo apt-get install libdvd-pkg 

Es öffnet sich dann ein Meldefenster, dass nur drauf hinweist, dass jetzt die Bibliothek libdvd-pkg installiert wird. Bestätigt also mit OK. Ebenfalls das darauf folgende Meldefenster. Hier könnt ihr mit Ja/Yes bestätigen, da es hier nur um automatische Updates und Upgrades für libdvdcss2 geht.

Zurück im Terminal gebt ihr final ein:

sudo dpkg-reconfigure libdvd-pkg 

Fertig!

Tipp bei Darstellungsproblemen. Falls die Bildausgabe schliert, dann geht mal unter Einstellungen / Settings (Tools/Preferences) auf Eingang/Codecs (Input/Codecs) und deaktiviert die „Hardware beschleunigte Decodierung“. Diesen Tipp habv ich von eKiwi.

Und wem es an dieser Stelle noch interessiert, hier der Trailer zum Film Fargo.

Laravel Faker – Kurz mal erklärt

Alle nutzen anscheint Faker. Es gab mal einen ehemaligen US Präsidenten der meinte die Washington Post verbreitet Fake(r) News. Er selbest wiederum hatte sich eine Faker API in sein damals noch nicht gesperrten Twitter Account reinlegen lassen. Fakes sind in der Geschichte der Menschheit immer präsent gewesen und nicht erst seit 2016. Aber zurück zum Tec Stack.

Der Faker ist eine externe Bibliothek des Laravel Werks Package. Mit dem Faker kann man sich Testdaten in die Datenbank schreiben lassen. Testdaten die man benötigt um seine Software zu testeb. Ich selbst erinnere mich zu gut, wie ich in meinen Anfängen als Dev über einen MySQL Client meine Testdaten immer eingehackt habe. Das war einfach müßig. Daher hatte ich bereits kurze Zeit später ein Script dass mir feste Datensätze in die Datenbank importierte. Damals kannte ich Faker noch nicht. Lag auch daran das ich als PHP Entwickler anfing. In anderen Sprachen war das schon ein alter Hut.

Wie geht man vor?

Schritt 1 – Faker Klasse erstellen

Wir wollen unsere User Tabelle in der DB auffüllen. Das machen wir über das Laravel Konsolenprogramm artisan.

php artisan make:factory UserFactory  
// oder
php artisan make:factory UserFactory --model=User 

Schritt 2 – Faker definition schreiben

Die neue Faker Klasse wird in Ihrem Verzeichnis database/factories abgelegt. Mit der Option –model gibt man Artisan mit, mit welchem Model er die neue Fakerklasse assoziieren soll. Somit ist das Model gleich in der Klasse griffbereit, statt es noch mit use App\Models\xxx in die Klasse zu holen. Also am besten immer gleich mit.

Dann tragen wir in dem Array in der Klassenmethode definition() unsere Datenbank Keys ein. Die Values werden mit Faker gesetzt.

public function definition()
{
    return [
        'name' => $this->faker->name,
        'address' => $this->faker->address,
    ];
} 

Für alle möglichen Fakemöglichkeiten schaut mal in das GitHub Repository: https://github.com/fzaninotto/Faker.

Schritt 3 – Landessprache einstellen (Localisation)

Jetzt müssen wir nur noch den Laraval Faker auf Deutsch stellen. Dazu gehen wir in die app.php Datei im Config Ordner. Ihr werdet sehen, dass dirt bereits ein faker local gesetzt ist. Standardmäßig auf en_EN. Das ändern wir in unsere gewünschte Sprache. In meinem Fall jetzt de_DE.

'faker_locale' => 'fr_FR',

Schritt 4 – Testen ob der Faker funktioniert

Nun testen wir, ob der Faker auch wirklich funktioniert. Dazu gehen wir we folgt vor:

 php artisan tinker
 Owner::factory()->count(1)->create() 
Tinker Output
Tinker Output

Und das war es auch schon. In der Testklasse triggerst Du den gewünschten Faker in der SetUp Methode an und verfügst dann in deiner Testdatenbank randomisierte Datensätze. Die nach dem Test automatisch wieder gelöscht werden.

Ubuntu – Find – Mit der Konsole Dateien finden

Ein häufiges Problem ist, dass man Dateien, die man irgendwo abgelegt hatte, nicht finden kann. Man kann natürlich über die Linux Dist UI die Dateien in Files / Dateieinmanager suchen. Aber warum sollte man nicht das Kommandozeilen-Terminal dazu nutzen? Insbesondere wenn Du über SSH auf dem Server eingeloggt bist, geht es ja nur mit Konsole. Und hier gibt es einige nette Programme. Wenn es um die Suche nach Dateien anhand ihres Namens geht, sind zwei erwähnenswert. Diese zwei möchte ich an dieser Stelle vorstellen und auf auf eins etwas genauer eingehen. Bei der Suche nach Dateien anhand ihres Inhaltes ist grep die erst Wahl. Dazu habe ich hier bereits einen Artikel geschrieben.

Dateien suchen mit find

„Find“ ist ein sehr komplexer Befehl, mit dem du Dateien auf der Grundlage einer Vielzahl von Bedingungen suchen können. Es ist ein sehr hilfreiches Werkzeug, wenn Du eine Datei anhand derer Namen suchst. Auch wenn man sich nicht mehr an den ganzen Namen erinnern kann, kann man mit Platzhaltern arbeiten. Mit dem Befehl “find” kannst du Datei- und Ordnernamen, Dateien nach Erstellungsdatum, Änderungsdatum und Berechtigungen suchen. Man kann diese Bedingungen auch im find Command kombinieren. „Find“ ist ein sehr leistungsstarkes, aber dennoch langsameres Suchwerkzeug. Langsam in der unixoiden Welt. Im Vergleich zu Windows ist es schnell.

Startpunkt

Zuerst musst man find mitteilen von wo an man suchen will. Also den <Startpunkt> nennen.

find  
// sucht im aktuellen Verzeichnis

find /documents
// sucht im Verzeichnis "/documents".
 
find /documents /trash
// sucht in den Verzeichnissen "/documents" und "/trash"
 
find ~
// sucht in deinem Benutzerverzeichnis
 
find /
// sucht echt überall 

Dateiname

Als nächstes muss man find sagen, wonach man eigentlich sucht <Dateiname>. Hier hat man die wahl zwischen -iname und -name. Mit -iname wird nicht Casesensitiv gesucht.

find <Startpunkt> -(i)name "<Dateiname>" 

Falls Du zum Beispiel eine Migration Laravel Datei suchst und nicht den ganzen Namen eingeben willst, aber weißt es handelt sich um einen Namen wo products enthalten ist, dann kannst Du die mit Platzhaltern suchen.

find /database/migrations/ -name “*produtcs_*.php“ 

Oder Du suchst eine json Datei, wo du weisst das der Dateiname 6 Zeichen lang ist.

find /documents -name "??????.json"

Wenn Du nach leeren Dateien suchst, machst Du das mit:

find /kontoauszuege (-iname “*.pdf“) -empty

Wenn Du nach leeren Dateien suchst, machst Du das mit:

find /kontoauszuege (-iname “*.pdf“) -empty

Suche anhand von Datum und Uhrzeit

Mit „find“ kannst Du auch anhand des Datums nach Dateien suchen. Je nachdem, wann sie aufgerufen oder geändert wurden. Es gibt verschiedene Zeitangaben, die man für die Suche nach Dateien verwenden kann:

mtime (Modifikationszeit): wann der Inhalt der Datei zuletzt geändert wurde.
attime (Zugriffszeit): wann das letzte Mal auf die Datei zugegriffen wurde.
ctime (Änderungszeit): wann die Dateiattribute das letzte Mal geändert wurden.

Um z. B. nach Dateien in einem aktuellen Verzeichnis zu suchen, die vor weniger als 14 Tagen geändert wurden, führe den folgenden Befehl im Terminal aus:

find /app/models/ -mtime -14

Suche auf Basis der Dateigröße

Um z. B. Nach eine Datei zu suchen, deren Größe größer als 900 MB ist, können wir den folgenden Befehl im Terminal verwenden:

find /videos –size +900M\ 

Suche anhand von Dateiberechtigungen

Du suchst Dateien mit bestimmten Berechtigungen. Die allgemeine Syntax wäre hier:

 find /vendor/ -type -perm mode 

Wobei:

Der Parameter type erwartet die Werte d oder f. D steht für Directories / Ordner und f für File / Datei. Mit mode kann man entweder mit numerischer Berechtigung (z. B. 777, 655… usw.) oder mit symbolischer Berechtigung (z. B. u=x, a=r+x) suchen.

Um z. B. nach einer Datei mit der Berechtigung 644 zu suchen, können wir den folgenden Befehl im Terminal verwenden:

find /vendor -type f -perm 644 

Das waren die wichtigsten Suchoptionen mit find. Es gibt noch einige weitere Suchparameter. Du findest die, wenn du in deiner Konsole „man find“ eingibst.

Suche nach Dateien mit locate

locate ist verdammt schnell. Hat aber einen Nachteil. Die Suchergebnisabdeckung ist wechselhaft. Das liegt am System von locate. Locate arbeitet mit einer internen Datenbank und iteriert die Dateien deiner Ordner vorab. Somit kann es viel schneller als find zum gewünschtem Suchergebnis führen. Locate macht sinn, wenn man ein relativ statisches Dateiensystem hat. Du kannst aber natürlich regelmäßig die locate Datenbank aktualisieren. Mit dem Befehl:

sudo updatedb 

Da locate nicht standardmäßig in den Linux Dist enthalten ist, musst Du locate installieren.

sudo apt-get install locate 

Und dann kann die Suche auch schon losgehen. Der Syntax ist

locate -i <Dateiname>

locate –i todo.txt 

Und jetzt wünsch ich euch ein happy Searching!

Selbständiger Softwareentwickler – Welche Krankenkasse?

Heute ein Thema, dass jeden Selbständigen betrifft. Welche Krankenkasse soll ich nehmen? Privat oder gesetzlich Pflichtversichert. Und es gibt meines Erachtens eigentlich nur eine richtige Antwort auf diese Frage. Falls ihr aktuell in einer gesetzlichen Krankenkasse seid, bleibt drin und wechselt auf gar keinen Fall zur privaten. Für Selbständige heißt das Ding gesetzlich Pflichtversichert und das ist auch gut so. Den somit bleibt ihr Teil des Solidaritätsprinzips. Einem Relikt aus einer guten Sozial-Demokratischen Marktwirtschaft.

Warum sollte man als gesetzlich Pflichtversichert bleiben

Die Frage ist auf dem ersten Blick nicht leicht zu beantworten. Gerade in Hinblick auf die Kosten der KV. Die gesetzlichen Krankenversicherungen haben einem Mindestbeitrag und einen Höchstbeitrag und ein Beitrag wenn man überhaupt keine Einkünfte generiert. Die Mindest- und Höchstbeiträge bemessen sich nach dem Einkommen. Wer aber zum Beispiel keine Einkünfte hat und zum Beispiel nur vom Erspartem lebt, zahlt 2021 einen Beitrag von 166,69 Euro im Monat.

Mindesteinkommen

Wer Einkommen unter 1096,67 Euro im Monat generiert, wird auf dieser Einkommenstuffe bemessen. Wie gesagt, auch wenn du weniger verdienst berechnen die gesetzlichen Krankenkassen ihren Beitrag aufgrund des Mindestbeitrags von 1096,67 Euro im Monat.

Höchstsatz

Wer aber ein Einkommen über 4837,50 Euro pro Monat einfährt, für dem werden maximal 4837,50 Euro als Bemessungsgrundlage genommen. Dazwischen gibt es noch weiteren Abstuffungen.

Nun wird von der Beitragsbemessungsgrundlage der Beitrag über den Beitragsatz errechnet. Der Beitragssatz liegt zwischen 15,2 und 15,8 % und ist abhängig bei welcher Krankenkasse ihr seid. Das bedeutet du zahlst also monatlich mindestens 166,69 Euro und höchstens 735,30 Euro.

Dazu kommt aber noch die Pflegeversicherung. Der Beitragssatz zur Pflegeversicherung beträgt 3,05 %. Kinderlose über 23 Jahre zahlen aber einen Beitrag von 3,30 %. Hier gibt der Gesetzgeber vor, dass Menschen mit Kindern bereits durch die Kinder einen sozialen Beitrag zur Pflege leisten. Also wenn die eigenen Kinder sich zukünftig um den Sabber an deinem Mundwinkel kümmern. Meines Erachtens sollte es hier sogar mehr Ermäßigung für Menschen mit Kindern geben. Ein weiterer Kritikpunkt an den gesetzlichen Tarifen zur Kranken- und Pflegeversicherung ist die Beamtenbevorzugung. So zahlen Beamte den ermäßigten Beitrag zu Krankenversicherung und ebenso haben Beamte Ermäßigungen bei der Beihilfe bzw. Heilfürsorge. Aber das waren auch schon die groben Kritikpunkte an der gesetzlichen Pflichtversicherung.

Als selbständiger Softwareentwickler mit Auftrag wirst Du sehr wahrscheinlich immer den Höchstsatz zahlen. Also etwas um die 820 Euro inklusive Pflegeversicherung. In der privaten Krankenversicherung wirst du am Anfang und junger Mensch bei Mindesttarif mit quasi kaum Leistung 250 bis 300 Euro zahlen. Aber dein Beitrag wird von Jahr zu Jahr steigen und zwar deutlicher als der des gesetzlichen Beiträge. Nach einigen Jahren zahlst Du extrem viel Beitrag. Wer jetzt erkennt, dass die gesetzlichen Krankenkassen doch die bessere Wahl sind, wird unter Umständen nicht mehr aufgenommen. Und das hat schon viele – auch in meinem Umfeld – das finanzielle Genick gebrochen. Die Mutter einer Freundin muss ca. 1000 Euro monatlich von ihrer Rente für die KV abzweigen. Sie hat eine halbwegs ordentliche Rente von 1800 Euro. Allerdings kommen hier noch Miete, Nebenkosten und Lebensunterhalt drauf. Somit zahlt sie jeden Monat einen kleinen Teil von ihrem ersparten drauf. Also von dem was sie damals durch die private eingespart hatte. Und ein Wechsel zu gesetzlichen kurz vor Renteneintritt wurde ihr damals verwehrt.

Aber es gibt noch einen anderen Grund bei der gesetzlichen Krankenversicherung zu sein. Dieser Grund ist meines Erachtens der wichtigste Grund. Und zwar geht es hier um das oben bereits genannte Solidaritätsprinzip. Es besagt: Wer viel verdient zahlt für die anderen die weniger verdienen mit. Oder anders: Die die wenig oder gar nichts verdienen werden von den Besserverdiener subventioniert. Und das ist auch gut so. Jeder Selbstständige weiß, wie schnell es gehen kann. In der Freizeit ein Fahrradunfall und 2 Monate Bett. Bedeutet zwei Monate keine Einkünfte und im schlimmsten Fall ist der Auftrag pfuscht. Hier greift bereits das Solidaritätsprinzip und die veränderten Einkommensverhältnisse fließen in die Beitragsbemessung mit ein. Und zwar in Form eines geringeren Beitrages. Somit lässt sich sagen: Ihr tut es nicht nur für andere sondern auch für euch. Eine private Krankenversicherung ist für kurzsichtige Egoisten, die gerne aufs Eis geführt werden, ein gute Wahl. Aber nichts für Menschen die sich bewusst sind, dass Lebensumstände nicht vorhersehbar sind. Also:

 gesetz.kv == true 

Javascript Prototype mal kurz erklärt

JavaScript ist eine prototypenbasierte Sprache. Was soll das eigentlich sein? Heute werde ich euch erklären, was Prototypen sind.

Was sind Prototype?

Zunächst einmal sollten wir uns nicht von dem Wort “Prototyp” verunsichern lassen. Um ehrlich zu sein klingt es abstrakt und irgendwie fancy.

“Prototyp” ist ein System. Dieses System erlaubt dir, Eigenschaften von Objekten zu definieren, auf die über die Instanzen des Objekts zugegriffen werden kann. Das klingt vielleicht noch etwas zu verklausuliert. Deshalb jetzt in einfachen Worten: Du schaffst Dir Methoden / Funktionen und fügst diese einem Objekt bei um sie dann später und bei Bedarf zu nutzen. Der aufmerksame und Objekteorientierte Programmierer wird jetzt aufschrecken. Und im groben ist Prototyp auch nichts anderes als Objekteorientiertheit.

Hinweis
Prototype ist eng mit der objektorientierten Programmierung verbunden. Es würde daher keinen Sinn machen, wenn Du noch keine Erfahrung in der objektorientierten Programmierung hast oder zumindest nicht verstehst, worum es bei der objektorientierten Programmierung geht. Daher wäre es an dieser Stelle ratsam, sich hier noch zu belesen und auszuprobieren. Aber macht dir keinen Stress. Niemand versteht auf Anhieb OOP. Man sagt, dass man ungefähr ein Jahr braucht um das Konzept zu leben. Damit meine ich etwas anderes als nur zu verstehen. Also einfach drauf los und immer wieder von vorne anfangen wenn du beim ausprobieren ins stocken kommst.

Beispiel Array Bauplan

Als Beispiel nehmen wir mal das Array. Das Array ist ein Bauplan bzw. Blueprint für jede Array-Instanz. Du kannst eine Array Instanz mit new Array() oder kurz [] erzeugen.

const array = ['one', 'two', 'three']
console.log(array)
// Same result as above
const array = new Array('one', 'two', 'three')

Unsere Array Instanz besitzt ja keine Methoden. Oder doch? Es besitzt nämlich sehr wohl Methoden und zwar werden diese durch den Bauplan dem Objekt zu Verfügung gestellt. Lasst Euch mal unser array ausgeben.

Jetzt klickt man auf __proto__ bzw. prototype (in Firefox) und ihr erhaltet alle Array Funktionen die im Bauplan von Werk aus beigefügt worden sind. Wie zum Beispiel: concat, slice, filter und map.

Um alle Methoden zu sehen, könnt auch in Eurer Browser Konsole eingeben: Array.prototype

Wie ist der Ablauf, sobald man eine Prototype Methode aufruft?

Nehmen wir die Array Funktion map. Diese wollen wir an unserem Beispiel Array anwenden. array.map(value => value.length). Zuerst schaut der Javascript Interpreter im Objekt an sich, ob es die Methode map besitzt. Danach schaut Javascript im Bauplan des Arrays. Also im Prototype. Wenn dort die Methode nicht gefunden wird, wirft uns Javascript ein undefined zurück.

Prototype Chain

Ich erkläre mal Prototype Chain an einem einfachen Besipiel. Wir haben die Klasse Pet. Dog ist eine Subklasse und erbt von Pet. Pet hat die getName Methode und Dog hat die Bellen Methode. Hier erst mal die Constructor basierte Variante (also OOP).

class Pet {
    constructor(name) {
        this.name = name
     }
     getName() {     
         alert('The animal name is ' + this.name) 
     }   
}

class Dog extends Pet {
    makeVoice() {
        alert(this.name + ' make wau wau')
    }
}

dog = new Dog('Lumpi');
dog.getName() // The animal name is 
dog.makeVoice(); // Lumpi make wau wau

Das ganze sieht in der Prototype Variante dann so aus:

function Pet(name) {
     this.name = name
 }
 Pet.prototype.makeVoice = function () {
     alert(this.name + ' make wau wau' )
 }

HTML Boilerplate / Scaffold / Vorlage

Um schnell mal etwas auszuprobieren, kann es sein das man ein HTML Grundgerüst benötigt. Vielleicht geht es euch ähnlich wie mir. Ich bin faul uns suche dann im anderen Projekten schnell das Gerüst. Was aber immer mit nicht ganz ohne Aufwendung dann einzufügen ist. Man muss hier und dort noch was löschen bzw. korrigieren.

Aus diesem Grund hab ich mir jetzt hier ein HTML Scaffold erstellt, welches ich mir bei dann von hier immer kopiere.

<!doctype html>
 <html lang="en">
 <head>
   <meta charset="utf-8">
   <title>HTML Vorlage</title>
   <meta name="description" content="HTML">
   <meta name="author" content="SeoTheater">
   <link rel="stylesheet" href="css/styles.css?v=1.0">
 </head>
 <body>
   <script src="js/scripts.js"></script>
 </body>
 </html> 

SeoTheater Autoren