WakeSkate selbst gebaut

img_0607

Man hat ja gelegentlich Zeit und Ambitionen, etwas selbst zu bauen. Mir war danach, ein WakeSkate-Board selbst zu bauen. Gut, kann auch an einer Wette gelegen haben… 😉 Dieser Beitrag soll eine Notiz sein, damit ich bei möglichen späteren Projekten genau weiß, was ich angestellt habe und wie ich Schritt für Schritt zu diesem Board gekommen bin. Aber gleich vorweg: das entstandene Board ist wassertauglich und lässt sich (meiner Meinung nach) sehr angenehm fahren!

OTRS 5: Fatal Error Kernel/Modules/AgentTicketZoomTicketID

Recently we switched from http to https for our ticket system OTRS5. After doing so, clicking on the links OTRS sent via email in (customer) notifications, resulted in the error:

Module Kernel/Modules/AgentTicketZoomTicketIDxx.pm not in @INC (/opt/otrs/Custom /opt/otrs/Kernel/cpan-lib /opt/otrs/ /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl

After some digging, we traced the problem back to Apaches RewriteEngine which replaced the „;“ chars with „%3b“ when someone used a http link (which OTRS sent via email).

The solution was simple: Set HttpType to „https“ in SysConfig -> Core.

Cryptography: RSA Schlüsselpaar mit OpenSSL erstellen

RSA Schlüsselpaar mit einem privaten 2048 bit Schlüssel erstellen

openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048

Um diese Datei vor unerwünschten Zugriffen zu schützen, sollten die Schreibrechte angepasst werden:

chmod go-r private_key.pem

Den öffentlichen Schlüssel aus einem RSA Schlüsselpaar extrahieren

openssl rsa -pubout -in private.pem -out public.pem

Damit wird die Datei public.key mit dem öffentlichen Schlüssel erstellt.

Es ist relativ einfach mit ein paar kryptischen Berechnungen den öffentlichen Schlüssel aus den Werten der privaten Schlüsseldatei zu erstellen. Wie auch immer, OpenSSL hat den öffentlichen Schlüssel bereits berechnet und in der privaten Schlüsseldatei hinterlegt. Der letzte Befehl macht also keine aufwendigen Berechnungen, er extrahiert den Schlüssel und kopiert die base64-encodierte Version der Bytes in die angegebene Datei.

Schlüssel-Inhalte anzeigen

openssl rsa -text -in private.pem

Die Inhalte von private.pem werden ausgegeben. Eine detaillierte Beschreibung der Inhalte ist unter https://etherhack.co.uk/asymmetric/docs/rsa_key_breakdown.html zu finden. Die Base64 PEM enkodierte Variante dieser Daten entspricht dem Inhalt der Datei private.pem.

Composer global verwenden

In der Dokumentation zu Composer wird erläutert, wie man global auf composer.phar zugreifen kann, ohne permanent php composer.phar ins Terminal eingeben zu müssen:

[…]

You can place the Composer PHAR anywhere you wish. If you put it in a directory that is part of your PATH, you can access it globally. On unix systems you can even make it executable and invoke it without directly using the php interpreter.

After running the installer following the Download page instructions you can run this to move composer.phar to a directory that is in your path:

mv composer.phar/usr/local/bin/composer

Note: If the above fails due to permissions, you may need to run it again with sudo.

Note: On some versions of OSX the /usr directory does not exist by default. If you receive the error „/usr/local/bin/composer: No such file or directory“ then you must create the directory manually before proceeding: mkdir -p /usr/local/bin.

Note: For information on changing your PATH, please read the Wikipedia article and/or use Google.

Now just run composer in order to run Composer instead of php composer.phar.

Designrules im Webdesign, die häufig unterschätzt werden

Es gibt viele Dinge, welche zur Verbesserung der Benutzerfreundlichkeit einer Webseite beitragen. Doch auch wenn einige Designelemente gut aussehen, sie könnten einen Einfluss auf die Benutzerfreundlichkeit haben.

Zentrierte Logos schaden der Navigation auf Webseiten

Getting back to the homepage is about 6 times harder when the logo is placed in the center of a page compared to when it’s in the top left corners. (Quelle: nngroup.com)

Buttons sollten keinen Hand-Cursor haben

There is this belief that the hand cursor means “clickable”, but this is incorrect and potentially problematic. My hope is that by the end of the article, you’ll never want to use the hand cursor for buttons ever again. (Quelle: medium.com)

Ist das „mein“ oder „dein“ Interface?

Wann sollte man „mein“ oder „dein“ in Benutzeroberflächen nutzen? Kurz zusammengefasst:

  • mein (o.ä.) nutzen, wenn der Nutzer mit dem Produkt interagiert, beispielsweise klicken von Buttons oder auswählen von Checkboxen. Solche Wörter sollten aber nur verwendet werden, um etwas besonders hervor zu heben.
  • dein (o.ä.) verwenden, wenn das Produkt Fragen stellt, Anweisungen gibt oder dem Nutzer Dinge beschreibt. Eben so, wie es ein persönlicher Assistent tun würde.

(Quelle: medium.com)

Design Rules für Eingabefelder

Eingabefelder sind allgegenwertig. Jede Interaktion mit Benutzeroberflächen, egal ob über Desktops oder mobile Endgeräte, erfordert Eingabefelder. Kurz zusammengefasst, welche Punkte hier wichtig sind:

  • Position von Labels: die beste Position für Labels ist links oberhalb vom Eingabefeld. Damit wurden Formulare am schnellsten ausgefüllt. Labels links neben dem Input fuhrten hingegen zu einer Verlangsamung beim Ausfüllen, da hier die Augenbewegung deutlich zunimmt.
  • Platzhalter: Platzhalter sind hilfreich, jedoch nicht wenn diese beim Fokus auf das Eingabefeld verschwinden. Also lieber ein aussagekräftiges Label verwenden. Eine neue Methode, bei dem der Platzhalter beim Fokus auf das Eingabefeld zum Label wird, könnte diesen Nachteil ausmerzen.
  • Keyboard: einige Eingabefelder erfordern nur Zahlen als Eingabe. Auf mobilen Endgeräten kann die Nummerblock-Tastatur sehr hilfreich sein. Aktivieren lässt sich diese durch “tel” als type oder das Attribut “pattern=”[0-9]*”.

(Quelle: uxbooth.com – The New Rules of Form Design)

Ladeprobleme des Akku LP-E6 mit dem Ladegerät LC-E6 beheben

LP-E6 ist der Akku für die Canon-Modelle EOS 5D Mark III, EOS 6D, EOS 70D, …

Sollte sich ein Akku LP-E6 (egal ob es der Akku einer neuen Kamera oder ein Ersatzakku ist) mit dem dazugehörigen Ladegerät LC-E6 nicht laden lassen, dann kann das Problem möglicherweise mit den nachfolgenden Schritten selbst behoben werden:

  1. Canon Akku LP-E6 in das Canon Akkuladegerät LC-E6 einlegen und an die Steckdose anschließen. 20 Sekunden warten.
  2. Unter normalen Umständen blinkt die orangefarbene Lampe während dieser Zeit langsam (einmal pro Sekunde), und der Akkuladevorgang wird gestartet. Nehmen Sie den Akku erst dann aus dem Ladegerät, wenn der Akkuladevorgang abgeschlossen ist und die grüne Lampe leuchtet. Wenn die orangefarbene Lampe des Ladegeräts schnell blinkt, kann der Akku nicht aufgeladen werden. Bitte fahren Sie mit Schritt 3 dieser Anleitung fort.
  3. Wenn die orangefarbene Lampe schnell blinkt, entfernen Sie den Canon Akku LP-E6 aus dem Canon Akkuladegerät LC-E6. Warten Sie 10 Sekunden.
  4. Legen Sie den Canon Akku LP-E6 erneut in das Canon Akkuladegerät LC-E6 ein.
  5. Wenn die orangefarbene Lampe des Canon Akkuladegeräts LC-E6 langsam zu blinken beginnt (einmal pro Sekunde), startet der Ladevorgang.

Hinweis: Wenn die orangefarbene Leuchte erneut schnell blinkt, wiederholen Sie die Schritte 3 bis 5.  Wenn nach einem dritten Versuch der Canon Akku LP-E6 nicht aufgeladen wird, wenden Sie sich bitte an den Canon Service.

Imagick und „libgomp: Thread creation failed: Resource temporarily unavailable“

Bei der Bildbearbeitung mit Imagick (PHP) kann es mitunter zu einem Timeout bzw. Internal Server Error kommen und die Grafik wird nicht erstellt. In meinem Fall immer dann, wenn man versucht einen Text in der Grafik mittels Imagick::annotateImage() darzustellen.

Schaut man sich die error.log des Webservers an, dann stolpert man über den Fehler „libgomp: Thread creation failed: Resource temporarily unavailable“.

Was ist das Problem? Imagick scheint mehr Threads für die Bilderstellung beanspruchen zu wollen, als verfügbar sind.

Wie kann man die Anzahl der Threads eingrenzen? Folgende Einstellungen sollten gesetzt werden (hier z.B. über die .htaccess):

SetEnv MAGICK_THREAD_LIMIT 4
SetEnv OMP_NUM_THREADS 4

Ist man sich unsicher, wieviele Threads das System zur Verfügung stellt, dann kann man diesen Wert schrittweise erhöhen (1, 2, 4, 8, …), bis der Fehler auftritt. Die Einstellung sollte auch direkt aus dem PHP-Script heraus mit putenv() möglich sein.