Kategorien
Programmierung

RSS-Feed für öffentliche Facebook-Seiten

Facebook hat den RSS-Feed für öffentliche Seiten am 28. Januar 2015 wie angekündigt eingestellt und ähnelt damit einer modernen, auf Sicherheitsgefühl getrimmten Siedlung: man baut einen großen Zaun ums komplette Areal und achtet peinlich genau darauf, daß man unter sich bleibt.

Das alles wäre kein Problem, wenn nicht – wie vor Jahren schonmal bei Myspace – einige Bands dazu übergehen würden, ihre Neuigkeiten nur noch im „sozialen Netzwerk“ zu veröffentlichen und die Pflege einer eigenen Internetpräsenz weitestgehend einzustellen.

Möchte man weiter mitlesen, so ist als Nicht-Facebook-Nutzer Bastelarbeit angesagt:

Zum einen benötigt man einen Facebook-Account, der über die Facebook-Entwicker-Seite als Entwickler registriert werden muss – zwingende Voraussetzung für diese kostenlose Registrierung ist entweder die Angabe einer gültigen Mobiltelefon-Nummer oder einer gültigen Kreditkarte.

Als Entwickler legt man dann eine App an – Name, Sinn und Zweck sind beliebig, letztendlich benötigt man nur die App-ID sowie den App-Geheimcode, mit deren Hilfe man sich später automatisiert bei Facebook anmelden kann. Solange eine Seite öffentlich ist, reicht ein x-beliebiger Benutzer, um auf die öffentlichen Daten zugreifen zu können.

Das Zauberwort für den Zugriff lautet dann „Graph API“, für die Facebook neben dem kompletten SDK auch eine Online-Hilfe zur Verfügung stellt.

Glücklicherweise muss man das Rad allerdings nicht neu erfinden:

Nachdem die Lieblingssuchmaschine mit den richtigen Begriffen gefüttert wurde, landet man z.B. auf GitHub bei „facebook-json-to-rss„, einem kleinen Skript, das Login sowie die mühevolle Aufgabe der Konvertierung von JSON nach RSS bereits erledigt.

Nach dem Eintragen der App-Daten in die entsprechenden Stellen im Skript kann der Aufruf über das Anhängen des gewünschten Seitennamens

/index.php?page=PageNameHere

erfolgen und liefert die XML-Daten für den RSS-Feed zurück.

In der ursprünglichen Variante benötigt das nur 3.72 KB Skript noch das SDK, das zwar ebenfalls nicht allzu groß ist, aber lediglich zur Anmeldung verwendet wird.

Im Zugriffsschlüssel-Hilfsprogramm kann man sich das App Token der zuvor angelegten App anzeigen lassen und dieses direkt als „$access_token“ im Skript verwenden. Nach Auskommentieren (oder löschen) des SDK-Includes sowie des Token-Abrufs funktioniert „facebook-json-to-rss“ dann auch ohne SDK.

Kategorien
Programmierung

No type library matching „Microsoft Outlook“ found

office64_typelibFunktioniert in der Kombination mit einer 32-bit Microsoft Office-2013-Version die Zeile

use Win32::OLE::Const 'Microsoft Outlook';

problemlos, so wird sie bei einem installierten 64-bit Office mit folgendem Fehler quittiert:

# No type library matching "Microsoft Outlook" found at ...
# Win32::OLE(0.1712): GetOleTypeLibObject() Not a Win32::OLE::TypeLib object at C:/Perl64/lib/Win32/OLE/Const.pm line 49

Eine längere Suche führte schließlich zum entscheidenen Hinweis: bei der 64-bit Installation wird der Schlüssel für die Typelib vom Office-Installer nur als „win64“ gesetzt, Perl aber sucht nach einem „win32“ Eintrag.

Ein Workaround ist somit recht einfach: unterhalb des Registrierungspfads

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\TypeLib

nach dem Eintrag für die „MSOUTL.OLB“ suchen und passend zum „win64“ Key händisch einen „win32“ Key mit gleichem Inhalt erzeugen.

Kategorien
Programmierung

Ruby Gem hinter Proxy installieren

Aus unerfindlichen Gründen ignoriert der Installer für Ruby Gems die Umgebungsvariablen „http_proxy“ bzw. „https_proxy“, stattdessen muß der Proxy in der Kommandozeile angegeben werden:

gem install --http-proxy http://proxy:port name
Kategorien
Programmierung

Einrichten einer 32bit-ODBC-Quelle auf einem 64bit-System

Versucht man auf einem 64bit System mit 32bit Software auf eine ODBC-Quelle zuzugreifen, so erhält man statt der erhofften Daten lediglich eine Fehlermeldung:

connection failed: [Microsoft][ODBC Driver Manager] Der angegebene DSN weist eine nicht übereinstimmende Architektur von Treiber und Anwendung auf. (SQL-IM014)

Auf den ersten, zweiten und dritten Blick bietet Windows auch keine Möglichkeit, die gewünschte Architektur der Datenquelle anzugeben. Der Trick liegt im expliziten Aufruf des ODBC-Datenquellen-Administrators „odbcad32.exe“ im Pfad „C:\Windows\SysWOW64“, auf den standardmäßig kein Link im Startmenü gesetzt wird.

Da die Verwaltungsoberflächen für 32bit und 64bit nicht gekennzeichnet sind, hilft im Zweifelsfall ein Blick in die Prozessliste des Taskmanagers: hat die dort aufgefühte „odbcad32.exe“ den Zusatz „*32“, so ist aktuell die Verwaltung für 32bit-Datenquellen gestartet. Fehlt dieser Zusatz, ist die Verwaltung für 64bit Datenquellen aus dem Verzeichnis „C:\Windows\System32“ aktiv.

Kategorien
Programmierung

Versionsverwaltung mit Fossil

Im privaten- oder Hobbybereich nur selten eingesetzt, kann eine Versionsverwaltung auch hier helfen den Überblick zu behalten. Egal, ob der Umfang über eine Hand voll Dateien oder die Skriptlänge über eine Bildschirmseite wächst – irgendwann führen temporär umbenannte Dateien und ge-zip-pte Versionen mehr zur Verwirrung denn dazu, im Falle eines Falles nochmal die letzte funktionierende Version rekonstruieren zu können.

Ein Blick auf einen der Big Player wie Git  macht allerdings wenig Lust darauf, ein Versionsmanagement einzusetzen: alleine die Installion und Konfiguration wird mit ein bißchen Pech leicht zu einem Unterfangen, das die Größe des eigentlich zu verwaltenden Projekts deutlich übersteigt.

Als schlanke und sowohl einfach zu installierende als auch zu konfigurierende Alternative entpuppt sich Fossil, dessen Installation aus dem Herunterladen einer gepackten Datei besteht mit der dann dach dem Entpacken in einen beliebigen Ordner sofort losgelegt werden kann. Wer es etwas komfortabler haben will, entpackt die Datei irgendwo innerhalb des Suchpfades oder erweitert diesen um das Verzeichnis, in dem die ausführbare Fossil-Datei liegt.
Ein weiterer Vorteil von Fossil liegt darin, daß ein Fossil-Repository lediglich aus einer SQLite-Datenbank besteht, somit also im Bedarfsfall problemlos auf einen USB-Stick, Cloudspeicher (oder sonstwohin) kopiert und an einem anderen Ort weiterverwendet werden kann.

Anlegen eines Repositories

Als erstes sollte im aktuellen Arbeitsverzeichnis ein neuer Ordner angelegt werden, in dem die Fossil-Repositoies abgespeichert werden

D:\work>mkdir fossil

Dann kann ein Ordner für ein neues Projekt angelegt werden, in den dann gewechselt wird

D:\work>mkdir test
D:\work>cd test

und in dem die eigentliche Projektarbeit stattfindet.

Zuerst wird ein neues Repository angelegt. Der Name des Repositories inklusive Dateiendung kann hierbei frei gewählt werden

D:\work\test>fossil new d:\work\fossil\testprojekt.repo
project-id: 5c29b8981d9f5ec0aea2319c2cdb653e8054fcc3
server-id: df7d311a58b698b584fb7066435fd8e9bea19295
admin-user: andreas (initial password is "******")

womit die Vorbereitungen dann auch schon abgeschlossen sind.

Verwenden eines Repositories

Zum Verwenden eines Repositories wird dieses im aktuellen Arbeitsordner geöffnet:

D:\work\test>fossil open d:\work\fossil\testprojekt.repo
project-name: <unnamed>
repository: d:\work\fossil\testprojekt.repo
local-root: D:/work/test/
config-db: C:/Users/andreas/AppData/Local/_fossil
project-code: 5c29b8981d9f5ec0aea2319c2cdb653e8054fcc3
checkins: 0

In der Ausgabe werden nochmals die wichtigsten Aufgaben wie das aktuelle Repository, der aktuelle Arbeitspfad, sowie der letzte Checkin (in diesem Fall noch keiner) angezeigt.

Nun wird zuerst eine Textdatei mit dem Inhalt „Hallo Welt!“ angelegt

D:\work\test>notepad hallowelt.txt

und diese dann dem Repository hinzugefügt

D:\work\test>fossil add hallowelt.txt
ADDED hallowelt.txt

Sollen gleich mehrere Dateien hinzugefügt werden, kann dies mittles „add .“ erfolgen, was rekursiv den Inhalt des aktuellen Ordners inklusive eventuell vorhandener Unterordner dem Repository hinzufügt.

Nun wird eine zweite Textdatei mit dem Inhalt „Hallo zweite Welt!“ angelegt und ebenfalls dem Repository hinzugefügt:

D:\work\test>notepad hallowelt2.txt
D:\work\test>fossil add hallowelt2.txt
ADDED hallowelt2.txt

Einen Überblick über die aktuellen Änderungen erhält man jederzeit über das „status“-Kommando

D:\work\test>fossil status
repository: d:\work\fossil\testprojekt.repo
local-root: D:/work/test/
config-db: C:/Users/andreas/AppData/Local/_fossil
ADDED hallowelt.txt
ADDED hallowelt2.txt

Damit die Arbeit auch ins Repository übernommen wird, muß am Ende des Arbeistschritts (oder Arbeitstages) ein „commit“ erfolgen, wobei als Parameter noch ein Kommentar zur späteren Identifizierung übergeben werden sollte.

D:\work\test>fossil commit -m "Erste Version"
New_Version: 0dbde9bf70

Anschließend kann das Repository geschlossen werden

D:\work\test>fossil close

Die nächsten Schritte

Am nächsten Tag (oder wann immer die Arbeit weitergeht) wird das Repository wieder mittels „open“ geöffnet:

D:\work\test>fossil open d:\work\fossil\testprojekt.repo
project-name: <unnamed>
repository: d:\work\fossil\testprojekt.repo
local-root: D:/work/test/
config-db: C:/Users/andreas/AppData/Local/_fossil
project-code: 5c29b8981d9f5ec0aea2319c2cdb653e8054fcc3
checkout: 0dbde9bf708a2a3e8e8c2eb00344b25f712f679d 2015-03-05 19:30:16 UTC
leaf: open
tags: trunk
comment: Erste Version (user: andreas)
checkins: 1

Nun wird die zweite Datei gelöscht und der Inhalt der ersten Datei in „Hallo Welt eins und zwei!“ geändert.

D:\work\test>del hallowelt2.txt
D:\work\test>notepad hallowelt.txt

Anschließend wird der Status des Repositories überprüft

D:\work\test>fossil status
repository: d:\work\fossil\testprojekt.repo
local-root: D:/work/test/
config-db: C:/Users/andreas/AppData/Local/_fossil
checkout: 0dbde9bf708a2a3e8e8c2eb00344b25f712f679d 2015-03-05 19:30:16 UTC
leaf: open
tags: trunk
comment: Erste Version (user: andreas)
EDITED hallowelt.txt
MISSING hallowelt2.txt

Der Status „MISSING“ weist darauf hin, daß Fossil das Fehlen der Datei „hallowelt2.txt“ bemerkt hat, der Schritt aber innerhalb des Repositories noch nachgeholt werden muß

D:\work\test>fossil delete hallowelt2.txt
DELETED hallowelt2.txt

Nun wird eine dritte Datei erzeugt

D:\work\test>notepad hallowelt3.txt

Im Repository noch fehlende Dateien können mit Hilfe des „extra“-Befehls aufgelistet werden

D:\work\test>fossil extra
hallowelt3.txt

weshalb die Datei noch dem Repository hinzugefügt wird:

D:\work\test>fossil add .
ADDED hallowelt3.txt

Am Ende des zweiten Tages wird das Repository wieder geschrieben und anschließend geschlossen

D:\work\test>fossil commit -m "Erste Bearbeitung"
New_Version: 50bacbbe93
D:\work\test>fossil close

Weiterführendes Arbeiten

Einen kurzen Überblick über die aktuell gespeicherten Versionen kann jederzeit auf der Kommandozeile mit Hilfe des „timeline“-Befehls erzeugt werden

D:\work\test>fossil timeline --repository d:\work\fossil\testprojekt.repo
=== 2015-03-05 ===
19:37:01 [50bacbbe93] Erste Bearbeitung (user: andreas tags: trunk)
19:30:16 [0dbde9bf70] Erste Version (user: andreas tags: trunk)
+++ no more data (2) +++

Deutlich komfortabler ist allerdings die Übersicht über den eingebauten(!) Webserver von Fossil, der mittels

D:\work\test>fossil ui d:\work\fossil\testprojekt.repo
Listening for HTTP requests on TCP port 8080
Launch webbrowser: start http://localhost:8080/ &
Type Ctrl-C to stop the HTTP server

gestartet werden kann. Fossil öffnet anschließend mit dem Browser die Startseite des Repositories, auf dem komfortabel sowohl durch die einzelnen Stände navigiert wie auch Änderungen zwischen einzelnen Dateien genauer beleuchtet werden können.

Im Browser eröffnet sich dann auch die kompette Mächtigkeit, die in diesem „kleinen“ Werkzeug liegt, denn falls das Projekt doch mal größer werden sollte, bringt Fossil neben einer Benutzerverwaltung auch gleich ein Ticket-System sowie ein eingebautes Wiki mit.