[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.

[Quicktip] iPhone Wörterbuch durch eigene Wörter erweiterten

Im Gegensatz zu Android ist die Auto-Korrektur beim iPhone nicht sehr intelligent gelöst. Hinzu kommt, dass sie nur schlecht neue Wörter lernt. Um dem Abhilfe zu schaffen kann man nun einen Jailbreak durchführen, um anschließend die Datei

/private/var/mobile/Library/Keyboard/dynamic-text.dat

zu editieren. Die einzelnen zusätzlichen Wörter stehen da durch Leerzeichen getrennt drin.

Es gibt aber auch einen wesentlich eleganteren Weg, und das ohne Jailbreak. Dazu geht man in die Einstellungen – Allgemein – Tastatur – internationale Tastaturen – Tastatur hinzufügen. Dort wählt man nun die Tastatur “Japanisch (Romaji) aus. Wenn man nun wieder eine Ebene höher geht, also in die allgemeinen Tastatureinstellungen, dann gibt es dort den neuen Menüpunkt “Benutzerwörterbuch”. In diesem kann man nun eigene zusätzliche Wörter verwalten, welche dann von der Autokorrektur erkannt werden. Hinweis: Es reicht, das Wort nur bei “Wort” einzutragen – man muss nicht noch Japanisch übersetzen 😉

[Quicktip] Google Mail, Kalender und Kontakte mit iPhone synchronisieren

Als Android-User ist mir Googlemail und seine Kalender- sowie Kontaktdienste ans Herz gewachsen. Mein komplettes Telefonbuch wird mit Google synchronisiert, was mir erlaubt, einfach mal zwischen Geräten zu wechseln, und das ohne umständlichen Datenaustausch.

Wenn ich nun auf dem iPhone ein neues Email-Konto hinzufügen möchte, wird mir auch gleich Googlemail als eigene Rubrik angeboten. Schön und gut, nur leider werden bei dieser Methode nur Emails und Kalender synchronisiert, die Kontakte jedoch nicht. Der Trick ist, dass man kein Googlemail sondern ein Exchange Konto einrichten muss. Der Benutzername ist die eigene Googlemail-Adresse, das Passwort bleibt gleich. Klickt man nun auf “fertig”, so wird man erstmal darauf hingewiesen, dass die Zertifikate nicht glaubwürdig sind. Das bestätigt man einfach. Anschließend erscheint noch das Feld “Server”, in welches man einfach

m.google.com

einträgt. Aussehen müsste es dann so:

Anschließend drückt man noch einmal auf “fertig”. Nun kann man wählen, was synchronisiert werden soll. Hier tauchen nun auch die Kontakte auf.