Mit diesem Snippet überprüft ihr, ob die erforderliche Anzahl an Argumenten übergeben wurde:
1 2 3 4 5 6 |
ARGS=3 if [ $# -ne $ARGS ] then echo "Usage: $0 arg1 arg2 arg3" exit 65 fi |
Tags: Allgemein Kommentieren
Mit diesem Snippet überprüft ihr, ob die erforderliche Anzahl an Argumenten übergeben wurde:
1 2 3 4 5 6 |
ARGS=3 if [ $# -ne $ARGS ] then echo "Usage: $0 arg1 arg2 arg3" exit 65 fi |
Tags: Allgemein Kommentieren
Mit dem folgenden Snippet überprüft ihr innerhalb eines Shell-Scripts, ob der ausführende Benutzer als root
angemeldet ist:
1 2 3 4 |
if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" exit 1 fi |
Tags: Allgemein | macOS / OS X (Mac) Kommentieren
Ausführen in einem Terminal:
1 |
defaults write com.apple.dashboard mcx-disabled -boolean YES && killall Dock |
Ausführen in einem Terminal:
1 |
defaults write com.apple.dashboard mcx-disabled -boolean NO && killall Dock |
Tags: Allgemein Kommentieren
Diese Funktion schreibt in eine bestimmte Spalte bei der ersten und jeder weiteren Änderung ein Erstellungs- und Änderungsdatum der Zelle. Dadurch, dass die Funktion „onEdit“ heißt, wird sie bei einer Änderung automatisch aufgerufen und es bedarf keiner weiteren Verknüpfung.
Die Variablen am Anfang der Funktion bestimmen, auf welche Blätter die Funktion beschränkt ist und welche Spalten und Zeilen von den Änderungen ausgenommen sind.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
function columnToLetter(column) { var temp, letter = ''; while (column > 0) { temp = (column - 1) % 26; letter = String.fromCharCode(temp + 65) + letter; column = (column - temp - 1) / 26; } return letter; } function letterToColumn(letter) { var column = 0, length = letter.length; for (var i = 0; i < length; i++) { column += (letter.charCodeAt(i) - 64) * Math.pow(26, length - i - 1); } return column; } function onEdit() { // Column for 'update date' var update_date_col = "U"; // Column for 'creation date' var create_date_col = "V"; // Date format (EN/DE) //var date_format = "YYYY-MM-dd HH:mm:ss"; var date_format = "dd.MM.YYYY HH:mm:ss"; // Time zone //var timezone = "GMT+01:00"; var timezone = "CET+02:00"; // These rows do not trigger an update var ignore_row = [1]; // These columns do not trigger an update var ignore_col = []; // Sheets var sheets = ["Liste der CMS"]; // Set environment variables var s = SpreadsheetApp.getActiveSheet(); var r = s.getActiveCell(); var row = r.getRow(); var col = r.getColumn(); ignore_col.push(update_date_col); ignore_col.push(create_date_col); // Only trigger specific sheets sheet_ok = 0; for (var i=0; i < sheets.length ; i++ ) { if(s.getName() == sheets[i]) sheet_ok = 1; } if(sheet_ok === 0) return false; // Do not update 'create date' oder 'update date' itself if( r.getColumn() == letterToColumn(update_date_col) ) return false; if( r.getColumn() == letterToColumn(create_date_col) ) return false; // Do not update ignored rows for (var i=0; i < ignore_row.length ; i++ ) { if(r.getRow() == ignore_row[i]) return false; } // Do not update ignored cols for (var i=0; i < ignore_col.length ; i++ ) { if(r.getColumn() == letterToColumn(ignore_col[i])) return false; } // Write 'update date' var time = new Date(); time = Utilities.formatDate(time, timezone, date_format); var update_date_cell = SpreadsheetApp.getActiveSheet().getRange(update_date_col + row.toString()); update_date_cell.setValue(time); // Write 'creation date' var creation_date_cell = SpreadsheetApp.getActiveSheet().getRange(create_date_col + row.toString()); if(creation_date_cell.getValue() == "") // If cell is empty, set value (no creation date existing) creation_date_cell.setValue(time); }; |
Die Spalte für Änderungs- und Erstellungsdatum kann anschließend z.B. zum Markieren neuer Einträge genutzt werden. Dies geht mittels „Bedingten Formatierungen“, z.B. =IF(AND(NOT(ISBLANK($M2));$M2>=TODAY()-7);1;0)
.
Tags: Allgemein | TYPO3 1 Kommentar
Mit TYPO3 Version 6.2.16 werden nun bestimmte Elemente durch htmlspecialchars
geschleust und nicht mehr geparsed. Dies kann folgende Symptome zur Folge haben:
)Man kann die durch das Update vorgenommene Änderung der TypoScript-Konfiguration wie folgt wieder zurücksetzen:
1 2 3 4 |
tt_content.table{ 20.innerStdWrap.parseFunc =< lib.parseFunc 20.innerStdWrap.htmlSpecialChars > } |
Tags: Allgemein | NAS | Ubuntu Kommentieren
Bei der Installation von Ubuntu von einem USB-Stick kann es sein, dass nach der Basisinstallation bei der Einrichtung des Bootloaders der folgende Fehler auftritt:
1 2 3 4 |
GRUB konnte nicht auf /dev/sda installiert werden. Die Ausführung von >>grub install /dev/sda<< ist fehlgeschlagen. Die ist ein schwerwiegender Fehler. |
Dies kann daran liegen, dass der USB-Stick als /dev/sda registriert ist, die Festplatte dann /dev/sdb ist. Die Installation nach /dev/sdb funktioniet zwar problemlos, GRUB wird jedoch fälschlicherweise automatisch auf /dev/sda installiert.
Die Lösung ist recht simpel: Nochmal versuchen und die automatische Installation mit „Nein“ abbrechen. Anschließend kann manuell das Laufwerk angegeben werden, auf das der MBR geschrieben werden soll. Dies ist dann /dev/sdb. Anschließend sollte die Installation problemlos abzuschließen sein.
Quellen
Tags: Allgemein | macOS / OS X (Mac) Kommentieren
Um eine ISO-Datei mit einem OS X-Geräte (Mac) auf einen Wechseldatenträger (externe Festplatte, USB-Stick, SD-Karte, etc.) zu spielen, kann man wie folgt vorgehen:
cmd + space
, „terminal“ eingeben, Enter)
1 |
$ diskutil list |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/dev/disk0 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *500.3 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_CoreStorage Macintosh HD 419.4 GB disk0s2 3: Apple_Boot Recovery HD 650.1 MB disk0s3 4: Microsoft Basic Data BOOTCAMP 80.1 GB disk0s4 /dev/disk1 (internal, virtual): #: TYPE NAME SIZE IDENTIFIER 0: Apple_HFS Macintosh HD +419.0 GB disk1 Logical Volume on disk0s2 8593726D-63DF-FG62-DFU2-9398HG72H29A Unlocked Encrypted |
1 |
$ diskutil unmountDisk /dev/disk2 |
1 |
$ sudo dd if=/path/to/iso.iso of=/dev/disk2 |
1 2 3 |
505856+0 records in 505856+0 records out 258998272 bytes transferred in 115.845490 secs (2235722 bytes/sec) |
of
) gelöscht.Das funktioniert beispielsweise super mit Images von Betriebssystemen, wenn man einen Wechseldatenträger zur Installation verwenden möchte.
Tags: Allgemein | Debian (Linux) | macOS / OS X (Mac) | Raspbian (Raspberry Pi) | Webserver Kommentieren
Im Folgenden beschreibe ich, wie das Ganze mit einem Linux- oder Mac-Client beim Zugriff auf einen Linux-Server funktioniert.
1 2 3 4 5 6 7 8 9 10 |
$ ssh-keygen -t rsa -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/Users/USER/.ssh/id_rsa/): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/USER/.ssh/id_rsa. Your public key has been saved in /Users/USER/.ssh/id_rsa.pub. The key fingerprint is: 32:33:a6:c9:04:c9:c9:b9: test@localhost.local The key's randomart image is: |
1 |
scp /Users/USER/.ssh/id_rsa.pub user@deinserver.com:~ |
1 2 3 4 5 6 7 |
# Falls die nötigen Verzeichnisse nicht existieren, anlegen: mkdir ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # Key hinzufügen cat ~/id_rsa.pub >> ~/.ssh/authorized_keys |
1 2 3 |
ssh-add /Users/USER/.ssh/id_rsa Need passphrase for /Users/USER/.ssh/id_rsa.pub user@deinserver.com. Enter passphrase: |
In diesem Fall hilft es meist, den SSH-Agent zu starten:
1 |
eval $(ssh-agent) |
Tags: Allgemein | Debian (Linux) | MySQL | MySQL-Server | Webserver | xt:Commerce Kommentieren
Ein Kunde hatte das Problem, dass der auf unserem Server installierte xt:commerce 3 teilweise so hohen Datenbank-Load verursachte, dass der MySQL-Server abrauchte und somit den ganzen Server kurzzeitig in einer Nicht-Erreichbarkeit stürzte. Zwar war schon länger ein Update auf eine neue xt:commerce-Version geplant, jedoch befand sich der neue Shop noch in der Entwicklung und es musste kurzfristig eine Lösung erarbeitet werden, da die Ausfälle sich häuften (teilweise bis zu 3x am Tag).
Relativ schnell entpuppte sich die Suchfunktion des xt:commerce als ausschlaggebend, welche bei meinen Tests bei einer Volltextsuche meist zwischen 40 und 50 Sekunden benötigte, dabei den MySQL-Server komplett belastet – nun stelle man sich dies am Tages-Hoch mit hunderten Besuchern vor.
Mit den folgenden Umstellungen in der MySQL-Datenbank lässt sich die Suche durch einfaches Setzen von Indizes stark beschleunigen:
Tabelle „products_description„:
Tabelle „products_options„:
Tabelle „products_attributes„:
Tabelle „products_options_values„:
Tabelle „specials„:
Wichtig ist, dass die neuen Indexes eine möglichst hohe Kardinalität besitzen (also viele verschiedene Werte), damit eine Performancesteigerung erreicht werden kann.
Tags: Allgemein | Betriebssystem | Debian (Linux) Kommentieren
Bei Start von Debian taucht die folgende etwas verwirrende Meldung auf:
Waiting for /dev to be fully populated... [...]
[...] Error: Driver 'pcspkr' is already registered, aborting
Blacklisten des Moduls „snd-pcskr“:
1 |
echo "blacklist snd-pcsp" >> /etc/modprobe.d/alsa-base-blacklist |