Skip to content

Database Administration for Diaspora pods (mongo shell)

One advantage of running your own Diaspora pod is the fact, that you have access to the MongoDB which is used to store your Seed. This allows you to do some functions which do not yet have a UI (for example canging the E-Mail address of a user) or which is required to work around alpha hickups (deleting duplicate requests). The mongo shell is a client to the mongodb, which can evaluate JavaScript expressions. It has some macros ("use", "show" and "help"), the other commands are typically JavaScript methods. First you assign a Database Object to the variable "db", you can use that with "use". In the case of Diaspora, the database is named "diaspora-ENVIRONMENT". If you start mongo shell, it will start with the database "test", but you can list all existing databases, and pick one:
$ mongo
connecting to: test
> print('hello JavaScript!')
hello JavaScript!
> show dbs
admin
diaspora-development
local
magent
> use diaspora-development
switched to db diaspora-development
> db
diaspora-development
> show collections
aspects
comments
contacts
invitations
people
posts
requests
system.indexes
users
Note: you can specify non-existing databases and collections, they are initially empty but will be created, so do not misstype. You can use db.collection.help() to see the available methods on a collection object. find() is used to search and display documents. If you specify no parameters it will return a cursort with all documents. The first parameter can be a list of filter criterias, and the second parameters a list of properties to return. mongo shell will iterate and print the first ten entries of a cursor automatically:
> db.users.find({},{username:1,email:1})
{ "_id" : ObjectId("4cf1..02"), "username" : "bernd", "email" : "bernd-09@eckenfels.net" }
{ "_id" : ObjectId("4cf1..2d"), "username" : "mela", "email" : "mela@mela.de" }
{ "_id" : ObjectId("4cf2..3b"), "username" : null, "email" : "xx@example.com" }
Here you can see, that this pod has 3 users (seeds), two are already established, the third is a pending invite (token). To change the e-mail address of a existing user you can assign the document to a variable, change the desired property and update the collection. For this we use the findOne method, which does return the first match instead of a cursor:
> var bernd = db.users.findOne({username:"bernd"})
> print(bernd.email)
bernd-09@eckenfels.net
> bernd.email = "bernd-10@eckenfels.net"
> db.users.save(bernd)
> db.users.findOne({username:"bernd"}).email
bernd-10@eckenfels.net
The above will not create a new document, since the variable "bernd" contains the property _id, and therefore it will update the existing entry in the collection. You need to know that db.users contains the actual users of the pod (i.e. the seeds) and db.people contains a copy of the public part of other seeds (if you received a request from them, or if you added them to an aspect).
> db.requests.findOne()
{
        "_id" : ObjectId("4cf1...a3"),
        "sent" : true,
        "from_id" : ObjectId("4cf1...03"),
        "to_id" : ObjectId("4cee7...a9"),
        "into_id" : ObjectId("4cf1...9d")
}
> db.people.findOne({_id:ObjectId("4cf1...03")}).diaspora_handle
bernd@pod.eckenfels.net
> db.people.findOne({_id:ObjectId("4cee7...a9")}).diaspora_handle
daniel...@joindiaspora.com
> db.aspects.findOne({_id: ObjectId("4cf1...9d")}).name
Piraten
As you can see I sent a request to "Daniel", inviting him to my aspect "Piraten", but he has not yet responded. Hope this helps you to find your way around in the object model of Diaspora. I recommend you read the MongoDB tutorial to better use the mongo shell, and check the JS API documentation for the details.

Apache als Reverse Proxy für Diaspora

Diaspora* die Software für verteilte soziale Netze wurde in einer Alpha Version veröffentlicht. Bei Diaspora ist vorgesehen dass es keine zentrale Plattform gibt, sondern Benutzer Ihre eigenen Server - Pods genannt - betreiben. Da es aktuell auch auf dem offiziellen pod von joindiaspora.com keine Benutzer freigeschalten werden, ergibt es Sinn einen eigenen Server aufzusetzen. Im Diaspora Wiki findet man dazu eine Anleitung. Allerdings beschreibt diese nicht, wie man in einer Produktivumgebung die Ruby Anwendung mit einem Webserver versieht, der die Anfragen auf Port 80 entgegennimmt (und statische Assets direkt ausliefert). Ich habe dazu einen virtuellen Host mit Apache eingerichtet, die Konfiguration sieht so aus:
LoadModule proxy_module ...
LoadModule proxy_http_module...

<VirtualHost *>
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/example.com/pod/data/public
    ServerName pod.example.com
    ErrorLog /var/log/httpd/pod.example.com-error_log
    CustomLog /var/log/httpd/pod.example.com-access_log combined

    Alias /uploads/ "/var/www/example.com/pod/data/public/uploads/"
    Alias /images/ "/var/www/example.com/pod/data/public/images/"
    Alias /stylesheets/ "/var/www/example.com/pod/data/public/stylesheets/"
    Alias /javascripts/ "/var/www/example.com/pod/data/public/javascripts/"

    ProxyPass / http://pod.example.com:3000/

  <Directory "/var/www/example.com/pod/data/public">
    Options Indexes FollowSymLinks MultiViews IncludesNoExec ExecCGI
    AllowOverride All
    Order Allow,Deny
    Allow from All
  </Directory>
</VirtualHost>
D.h. Diaspora ist im Verzeichnis /var/www/example.com/pod/data installiert, und der Ruby Server "thin" ist erreichbar auf dem Port 3000. Falls es jemand testen will, mein Diaspora Seed ist damit unter bernd@pod.eckenfels.net erreichbar.

WLAN to go (Trekstor Portable WLAN HotSpot)

Vor einiger Zeit habe ich mich bei der PR Agentur von Trekstor beschwert, dass diese mir als Blogger zwar unverlangt Pressemitteilungen senden, aber ohne Testgeräte ich nicht viel berichten kann und will. Jetzt habe ich überraschend ein Testgerät von Trekstor erhalten, und will dies hier gerne besprechen: In einem sehr kleinen Paket habe ich den "Trekstor Portable WLAN Hotspot" für einen 2-wöchigen Test erhalten. Ein Gerät in der Größe eines Mobiltelefons das als WLAN Hotspot eingesetzt werden kann, und dabei die Verbindung mit dem Internet mittels eingebauter UMTS Funktion herstellt. Es ist also ein UMTS WLAN Router, benötigt dabei aber keinen externen USB Stick, die SIM-Karte des Mobilfunkanbieters wird direkt in das UMTS fähige Gerät eingelegt. Bis zu 5 WLAN Geräte können sich mit dem Hotspot verbinden, und dieser stellt dann die Verbindung zum Internet via UMTS/HDSPA (3G) oder GSM her. Zusätzlich hat das Gerät einen Mini-USB Anschluss über das es geladen werden kann. Über diesen USB 2.0 Anschluss kann auch ein weitere Rechner (Via Hi-Speed USB 2.0 Netzwerk Interface Treiber) angebunden werden. Der kleine Hotspot kümmert sich dabei um NAT, Firewall, hat einen DNS Proxy und DHCP Server eingebaut. Konfiguriert wird das Gerät über den Web Browser. Die Knöpfe am Gerät beschränken sich auf ein Minimum (Ausschalter, WLAN Schalter, Manueller Connect). Das Trekstor Gerätes ist Baugleich mit dem E5 von Huawei (dies wird auch nicht versteckt, das Logo ist auf der Rückseite zu sehen). Das Gerät ist Netlock frei, konnte in meinem Test mit Prepaid Standard SIM Karten von blau.de ebenso wie mit einem UMTS Datenvertrag von O2 genutzt werden. Es unterstützt UMTS im 2100MHz Band sowie Quad-Band GSM (EDGE, GPRS) 850/900/1800/1900MHz - ist also für Reisen geeignet. Das WLAN Modul kann im 2,4GHz Band die Kanäle 1-13 nutzen. (Es gibt bei den Europäischen Modellen eine Ortseinstellung bei der man auch "Japan" auswählen kann, diese schaltet aber keinen weiteren Kanal frei). Das Gerät unterstütz WPS, konnte ich aber mangels Gegenstelle nicht testen. Diese Funktion klingt aber kaum einfacher als das abtippen eines Passwortes von der Gehäuserückseite.
Die Anwendungsfälle sind vielfältig. Als Besitzer von Internet Tablets oder Game Consolen die keine UMTS-Stick Möglichkeit haben ist das Gerät auf jeden Fall eine praktische Option. Weiterhin kann das Gerät von kleinen Reisegruppen oder Arbeitsgruppen mit Note- oder Netbooks genutzt werden um einen (teuren) Internetzugang gemeinsam zu benutzen. Es ist damit Ideal geeignet die Wartezeit am Flughafen zu überbrücken ohne dass jeder der beteiligten einen eigenen Datentarif haben muss (einige Provider erlauben nicht den Betrieb von mehreren Geräten per NAT, dies muss im Einzelfall geprüft werden). Praktisch an dem Prinzip der WLAN Anbindung ist, dass in der Regel alle Geräte ohne spezielle Treiber die Vermittlungsfunktion des Gerätes nutzen können. Es wird dabei WLAN nach 802.11 b/g mit WPA und oder WPA2. Der WLAN Hotspot wird mit einem austauschbaren 3.7 V, 1500 mAh Akku geliefert. Es kann über USB vom Rechner geladen und mit Strom versorgt werden. Bei meinen Tests hatte es Laufzeiten von über 4h. Es kann dabei auch von USB Steckernetzteilen oder externen Akkus (Test mit einem Phillips Reserveakku, der zum Beispiel von iPhones nicht akzeptiert wird, war erfolgreich). Als zusätzliche Funktion bietet das Gerät übrigens noch einen MicroSD Kartenslot in der Speicherkarten bis zu 32GB eingesteckt werden können. Diese können dann entweder über den USB Anschluss benutzt werden, oder der Zugriff auf den Inhalt steht über den Web Server des Geräts zur Verfügung. Generell ist das Gerät und die Software gut durchdacht, es können mehrere Mobilfunk Profile angelegt werden; mutige Zeitgenossen können die Mobilfunk-PIN im Gerät speichern; wenn Roaming erkannt wird vermeidet das Gerät automatisch Online zu gehen. Bei der Auslieferung hat das Gerät einen eindeutigen Verschlüsselungskey (der auf der Geräterückseite aufgedruckt ist). Die NAT (ALG, DMZ) und Firewall Funktionen können mit guten Home Routern locker mithalten. Das Gerät wird mit einem kurzen Mini-USB nach USB Kabel geliefert (aber keinem Netzteil) und einem Quick-Start Guide der keine der Optionen der Software auch nur ansatzweise erklärt. Er ist aber ausreichend um die erste WLAN Verbindung mit dem Gerät aufzubauen (Ich empfehle als einer der ersten Aktionen den WPA2 Modus zu aktivieren). Ja, ich kann das Gerät fast nur loben, auf der Seite der Nachteile sehe ich vor allem den relativ hohen Preis (wobei es im direkten Vergleich mit anderen Geräten in der Leistungsklasse mit 139,- Eur günstig abschneidet), kleinere Lieblosigkeiten in der recht technischen Web Oberfläche (zum Beispiel die Deutsche Übersetzung "x Tag x Stunden x Protokoll") und die doch recht knappe Begrenzung auf 5 WLAN Clients. Das OLED Dot Display ist recht übersichtlich aber unter vielen Lichtbedingungen kaum abzulesen (spiegelt). Dem Gerät fehlt auch eine VPN Funktion, allerdings sehe ich das nicht als Nachteil an, ein VPN sollte besonders in diesem Einsatzszenario (WLAN) auf dem Endgerät (Notebook) terminiert werden. Für den stationären Einsatz würde ich das Gerät nicht empfehlen, ebenfalls nicht zur (Not)Versorgung von Veranstaltungen mit Internet (wegen der Anzahl der Clients und den fehlenden externen WLAN Antennen). Aber als Reisebegleiter macht es eine sehr gute Figur. Ich habe keine Erfahrungen mit der Stabilität des Gehäuses, beim Anfassen traut man dem Gerät keine große Robustheit zu. Das Gerät ist auf jeden Fall im Vergleich zum Mitbewerb (D-Link MyPocket, Novalink MiFi) sehr kompakt.

iPhone 3g Soft-Unlock

Einstellungen / Allgemein / Info / Modem FW
Das DevTeam kündigt den Soft-Unlock für das iPhone 3G zum 1.1.2009 an. Damit werden sich dann die Sim-Lock Sperre umgehen lassen, falls man die Firmware des Baseband Moduls noch nicht geupdated hat. Bis einschliesslich 2.11.07 soll eine entsprechende Anpassung möglich sein. Das ganze läuft unter dem Codenamen "Yellowsn0w". Eine Video Demo gibt es auf Qik. Aktuell werden die Neuerwerbungen noch mit 2.11.07 ausgeliefert, bei einem regulären Update auf die 2.2 Firmware per iTunes wird allerdings das Baseband Modul auf die 2.28.00 gebracht, hierfür kann der Soft Unlock nicht mehr verwendet werden. Deswegen warnt das Dev-Team auch vor so einem Update. Auf dem CCC gibt es auch eine Session zum Thema "Hacking the iPhone". Deutsche (T-Online) iPhones scheinen übrigens als Modell Nummer z.B. die MB497DN zu haben. Eine Liste der Modell Nummern gibt es beim Apple Support. Die iPhones scheinen aber alle mehrsprachig zu sein, das amerikanische Modell dessen Versionsinfo ich hier zeige war auch nach dem ersten Anschliessen an ein deutsches iTunes deutschsprachig (ohne Update).

Terminkonflikt

Heute finden an der Uni-Karlsruhe gleich zwei interessante Termine statt. Die Java User Group Karlsruhe musste deswegen in den Raum -102UG in der Informatik Fakultät ausweichen, dort gibt es um 19:15Uhr (-21:15) einen Vortrag von Dr. Patrick Schemitz (Netpioneer GmbH) zum Thema Grundladen [Web] Security Auditing. In -101UG spricht Dr. York Sure von SAP Research im Rahmen der GI/ACM Regionalgruppe Karlsruhe über Internet of Services. Dabei geht es um den Einsatz von Semantischen Technologien bei der Vermarktung von Internet Services. Beide Termine finden sich auf dem IT-Kalender des Stadtblog KA. Dort findet sich auch eine Ankündigung für Morgen: Gründung des "Verein der Karlsruher Software-Ingenieure" um 16:00-18:00 am FZI. Näheres dazu in der Presseerklärung von FZI, KIT, adrena objects, 1&1, SAP und HsK. Ich werde wohl bei der JUG-KA vorbeischauen heute Abend und mir Morgen die Info Veranstaltung ansehen.

In the cloud

Dark Clouds Im Gegensatz zum Begriff Grid Computing ist das Thema Cloud computing etwas eindeutiger definiert. Es geht darum IT-Resourcen (Rechner oder Laufzeitumgebungen) aus der Wolke des Internets einzukaufen, also die Anwendungen remote zu betreiben. Die bekanntesten Vertreter dieses Genres sind Amazon's EC2 (Elastic Cloud Computing - eine Serverfarm auf der man Xen Images auf Stundenbasis laufen lassen kann) und Google App Engine (eine Python Web Server umgebung für Web Anwendungen). Beide haben grade aktuell Neuigkeiten zu vermelden: Google App Engine ist nun offen für alle Entwickler (die kostenfreie Einsteigerversion erfordert eine SMS Registrierung, und kann auch mit Google Apps for Domains zusammenarbeiten). In der Public Beta des Amazon Cloud Services werden bald persistente Volumes möglich sein: damit sind dann auch klassische Enterprise Anwendungen einfach zu betreiben und nicht nur Compute Jobs (Video Rendering) oder replizierte Datenbanken. In zwei kommenden Artikel will ich beide Dienste etwas näher vorstellen, und meine Bewertung dazu abgeben wo und wie das Utility Computing funktionieren kann.

Ich habe ein De ja vù

Früher gab es kostenlose PDF Viewer die leichtgewichtig waren, und auf den meisten Plattformen verfügbar. PDF war ein einfaches Austauschformat. Zwar immer umstritten (Patente, Verschlüsselung, Freie Implementierungen, Versionen, Formulare, Scripte, etc) aber doch sehr erfolgreich (und benutzbar!). Inzwischen ist der Adobe Reader zum Marketing-Vehikel von Adobe geworden. Bilder Galerien oder Web Konferencing Funktionen sind mit drin. Ständige nervige Auto-Updates und Taskleistenpest. Der Plugin ist generell langsam und instabil. PDF Inline Aufrufe klappen entweder Firefox oder im IE nicht (oder bei beiden nicht). Nun ja, ein Mitbewerber ist XPS, aber das ist Microsoft, da kann man auch gleich .doc Files nehmen (was ich sogar bevorzuge!). Das ist ganz schön deprimierend. Aber es geht noch schlimmer! Am Horizont ist ein neues Format angetreten, das ursprünglich aus der Imaging/Scan Ecke kommt und hocheffiziente Komprimierung von Bilddaten anbietet. Neben dem Speichern (und schnellen Abrufen) von Scans kann man es auch für Bilderreiche Publikationen verwenden. Aber irgendwie habe ich den Eindruck Djvu hat den Sprung von "kleinem nützlichen Format" zum "unbenutzbaren Tool" schon vor dessen Verbreitung gemacht. Jedenfalls habe ich grade versucht auf meinem XP ein DJVue Demo Dokument zu öffnen. Zuerst wollte Firefox ein Plugin herunterladen, hat mich dann auf eine manuelle Plugin Installation umgeleitet und diese mit einem 404 beendet. Dann habe ich die Java Version probiert, aber diese stürzt mit einer Security Exception ab (wenn man ein Applet von einem Host läd, dann sollte es auch nur von dort Daten anfordern, liebe Entwickler). Gut, dann halt der Installer von Lizardtech. Ergebnis: der Auto Installer ist nur für IE verfügbar und die Stand-Alone Installation (6MB) bricht mit einem "RPC Server läuft nicht" Fehler im Installer ab. Gut also WinDjview 0.5 heruntergeladen und auf die Foto Demo Seite gegangen. Ja toll, aber wo bekomme ich dort das Dejavu File das ich für den Viewer benötige? Nun gut dann halt einen der Artikel probiert. Dort den .djvu Link angeclicked, und was passiert? Firefox kennt den Viewer nicht - er hat sich nicht mit der File Extension assoziiert. Also Open with.. Other... ah endlich. Aber... ihh.. das ist ja hässlich - da muss man ja mehr als 100% auswählen (in meinem Alter). Also als PDF Ersatz für Texte kann man das vergessen. Kein Anti Aliasing, kein Cleartype, keine Vectorfonts und überhaupt (ist ja auch nicht die Domäne des Formats). Eigentlich wollte ich es ja für Bilder probieren. Ok, also die URL eines Demo Files aus der Seite extrahiert und angeclicked im Browser. Jetzt öffnet sich DeJaView als Anwendung und zeigt rassend schnell 220 leere Seiten an. Äh? Erst beim Click auf "Page Information" kommt dann ein Popup: "Error decoding page". Ok... dann lassen wir es halt.

Gefahren des DRM

Digital Rights Management (DRM) ist eine Methode Abspiel- und Kopier Möglichkeiten von Medien einzuschränken. Inhaltsanbieter sagen sie können damit günstigere Preise machen indem die Rechte auf ein vom Kunden benötigtes Maximum eingeschränkt werden. Kunden hingegen fühlen sich dadurch insbesondere mehrfach abgezockt. So oder so hat DRM große Probleme, weil dem Kunden (dem Käufer) einiges an Rechte weggenommen wird. Das kann dann so weit gehen, dass man gekaufte Songs nicht mehr abspielen kann, weil die DRM Server nicht erreichbar sind, oder keine Geräte mehr das Verfahren unterstützen. Microsoft hat den DRM Skeptikern einst versucht mit Ihrer "Plays for Shure" Campagne zu entgegnen. Ironischer weise schaltet Microsoft diesen Dienst jetzt ab, was dazu führt dass man die gekauften Medien nicht mehr von einem Gerät zum anderen übertragen kann (sondern nur noch auf den 5 registrierten Geräten). Wieder einmal zeigt sich, dass offene Formate eine sichere Zukunftsinvestition sind. Via Kris. Update: auch im Spiegel.