Buttons in Dialogen: Ok und Abbrechen – rechts oder links?

Die Anordnung von Buttons ist meist abhängig vom Betriebssystem, diese Information sollte daher aus den entsprechenden User Interface Guidelines entnommen werden. Hier eine kurze Zusammenfassung:

Windows

Buttons sollten nach ihrer Aktion in folgender Reihenfolge (von links nach rechts) platziert werden:

OK/[Do it]/Ja
[Don’t do it]/Nein
Abbrechen
Annehmen (wenn vorhanden)
Hilfe (wenn vorhanden)

Abbrechen ist immer rechts vom Ok-Button.

MacOS

Ein Button der eine Aktion ausführt sollte am weitesten rechts platziert werden. Der Abbrechen-Button wird links daneben angeordnet. Bei MacOS ist Abbrechen also links von Ok.

Android

Die ablehnendste Aktion eines Dialogs ist immer auf der linken Seite. Ablehnende Aktionen bringen den Nutzer zurück zur letzten Ansicht.

Bestätigende Aktionen sind rechts. Diese Aktionen The affirmative actions are on the right. Bestätigende Aktionen führen den Prozess fort, welcher den Dialog aufgerufen hat. Bei Android ist Abbrechen also links von Ok.

NVIDIA CUDA on Ubuntu: unsupported GNU version! gcc versions later than 5 are not supported!

After installing CUDA on Ubuntu, compiling CUDA applications with nvcc results in an error similar to this:

In file included from /usr/local/cuda-8.0/bin/../targets/x86_64-linux/include/cuda_runtime.h:78:0,
from <command-line>:0:
/usr/local/cuda-8.0/bin/../targets/x86_64-linux/include/host_config.h:119:2: error: #error — unsupported GNU version! gcc versions later than 5 are not supported!
#error — unsupported GNU version! gcc versions later than 5 are not supported!
^~~~~}}}

Ubuntu comes with a more up-to-date GCC then CUDA can handle. To solve this issue we install GCC 4.9:

sudo apt install gcc-4.9 g++-4.9

Now GCC 4.9 and the up-to-date GCC are installed on the system. To be able to use the up-to-date GCC without CUDA, one can setup and use the „update-alternatives“ system for GCC. In this case we replace the default GCC 6 compiler:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 50 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9

Now we can list the available compilers with

update-alternatives --list gcc

and set the GCC 4.9 as default with

update-alternatives --set gcc /usr/bin/gcc-4.9

Bouldern in der Boulderlounge Chemnitz

Waren heute in der Boulderlounge in Chemnitz. Ab 21:00 wurden Routen umgeschraubt, wodurch leider kein entspanntes Bouldern mehr möglich war. In Chemnitz ist insbesondere die Trainingsecke sehr interessant. Als Inspiration für die eigene Bouldertrainingsecke bzw. Klettertrainingsecke haben wir mal zwei Fotos gemacht:

Die Boulderlounge wird im nächsten Jahr in ein neues Gebäude mit „mehr Platz und Licht“ umziehen. Wir sind gespannt!

JavaScript: String in String suchen

Eine Zeichenkette (String) lässt sich in einem anderen String wie folgt suchen:

if (str.indexOf("Ja") >= 0)

…oder über den Tilde-Operator*:

if (~str.indexOf("Ja"))

Diese beiden Varianten berücksichtigen jedoch keine Groß- und Kleinschreibung!
Die Berücksichtigung von Groß- und Kleinschreibung kann man erreichen mit:

if (str.toLowerCase().indexOf("ja") >= 0)

…oder über reguläre Ausdrücke:

if (/ja/i.test(str))

* Was macht der Tilde-Operator?

Der Tilde-Operator kehrt eine Bit-Folge um, also 1 > 0 und 0 > 1. Wenn der Rückgabewert von ‚indexOf‘ -1 ist, dann führt ~-1 zu 0, weil -1 komplett aus 1 Bits besteht. Jeder Wert größer oder gleich 0 wird als Rückgabe einen Nicht-Null-Wert geben.

Notiz an mich: die schnellste App für Deine Notizen

„Notiz an mich“ hilft Dir dabei, Notizen möglichst schnell in Dein Email-Postfach zu bekommen. Und das ohne großen Aufwand und Umwege. Man könnte sagen: es ist die schnellste Notiz-App.

„Notiz an mich“ ist nicht zum Verwalten Deiner Notizen gedacht, sie bietet aber dennoch alles, was man von einer Notiz-App erwartet:

– Verfassen von Notiztexten
– Anhängen von Fotos oder Dateien
– Erstellen von Skizzen

Zudem bietet die App die Möglichkeit, unterschiedliche E-Mail-Adressen als Empfänger anzugeben und die Notizen auch über ein eigenes Emailkonto zu senden.

Jetzt im AppStore laden: https://itunes.apple.com/de/app/notiz-an-mich/id1135553707?mt=8

PHP: Wie bekommt man Gettext zum Laufen?

Zunächst erstellt man sich ein Verzeichnis, z.B. locales/, in dem die Übersetzungsdateien abgelegt werden. Die Verzeichnisstruktur sollte Unterverzeichnisse für jede Sprache, beispielsweise en/ für Englisch, de/ für Deutsch, usw. enthalten und wie folgt aufgebaut sein:

locales/
  de/
    LC_MESSAGES/
      default.po
      default.mo
  en/
    LC_MESSAGES/
      ...

In diese Verzeichnisse kommen dann die Übersetzungsdateien (*.mo, *.po). Wie diese aufgebaut sind bzw erstellt werden, soll an dieser Stelle nicht weiter erläutert werden.

Einbindung in PHP

So sieht die Einbindung von Gettext in PHP aus:

$locale = 'de_DE';
$directory = './locales'; // diesen Pfad entsprechend anpassen!
$domain = 'default';

setlocale(LC_ALL, $locale.'.utf8');  // 'de_DE.utf8' (wichtig: utf8 ohne '-'!)
putenv('LC_ALL='.$locale);
bindtextdomain($domain, $directory); // 'default', './locales'
textdomain($domain);                 // 'default'
bind_textdomain_codeset($domain, 'UTF-8');

Zu beachtende Punkte

Gettext funktioniert nicht wie gewünscht? Lokalisierung wird nicht angezeigt? Dies dann kann verschiedene Gründe haben. Hier ein paar Anmerkungen:

Der String in $locale muss eine gültige Lokalisierung sein, welche auch auf dem System zur Verfügung steht. Ist diese korrekt (bzw. existiert diese), dann gibt setlocale() true zurück, andernfalls false.

Im Fehlerfall sollte man also prüfen, ob das System die angegebene Lokalisierung auch bereitstellt. Das kann man der Ausgabe folgender Zeile entnehmen:

print_r(ResourceBundle::getLocales(''));

Das Encodings (UTF-8) muss bei setlocale() ohne jeglichen Bindestrich angegeben werden.

Die Angabe ‚default‘ bezieht sich auf die Domain, also den Dateinamen der *.mo-Datei. Die *.po-Datei werden übrigens nicht direkt von Gettext verwendet. Diese werden aber benötigt, um die *.mo-Dateien zu erstellen.

Shell: Ausgabe aller Zeilen einer Datei bis auf die ersten x

Wenn man alle Zeilen einer Datei bis auf die ersten x auf der Konsole ausgeben möchte, kann man tail nutzen. Normalerweise kann man damit die letzten 10 Zeilen tail namesliste.txt bzw. die letzten Y Zeilen mit tail -n Y namesliste.txt ausgeben.

Wenn man jedoch alles bis auf die ersten x Zeilen einer Datei ausgeben möchte, so kann man tail -n +(x+1) nutzen. In diesem Modus gibt tail ab der hinter dem + stehenden Zeile alles aus – daher x+1.