Menubar hidden in PhpStorm via shortcut or other action and make it visible again

I use PHPStorm every day and have disabled the menu bar by an unintentional action. This can be deactivated by a shortcut I don’t know yet or even better by selecting this action in the menu under View >> Appeareance >> Mainbar. The now missing menu bar prevents you from reaching the same place again.

To activate it from this position is to press the key combination CTRL+SHIFT+A and type viewmainmenu and confirm with Enter. Immediately the menu bar will be shown again.

Then you should be happy from now on.


Hat Dir mein Beitrag gefallen?

Unterstütze meine Arbeit und werde noch heute Patreon!

Verwenden von declare strict_types in PHP

In PHP gibt es die Möglichkeit den type hint beim Abruf von Methoden und Funktionen für die Eingabe- aber auch die Rückgabeparameter festzulegen. Dabei gibt es allerdings noch geringfügige Unschärfen, da diese bei skalaren Datentypen nicht restriktiv verwendet werden.

Das bedeutet, wenn eine Zahl als String übergeben wird und der type hint ein Integer verlangt, dass dieser Aufruf dennoch valide ist.

<?php

function hello(integer $world) {
  echo $world;
}

hello("1000");

Dies gilt auch für andere Varianten. Da dies formal gesehen jedoch falsch ist kann eine absolute korrekte Typdeklaration und -überprüfung dessen erzwungen werden. Dafür wird zu Beginn der betroffenen PHP-Datei folgender Aufruf abgesetzt:

<?php

declare(strict_types=1);

function hello(integer $world) {
  echo $world;
}

hello("1000");

Damit ist es nun mit dem oben genannte Beispiel nicht mehr möglich das Skript auszuführen und es folgt in diesem Beispiel beim Abruf der Methode eine TypeError Fehlermeldung:

TypeError: Argument 1 passed to hello() must be of the type int, string given

Hierbei ist es wichtig anzuerkennen, dass diese Defintion nur für die aktuelle Datei gilt. Dieses declare kann nicht global gesetzt und Projektübergreifend verwendet werden. Nicht auszudenken wie sich diese Einstellung auf vendor-Produkte anderer Projekte auswirken würde.

Es macht meiner Einschätzung nach Sinn diese Einstellung in Klassen zu verwenden bei denen eine ganz klare Typisierung für z.B. eine sichere Berechnung von Zahlen notwendig ist. Pauschal diese Definition in jede bestehende Klasse zu integrieren lehne ich persönlich aus Gründen der besseren Lesbarkeit und der damit verbunden Wartung ab. Bei neuen Klassen hingegen macht dies schon Sinn.


Hat Dir mein Beitrag gefallen?

Unterstütze meine Arbeit und werde noch heute Patreon!

Installing sophos-xg-firewall on proxmox just failed with “error installing firmware”

I tried to install Sophos XG Firewall on a virtual machine on my proxmox system. But it failed during the installation with the error message “error installing firmware“.

After trying some different properties I found out that the memory size of the VM need to set on 2048 MBytes or higher.

After I’ve done that configuration on my host the server software was perfectly installed as a virtual machine.


Hat Dir mein Beitrag gefallen?

Unterstütze meine Arbeit und werde noch heute Patreon!

Verzeichnis unter Windows auf der CLI Kommandozeile löschen

Ich möchte gerne unter Windows von der Kommandozeile heraus ein Verzeichnis löschen. Dafür hält Windows den Command rmdir für die Ausführung als CLI-Befehl bereit.

Man kann den Befehl in jedem beliebigen Verzeichnis ausführen

Leeres Verzeichnis auf Kommandozeile löschen

Um ein leeres Verzeichnis zu löschen führt man folgenden Befehl aus:

rmdir helloworld

Nicht leeres Verzeichnis auf Kommandozeile löschen

Um ein Verzeichnis mit beliebigen Inhalten zu löschen führt man folgenden Befehl aus:

rmdir /S helloworld

Verzeichnis auf Kommandozeile ohne Rückfrage löschen

Um ein Verzeichnis mit beliebigen Inhalten und ohne Rückfrage zu löschen führt man folgenden Befehl aus:

rmdir /S /Q helloworld

Verzeichnis mit Leerzeichen auf der Kommandozeile löschen

Um ein Verzeichnis mit Leerzeichen im Namen, beliebigen Inhalten und ohne Rückfrage zu löschen führt man folgenden Befehl aus:

rmdir /S /Q "hello world"

Hat Dir mein Beitrag gefallen?

Unterstütze meine Arbeit und werde noch heute Patreon!

Linux Konsole: Dateien löschen die älter als X Tage sind

Ich möchte unter Linux Dateien löschen die älter als eine beliebige Anzahl von Tagen sind. Dies kann man mittels dem Kommando find ganz einfach lösen.

Mit diesem folgenden Beispiel lösche ich im Verzeichnis /var/log/httpd/ alle Dateien mit dem Muster access*.log und die älter als 180 Tage alt sind:

find /var/log/httpd/access*.log -type f -mtime +180 -delete &> /dev/null

Die Ausgabeumleitung habe ich an dieser Stelle noch zusätzlich ergänzt. Mit diesem Kniff wird im besonderen bei nicht vorhandenen Dateien ein hieraus resultierenden und in meinen Augen unnötiger Hinweis seitens find verworfen.

Bevor ich diesen Befehl auf der Konsole absetze führe ich selbigen gelegentlich ohne der Option delete und ohne meiner hinzugefügten Ausgabeumleitung aus. Damit stelle ich vor dem Löschen sicher, dass auch die von mir gewünschten Dateien enthalten sind:

find /var/log/httpd/access*.log -type f -mtime +180


Hat Dir mein Beitrag gefallen?

Unterstütze meine Arbeit und werde noch heute Patreon!

MySQL Ausgabe mit vielen Spalten formatieren

Es passiert mir schon einmal öfters, dass ich in der Konsole eine SQL-Query absetze, die mehrere Spalten beinhaltet. Dabei sorgt die hohe Menge an Spalten in der Ausgabe für einen Zeilenumbruch der Standardformatierung von MySQL und die generierten Tabellenansichten sind nicht mehr übersichtlich. Solange das Fenster sich breit genug ziehen lässt ist dies grunsätzlich nicht problematisch. Jedoch bringt diese Formatierung einen schnell an die Grenzen, weil schon allein die Dateninhalte einer einzigen Spalte mal länger als eine Zeile sein können. Und spätestens dann wird es richtig ekelig zu erkennen welche Eintrag in welcher Spalte einer Zeile wo zu verorten ist.

Die Lösung ist einfacher als man glaubt, denn schon mit den Standardboardmitteln der MySQL Konsole lässt sich die Ausgabe der Spalten formatieren. Ein Resultset welches die für die aktuelle Ansicht einfach zu breit in der Ausgabe ist sieht exemplarisch wie folgt aus:

mysql> select now() as date_1, now() as date_2, now() as date_3, now() as date_4, now() as date_5, now() as date_6, now() as date_7, now() as date_8, now() as date_9 union all select now() as date_1, now() as date_2, now() as date_3, now() as date_4, now() as date_5, now() as date_6, now() as date_7, now() as date_8, now() as date_9;

+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| date_1              | date_2              | date_3              | date_4              | date_5              | date_6              | date_7              | date_8              | date_9              |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 |
| 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 | 2018-09-15 08:53:45 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
2 rows in set (0.00 sec)

Das Ergebnis sieht ziemlich kryptisch aus – oder?

Um diese Ausgabe übersichtlicher darzustellen gibt es die Option \G. Diese Option wird der vorhandenen Query einfach angehangen. Sodann wird die Ausgabe der Query jede Zeile des Resultsets in einem separaten Block darstellen. Jede Spalte Pro Block wird in einer eigenen Zeile inklusive einem Spaltenlabel ausgegeben.

Für das obige Beispiel sieht das Ergebnis in der Konsole dann wie folgt aus:

mysql> select now() as date_1, now() as date_2, now() as date_3, now() as date_4, now() as date_5, now() as date_6, now() as date_7, now() as date_8, now() as date_9 union all select now() as date_1, now() as date_2, now() as date_3, now() as date_4, now() as date_5, now() as date_6, now() as date_7, now() as date_8, now() as date_9 \G;

*************************** 1. row ***************************
date_1: 2018-09-15 08:54:15
date_2: 2018-09-15 08:54:15
date_3: 2018-09-15 08:54:15
date_4: 2018-09-15 08:54:15
date_5: 2018-09-15 08:54:15
date_6: 2018-09-15 08:54:15
date_7: 2018-09-15 08:54:15
date_8: 2018-09-15 08:54:15
date_9: 2018-09-15 08:54:15
*************************** 2. row ***************************
date_1: 2018-09-15 08:54:15
date_2: 2018-09-15 08:54:15
date_3: 2018-09-15 08:54:15
date_4: 2018-09-15 08:54:15
date_5: 2018-09-15 08:54:15
date_6: 2018-09-15 08:54:15
date_7: 2018-09-15 08:54:15
date_8: 2018-09-15 08:54:15
date_9: 2018-09-15 08:54:15
2 rows in set (0.00 sec)

Damit wird es möglich ziemlich einfach visuell zu erfassen welche Datenausgabe zu welcher Spalte gehört.


Hat Dir mein Beitrag gefallen?

Unterstütze meine Arbeit und werde noch heute Patreon!

stderr und stdout auf der Bash umleiten

Wenn ein Programm auf der Linux-Konsole gestartet wird gibt es zweierlei Ausgabedatenströme. Dies sind zum einen die stdout für Ausgaben mit denen das Programm arbeitet und zum anderen stderr für Ausgaben welche einem Fehlverhalten dessen zugrunde liegen.

Diese beiden Ausgabedatenströme kann man aus diversen Gründen zusammenlegen oder in eine andere Richtung umleiten. Dies gilt für diverse Kombinationen mit folgenden Direktiven:

Umleiten von Ausgaben in stderr nach stdout

echo "Hello World" 2>&1

Mit dieser Angabe werden alle Fehlerausgaben auf stdout zugleich mit stderr auf der Konsole zusammengefasst ausgegeben. Dies ist zumeist die häufigst verwendete Variante der Ausgabeumleitung. So kann der Bediener der Konsole alle Ausgaben des Programms unmittelbar sehen.

Umleiten von Ausgaben in stdout nach stderr

echo "Hello World" 1>&2

Alle Ausgaben werden nach stderr geschrieben. Damit werden keinerlei Ausgaben auf stdout ausgegeben und so bleibt die Konsole leer. Dies kann erwünscht sein, sofern den Bediener die Ausgaben nicht interessieren oder die Ausgaben ohnehin von dem ausführenden Programm nicht berücksichtigt werden.

Umleiten von stderr und stdout in eine Datei bzw. Datenstrom

Manchmal interessieren einen die Ausgaben schlicht und ergreifend nicht, da es die Verarbeitung nicht erfordert. Also können Ausgaben jeglicher Art ignoriert werden durch:

undefinedprogram &> /dev/null

Oder automatisierte Prozesse erfordern das Loggen aller Ausgaben in einer Datei. Diese können mit dieser Bash-direction zusammengefasst in eine separater Datei weggeschrieben werden.

undefinedprogram &> combined_output.log

Umleiten von stdout in eine Datei

Die wohl am häufigsten verwendete Verwendung um alle Standardausgaben eines Programms in eine Datei zu schreiben.

echo "Hello World" > output.log

Oder die Verwendung des doppelten > Zeichens um die Ausgaben einer bestehenden Datei anzuhängen:

echo "Hello World" >> output.log

Umleiten von stderr in eine Datei

echo "Hello World" 2> error.log

Diese Art der Bash-Umleitung leitet alle Fehler der Programmausführung in eine Datei. Dies ist dann nützlich wenn nur das Fehlverhalten der Software in eine Datei ausgespeichert werden sollen.


Hat Dir mein Beitrag gefallen?

Unterstütze meine Arbeit und werde noch heute Patreon!

PHP-Storm kommt aus indexing loop nicht mehr heraus

Manchmal habe ich das Problem, dass der PHP Storm nicht mehr aus dem Index-Loop herauskommt. Die IDE iteriert unablässig über den selben Ordner, welcher von selbiger beliebig bestimmt wurde. Auch die Auswahl von “Mark directory as excluded” des betroffenen Ordners funktioniert nicht, da PHP-Storm dann über einen anderen Ordner loopt.

Lösung

Menüleiste: File -> Invalidate Caches/Restart anklicken und im Dialog “Invalidate and restart” wählen. Die IDE startet neu und baut der Cache neu auf. Nach dieser vollständigen Neu-Indexierung wird sich in der Regel die Endlosschleife auflösen und PHP-Storm beruhig sich endlich.


Hat Dir mein Beitrag gefallen?

Unterstütze meine Arbeit und werde noch heute Patreon!

Hilfe! Meine WordPress Seite ist nicht mehr im Google Index suchbar

Es kann schon mal passieren, dass die eigene Seite bei Google nicht aufzufinden ist. Damit die eigene WordPress-Seite im Google Index auffindbar ist müssen folgende Kriterien korrekt erfüllt sein:

  1. Google kennt Deine Seite nunmal wirklich nicht und auch keine andere Seite im Netz hat jemals darauf verlinkt. Daher muss diese erstmalig bei Google bekannt gemacht werden: 
    https://www.google.com/webmasters/tools/submit-url?hl=de
  2. Des weiteren sollte auch sichergestellt sein, dass in der betroffenen WordPressinstanz das Indexieren der Seite gestattet ist. Dies kann im Backend unter Einstellungen -> Lesen -> Sichtbarkeit für Suchmaschinen beeinflusst werden:
    Sofern diese Option aktiviert wurde, sind die Einstellungen welche in der robots.txt hinterlegt wurden um die Indexierung für die Seite zu aktivieren allen Suchmaschinenbetreiber egal. Durch diese Einstellung wird in das ausgelieferte HTML um folgende Zeile angereichert:

    <meta name="robots" content="noindex,follow"/>

    Durch anhaken dieser kleinen Checkbox kann im Laufe der Zeit die eigene Seite mal ganz schnell unauffindbar im ganzen Internet sein und niemand hat eine blassen Schimmer warum.

  3. Desweiteren kann eine Datei namentlich robots.txt im Hauptverzeichnis abgelegt werden. Eigentlich braucht man diese nicht, es empfiehlt sich jedoch diese anzulegen und der Inhalt derer sollte in einer Standard WordPress-Installation nicht mehr als folgende Inhalte haben:
    User-agent: *
    Disallow: /wp-admin/
    Allow: /wp-admin/admin-ajax.php
    
    Disallow: /wp-content/cache/cachify/

    In dieser Datei braucht in einer Standardinstallation auch nichts weiteres stehen, das möglicherweise dafür verantwortlich ist, dass die eigenen Seite vom Suchindex ausschließt. Steht dort etwa folgendes drin, fordert dies alle Suchmaschinenbetreiber dazu auf die Seite nicht in ihren Index aufzunehmen:

    User-agent: *
    Disallow: /

 


Hat Dir mein Beitrag gefallen?

Unterstütze meine Arbeit und werde noch heute Patreon!

Windows Fenster aus nicht sichtbaren Bereich wiederherstellen

Ganz selten passiert es mir schon einmal, dass mir ein Fenster einer beliebigen Anwendung unter Windows in den nicht sichtbaren Bereich verrutscht. Sei es, dass das Fenster beim Verschieben hinter der Taskleiste losgelassen wurde, geänderte Monitoreinstellungen dies blockieren oder aus einem beliebigen anderen Grund. Dies gilt für Windows 7 gleichermaßen wie Windows 8 und Windows 10.
Das einzige was jetzt noch möglich ist, man kann über Rechtsklick in der Taskleiste das Fenster in den Vollbildmodus bringen. Jedoch will man dies Wiederherstellen ist es wieder im nicht sichtbaren Bereich positioniert und kommt dann wieder einfach nicht daran.

Man könnte die Anwendung zwar jetzt auch einfach beenden und erneut starten. Je nach Anwendung ist dies aber auch nicht gewünscht oder gar Zeitintensiv. Wem dies nichts ausmacht, der kann sich mit dieser Lösung zufrieden geben:

Lösung in älteren Windows Versionen

Man fährt mit dem Mauszeiger auf die betroffene Anwendung in der Taskleiste, verweilt dort eine Sekunde bis das Vorschaubild der Anwendung aufploppt und klickt hierauf mit einem Rechtsklick.

Dort wählt man dann Verschieben und drückt nun – und dies ist der entscheidende Akt – auf eine der vier Cursortasten mit denen man üblicherweise durch Text navigiert.

Nachdem man nur einmal kurz eine dieser Tasten gedrückt hat kann man im Anschluss mit dem Mauszeiger das gewählte Fenster verschieben – ohne einen weiteren Klick zu tätigen – und das Fenster wird somit wieder in den sichtbaren Bereich geholt.

Lösung ab Windows 7

Man aktiviert zunächst das betroffene Fenster durch Klick in der Taskleiste. Anschließend kannst Du nun durch drücken und halten der Windows-Taste und mehrmaligen drücken der rechts/links Pfeiltasten in die selbe Richtung durch die aktiven Monitore hindurchreichen und so wieder sichtbar machen.


Hat Dir mein Beitrag gefallen?

Unterstütze meine Arbeit und werde noch heute Patreon!