[Quicktip] Microsoft Wireless Keyboard 3000 F1-F12 Tasten dauerhaft aktivieren

Gestern habe ich sehr günstig einen Gaming PC erstehen können – mit dabei war auch eine Microsoft Wireless 3000 Tastatur. Neben vieler zusätzlicher Funktionsknöpfe sind auch die “alten” F-Tasten (F1-F12) mit zusätzlichen Funktionen belegt (siehe Foto). Möchte man an Stelle der neuen Featuretaste dann doch lieber direkt die “alte” F-Taste drücken, muss man zusätzlich die “F-Umschalt” Taste halten. Gerade in Tools wie dem Total Commander oder in zahlreichen Spielen benötigt man öfter die F-Tasten und somit kann das 2-Tasten-Verfahren ziemlich nervig sein.

Um dies zu umgehen und die “alten” F-Tasten dauerhaft verwenden zu können, muss man einfach die “F-Umschalt”-Taste etwas länger gedrückt halten (so ca. 3 Sekunden) und schon verhält sich die Tastatur wieder standardgemäß.

[Quicktip] Touchpad Gesten / Rotation unter Photoshop CS4 deaktivieren

Adobe baut ja gerne Innovationen in seine Produktpalette ein – aber schießt auch gerne mal übers Ziel hinaus. So auch bei Photoshop CS4 auf dem Mac: hier wurden Gesten über das Macbook Trackpad ermöglicht, mittels derer man Pinchen/zoomen, aber auch das komplette Dokument rotieren kann. Kann ich pinch&zoom noch nachvollziehen, so fehlt mir ein wirklicher Anwendungsgrund für die Rotation. All das wäre ja kein Problem, wenn man diese Features an- und ausschalten könnte. Aber das wollte Adobe dann wohl doch nicht.

Das eigentlich ärgerliche daran ist aber, dass man die Rotation sehr oft unbeabsichtigt betätigt. Und das kann ziemlich nervig sein. Abhilfe gab es lange Zeit nicht, aber Adobe scheint nun endlich Einsicht gehabt zu haben und hat folgendes Plugin zur Verfügung gestellt:

disable_trackpad_gestures.dmg

Einfach herunterladen und öffnen, anschließend das Plugin nach

/Applications/Adobe Photoshop CS 4/Plugins/

(bzw. im Plugin-Ordner innerhalb des Pfades, wo ihr Photoshop installiert habt) kopieren und Photoshop neu starten. Fertig.

Mit dem Plugin werden sämtliche Touchpadgesten in Photoshop ignoriert.

[Quicktip] iPhone MMS Fehler beheben

Ja, ich weiß, MMS ist in Zeiten von Email, Facebook und Co. keine wirklich sinnvolle Art mehr, Bilder zu versenden, aber das eine oder andere Feature-Phone (also normalo-Handy) ist nur so zu erreichen.

Wer schon ein paar MMS versendet hat, weiß, dass es da immer mal wieder zu Sendefehlern kommen kann. Auch das iPhone ist davor nicht sicher und so gibt es in diesem Fall einen Fehlerhinweis mittels eines roten Ausrufezeichens, was dann so ausieht:

Und was macht man in diesem Fall? Zuerst einmal kann man auf diess rote Ausrufezeichen tippen und die Nachricht erneut senden lassen. Wenn auch das nicht funktioniert – was meistens der Fall sein wird – dann muss das universelle Allheilmittel der IT ran: der gute alte Neustart.

Also: Einschalttaste des iPhones gedrückt halten, bis der rote Slider zum Ausschalten erscheint. Anschließend warten, bis das iPhone aus ist und dann wieder die Einschalttaste gedrückt halten. Nachdem man den Neustart durchgeführt hat und dann die Nachricht erneut versendet, sollte es klappen. Wenn nicht – tja, dann solltet ihr euch mal mit eurem Provider in Verbindung setzen…

Weitere Lösungsvorschläge findet ihr noch unter der offiziellen Apple-Hilfeseite zu dem Thema:
http://support.apple.com/kb/TS2755?viewlocale=de_DE

[Quicktip] cgi Scripte mit Plesk

Am letzten Wochenende habe ich das erste mal in meinem Leben ein cgi Script verwendet. In Zeiten von php – welches im Prinzip auch cgi ist – braucht man derartige Tools einfach nicht mehr so wirklich. Der Vorteil ist aber ganz klar: cgi Programme sind schnell – sofern wir von c oder c++ sprechen. Es wird wohl kein php, ruby, python oder perl Script geben, welches mit einem sauber in C aufgesetzten cgi mithalten kann. Dafür hat man aber den Aufwand, dass man erst kompilieren muss, um das Programm verwenden zu können. Natürlich kann man aber auch alle weiteren Script- oder kompilierten Sprachen als cgi verwenden. Bei interpretierten Sprachen ist dies aber deutlich langsamer, als wenn man diese per Apache Modul betreibt, da sonst bei jedem Aufruf erst einmal der Interpreter initialisiert werden muss.

Egal, ich war dabei, cgit (ein grafisches Frontend für lokale git-Repositories) aufzusetzen – da kommt auch nochmal ein Blogeintrag zu. Nachdem ich mit der Compilierung und Installation durch war, legte ich in Plesk die Domain an, aktivierte in den Domaineinstellungen, dass cgi-Scripte unterstützt werden sollen – und dann stand ich da…

Einfach in den httpdocs Ordner der Domain werfen brachte nichts, dann war die Datei als Download verfügbar. Mir fiel dann schnell der cgi-bin Ordner auf, der sich in der Ordnerstruktur neben den httpdocs und httpsdocs Ordnern befindet. Nur wie ruft man diese auf? Nach etwas Probierarbeit kam ich dann drauf:

http://www.domain.de/cgi-bin/script.cgi

Eigentlich ganz einfach, aber naja 😉

Nachdem ich das herausgefunden hatte, lief mein Tool natürlich trotzdem nicht. Über die Console lief es wunderbar, nur eben nicht im Browser. Dann wurde mir klar, dass das nur noch mit Benutzerrechten zu tun haben kann – und so war es auch. Es ist wichtig (zumindest wenn man mit Plesk arbeitet), dass das cgi Script der Gruppe “psacln” gehört. Außerdem habe ich auch den Benutzer der Domain als Inhaber der Datei festgelegt, was aber wohl nicht zwingend notwendig ist.

[Quicktip] Mit OSX den Arbeitsspeicher aufräumen

Normalerweise sollte man in Sachen Speicherverwaltung OSX nicht in die Quere kommen, denn das macht es selbst ganz gut. Wem das nicht reicht, der sollte nicht rumspielen sondern einfach mehr RAM in das Gerät packen.

Aber was macht mein Mac OS denn so mit dem Arbeitsspeicher? Das System unterscheidet zwischen free, in-active und active RAM. Free erklärt sich selbst, active auch, aber was ist in-active? Das bedeutet einfach, dass wenn man ein Programm beendet, die Daten nicht aus dem Speicher gelöscht werden, sondern erstmal einfach drin bleiben. Startet man dieses Programm später wieder, dann besteht eine gewisse Möglichkeit, dass die Daten noch da sind und der Start somit wesentlich schneller durchgeführt werden kann.

Was ich in letzter Zeit beobachte: wenn viel Speicher als in-active markiert ist, dann dauern Programmstarts teilweise irgendwie länger. Um dem zu entgehen habe ich einfach öfter mal den Rechner neu gestartet, aber so eine richtige Lösung ist das auch nicht. Nun habe ich eben einen netten Hinweis gefunden:

purge

Einfach mal im Terminal “purge” eingeben, Enter drücken, kurz warten und schwups, schon ist der RAM aufgeräumt. Ob das nun sinnvoll ist werde ich beobachten, aber rein gefühlsmäßig ist das schon ein nettes Tool.

via electrictoolbox.com

[Quicktip] mit MYSQL nach % (Prozent) suchen

Gestern stand ich vor der Aufgabe, Datensätze in der Datenbank zu finden, die ein Prozentzeichen an einer bestimmten Stelle in einem Wort hatten. Sagen wir, ich wollte nach “Wo%rt” suchen. Nun könnte man einfach ein

SELECT * FROM `test` WHERE wert LIKE 'Wo%rt'

ausführen, wird aber sehr schnell feststellen, dass das gewünschte Ergebnis bzw. der gewünschte Datensatz zwar dabei ist, aber auch alle weiteren Einträge, die mit “Wo” anfangen und mit “rt” enden – wie z.B. “Wohnort”. Das Prozentzeichen (“%”) und der Unterstrich (“_”) dienen in MySQL als Platzhalter – % für beliebig viele Zeichen beliebigen Typs und _ für ein beliebiges Zeichen.

Pfiffig wie ich war nahm ich den Standard-Escape-Character unter Unix – das Backslash (“\”), um das % zu entschärfen:

SELECT * FROM `test` WHERE wert LIKE 'Wo\%rt'

Natürlich funktionierte das so auch nicht, denn das Backslash ist eben nicht für das Escaping unter MySQL gedacht. Nach ein wenig Recherche im Netz fand ich dann heraus, dass man selbst definieren muss, was das Escape-Zeichen sein soll. Und das geht so:

SELECT * FROM `test` WHERE word LIKE 'Wo!%rt' ESCAPE '!'

In diesem Fall habe ich also das Ausrufezeichen als Escape Character definiert, man kann aber jedes andere Zeichen einsetzen – außer natürlich % und _. Man kann für jedes einzelne Like ein eigenes Escape Zeichen definieren.

[Quicktip] Passwort als Parameter an ssh übergeben

Als Erweiterung zu [Quicktip] ssh Verbindung ohne Known-Hosts Eintrag hier noch die Möglichkeit, das Loginpasswort für einen Server an den SSH Befehl zu übergeben:

Aus Sicherheitsgründen ist es nicht möglich, Passwörter an den ssh-Befehl unter Linux/Unix zu übergeben. Damit soll verhindert werden, dass Passwörter in Scripten hardcoded werden und somit nicht mehr sicher sind. Möchte man passwortlos per Script mit anderen Servern arbeiten, gibt es noch immer die Möglichkeit, die RSA Keys zu hinterlegen.

Nun gibt es aber auch einige wenige spezielle Anwendungsfälle, in denen das Passwort nicht wirklich Sicherheitsrelevant ist, man nicht die Möglichkeit hat den RSA Key zu hinterlegen und man immer mit wechselnden Rechnern zu tun hat. Für diese seltenen Fälle kann man sich mit dem “expect” Befehl behelfen. “expect” macht folgendes: man ruft ein Programm per “expect” auf und versieht das ganze mit einem Kontrollscript. Dann kann man mit einer Art regulärer Ausdrücke nach Ausgaben eines Programmes suchen und auf diese reagieren. Im Fall von ssh sucht man nach der Ausgabe “password:”. Findet expect dieses, soll es einen vorgegebenen Wert einsetzen und mittels Enter bestätigen. Wenn man nun noch ein bisschen Bash-Magie betreibt kommt dieses Script heraus.

Der Aufruf läuft dann so:

./sshlogin.exp password 192.168.1.11 who

In dieser Variante wird immer der Benutzer root verwendet, man kann das Script aber einfach noch um einen weiteren Parameter erweitern, schon ist der Benutzername auch variabel.

Und was war mein Anwendungsfall? Darüber gibt es demnächst einen Artikel… 😉

Links:
bash.cyberciti.biz

[Quicktip] MySQL Query-Ergebnis per Console in eine CSV Datei exportieren

Mit phpmyadmin und Konsorten ist es kein Problem, Ergebnisse von SQL Abfragen in CSV-Dateien zu exportieren. Problematisch wird es allerdings, wenn man eine aufwändigere Abfrage hat, die den php Timeout provoziert, oder aber man keinen Web-Client zu Verfügung hat. Dann greift man zur Konsolenversion von MySQL – welche diesen Export nicht direkt anbietet. Mittels ein bisschen Bash-Magie kann man sich aber behelfen:

mysql --database=database --execute="select a from b where a>1;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > filename.csv

Was passiert? Die Abfrage wird ausgeführt und die Ergebnisse werden in Textform ausgegeben. Mittels Pipe wird die Ausgabe an “sed” weitergegeben, welches diese in das CSV Format umwandelt und anschließend in die Datei “filename.csv” schreibt.

Via snipplr.com

[Quicktip] ssh Verbindung ohne Known-Hosts Eintrag

Es gibt gute Gründe, warum ssh die Fingerprints (also die virtuellen Fingerabdrücke) der Server speichert, mit denen man sich verbindet. Tut man dies nämlich erneut, so kann ssh prüfen, ob sich hinter dieser IP bzw. hinter diesem Hostnamen noch immer der gleiche Rechner befindet. Wenn nicht, gibt’s eine Warnung.

Nun gibt es aber auch Fälle, bei denen will man diesen Schutz unterbinden – vornehmlich beim Scripting. Und das macht man so:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@server

Was passiert? Mit dem ersten Parameter wird das known-hosts-File “/dev/null”, also “nichts”, verwendet. Parameter 2 gibt an, dass die Überprüfung der Fingerprints deaktiviert werden soll. Lässt man den ersten Parameter weg, so werden trotzdem die Fingerprints in der normale known-hosts-File geschrieben.

[Quicktip] GIT Commit/Merge auf github rückgängig machen

Folgendes Problem: Ihr habt ein paar Änderungen commited und auch schon gepushed – in meinem Fall zu github -, merkt dann aber, dass ihr was falsches commited habt. Was nun?

Zuerst könnt ihr mit eurem GIT Client auf die Version resetten, die noch ok war. Oder ihr macht das per Git-Bash:

git reset --hard [Hashwert des gültigen Commits]

Damit setzt ihr euren Stand direkt auf diesen Commit zurück. Achtung! Wenn ihr den Parameter –hard verwendet werden sämtliche Änderungen überschrieben – und alle nachfolgenden Commits werden gelöscht!

Anschließend führt ihr ein

git push -f

aus und schon wird der Reset auch an Github oder evtl. andere entfernte Repositories übertragen. Achtung auch hier: die nachfolgende History wird gelöscht, auch von github. Wenn ihr den Parameter -f (für “force”) weglasst, so wird euch der Push verweigert, da ihr ja einen älteren Stand als im Repository pushen wollt. Daher ist er zwingend nötig.