Yakiyo - offenes Microblogging


Yakiyo ist eine offene Microblogging-Seite. Nach einer Registrierung kannst Du kurze Texte (140 Zeichen oder weniger) über Dich selbst, wo Du bist, was Du tust oder zu was auch immer posten. Du kannst auch die Texte Deiner Freunde oder anderer interessanter Leute abonnieren und diese im Web oder per RSS-Feed verfolgen.

Yakiyo

Für was ist Microblogging überhaupt gut?


Hand aufs Herz: Das erste Mal, als ich von Twitter (und damit Microblogging) hörte, dachte ich nur, was ist das für ein Quatsch. Kurze Nachrichten, das meiste total uninteressant. Nur noch mehr Dinge, die am Tag bearbeitet werden wollen. Aber genau das war mein Fehler: Ich dachte, das wäre wie eMail, nur eben mit sehr kurzem Text. Klingt wirklich nach etwas, was die Welt nicht braucht.

Aber Microblogging ist sehr nützlich. Dazu ein paar Beispiele:

  • Diese kleinen Texte ("mache gerade das oder jenes") sind für die Welt nicht interessant, für Freunde und Bekannte dagegen schon. Somit eignet sich Microblogging perfekt, um mit Freunden und Bekannten in Kontakt zu bleiben. Ein Video auf bleeper.de erklärt das Prinzip ganz gut.
     
  • Es gibt sehr viele Links, die man gern teilen würde. Videos auf YouTube, Musik, Texte, Nachrichten, was auch immer. Bisher mussten ich solche diese Links per Mail versenden und damit die Inbox meiner Mitmenschen verstopfen. Abgesehen vom großen Aufwand, jedesmal eine Mail zu schreiben, waren die meisten nicht begeistert, 10 Mails oder mehr von mir zu bekommen. Außerdem sind Mails für wichtige Dinge vorgesehen. Nicht unbedingt Links zum neuesten Katzen-Video auf YouTube. Mails müssen bearbeitet werden. Ich muss eine Mail anschauen und entscheiden, was ich damit mache, auch wenn es nur "Löschen" ist. Das kostet Zeit und manchmal auch Nerven.
     
  • Ein anderer Aspekt sind News und Neuigkeiten: Dafür hat sich RSS eingebürgert, das heißt, interessante Seiten zu abonnieren. Das funktioniert gut, aber - wie auch bei Mails - ich muss jeden Eintrag anschauen. Auch das kostet Zeit. Ich habe weit über 100 Seiten abonniert in meinem News-Reader. Auch hier sollte das eigentlich für wichtige Dinge reserviert sein, die ich nicht "verpassen" möchte.

Hier ist Microblogging die perfekte Lösung: Diese kurzen Nachrichten sind für Statusmeldungen ("ich mache gerade XY") oder kurze Links perfekt. Und wenn ich mal ein paar davon nicht mitbekomme, verpasse ich nichts. Auf der anderen Seite kann ich so viele interessante Sachen erfahren. Fundstücke im Web von anderen, aber abgestimmt auf meine Interessen. Nutzt man nun noch eines der vielen Programme, die diese News als kleinen Hinweis auf dem Desktop anzeigen, entfällt auch das manuelle Nachsehen auf der Webseite. Dazu weiter unten mehr.

Für weitere Informationen sei hier auf die Yakiyo-Hilfe verwiesen.

Warum nicht Twitter?


Der bekannteste Vertreter von "Microblogging" ist Twitter, also warum noch so eine Seite? Nun, Twitter ist zwar der große Hype bei dieser Sache, aber Twitter ist ein zentrales System. Das heißt, alle meine Daten liegen dort. Fällt Twitter aus, ist der Dienst weg (und Twitter hat relativ oft Probleme). Das Internet ist deshalb so erfolgreich, weil es dagegen ein dezentrales Netz ist. Es gibt viele verbundene Knoten, und fällt einer davon aus, funktioniert der Rest trotzdem noch.

Für ein dezentrales System brauchts aber auch die richtige Software, und die gibt es für den Bereich Microblogging in Form von StatusNet. Es gibt schon etliche StatusNet-Seiten, aber umso mehr, umso besser. Der Clou ist, dass auch Nutzer von anderen Seiten abonniert werden können. So ähnlich wie bei Mails: Man findet irgendwo sein zu Hause, kann aber an jede andere Instanz verschicken und auch empfangen. Das ist das geniale, was dieses System so robust macht. Und mit StatusNet ist genau das im Bereich des Microblogging ebenfalls möglich (und Twitter somit überlegen).

Leider unterstützt Twitter als Platzhirsch unter allen Plattformen diese "über-die-Grenzen-hinweg"-Abonnements natürlich nicht, sondern ist (wie die meisten proprietären Systeme) in sich geschlossen. Yakiyo hat aber eine integrierte Twitter-Brücke. Das heißt, Du kannst Deinen Account bei Yakiyo mit einem Account bei Twitter verknüpfen (siehe ganz unten). Dann werden Tweets (=Nachrichten auf Twitter) in Yakiyo importiert. Und Nachrichten, die Du in Yakiyo absendest, werden auch bei Twitter veröffentlicht. Ähnlich funktioniert das auch mit Facebook. So können auch Freunde, die bei Twitter oder Facebook sind, mit Dir in Kontakt bleiben.

Desktop-Integration über spezielle Programme


Um den Zugriff noch komfortabler zu gestalten, kann man Programme (Clients) einsetzen. Dann braucht man nicht die Webseite zu verwenden, sondern kann diese Nachrichten sehr schön im eigenen Desktop integrieren. Ubuntu hat dies beinahe perfektioniert: Hier ist das Programm "Gwibber" vollständig integriert. Für Windows bietet sich z.B. Spaz an (komischer Name).

Hier ein Beispiel, wie ein Yakiyo-Account in Ubuntu integriert werden kann:
Zuerst öffnest Du das Fenster "Nachrichtenkonten".

Ubuntu Nachrichtenkonten


Dort legst Du einen neuen Account für "StatusNet" an und trägst dort Deine Yakiyo-Daten ein. Das sieht dann z.B. so aus:

Ubuntu Nachrichtenkonten 2


In das Feld Domain kommt "https://yakiyo.net", wie auf dem Screenshot. Um in Zukunft Hinweisfenster zu bekommen, musst Du in noch in den Nachrichteneinstellungen (aufrufen über System -> Einstellungen -> Nachrichteneinstellungen) das Häckchen bei "Nur Nachrichten mit Erwähnungen anzeigen" weg machen:

Ubuntu Nachrichtenkonten 3


So sehen dann die Hinweise aus:

Ubuntu Hint
Noch ein Hinweis: Sollte der Abruf nicht klappen, hilft das Ausführen von sudo update-ca-certificates im Terminal.

Unter Windows dagegen bietet sich wie gesagt das Programm Spaz an. Das sieht so aus:

Windows Spaz


Spaz zeigt auch Hinweise an:

Windows Spaz Hinweis


Die Einrichtung ist auch relativ simpel. Spaz benötigt Adobe Air, also musst Du das zuerst installieren. Du kannst es bei Adobe herunterladen. Wenn Adobe Air installiert ist, kann Du auf der Spaz-Webseite das Programm über den Button "Install Now" installieren.

In Spaz musst Du Deinen Account so eintragen:

Windows Spaz Settings


Achte auf die richtigen Adressen.

Ein anderes Programm wäre noch twhirl. Dort muss beim Erstellen lacon.ia gewählt werden und als Name NAME@yakiyo.net angegeben werden. Das scheint aber keine verschlüsselte Verbindung zu unterstützen (deswegen verwende ich Spaz).

Nachrichten per Mail und Jabber posten


Yakiyo untersützt auch das Einschicken von Nachrichten über Mail und XMPP (Jabber). Beides musst Du in Deinem Profil aktivieren, wenn Du diese Funktionen nutzen willst.

Bei Aktivierung der Mail-Option wird Dir eine komische Mail-Adresse in der Form JDHFUFHDJKDHS@yakiyo.net angezeigt. Wenn Du von Deiner bei Yakiyo registrierten Adresse eine Mail an diese Adresse schickst, wird diese Nachricht umgehend veröffentlicht. Dabei ist der Betreff egal und die Nachricht wird nach 140 Zeichen abgeschnitten.

Das Posten über Jabber (ein Chat-Protokoll, z.B. GTalk von Google verwendet das) wird in der Yakiyo-Hilfe zu Instant Messaging beschrieben.

Nutzer auf Yakiyo abonnieren


Das ist sehr einfach: Rufe das Profil der Person auf. Dort ist ein Button "Abonnieren".

Das Profil findest Du z.B. über die Suchen-Funktion.

Mein Profil ist unter http://yakiyo.net/skomli. So kannst Du mich z.B. einfach abonnieren.

Das Abonnieren von Nutzern anderer Dienste


Um Nutzer anderer StatusNet-Seiten zu abonnieren, gehts Du so vor. Du suchst Dir das Profil der anderen Person. Genau diese Adresse, die nun in der Adressleiste des Browsers stehst, brauchst Du. Also diese kopieren und dann Dein Profil auf Yakiyo aurufen. Dort findest Du in der rechten Seitenleiste unter "Abonnements" den Button "Remote". Dort trägst Du diese Adresse ein und bestätigst das noch. Das wars.

Remote


Andere, interessante StatusNet-Seiten sind beispielsweise folgende (es lohnt sich, dort nach interessanten Leute zu suchen):


Bei Twitter ists etwas anders: Dort folgst Du einfach in Twitter den gewünschten Leuten. Diese Nachrichten werden in Yakiyo importiert, sofern Du Deinen Yakiyo-Account mit Deinem Twitter-Account verknüpft hast. Um das zu tun, klickst Du in Yakiyo auf "Verbinden" und dann auf "Twitter".

Twitter-Verbindung

Zimbra Collaboration Suite (Open Source Edition)


Viele Jahre habe ich meinen eigenen Mail-Server betrieben. Das war ein unter Linux relativ normaler Stack, bestehend aus Postfix, Courier bzw. später Dovecot, Clamav, Spamassassin, Amavis etc. Mit virtuellen Usern (gespeichert in MySQL). Ich würde sagen, das übliche. Als Frontend kam meist Thunderbird oder Opera Mail über IMAP zum Einsatz oder - für den Zugriff unterwegs - Webmail. Das Webmail war anfangs Squirrelmail, später dann Roundcube.

Als Google Apps rauskam, hatte ich das auch mal für ca. 3 Monate für ein paar meiner Domains eingesetzt. (Wer das nicht kennt: Das ist praktisch GMail, Calendar etc. mit der eigenen Domain statt der von Google.) Aber mir behagte nicht, dass alle meine wichtigen Daten irgendwo bei Google liegen. Ist vielleicht Quatsch, aber für meine Daten bin ich gern selbst verantwortlich. Also bin ich wieder zurück zum eigenen Server. Aber das Webinterface von GMail hat mich seit damals nicht mehr losgelassen. So ein fortschrittliches Arbeiten mit dem Medium Mail hab ich sonst nirgends gesehen. Schon allein die Tagging-Funktionalität, die Art der Anzeige von Konversationen usw. Das ist mit Thunderbird so einfach nicht zu machen.

Immer wieder hab ich mich umgesehen nach einer Möglichkeit, dass auch in dieser Art hinzubekommen (ohne 1000 Addons in Thunderbird installieren zu müssen). Einfach musste es dabei aber sein, da auch die anderen Mail-Nutzer bei mir davon profitieren sollten - und die interessieren sich alle nicht sonderlich für IT. Thunderbird mit Addons anpassen geht da schon deutlich zu weit.

Die Lösung für dieses Dilemma: Die Zimbra Collaboration Suite. Die Open-Source-Edition ist kostenlos. Es fehlen zwar einige Funktionen (kein Sync mit Smartphones, kein Rebranding etc.), aber es kommt nicht nur ans Google-Angebot ran, es übertrifft dieses IMHO sogar (bis auf diese paar fehlenden Funktionen, siehe Produktvergleich). Alles, was man sich wünschen kann, in einer Hand: Mail, Adressverwaltung, Kalender, ToDo-Liste, Notizen. Und das auf einem eigenen Server!

Seit einiger Zeit nun läuft mein alter Mail-Server nicht mehr. Wir sind alle umgezogen auf einen anderen Server, der die Zimbra Collaboration Suite fährt. Zuerst war ich skeptisch: Zimbra ist ein All-in-One-Paket. Alle Software, jeder einzelne Server (Apache, Postfix etc.), wird mitgeliefert und nicht aus den Paketquellen installiert. Solch ein All-in-One-Paket ist meist einfach zu installieren, aber die Hölle bei der Fehlersuche. Und es ist schwierig bis unmöglich, so genau an jeder einzelnen Schraube des Systems zu drehen, wie das bei einer "herkömmlichen" Einzelinstallation aller Pakete ist.

Aber nach einem erfolgreichen Testlauf mit einer Test-Domain haben wir dann den Schritt gewagt: Zimbra ist nun das Hauptsystem. Einige User nutzen weiterhin IMAP wie früher (über Thunderbird und Opera Mail) - für die ändert sich dadurch also nichts. Die meisten aber nutzen das Zimbra-Webinterface. Ich bin auch vollständig auf das Webinterface umgestiegen. Das ist so fortschrittlich, da brauchts keine Desktop-App mehr.

Man kann auch eine Demo-Installation besuchen unter Hosted Demo, allerdings muss man sich dafür registrieren.

Ich bin ziemlich begeistert davon und haben meinen Arbeitsablauf schon komplett darauf ausgerichtet (sprich: ToDo-Liste, Kalender, Adressverwaltung wird alles in Zimbra geführt).

Ich denke, das ist auch für Unternehmen zu empfehlen anstatt der typischen Microsoft-Monster-Kombination: Exchange mit Outlook auf Windows-Maschinen. Warum nicht ein dicker Server (oder mehrere, je nach User-Zahl) und überall Clients mit irgendeinem Browser? Zimbra läuft in jedem Browser perfekt (außer Opera). Mehr brauchts auf Desktop-Seite nicht. Viel weniger Aufwand, viel einfacher zu warten. Und kostengünstiger ist es wohl auch. Naja, leider scheint sich das nur schwer in Deutschland herumzusprechen - wie so oft in solchen Fragen.

Der einzige Wermutstropfen, der auch erwähnt werden soll: Zimbra braucht richtig Ressourcen (ist ja auch teils Java-Software Wink ). Der Server sollte mindestens 2 GB RAM haben. Und das ist das absolute Minimum. Also da lieber kleckern statt klotzen.

Noch ein Hinweis zum Abschluss: Für den Umzug lohnt es, sich mal imapsync anzuschauen. Das Programm macht genau, was der Name vermuten lässt. Damit konnte ich alle Mails des alten Servers auf den neuen überspielen, mit Ordnerstruktur, Flags und allem drum und dran. Hat fehlerfrei für alle Konten geklappt. Ist in Debian/Ubuntu als gleichnamiges Paket drin.

Ölkatastrophe und "Blue Screen of Death"


Das der Alarm auf der Ölplattform teilweise inaktiv war, wisst Ihr wahrscheinlich schon. Aber es wird noch brisanter, wie hier in einem Artikel der New York Times zu lesen:

http://www.nytimes.com/2010/07/24/us/24hearings.html?_r=2

Auf Seite 2 im ersten Absatz steht, das Computersystem lief schon seit Monaten nicht richtig und hat etwas fabriziert, was die Crew als Blue Screen of Death beschreibt. Also haben die anscheinend dort Windows-Systeme, die nicht funktioniert haben (ob jetzt Hardware- oder Treiber-Probleme steht leider nicht genauer da). Das ist ja schon schlimm genug, aber das war "seit Monaten" so? WTF? Haben die kein Geld für Admins, gerade auf solchen Plattformen, die sich um sowas zeitnah kümmern sollten?

Firefox-Datenbanken aufräumen


Firefox verwendet für die meisten Daten SQLite3. Nach intensivem Firefox-Gebrauch können diese Tabellen fragmentieren, wodurch Firefox ziemlich träge wird. Folgendes Skript führt VACUUM auf alle Datenbanken aus. Das sollte Firefox wieder auf die Sprünge helfen:

#!/bin/bash
for i in `find ~/.mozilla/firefox -iname "*.sqlite"`
do
    echo "Vacuuming $i"
    echo "VACUUM;" | sqlite3 $i
done

Damit das klappt, muss das Paket sqlite3 installiert sein und Firefox darf natürlich nicht laufen!

Zentralisierte Update-Verwaltung mit apt-dater


Mit apt-dater können mehrere Hosts über einen zentralen Rechner aktualisiert werden. Das Programm bietet dabei eine übersichtliche ncurses-Oberfläche an. Wie das aussieht, zeigen Screenshots und ein kleines Video auf der Webseite von apt-dater.

Der Kontrollrechner loggt sich per SSH in die Remote-Maschine eine und kontrolliert dort apt-get bzw. aptitude. Damit das ohne Passwort funktioniert, werden SSH-Keys verwendet.

Einrichtung Kontroll-Maschine
  • Erst das Paket apt-dater installieren. In Ubuntu ists schon drin. Bei Debian Lenny braucht man die Backports. Oder man nimmt gleich die Quellen von http://www.ibh.de/apt-dater/ und baut sich alles selbst.
  • Dann rufe erstmal apt-dater unter dem User auf, mit dem später die Remote-Maschinen kontrolliert werden sollen. Sofort wieder mit der Taste q beenden. Dann erzeugt apt-dater entsprechende Konfigurationsdateien unter ~/.config/apt-dater.
  • Erzeuge für Deinen User einen SSH-Key: ssh-keygen -t rsa. Keine Passphrase eingeben.
  • Jetzt fehlen nur noch die Eintragungen in der Datei ~/.config/apt-dater/hosts.conf. Dort können Gruppen angegeben und die einzelnen Hosts erzeugt werden. Bei Angabe eines Hosts sollte der Username vorne dran stehen, evtl. ist auch eine Port-Angabe notwendig. Beispielzeile: hosts=apt-dater@192.168.178.1:1234;apt-dater@192.168.178.2:5678;
Einrichtung einer Remote-Maschine
  • Erst muss das Paket apt-dater-host installiert werden.
  • Dann einen User für den Login erzeugen: sudo adduser apt-dater, und dort auch ein Passwort vergeben.
  • Falls in SSH die erlaubten Nutzer per AllowUsers-Direktive definiert sind, diese ergänzen und SSH neu starten.
  • Jetzt muss der öffentliche Teil des SSH-Keys vom Nutzer der Kontroll-Maschine hier rein. Das heißt, auf der Kontroll-Maschine den Inhalt der Datei ~/.ssh/id_rsa.pub in die lokale Datei /home/apt-dater/.ssh/authorized_keys einfügen. Ggf. Verzeichnis und Datei erstellen.
  • Mit sudo visudo die sudo-Konfiguration bearbeiten und folgendes hinzufügen:
    # apt-dater remote updates
    apt-dater ALL=NOPASSWD: /usr/bin/apt-get, /usr/bin/aptitude
    
  • Nun kannst Du testen, ob ein Login von der Kontrol-Maschine auf die Remote-Maschine ohne Passwort klappt (ssh apt-dater@remote-machine). Es sollte auch ein sudo aptitude update ohne Eingabe des Passworts funktionieren! (sudo top z.B. muss aber nach dem Passwort fragen!)
  • Falls noch nicht geschehen, für diese Maschine die Datei ~/.config/apt-dater/hosts.conf auf der Kontroll-Maschine ergänzen.
Quellen:

Metan frei aus dem Meeresgrund?


Anscheinend sprudelt seit 20 Jahren aus einem Bohrloch in der Nordsee Methan vor sich hin und keiner macht was dagegen:

http://www.zeit.de/2010/24/Nordsee-Bohrloch-Methan

Wie viel Mist es wohl noch in dieser Branche gibt, von dem wir nichts wissen?

Kendoo Reader


Ich habe vor einiger Zeit den RSS-Reader von Kendoo überarbeitet und setze ihn schon seit Wochen ein, um mich auf dem Laufenden zu halten. Funktioniert alles sehr gut und so, wie ich mir das gedacht hatte.

Der Reader ist darauf getrimmt, die Überschriften der Einträge übersichtlich darzustellen, so dass schon beim Überfliegen die interessanten Sachen gefunden werden. Mit einem Klick auf den Namen "klappt" der Eintrag auf und der Inhalt wird angezeigt. Schnell, effizient, trotzdem einfach.

Neu ist auch die (optionale!) Twitter-Integration, die extra im eigenen Profil aktiviert werden muss. Dann sieht man in der Seitenleiste die eigene Timeline und kann auch von dort aus zwitschern. Wenn Twitter aber nicht aktiviert ist, erscheint auch nichts.

Aber was soll das Gerede, ein Bild sagt mehr als 1000 Worte:

Kendoo Reader
(Anklicken für die große Ansicht)

Deutsche Interessen am Hindukusch


Wer hat sich eigentlich nicht gefragt, welche wichtigen deutschen Interessen beim Afghanistan-Einsatz eine Rolle spielen? War mir bisher nicht so wirklich klar. Aber das erklärt wohl vieles, wenn nicht vielleicht sogar jegliches Engagement westlicher Mächte dort:

Afghanistan sitzt auf Billionen

US-Gesetzesinitiative: Notfall-Ausschalter fürs Internet


Oh mein Gott, wenn das Schule macht, seh ich schwarz für ein freies Netz:

US-Gesetzesinitiative: Notfall-Ausschalter fürs Internet

Back to Firefox


Letzt schrieb ich, dass ich nun auf Chrome als Hauptbrowser umgestiegen bin. Nun, das war ein kurzes Vergnügen:

Erstens gibt es noch einige gravierende Probleme mit Addons, z.B. bei Smooth Gestures, wo zwei Klicks mit der rechten Maustaste für das Context-Menu unter Linux gebraucht werden. Liegt aber laut Fehlerbericht an den Events, die Chrome verarbeitet und lässt sich wohl vorerst nicht anders lösen. Aber Surfen ohne Gesten geht nicht, viel zu langsam. Oder AdBlock, das zwar Werbung ausblendet, aber eben trotzdem lädt. Das sind alles Kleinigkeiten, die sich irgendwann bestimmt ändern werden, aber unterm Strich derzeit eindeutig schlechter als die "Firefox-Erfahrung".

Zweitens - und das ist viel gravierender - stürzt Chrome sehr oft ab. Wie versprochen nur einzelne Seiten und nicht der ganze Browser, aber dafür viel zu oft. Egal ob unter Windows oder Linux. Ich hatte teilweise alle 10 Minuten irgendeinen Absturz. Das komische daran ist, dass es nie reproduzierbar ist, mit oder ohne Addons, mit oder ohne Flash, alles völlig egal. Da scheint noch der Wurm drin zu sein. Wie gesagt: Auf mehreren Systemen unter verschiedenen Betriebssystemen. Ein System konnte ich da nicht erkennen.

Nun ja, Chrome werde ich weiterhin beobachten, aber vorerst bin ich wieder bei Firefox. Den der funktioniert und hat, bis auf den manchmal enormen Ressourcenverbrauch, keine Probleme. Und das soll Firefox 4 ja bald besser machen ...

Öl-Pest


Mal eine erschreckende Ansicht, wie groß die Öl-Pest im Golf von Mexico schon ist:

http://www.ifitwasmyhome.com/

Great Pacific Garbage Patch?


Im Pazifik treibt anscheinend eine Suppe aus Plastik herum, auf einer Fläche, die doppelt so groß wie die USA ist? WTF? Warum wird darüber nirgends berichtet. Nur dieser Artikel von 2008 beschäftigt sich damit:

http://www.independent.co.uk/environment/green-living/the-worlds-rubbish-dump-a-garbage-tip-that-stretches-from-hawaii-to-japan-778016.html

SSHFS per fstab mounten


Im Artikel Externer Server für statische Dateien einer Django-App habe ich beschrieben, wie per sshfs ein Verzeichnis eines externen Rechners sicher eingebunden werden kann. Ich betreibe das für Kendoo schon länger produktiv und das ging bisher auch astrein - bis heute.

Heute kam ein libc-Update raus (beide beteiligten Server laufen mit Ubuntu 10.04 LTS). Nach dem Einspielen wollte ich die Systeme eben neu booten (bei sowas elementaren wie die libc die sicherste Methode). Aber siehe da, der Kendoo-Server kam nicht mehr hoch, sondern blieb einfach beim Booten stehen. Grmpf.

Verantwortlich war der Eintrag in der fstab, der das sshfs-Verzeichnis mountet. Das geht nicht mehr. Einfache Lösung: Durch den zusätzlichen Parameter noauto wird das automatische Mounten während des Bootens verhindert. Der Cron Job, der dann später prüft, ob alles gemountet ist, hängt dann das Verzeichnis erst rein. Nachteil natürlich, dass nach einem Neustart ein bis zwei Minuten vergehen, bis der Cron Job greift.

Ich werde den anderen Artikel entsprechend anpassen!

Lobbykratie II


Wo wir gerade schon mal bei dem Thema waren, hier noch was aus unseren Landen.

Erst das Video dazu: http://www.youtube.com/watch?v=yW405x_18_0
(gibts auch [noch?] in der ZDFmediathek)

Und hier noch ein erhellender Artikel, damit auch alles gleich im rechten Licht erscheint:

http://www.heise.de/tp/blogs/6/147670

Lobbykratie


Wer schon immer mal wissen wollte, wie Lobbyismus funktioniert, der sollte sich mal dieses geleakte Video anschauen. Da verschlägts einem doch glatt die Sprache:

http://barelysarcasm.tumblr.com/post/614632353/blackwell-briggs-are-the-villains-this-leaked

Gut, betrifft England. Aber anzunehmen, dass das hier in Deutschland anders laufen würde, wäre wohl reichlich naiv ... Sad

Google Chrome


Seit Jahren ist Firefox mein Standardbrowser. Und ich war äußerst zufrieden mit ihm. Bis auf den Ressourcenverbrauch, denn das ist langsam eine echte Qual geworden. Als "Power User", der oft 20+ Tabs offen hat, ist ein Browser, der sich gern mal 1 GB RAM schnappt, einfach zuviel. Deshalb habe ich nun umgesattelt: Auf Google Chrome.

Es ist aber ein bisschen umständlich, Chrome dazu zu bewegen, sich so zu verhalten, wie ich es gern hätte. Daher poste ich hier mal die kleine "Anleitung", die ich mir in meinem Wiki zusammengestellt habe. Das hilft vielleicht auch den ein oder anderen Umsteiger, oder jemand hat noch einen guten
Hinweis für mich. Wie weit ich auf die Developer-Möglichkeit des Firefox verzichten kann bzw. mit Chrome ersetzen kann, wird erst ein Praxistest zeigen. Jedenfalls läuft Chrome bisher ressourcensparender. Vom großen Geschwindigkeitsvorteil merke ich dagegen nur auf wenigen Seiten etwas. Nun, hier meine notierten Punkte:

  • Diese Optionen deaktivieren:
    • Optionen -> Details -> "Vorschläge für Navigationsfehler anzeigen"
    • Optionen -> Details -> "Automatische Vorschläge zur Vervollständigung der in die Adressleiste eigegebenen Suchanfragen und URLs"
    • "DNS-Vorabruf" und "Phishing-Schutz" sind ok und sollten aktiviert bleiben. Der Phishing-Schutz ist der gleiche wie bei Firefox und findet lokal statt. Chrome checkt nur alle 30 Min nach einer neuen Datei.
    • Speichern von Passwörter deaktivieren, das übernimmt LastPass. (Anmerkung: Das speichert aber keine .htaccess-Logins! Das ist noch keine perfekte Lösung)
  • Die Bookmark-Leiste nicht anzeigen lassen (Strg+B zum Umschalten): Wenn sie nicht angezeigt wird, sieht man sie auf der NewTab-Page. Da neue Links aus den Bookmarks immer im gleichen Tab geöffnet werden, muss zuerst ein neues Tab und dann der Bookmark gewählt werden. (Hatte vorher immer Bookmarks automatisch in einem neuen Tab öffnen lassen. Ein gescheites Addon dafür hab ich für Chrome nicht gefunden.)
  • Synchronisation von Google verwenden für die Lesezeichen und Optionen. Nicht für Designs.
  • Chrome bietet für selbst-signierte Zertifikate nicht einfach die Möglichkeit, eine Ausnahmen hinzuzufügen. Eine Möglichkeit ist, unter Windows das Zertifikat global zu installieren (IE als Admin ausführen und das Zertifikat im Speicher "Vertrauenswürdige Stammzertifizierungsstellen" speichern) und unter Linux das Zertifikat zu importieren (siehe hier). Braucht unter Linux die Pakete libnss3-tools und curl.

    Folgendes Skript macht das in Linux:
    #!/bin/sh
    #
    # usage:  import-cert.sh remote.host.name [port]
    #
    REMHOST=$1
    REMPORT=${2:-443}
    exec 6>&1
    exec > $REMHOST
    echo | openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
    certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "$REMHOST" -i $REMHOST 
    exec 1>&6 6>&-
    
  • Wichtige Tastenkürzel (siehe hier):
    Strg+WTab schließen
    Strg+LMarkiert die URL
    Strg+ESuche (Kendoo)
    Strg+FSuche in der Seite
    Strg+GNächster Treffer in der Suche
    Strg+Shift+GVorheriger Treffer in der Suche
    Alt+Klick auf Link  Lädt das Ziel herunter
    LeertasteBlättert nach unten
  • Add-Ons:
  • Addons für den Einsatz unter Ubuntu:

MMO-Fragen - deutsche Frage-/Antwort-Community zu MMOs


Letzt ist mir die Idee für eine Community gekommen, die ich schon oft vermisst habe. Es geht darum, zu MMOs schnell Antworten zu finden oder eine Anlaufstelle zu haben, um Fragen zu stellen. Dafür sind sogenannte Q&A-Communities; perfekt geeignet. Mir ist aber keine deutschsprachige bekannt. Also selbst machen und voilá, jetzt gibts eine:

http://mmo-fragen.de

Dabei geht es darum, sein Wissen zu teilen. Jeder kann eine Frage stellen, und andere beantworten diese dann nach bestem Wissen. Alle Fragen und Antworten können bewertet werden. Wenn eine Antwort also richtig ist, werden viele andere das wiederum positiv bewerten. Antworten mit einer positiven Bewertung finden sich immer ganz oben und sind sofort zu finden.

Stellt Euch vor, auf eine Frage in irgendeinem Chat müsstet Ihr nur eine Adresse posten und alles wäre gesagt. Außerdem ist das auch ein geniales Nachschlagewerk, da es echte Informationen "direkt von der Basis" enthält.

Das sieht dann zum Beispiel so aus:
http://mmo-fragen.de/question/8/welche-rotation-ist-die-beste-fur-einen-verstarker-schamanen

Warum dafür nicht ein Forum nehmen? Ein Forum eignet sich sehr gut für eine Diskussion! Bei MMO-Fragen geht es aber um Antworten, und wenn diese falsch sind, sollte nicht diskutiert werden - dann wird die Antwort einfach nicht bewertet. Für Anmerkungen und Hinweise können Kommentare zu einer Frage oder einer Antwort hinterlassen werden, aber das sollte kurz und knapp sein. Es geht darum, schnell Informationen zu finden, nicht, andere von der eigenen Meinung zu überzeugen.

Ein anderer, massiver Vorteil: Es gibt keine Moderatoren oder sowas in der Art, denn die Community reguliert sich selbst. Für jede Aktion, die man macht, wird einem Reputation (Ruf Wink ) gutgeschrieben (oder abgezogen). Praktisch eine Art Karma-System. Wer genug Reputation hat, bekommt automatisch die Möglichkeit, bestimmte Aktionen durchzuführen, z.b. das Bearbeiten von Posts oder Vergeben von anderen Tags (Moderatorentätigkeiten eben). Somit übernehmen auch die Leute, die sich stark engagieren, die Moderation, ohne dass es zu "Machtmissbrauch" kommen kann.

Nun könnte man auch sagen, mit dem Angebot von buffed und seinen Kommentaren gibt es das ja schon. Aber jeder kennt das Problem: Wenn man wissen will, wo man für Quest XY hin muss, muss man sich erst durch etliche Spamkommentare durchlesen ("Darkhero war so toll und hats ganz allein auf Level 2 gemacht. Total easy."). Die Antwort zu finden ist langwierig. Durch das Bewertungssystem sollte dieses Problem aber bei MMO-Fragen nicht auftauchen bzw. nicht so massiv werden. Die beste Antwort ist immer die erste, langes Rumlesen ist überflüssig.

Natürlich lebt solch ein System vom Mitmachen. Wenn Ihr also Interesse an sowas habt, stellt bitte Eure Fragen und gebt Antworten.

Ihr müsst Euch nicht zwangsläufig registrieren, Logins über einen Facebook- oder Twitter-Account oder OpenID sind auch möglich.

Das ganze ist für alle MMOs gedacht. Wenn Ihr eine Frage stellt, müsst Ihr das Spiel auswählen. Später sind alle Spiele dann über entsprechende Tags auffindbar, also gibt es unter
http://mmo-fragen.de/tags/wow/
dann alle Fragen, die je zum Thema WoW gestellt wurden.

Ein Beispiel dafür, wie so etwas nach einiger Zeit aussehen kann, bietet das englischsprachige StackOverflow unter
http://stackoverflow.com/
Das geht aber um das Themengebiet Programmieren. Wink

Wäre super, wenn sich vielleicht der ein oder andere dafür begeistern könnte. Und wenn Ihr bei Freunden und Bekannten darüber sprechen könntet: Umso mehr Leute mitmachen, umso höher wird die Qualität!

Wissens-Ökonomie


Das hier ist mal ein richtig guter Text darüber, wie "Management" eigentlich laufen sollte:

http://lwn.net/Articles/387691/

Eine Wissens-Ökonomie, die selbstständig die richtigen Hierarchien bildet. Das sieht in der Realität ja leider nicht so rosig aus, wie es sein sollte - ganz besonders im so hoch gelobten Bereich "Management".

Arabische Domains


Es sind nun erste arabische Domains in Verwendung. Daran muss man sich erstmal gewöhnen. Aber ein Schritt in die richtige Richtung: Das Internet muss wirklich ein internationales Netz sein und nicht einen großen Teil der Weltbevölkerung zur Verwendung lateinischer Schriftzeichen zwingen. Begrüßenswert.

Aber schauts Euch die Seite des ägyptischen Kommunikationsministeriums mal an: http://وزارة-الأتصالات.مصر

CDU-Wahlkampfsong


Ich verstehe ja sowieso nicht ganz, wie man sowas bei klarem Verstand wählen kann (gut, Alternativen sind ja auch net sooo prickelnd), aber das ist schon harter Tobak:

http://youtube.com/watch?v=_FPEaWY7BHM

Patente auf Schnitzel?


In was für einer Welt leben wir eigentlich, wenn sowas möglich ist?

Patent auf Schinken und Schnitzel

Ubuntu One Client erzeugt hohe CPU-Last

Kategorie Linux 27.04.2010    Kategorie Linux Linux    Tags one, ubuntu    Kommentare 0 Kommentare

Falls sich jemand wundert, warum eine Kiste mit Ubuntu (Karmic) sehr hohe CPU-Last fährt und dann feststellt, dass der Prozess, der so hoch läuft, ubuntuone-syncdaemon heißt: Das Problem ist, dass eine Bandbreitenbeschränkung in den Einstellungen festgelegt wurde, aber einer der Werte auf 0 steht. Dann kommt es zu einer ZeroDivisionError-Exception im Ubuntu One Client. Uiuiui. Anscheinend läuft das dann in einer Endlosschleife (Logs sind unter ~/.cache/ubuntuone/log, da sollte das stehen).

Jedenfalls reicht es aus, in den Einstellungen zu prüfen, dass wirklich Zahlen > 0 angegeben sind und dann aus- und wieder einzuloggen.

Quake 2 direkt im Browser - ohne Plugins


Wow, ein paar Leute bei Google haben Quake 2 im Browser mit den neuen Features von HTML 5 umgesetzt. Das ist wahrlich beeindruckend:

http://googlewebtoolkit.blogspot.com/2010/04/look-ma-no-plugin.html

Mit Flash wär das nicht passiert! Smile

OpenTTD 1.0


Nach 6 Jahren ist das freie OpenTTD - ein Klon des Klassikers Transport Tycoon aus ruhmreichen DOS-Zeiten - in Version 1.0 erschienen. Ein tolles Spiel. Kann ich nur empfehlen:

http://www.openttd.org

Externer Server für statische Dateien einer Django-App


Eigentlich ist das Auslagern von statischen Files mit Django ja relativ simpel, aber schwierig wird es, wenn vom Benutzer Dateien hochgeladen werden können. Diese müssen auf dem static-Server zeitgleich verfügbar sein.

Entweder es kümmert sich gleich Django darum, die Datei weiterzureichen, was aber zusätzlichen Code erfordert. Oder es wird ein anderer Weg gewählt: über sshfs. Die Django-Installation behandelt alles so, als wäre es lokal. Das media-Verzeichnis allerdings liegt auf dem static-Server und wird per sshfs eingehängt.

Dann muss nichts "per Hand" synchronisiert werden und die Übertragung läuft verschlüsselt zwischen den Servern.

Damit das klappt, sind folgende Schritte notwendig:

  • Auf dem Django-Server muss das Paket sshfs installiert werden.
  • Da gleich beim Booten des Servers das Einhängen erfolgen soll, muss ein SSH-Login ohne Passwort vom Django-Server auf den static-Server möglich sein. Dazu macht man folgendes
    • Auf dem Django-Server als root anmelden und ein Keypair erzeugen mit ssh-keygen -t rsa. Dabei keine Passphrase vergeben. Der Schlüssel liegt dann unter /root/.ssh/id_dsa
    • Auf dem static-Server einen Nutzer erzeugen, der sich per SSH einloggen kann
    • Den Inhalt der Datei /root/.ssh/id_dsa.pub vom Django-Server in die Datei /home/NUTZER/.ssh/authorized_keys anhängen. Notfalls das Verzeichnis /home/NUTZER/.ssh erzeugen (und Rechte setzen).
    • Testen, ob der Login klappt vom Django-Server aus. Ein einfaches ssh NUTZER@static-server sollte klappen
    • Wenn gewünscht, kann auf dem static-Server der Login von NUTZER noch beschränkt werden durch AllowUsers NUTZER@IP in der Datei /etc/ssh/sshd_config. (Dabei aber natürlich andere Nutzer nicht vergessen, sonst sperrt man sich selbst aus!)
  • Nun auf dem static-Server alles vorbereiten:
    • Verzeichnis erzeugen, indem die Dateien liegen werden, bsp. /var/www/django1-static
    • Dieses Verzeichnis muss dem Nutzer NUTZER aus vorherigem Schritt gehören
  • Auf dem Django-Server die notwendigen Schritte durchführen:
    • Editieren der Datei /etc/fstab und einfügen folgender Zeile:

      sshfs#NUTZER@static-server:/var/www/django1-static /opt/django-app/media fuse uid=33,gid=33,umask=0,allow_other,port=222,noauto 0 0
      

      Damit wird das Verzeichnis /var/www/django1-static auf dem static-server ins media-Verzeichnis der Django-App unter /opt/django-app/ gemountet. Wichtig sind die Parameter:
      • uid und gid sollten die ID des Nutzers haben, unter dem die Django-App läuft (33 = www-data, kann in der Datei /etc/passwd herausgefunden werden).
      • Wenn SSH auf einem anderen Port läuft, dann ist die Port-Angabe wichtig.
    • Der Nutzer, der mit uid angegeben ist, muss in der Gruppe fuse sein: sudo adduser www-data fuse
    • Damit die SSH-Verbindung auch offen bleibt, noch folgende Zeile ans Ende der Datei /etc/ssh/ssh_config anhängen:

      ServerAliveInterval 15
      

      Das sendet alle 15 Sekunden ein Paket, um die Verbindung aktiv zu halten.
    • Mit mount -a testen. Es sollten unter /opt/django-app/media alle Dateien sichtbar sein, die auf dem static-server liegen.
    • Unmounten geht übrigens mit sudo fusermount -u /opt/django/media

Das wars. Die Django-App müsste nun alle Dateien ganz normal im media-Verzeichnis unter /opt/django-app/media speichern können. Diese Dateien werden sofort auf den static-server übertragen und dort gespeichert - völlig transparent für die Django-App.

Remount, wenn die Verbindung weg ist

Eine große Schwachstelle hat dieses System aber: Wenn der static-Server neu gestartet wird oder ein Netzwerkproblem hat oder ähnliches, ist der Mount weg und das Verzeichnis auf dem Django-Server leer. Somit klappen Uploads der Django-App nicht mehr und es kommt zu Fehlern. Eine Möglichkeit, dies etwas abzuschwächen, ist, ein Skript laufen zu lassen (z.B. jede Minute per Cron), das prüft, ob ein Mount vorliegt und ggf. neu mountet:

#!/bin/bash

if ! mount | grep "on /opt/django-app/media type fuse.sshfs" > /dev/null; then
    echo "SSHFS-Mount /opt/django-app/media ist weg. Versuche neu zu mounten..."
    mount /opt/django-app/media
fi

Somit fällt die Verbindung für max. 1 Minute aus, zumindest wenn der static-Server nur ein kurzes, temporäres Problem hat. Lässt man sich mit MAILTO in der crontab per Mail benachrichtigen, weiß man zumindest, das ein Problem vorliegt.

Nachtrag (26.05.): Dieses Skript ist nun nicht mehr optional, sondern elementar wichtig. Siehe http://www.bheil.net/blog/2010/05/26/sshfs-fstab-mounten/!

admin-media

Für die Django-admin-Files ist es die beste Lösung, diese weiterhin vom Django-Server ausliefern zu lassen. Dann müssen die nicht gespiegelt werden, vor allem wenn mit trunk gearbeitet wird. Also einfach ein virtual_host, der dieses Verzeichnis ausliefert und das dann in der settings.py angeben.

Microsofts Auswahldialog hat interessante "Alternativ-Browser"


Seit kurzem wird Microsofts Browser-Auswahldialog ausgeliefert, den Microsoft mit der EU ausgehandelt hat. Ich habe gerade eine XP-VM erstellt und bin somit zum ersten Mal "in the wild" mit diesem Dialog in Berührung gekommen. Darauf finden sich die normalen Verdächtigen (Firefox, Chrome, Opera, Safari und IE), aber was ich interessant finde, sind die ganzen anderen "Alternativ-Browser":


SlimBrowser, Maxthon, AvantBrowser - das sind alles Aufsätze auf den Internet Explorer. Das ist also der IE! Wow. So kann man den Leuten sein eigenes Zeug auch unterjubeln. Einfach einen anderen Namen drauf, und fertig ist das "neue Produkt". Das aber die gleiche Browser-Engine drunter liegt und somit die Sicherheitsprobleme des IE diese "Browser" auch alle treffen, davon steht nichts in den Werbetexten unter den Bildchen.

Immerhin muss ich das ziemlich genau wissen. Seiner Zeit waren diese "Browser" mal Konkurrenzprodukte zu meinem DX-Browser, ein damals relativ erfolgreiches Programm von mir aus der gleichen Liga. Hätte ich den DX-Browser weiterentwickelt, wäre er jetzt vielleicht auch in Microsofts Auswahldialog?

Logo-Generator


Hier gibts einen interessanten Logo-Generator:

http://www.says-it.com/seal/

Bilder aus einer Produktionsfirma von Western Digital


Hier sieht man mal einige interessante Einblicke in die Festplattenherstellung bei Western Digital:

Gallery Western Digital Fabrik

(Englischer Artikel dazu)

Bios-Fehler "hyper transport sync flood error"

Kategorie Hardware 07.02.2010    Kategorie Hardware Hardware    Tags amd, bios    Kommentare 0 Kommentare

Kleine Statusnotiz: Auf einem älteren System mit einem AMD Athlon X2 4400+ und einem MSI K9Neo-Motherboard hatte ich das Problem, das beim Booten immer folgender Fehler angezeigt wurde: "hyper transport sync flood error".

Die Lösung war einfach: Der RAM wurde mit 1.85V angesteuert. Nachdem ich das auf 1.95V angehoben habe, läuft wieder alles. Scheint aber in anderen Fällen auch an der Grafikkarte zu liegen, aber hier in diesem Fall wars der RAM.

Ausgaben-Visualisierung


Das ist mal einen Blick wert:

http://zelos.zeit.de/wissen/2010-02/34-infografik-2-finanzkrise.pdf

Schon interessant, die Verhältnisse z.B. vom Umsatz der Opec und der Opec-Beteiligung am Klimafonds. Oder wieviel in Deutschland für Neuwagen ausgegeben werden. Aber diese Industrie muss natürlich massiv unterstützt werden. Lobbykratie anyone?

Versionskontrolle nach Subversion


Bisher verwendete ich Subversion zur Versionskontrolle und war damit auch meist zufrieden, bis auf drei Dinge, die mich jedes Mal ziemlich nerven:

  • Das Umbenennen oder Verschieben von Dateien ist umständlich
  • Branches, oder besser, das Merging: Zwar ist das Erstellen von Branches nicht sonderlich kompliziert, aber das zurückmergen von größeren Änderungen kann eine Plage werden
  • Das Ignorieren bestimmter Dateien ist umständlich

Nach all dem Hype um DVCS habe ich mir nun doch mal diese Systeme angeschaut. Am Ende muss ich sagen, dass ich Git oder Bazaar schon sehr interessant finde und plane, darauf umzusteigen. Aber welches von beiden?

Mein Ziel ist, den gleichen Workflow beizubehalten: Ein zentrales Repository, das automatisch per Backup-Skript gesichert wird. Dennoch sollen auf allen Rechnern einfach lokal Änderungen zu machen sein, die dann auch sofort lokal per Commit hinzugefügt werden können. So dass ich auch weiterarbeiten kann, wenn ich mal offline bin. Und das Branchen und Mergen soll wesentlich einfacher werden, damit eben diese Arbeiten später wieder einfach zurückgeführt werden ins zentrale Repository.

Ein paar sehr interessante Links zu diesem Thema sind die folgenden:



Vorteile Git
  • sehr schnell
  • Sicherheit des Repositories wegen kryptographischer Validierung des Contents
  • unterstützt Zugriff per SSH
  • cool
Nachteile Git
  • unterstützt meinen Workflow nur bedingt (mind. 2 Schritte pro commit notwendig)
  • relativ komplizierte Befehle. Vor allem, wenn man von Subversion kommt, ist einiges doch ganz anders. Von daher ist die Einarbeitungszeit deutlich länger
  • läuft nicht nativ unter Windows (das alte Leid Sad )
  • Revisions-Bezeichner sind SHA1-Werte - das ist nicht sonderlich intuitiv, wenn auch kein großes Problem
Vorteile Bazaar
  • einfache Kommandos, meist die gleichen wie bei Subversion
  • unterstützt ziemlich viele verschiedene Workflows, unter anderem auch den von mir gewünschten
  • unterstützt Zugriff per SSH
  • Windows-Unterstützung
  • Python-Bindings
  • Es gibt viele übersichtliche grafische Frontends. Zwar sind GUIs in der täglichen Arbeit langsamer, aber zur Ansicht der Historie, vor allem von Branches, doch hilfreich als Zusatzoption
  • sehr robustes Umbenennen oder Verschieben von Dateien
Nachteile Bazaar
  • nicht so cool Wink


Zugegeben, diese Auflistung ist doch recht subjektiv und ich finde es mysteriös, dass ich nicht einen richtigen Minuspunkt für Bazaar gefunden habe, aber es scheint doch alles für Bazaar zu stimmen. Mal schauen, wie es sich im produktiven Betrieb schlägt und ob ich nicht doch ein paar Kleinigkeiten finde.

Firefox-Einstellungen automatisch beim Anmelden per VB-Script setzen


Ich betreue einen Windows 2003-Terminal-Server. Dort soll aber dennoch Firefox als Standardbrowser verwendet werden und nicht der Internet Explorer. Da sich aber x Leute dort einloggen können, muss eine Möglichkeit gefunden werden, bestimmte Firefox-Einstellungen vorzugeben, die automatisch angewandt werden, wenn sich diese Person das erste Mal anmeldet. Sehr hilfreich könnte in diesem Zusammenhang FirefoxADM sein, aber für meinen Zweck wäre das Overkill gewesen. So habe ich ein kleines VB-Skript gemacht (oder besser modifiziert), was die für mich wichtigen Einstellungen setzt.

Zuerst muss Firefox zum Standardbrowser gemacht werden. Dazu reicht eine einfach Batch-Datei C:\Windows\setFirefoxDefault.bat mit diesem Inhalt:

@ECHO OFF

"C:\Programme\Mozilla Firefox\firefox.exe" -silent -setDefaultBrowser

Das VB-Script nun klappert alle Firefox-Profile des eingeloggten Nutzers ab und überschreibt in der Datei prefs.js bestimmte Werte. Sollte noch gar kein Profil existieren, wird eines erzeugt. Das Script basiert sehr stark auf dem Script firefox_login.lgns von FirefoxADM, ist aber von mir auf die von mir benötigten Einstellungen geändert worden. Das Script liegt bei mir unter C:\Windows\setFirefoxSettings.vbs.

' Override firefox settings defined in prefs.js in user's profile
' Creates a new profile first if necessary
'
' http://kb.mozillazine.org/About:config_entries
'

Dim FirefoxCacheKey, FirefoxBookmarksKey, DisableXPIInstallations
Dim DisableUpdateNotifications, BrowseWithCaret
Dim StartupHomepage, StartupHomepageReset, StartupHomepageWelcomeURL, StartupHomepageOverrideURL

' Default startup page url
' Set this to "" to skip this setting
StartupHomepage="http://www.bheil.net/blog/"

' If the user requested that their homepage be reset, get the new homepage value from this location
' Set this to "" to skip this setting
StartupHomepageReset="http://www.bheil.net/blog/"

' The URL that Firefox goes to when the user starts up the browser after the initial installation,
' or with a new profile
' http://kb.mozillazine.org/Startup.homepage_welcome_url
' Set this to "" to skip this setting
StartupHomepageWelcomeURL="http://www.bheil.net/blog/"

' The URL that Firefox goes to when the user starts up the browser after upgrading
' http://kb.mozillazine.org/Startup.homepage_override_url
' Set this to "" to skip this setting
StartupHomepageOverrideURL="http://www.bheil.net/blog/"

' Disable XPI (=Extensions) Installations
' Set this to 0 to skip this setting
DisableXPIInstallations = 1

' Disable update notifications
' Set this to 0 to skip this setting
DisableUpdateNotifications = 1

' Number of maximum days to remember visited pages in history (180 in Firefox 3)
' http://kb.mozillazine.org/Browser.history_expire_days
' Set this to 0 to skip this setting
HistoryExpireDays = 60

' Number of minimum days to remember visited pages in history
' http://kb.mozillazine.org/Browser.history_expire_days_min
' Set this to 0 to skip this setting
HistoryExpireDaysMin = 30

' Maximum number of websites to keep in history (40000 in Firefox 3)
' http://kb.mozillazine.org/Browser.history_expire_sites
' Set this to 0 to skip this setting
HistoryExpireSites = 10000

' Max. Cache size in KB
' Set this to 0 to skip this setting
FirefoxCacheKey = 20000

' Standard bookmarks html file (simple Firefox export)
' set to "" to skip this
FirefoxBookmarksKey = "C:\Windows\firefox-standard-bookmarks.html"

' Browse with caret
' http://kb.mozillazine.org/Accessibility.browsewithcaret
' Set this to 0 to skip this setting
BrowseWithCaret = 1

'''''''''''''''''''''''''''''''''''''''''''''''''''''''

set wshShell = WScript.CreateObject("WScript.Shell")
set fso = CreateObject("Scripting.FileSystemObject")

Dim FirefoxProfilePath, FirefoxProfileIniFile, FirefoxPrefsFile, FirefoxProfileFolder, FirefoxProfiles
Dim FirefoxFolder, PrefsFile, ParsePrefsFile, ParseOutPrefsFile, HomePageSetReset, FolderCreate, FirefoxEmptyPrefsFile

on error resume next 

set EnVar = wshShell.environment("Process")
FirefoxProfilePath = EnVar("appdata") & "\Mozilla\Firefox\Profiles"

' Check for an existing firefox profile and create a new one if necessary
if fso.FolderExists(FirefoxProfilePath) = false then
	if fsoFolderExists(EnVar("appdata") & "\Mozilla\Firefox") = false then
		if fsoFolderExists(EnVar("appdata") & "\Mozilla") = false then
			if fsoFolderExists(EnVar("appdata")) = false then
				FolderCreate = fso.CreateFolder(EnVar("appdata"))
			end if
			FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla")
		end if
		FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla\Firefox")
		' Create a default profiles.ini file
		Set FirefoxProfileIniFile = fso.CreateTextFile(Envar("appdata") & "\Mozilla\Firefox\profiles.ini")
		FirefoxProfileIniFile.WriteLine("[General]")
		FirefoxProfileIniFile.WriteLine("StartWithLastProfile=1")
		FirefoxProfileIniFile.WriteLine("")
		FirefoxProfileIniFile.WriteLine("[Profile0]")
		FirefoxProfileIniFile.WriteLine("Name=default")
		FirefoxProfileIniFile.WriteLine("IsRelative=1")
		FirefoxProfileIniFile.WriteLine("Path=Profiles/yhc73d.default")
		FirefoxProfileIniFile.Close
	end if
	FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla\Firefox\Profiles")
	FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla\Firefox\Profiles\yhc73d.default")
	Set FirefoxEmptyPrefsFile = fso.CreateTextFile(Envar("appdata") & "\Mozilla\Firefox\Profiles\yhc73d.default\prefs.js")
	FirefoxEmptyPrefsFile.Close
end if

if fso.FolderExists(FirefoxProfilePath) then
	set FirefoxProfileFolder = fso.GetFolder(FirefoxProfilePath)
	set FirefoxProfiles = FirefoxProfileFolder.SubFolders

	For Each FirefoxFolder in FirefoxProfiles
		FirefoxPrefsFile = FirefoxProfilePath & "\" & FirefoxFolder.Name & "\prefs.js"
		if fso.FileExists(FirefoxPrefsFile) then
                        ' Set startup pages
			if StartupHomepage <> "" then
				RemoveCurrentPrefsFromFile("browser.startup.homepage")
				set tmp = AppendPrefsToFile("browser.startup.homepage", chr(34) & StartupHomepage & chr(34))
				RemoveCurrentPrefsFromFile("browser.startup.page")
				set tmp = AppendPrefsToFile("browser.startup.page", 1)
			end if

        		if StartupHomepageReset <> "" then
				RemoveCurrentPrefsFromFile("browser.startup.homepage_reset")
				set tmp = AppendPrefsToFile("browser.startup.homepage_reset", chr(34) & StartupHomepageReset & chr(34))
			end if

			if StartupHomepageWelcomeURL <> "" then
				RemoveCurrentPrefsFromFile("startup.homepage_welcome_url")
				set tmp = AppendPrefsToFile("startup.homepage_welcome_url", chr(34) & StartupHomepageWelcomeURL & chr(34))
			end if

			if StartupHomepageOverrideURL <> "" then
				RemoveCurrentPrefsFromFile("startup.homepage_override_url")
				set tmp = AppendPrefsToFile("startup.homepage_override_url", chr(34) & StartupHomepageOverrideURL & chr(34))
			end if

			' Cache
			if FirefoxCacheKey > 0 then
				RemoveCurrentPrefsFromFile("browser.cache.disk.capacity")
				set tmp = AppendPrefsToFile("browser.cache.disk.capacity", FirefoxCacheKey)
			end if

			' Disable XPI Installations
			if DisableXPIInstallations = 1 then
				RemoveCurrentPrefsFromFile("xpinstall.enabled")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.confirm")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.chrome")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.skin")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.type.chrome")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.type.skin")
				set tmp = AppendPrefsToFile("xpinstall.enabled", "false")
				set tmp = AppendPrefsToFile("xpinstall.dialog.confirm", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.chrome", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.skin", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.type.chrome", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.type.skin", chr(34) & "sorry-installation-permission-denied" & chr(34))
			end if

			' Copy bookmarks file
			if FirefoxBookmarksKey <> "" then
				if fso.FileExists(FirefoxBookmarksKey) then
					fso.CopyFile FirefoxBookmarksKey, FirefoxProfilePath & "\" & FirefoxFolder.Name & "\bookmarks.html"
				end if
			end if

			' Browse with Caret
			if BrowseWithCaret = 1 then
				RemoveCurrentPrefsFromFile("accessibility.browsewithcaret")
				set tmp = AppendPrefsToFile("accessibility.browsewithcaret", "true")
			end if

			' Disable update notifications
			if DisableUpdateNotifications = 1 then
				RemoveCurrentPrefsFromFile("update.showSlidingNotification")
				set tmp = AppendPrefsToFile("update.showSlidingNotification", "false")
				RemoveCurrentPrefsFromFile("update_notifications.enabled")
				set tmp = AppendPrefsToFile("update_notifications.enabled", "false")
			end if

			' History settings
			if HistoryExpireDays > 0 then
				RemoveCurrentPrefsFromFile("browser.history_expire_days")
				set tmp = AppendPrefsToFile("browser.history_expire_days", HistoryExpireDays)
			end if

			if HistoryExpireDaysMin > 0 then
				RemoveCurrentPrefsFromFile("browser.history_expire_days_min")
				set tmp = AppendPrefsToFile("browser.history_expire_days_min", HistoryExpireDaysMin)
			end if

			if HistoryExpireSites > 0 then
				RemoveCurrentPrefsFromFile("browser.history_expire_sites")
				set	tmp = AppendPrefsToFile("browser.history_expire_sites", HistoryExpireSites)
			end if
		end if
	next
end if

Function RemoveCurrentPrefsFromFile(removeSetting)
	Set ParsePrefsFile = fso.OpenTextFile(FirefoxPrefsFile, 1)

	' Get file content into an array:
	Dim aContents
	aContents = Split(ParsePrefsFile.ReadAll, vbCrLf)

	ParsePrefsFile.Close
	set ParsePrefsFile = Nothing

	' Parse Back In to Prefs.js file
	Dim aContentsNew
	aContentsNew = Filter(aContents, chr(34) & removeSetting & chr(34), False, vbTextCompare)

	' Overwrite the old file with the new file,
  	Set ParseOutPrefsFile = fso.OpenTextFile(FirefoxPrefsFile, ForWriting)
  	ParseOutPrefsFile.Write Join(aContentsNew, vbCrLf)
    ParseOutPrefsFile.Close
End Function

Function AppendPrefsToFile(writeKey, writeData)
 	set PrefsFile = fso.OpenTextFile(FirefoxPrefsFile, 8)
	PrefsFile.Write("user_pref(" & chr(34) & writeKey & chr(34) & ", " & writeData & ");" & vbNewLine)
	PrefsFile.Close
End Function

Auf diese beiden Dateien kann dann im Gruppenrichtlinienobjekt-Editor unter Benutzerkonfiguration -> Windows-Einstellungen -> Skripts -> Anmelden verwiesen werden, so dass die Skripte beim Login automatisch ausgeführt werden. (Ist die Microsoft-Welt nicht was schönes? Gruppenrichtlinienobjekt-Editor, da freut sich jeder Beamte Wink! Aufrufen mit: Start -> Ausführen -> gpedit.msc)

Anmeldeskripts

Zwar kann der Nutzer die Einstellungen ändern, aber beim nächsten Login werden diese wieder überschrieben.

Nachtrag: Wenn der Nutzer sich das erste Mal anmeldet, wird er vom Import-Dialog des Firefox begrüßt. Das kann einfach deaktiviert werden. Dazu wird eine Datei override.ini im Ordner des Firefox erzeugt (muss bei der firefox.exe liegen) mit folgendem Inhalt:

[XRE]
EnableProfileMigrator=false

Windows 7: Automatischen Neustart nach Einspielen von Updates verhindern


Windows will nach dem Einspielen von Sicherheitsupdates sehr oft neu gestartet werden, was auch wichtig ist, da sonst die Updates nicht greifen. Bei PCs, die jedoch sowieso täglich manuell neu gestartet werden (Arbeitsrechner etc.), kann dieses Verhalten schon nerven. Mit einem Registry-Eintrag kann das ausgeschaltet werden:

  • * Registrierungseditor öffnen (Win- bzw. Super-Taste + R -> "regedit")
  • * Zu HKEY_LOCAL_MACHINE\SOFTWARE\Polices\Microsoft\Windows navigieren
  • * Einen neuen Schlüssel anlegen mit dem Namen WindowsUpdate
  • * Darin ein 32bit-DWORD anlegen mit dem Namen NoAutoRebootWithLoggedOnUsers und diesen Wert auf 1 setzen