Archiv ‘IT’

Samstag, 13. April 2013

Google Calendar zeigt selber entwickelte ICS-Feeds nicht mehr an

Heute habe ich festgestellt, dass meine selber entwickelten .ics-Feeds in Google Calendar nicht mehr angezeigt werden. Das Debugging ergab:

  1. Mein Server läuft, welcher die .ics-Dateien bereitstellt
  2. Mittels wget kann ich die .ics-Datei herunterladen
  3. Die Datei sieht in vim in Ordnung aus
  4. In access.log wird angezeigt, dass ein Google-Bot gelegentlich auf die Datei zugreift

Auf Grund einer Fehlermeldung des iCalendar Validator ist mir nun bewusst, dass in .ics-Kalenderdateien keine Unix-Zeilenumbrüche erlaubt sind (\n), sondern nur die MS DOS-Zeilenumbrüche (\r\n) unterstützt werden.

Nachdem ich in meiner ICS-Klasse folgende Zeile eingefügt habe, wird der Kalender in Google Calendar endlich wieder ordentlich angezeigt:

...
$out = str_replace("\n","\r\n",$out);

return $out
...

Nachtrag

In einem anderen ICS-Script verwende ich keine Klassen und spitze die Kalenderdaten nicht vorgängig in eine Variable ab. Ich habe das PHP-Script deshalb kurzerhand komplett auf MS DOS Zeilenendungen umgestellt:

sed s/$/^M/ unix.php dos.php

Tags: , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 10. März 2013

Thunderbird effizient mit einem IMAP-Server und zehntausenden E-Mails verwenden

Neben der lokalen Ablage der Logs meines Linux-Servers unter /var/log leite ich Resultate von Cron-Läufen auch an eine E-Mail-Adresse auf einen in einem Rechenzentrum stehenden IMAP-Server weiter. Einerseits stelle ich so sicher, dass ich im Falle eines verheerenden Hacks auf dem IMAP-Server möglicherweise Informationen extrahieren kann, welche mir bei der Forensik helfen. Ob diese Lösung wirklich das Gelbe des Eis ist sei hier dahingestellt (heute würde ich mich wohl für eine Lösung wie Splunk entscheiden).

Nach langer Zeit habe ich heute wieder einmal per Web-Mail in diesen Account hineingeschaut und musst feststellen, dass sich in zwei IMAP-Ordnern je über 50’000 Mails angesammelt haben. Ich entschied mich, diese Ordner zu säubern. Hierzu verwendete ich aber nicht die vom Hoster angebotene Web-Mail-Lösung Roundcube, sondern Mozilla Thunderbird.

Nachfolgend einige Tipps, wie man mit der riesigen Flut an Mails umgeht:

Alle IMAP-Nachrichte herunterladen

Einerseits habe ich unter

  1. Thunderbird
  2. Preferences
  3. Advanced
  4. General
  5. Config Editor

den Wert von mail.server.default.check_all_folders_for_new auf true gesetzt. Ob dies etwas bewirkt, kann ich leider nicht sagen.

Andererseits habe ich auch bemerkt, dass man alle E-Mails in einem Ordner mittels Command-A auswählt und dann mittels Rechtsklick über die Option „Get Selected Messages“ herunterladen kann.

IMAP-Nachrichten auf dem Server durchsuchen

Unter

  1. Edit
  2. Find
  3. Search Messages…
  4. [x] Run search on server

In meinem Fall funktionierte diese Methode aber nicht; es wurden nur die Bodies derjenigen Mails durchsucht, welche sich bereits lokal auf meiner Festplatte befanden.

Zehntausende E-Mails rasch löschen

Nachfolgende Option verhindert, dass Thunderbird während Minuten nicht mehr reagiert, einen Spinning Beachball anzeigt und in Mac OS X‘ Activity Monitor rot als „not responding“ markiert wird:

  1. Tools
  2. Account Settings…
  3. Server Settings
  4. When I delete a message: (x) Remove it immediately

Dies verhindert, dass zu löschende Nachrichten von Thunderbird im Hintergrund in den Ordner „Trash“ verschoben werden, aus welchem man diese danach noch mittels „Empty Trash“ löschen muss.

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 6. März 2013

Wenn Subversion zwar updaten, aber nicht committen kann

Heute habe ich eines meiner Web-Projekte aktualisiert. Ich arbeitete dabei direkt auf dem produktiven Web-Server. Ein svn up klappte problemlos. Doch als ich die direkt auf dem Server neu erstellte robots.txt in das Repository einchecken wolle, kam es zu folgender Fehlermeldung:

$ svn ci -m "robots.txt fehlte"
svn: Commit failed (details follow):
svn: At least one property change failed; repository is unchanged
svn: Server sent unexpected return value (400 Bad Request) in response to PROPPATCH request for '//!svn/wbl/56ef405d-3812-4a6b-a62d-edae457cb0b0/1057'

Die Log-Daten meines Apache-Servers, welcher mittels WebDAV auch den Zugang zum SVN-Repository bereitstellt, vermeldeten folgendes:

access.log:

...
[SOURCE IP] - - [06/Mar/2013:20:08:56 +0100] "OPTIONS /repository HTTP/1.1" 401 772 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:56 +0100] "OPTIONS /repository HTTP/1.1" 200 1039 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:56 +0100] "PROPFIND /repository HTTP/1.1" 207 741 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:56 +0100] "MKACTIVITY /!svn/act/74bcecab-e942-418b-84e4-822ad8581d59 HTTP/1.1" 201 758 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:57 +0100] "CHECKOUT /!svn/vcc/default HTTP/1.1" 201 777 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:57 +0100] "PROPPATCH //!svn/wbl/74bcecab-e942-418b-84e4-822ad8581d59/1058 HTTP/1.1" 400 478 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:57 +0100] "DELETE /!svn/act/74bcecab-e942-418b-84e4-822ad8581d59 HTTP/1.1" 204 302 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
...

error.log:

[Wed Mar 06 19:48:10 2013] [error] [client [SOURCE IP]] Digest: uri mismatch -  does not match request-uri 

Unterwegs vom Produktionssystem zum Repository-Server kam es zu einem Problem, in welchem die Domain meines Servers aus der Request-URI entfernt wurde. Ich muss hierbei noch erwähnen, dass zwischen den beiden Servern ein (nicht transparenter) Proxy-Server mit Squid werkelt. Inwiefern dieser Server in den Vorgang gepfuscht hat, kann ich nicht sagen.

Nach langem Pröbeln habe ich es irgendwie hingekriegt. Die Lösung des Problems erscheint mir immer noch mysteriös — aber so sei es wohl manchmal halt: Nachdem ich einerseits folgende zwei Konfigurationsdateien umbenannt …

  • /etc/subversion/servers
  • ~/.subversion/servers

… und andererseits den Inhalt des Verzeichnisses

~/.subversion/auth/

komplett gelöscht hatte, klappte es mit dem Commit plötzlich problemlos.

Eine Vermutung habe ich: Da ich mich seit mehr als einem Jahr nicht mehr auf dem Server eingeloggt hatte, könnten unter auth noch Überreste der damals verwendeten HTTP Basic-Authentifizierung gespeichert gewesen sein. Mittlerweile bin ich auf HTTP Digest-Authentifizierung umgestiegen, um Passwörter im schlimmsten Fall nicht mehr im Klartext über ein öffentliches WiFi zu jagen. Indiz dafür ist, dass ich heute nach der Löschaktion gefragt wurde, ob ich das Passwort im Klartext auf dem Server speichern möchte (was ich abgelehnt habe).

Oder aber eine oder beide Konfigurationsdateien enthielten eine Option, welche die Übertragung der Informationen störte — bspw. der hardkodierte Proxy. Wieso die HTTP-Verbindung zum Repository-Server auch nach der Umbenennung der zwei Konfigurationsdateien weiter funktionierte, ist und bleibt schleierhaft. Wobei, jetzt kommt mir in den Sinn, dass die Admins dieses Netzwerks kurz vor meinem Weggang planten, einen transparenten Proxy einzurichten … Das könnte die Lösung sein.

Tags: , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 3. März 2013

Arte-Videos herunterladen

Vor ein paar Tagen hat arte die Dokumentation Staatsgeheimnis Bankenrettung veröffentlicht. Man kann die Reportage unter dem genannten Link live anschauen.

Wer sich die Dokumentation aber auf die lokale Festplatte laden möchte, um sie danach beispielsweise mit Air Video Server und Air Video.app unter iOS auf den Apple TV zu streamen, muss auf der Kommandozeile aktiv werden:

  1. # port install rtmpdump
  2. Download von Florian Crouzats Shell-Script mittels
    $ wget http://files.floriancrouzat.net/ripArte-v0.9.sh
  3. $ chmod 755 ripArte-v0.9.sh
  4. $ ripArte-v0.9.sh "http://videos.arte.tv/de/videos/staatsgeheimnis-bankenrettung--7340782.html"
  5. Auswahl des vierten RTMP Streams (German High-definition RTMP, rtmp://artestras.fcod.llnwd.net/a3903/o35/mp4:geo/videothek/ALL/arteprod/A7_SGT_ENC_04_048116-000-A_PG_HQ_DE?h=24fceb3242c5803955ac67b8b44ce499)

Und das Resultat sieht folgendermassen aus:

...
340386.493 kB / 3129.09 sec (99.9%)
Download complete

Tags: , , , , ,
Labels: IT, Medien

3 Kommentare | neuen Kommentar verfassen

Dienstag, 8. Januar 2013

Swisscom MOBILE-EAPSIM-Einstellungen zurücksetzen

Irgendwann einmal im Laufe des letzten Jahres ging die Konfiguration meines geschäftlich genutzten iPhones kaputt — seither loggte sich das iPhone nicht mehr automatisch in die MOBILE-EAPSIM WLAN-Hotspots der Swisscom ein. Beim Inititiieren einer manuellen Verbindung mit den schweizweit an publikumskräftigen Orten verfügbaren WiFi-Access Points wurde ich aufgefordert, ein Passwort einzugeben — welches ich selbstverständlich nicht kenne.

Auch das Zurücksetzen der Netzwerkeinstellungen (auf Anraten der Spezial-Hotline unter 0900 333 221, via 4S und Swisscom EAPSIM verbinden und Kennworteingabe) brachte keine Abhilfe, worauf mir die Hotline-Mitarbeiterin anbot, eine .MOBILECONFIG-Datei zuzustellen, mit welcher ich diese spezifische Konfiguration meines Mobiltelefons zurücksetzen konnte.

Damit Hilfesuchende nicht denselben Interaktionsparcours mit Swisscom durchlaufen müssen, poste ich die Datei hiermit in die Public Domain. Swisscoms Juristen werden mir sicherlich bald sagen, ob ich das darf oder nicht …

EAPSIM.MOBILECONFIG

Disclaimer: Verwendung auf eigene Gefahr. Ich kann nicht dafür verantwortlich gemacht werden, wenn das iPhone nach dem Einspielen des Updates explodieren oder sich grün verfärben sollte.

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 24. November 2012

Text in PDFs greppen

Da haben also die SBB einen Wettbewerb online, welcher die Eingabe von Ticketnummern erfordert. Und gleichzeitig habe ich Quittungen von über SBB Mobile georderte Tickets für Geschäftsreisen auf meinem Computer abgelegt.

Was macht man da? Richtig, man filtert die PDFs nach den geforderten Ticket-Nummern, und zwar so:

pdftotext

Ich gehe davon aus, dass jeder Terminal.app-Hacker macports installiert hat

Man benötigt zuerst einmal das in xpdf enthaltene Tool pdftotext:

# port install xpdf-tools

Shell-Magic

Nachdem das Tool installiert ist, navigiert man in den Ordner, welcher die PDFs enthält und gibt folgenden Befehl ein:

$ for i in *.pdf; do pdftotext "$i"; done;

Die in PDFs enthaltenen Textzeichen werden extrahiert und automatisch in eine Textdatei mit Endung .txt gespeichert, welche denselben Basename trägt wie die PDF-Datei.

Nun kann ich problemlos greppen:

$ cat *.txt | grep "OT"

… und schon erhalte ich eine schöne Liste in der Form

OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000

Tags: , , , , , , ,
Labels: IT

1 Kommentar | neuen Kommentar verfassen

Sonntag, 18. November 2012

Adobe Source Code Pro: Quelloffene Programmierer-Schrift

Adobe überrascht für einmal und offeriert mit Source Code Pro eine quelloffene OTF-Schrift, welche speziell für Entwickler geeignet ist, welche eine leicht lesbare Monospace-Schriftart benötigen.

Wer das Ding kompilieren möchte, kann sich an Adobes Git-Repository vergnügen:

adobe / source-code-pro

Alle anderen laden sich das OTF-Binary von hier herunter:

Free Font Source Code Pro by Adobe

Nicht mit Apple Terminal

Leider unterstützt Apples Terminal.app unter Mac OS X 10.7 keine OTF-Fonts:

Terminal.app won’t display OpenType fonts (.otf)

Mist! Dann verwende ich die Schrift halt nur in TextMate … Als Ersatz kommt in Terminal.app Microsofts Consolas zum Einsatz.

Tags: , , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 17. November 2012

Bilddateien unter Mac OS X mit Rechtsklick auf Flickr laden (Python und Automator)

Rückblickend — wie so vieles — eine ganz simple Aufgabe.

WICHTIG: Das neueste, überarbeitete Script findet sich auf Github unter emeidi/flickrUpload

flickrUploaderLean.py

#!/usr/bin/env python

import os
import sys
import re
import flickrapi

api_key = ''
api_secret = ''

flickr = flickrapi.FlickrAPI(api_key, api_secret)

(token, frob) = flickr.get_token_part_one(perms='write')
if not token:
    raw_input("Press ENTER after you authorized this program")
flickr.get_token_part_two((token, frob))

numArgs = len(sys.argv)
if(numArgs < 1):
	sys.exit("Usage:" + sys.argv[0] + " ")

photo_path = sys.argv[1]

if(os.path.isfile(photo_path) == False):
	sys.exit("File not found: " + photo_path)

res = flickr.upload(filename=photo_path, is_public=u'1')

t = res[0]
if t.tag == 'photoid':
	print 'http://www.flickr.com/photos/upload/edit/?ids=' + t.text
else:
	print 'http://www.flickr.com/upload+failed'

sys.exit(0)

Anschliessend erstellt man mittels Apple Automator einen Service, welcher nach dem Abspeichern mittels eines Rechtsklick auf eine Datei im Untermenu „Services“ aufgeführt wird:

Konkret:

  • Service receives selected files or folders in Finder.app
  • Run Shell Script
    • Shell: /bin/bash
    • Pass Input: as arguments
    • (Textfeld): /Users/mario/Scripts/flickrUploadLean.py „$@“
  • Display Webpages

Tags: , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 7. November 2012

Microsoft Domain Policies mit grep unter Windows filtern

Herkules-Aufgabe am Tag, an welchem Barack Obama zum neuen alten Präsident der USA gewählt wurde: Ich musste aus über 150 Domain Policies im HTML-Format diejenigen Dokumente herausfiltern, welche Passworteinstellungen enthielten. Und dies – wohlgemerkt – unter Windows. Wie macht man das?

Im Grund genommen ist das ganze keine grosse Hexerei:

  1. msysgit herunterladen
  2. msysgit installieren
  3. Git bash starten
  4. Ins Verzeichnis mit den Policies wechseln
  5. Folgenden Befehl ausführen:
    $ grep "Enforce password" *.html

Doch oha! grep liefert keine einzige Datei zurück, welche Kennwortrichtlinien enthält? Ein cat auf eine Beispieldatei zeigt, dass zwischen jedem Buchstaben ein Leerzeichen folgt. Indem man eine Beispieldatei mit Notepad++ öffnet, findet man heraus, dass die Exporte vom Domain Controller mit UCS-2 Little Endian enkodiert sind (der Zeichensatz steht in Notepad++ unten rechts in der Statusleiste).

Was nun? Ich habe mir kurzerhand ein bash-Script geschrieben, um die Dateien on-the-fly in ein für grep verständliches Format (UTF-8) zu konvertieren:

#!/bin/sh

if [ $# -lt 2 ]
then
	echo "Usage: $0 [extension of files to search] [string to search for in files]"
	exit 1
fi

for i in *.$1
do
	RES=`iconv -f UCS-2LE -t UTF-8 "$i" | grep "$2"`
	RET=$?

	if [ $RET -eq 0 ]
	then
		echo "$RET - $i"
		echo $RES
		echo ""
	fi
done

exit 0

Das Script tut folgendes: Zuerst liest es alle Dateien im aktuellen Verzeichnis aus, welche auf .html enden. In einer Schleife wird nun jede gefundene Datei mittels iconv von UCS-2LE nach UTF-8 konvertiert und an grep weitergepipet. grep sucht im Zeichensalat nach „Enforce password“. Die bash-Variable $? speichert das Resultat dieses Befehls; sprich 0 falls die Zeichenkette gefunden wurde, 1 (oder eine andere Zahl ungleich 0), wenn grep gestolpert ist oder einfach nichts gefunden hat. Ist $RET gleich 0, wird der Dateiname ausgegeben.

Schlussendlich fanden sich in den 150 Dateien gerade mal 6 Stück, welche Passworteinstellungen enthalten. Doch statt dem fehleranfälligen manuellen Geklicke habe ich quelloffene Tools, gepaart mit ein wenig Scripting-Wissen für mich arbeiten lassen.

Gut zu Wissen

Wer die Namen der Zeichensätze nicht auswendig weiss, dem wird unter folgendem Link geholfen:

libiconv

Tags: , , , , , , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 13. Oktober 2012

Wenn man sich bei Arcotel unter Mac OS X 10.7 nicht in das WLAN einloggen kann

… liegt das daran, dass das Login-Fenster des Apple WiFi-Services keine JavaScript-Alerts ausführt resp. anzeigt.

Deshalb muss man sich über den Web-Browser (Safari oder bspw. Chrome) anmelden und den JavaScript-Dialog („Bitte verwenden Sie http://logoff.now, um sich abzumelden“) abnicken. Dann klappt es auch mit dem kostenlosen WLAN für Hotelgäste.

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen