Archiv für die ‘Blog’ Kategorie

Keine Verbindung mehr zu Twitter mit Choqok

1 September 2010

Mein Twitterclient der Wahl zu Hause ist Choqok. Mit Kubuntu 10.04 hatte ich die Version 0.9.55a installiert. Mit dieser bekam ich seit gestern Fehler beim Verbindungsversuch, dass ich nicht authorisiert werden könne.

Heute bin ich dann über die Nachricht gestolpert, dass Twitter die Authentifizierung von externen Cleints nur noch per OAuth zulässt. Also habe ich mich auf die Suche begeben und auf den Seiten von Choqok entdeckt, dass eine neuere Version OAuth unterstützt. Vor die Wahl gestellt, selber zu kompilieren oder ein PPA zu nutzen, entschied ich mich für die zweite Variante. Im PPA von Adilson dos Santos Dantas fand ich eine aktuelle Choqok Version. Also folgendes auf der Kommandozeile eingegeben und Choqok ist in einer OAuth-fähigen Version installiert.

sudo add-apt-repository ppa:adilson/experimental
sudo aptitude update
sudo install choqok

Danach habe ich die Paketquelle vorerst deaktiviert, da in ihr auch Thunderbird in einer neueren Version vorliegt. Doch das Paket möchte ich nicht anfassen.

Nach der Aktualisierung musste ich meinen Twitter-Account in Choqok erneut anlegen. Nur so funktioniert OAuth. Beim neu Anlegen fragt Choqok die Twitterseite um Authentifizierung. Lässt man Choqok gewähren, bekommt man ein PIN-Code, der in Choqok eingegeben werden muss. Et voila: Die Verbindung steht wieder :)

Choqok Twitter OAuth

Für alle, die Gwibber als Twitter-Client der Wahl besitzen, habe ich einen Beitrag bei Disfunctions gefunden, wie Gwibber aktualisiert werden kann.

[Rails] Lesefutter bis zur Freigabe von Rails 3.0

29 August 2010

Heute ist ja der letzte Tag in der Woche. Also letzte Chance, für Rails 3.0 noch diese Woche zu erscheinen. Wie ich auf den Termin komme? Nun; jeder Rails-Fan wird die Ankündigung von Rails 3.0 RC 2 gelesen haben. Und ein Satz hat sich zumindest bei mir eingebrannt

we’re targeting the final release of Rails 3.0 for this week(!!!)

Und wie oben schon erwähnt ist heute der letzte Tag. Und eh jetzt jeder Rails-Entwickler für die restlichen 14 Stunden ununterbrochen auf die F5-Taste seines Browsers haut, empfehle ich lieber kostenloses Lesefutter.

Das Ruby on Rails Tutorial von Michael Hartl liegt bereits seit einiger Zeit in einer Fassung für Rails 3.0 bereit. Der Autor beginnt wirklich beim Urschleim und kämpft sich in insgesamt 12 Kapiteln bis zu einige Perlen der Entwicklung mit Rails 3.0 durch.

Das zweite Werk, was ich heute empfehlen möchte behandelt die Sichereit in Rails-Anwendungen. Jeder kennt das Problem, jeder hat bereits davon gehört. Wenn Webanwendungen ein Sicherheitsproblem haben, wird das früher oder später auch ausgenutzt. Um dem entgegenzuwirken gibt es direkt vom Ruby on Rails Projekt ein Ruby On Rails Security Guide.

Das sollte selbst für den schnellsten Leser genügend Stoff sein, um das ungeduldige Warten auf Rails 3.0 etwas zu verkürzen :)

[Rails] Fehler beim time_select in Formularen für eingebettete Models

26 August 2010

Eingebettete Modelle sind in Rails ein hervorragendes Mittel um Abhängigkeiten zwischen verschiedenen Entitäten herzustellen. Dafür sind die allseitsbekannten belongs_to sowie has_one und has_many aus dem ActiveRecord verantwortlich. Dazu noch ein accepts_nested_attributes und auf der Model-Ebene sind eingebettete Modelle kein Problem.

Wie sieht es aber im Formular zur Eingabe der Daten aus? Auch dort können problemlos mittels fields_for Eingabefelder für ein eingebettetes Model erzeugt werden. Das funktioniert Rails-typisch auch. Bis man auf die Idee kommt in den Eingabefeldern des eingebetteten Models ein time_select mit optionalen Parametern zu nutzen. Wird dem time_select kein optionaler Parameter mitgegeben, läuft die Anwendung wie erwartet. Nicht jedoch, wenn man zum Beispiel mittels :prompt => true den Anwender einen Hinweis geben möchte, was er in den Feldern auswählen kann. Denn dann werden die Parameter, welche von der Form an das Model und von dort an das eingebettete Model übergeben werden, nicht vollständig gefüllt und die Anwendung bricht mit dem Fehler 1 error(s) on assignment of multiparameter attributes ab.

Die Ursache liegt darin, dass Datum und Zeitangaben verkürzt gesagt, als einzelne Integerwerte an das Model gesendet werden. Dieses interpretiert nun die übermittelten Werte, sortiert nach dessen Index, als Jahr, Monat, Tag, Stunde, Minute und so weiter. Der Formhelper time_select hat nun den Fehler, dass wenn er mit optionalem Parameter genutzt wird, keine versteckten Eingabefelder mit den Werten 0 für das Jahr, den Monat und den Tag anlegt. Somit sind diese Werte, wenn sie im Model interpretiert werden, nicht deklariert und ActiveRecord streikt.

Abhilfe schafft dieser Patch für Rails. Nun ist es eine schlechte Idee sein Rails lokal zu patchen. Spätestens beim Deployment auf dem Server tritt der Fehler wieder auf. Also hilft hier nur, das entsprechend eingebettete Model direkt mit der im Patch enthaltenen Funktionalität auszustatten. Folgende Zeilen Code im Model erlauben ab sofort time_select Helper für das Model:

  def instantiate_time_object(name, values)
    if values.length == 2
      values = [ Date.today.year, Date.today.month, Date.today.day ] + values
    end
    super(name, values)
  end

Bleibt trotzdem zu hoffen, dass der Fehler in einer der nächsten Rails-Version behoben wird.

Kostenloser Kurs über die Virtualisierung von Microsoft SQL Server

18 August 2010

Virtualisierung ist in aller Munde. Sei es für den Betrieb mehrerer Betriebssysteme parallel auf einem Computer, den Aufbau eines virtuellen Testlabors oder für die Konsolidierung von Servern. Besonders interessant wird der letzte Punkt, wenn auf den zu virtualisierenden Servern der doch recht speicher- und plattenintensive Microsoft SQL Server laufen soll.

Für genau dieses Szenario stellt Microsoft Learning ab sofort einen kostenlosen Kurs bereit. Clinic 10528: Introduction to Virtualization of Microsoft SQL Server. Klar, dass Microsoft in dieser Klinik die hauseigene Virtualisierungstechnik Hyper-V vorstellt. Nichtsdestotrotz sind die behandelten Themen auch für andere Virtualisierungstechniken interessant.

Onlinebuch Scrum Kompakt

10 August 2010

Viele Softwarefirmen schwören auf das von Ken Schwaber, Jeff Sutherland und Mike Beedle entworfene Projektmanagement Scrum. Durch den agilen Ansatz, klaren Regeln und flachen Hierarchien schafft es Scrum, die Produktivität in Entwicklerteams merkbar zu steigern.

Wer bisher noch nichts oder nur wenig mit Scrum zu tun hatte, dem kann ich das Onlinebuch Scrum Kompakt empfehlen. Die Autoren Sebastian Neus, Jens Trompeter, Dr. Martin Mandischer und Michael Jendryschik geben auf ihren Internetseiten einen groben und wie der Titel schon vermuten lässt, kompakten Einblick in die Projektverwaltung mit Scrum.

Das Buch untergliedert sich in drei große Teile. Im ersten werden die Grundlagen des Projektmanagements beschrieben. Der zweite Teil beschäftigt sich mit der Einführung von Scrum und der letzte mit der Anforderungsanalyse bei Scrum. Obwohl mein Lesefluß an einigen Stellen im Buch etwas ins stocken geraten ist, kann ich Scrum Kompakt jedem empfehlen, der sich mit dem Thema Scrum beschäftigen möchte.

Rails Deployment leicht gemacht

4 August 2010

Wer kennt das nicht, da hat man schnell eine super Rails Anwendung lokal erstellt und möchte das Resultat mit anderen Teilen, ohne großen Aufwand treiben zu müssen. Sprich die Anwendung muss ins Web gestellt werden. Wer da nicht einen Server sein Eigen nennen kann, ist darauf angewiesen einen Hoster zu finden, der auch Rails Anwendungen unterstützt. Und auch dann ist trotz Capistrano und Co. immer noch ein recht hoher initialier Aufwand nötig, eh das Ergebnis perfekt läuft.

Das es auch wesentlich einfacher und komfortabler geht, zeigt uns Heroku. Auf die Seite bin ich vor ein paar Tagen aufmerksam geworden, als ich nach Rails Hostern Ausschau gehalten habe. Nachdem ich die Seiten gelesen habe, die beschreiben wie Heroku funktioniert war ich begeistert und musste den Dienst selber ausprobieren.

Heroku verspricht, dass das Deployment der eigenen Rails Anwendung so einfach ist, wie ein git push. Und ich kann euch sagen: Es ist so einfach!

Wie funktioniert das ganze nun? Einfach :)
Eh es losgehen kann muss ein kostenloser Heroku-Account her. Danach kann auch gleich das passende Gem installiert werden.

sudo gem install heroku

Als nächstes benötigen wir logischerweise unsere Rails-Anwendung, die mit Git versioniert wird.

rails meinesuperapp
cd meinesuperapp
git init
git add .
git commit -m "Meine SuperApp gestartet"

Damit die Anwendung nun auf die Heroku Server gelangt, muss ein Remote-Repository im Git eingerichtet werden. Dafür haben wir weiter oben das Heroku Gem installiert.

heroku create

Danach kann der aktuelle Stand per

git push heroku master

auf die Heroku-Server übertragen werden. Die sind dann so schlau und erkennen, dass es ich bei der Übertragung um eine Rails-Anwendung handelt und veranlassen alles Nötige, um die Anwendung im Internet bereit zu stellen. Jede weitere Änderung im Git Repository, die online gestellt werden soll, wird einfach per git push an den Heroku Server übertragen. Dieser tauscht dann den alten Stand der Anwendung mit dem neuen aus. Perfekt. Das ist Rails Deployment einfach gemacht.

Nun kommen wir aber zu den interessanten Fragen: Was kostet mich das? Nun; in der geringsten Ausprägung nichts, niende, nada. Wer nun mehr für seine Rails-Anwendung haben möchte, muss bezahlen und bekommt dafür ein dynamisch wachsendes System gestellt. Dynamisch wachsend heißt hier: Die Anwendung skaliert je nach Bedarf auf mehreren so genannten Dynos, was im Heroku-Jargon eine Verarbeitungseinheit darstellt. Je mehr davon aktuell laufen, je mehr gleichzeitige Zugriffe kann die Anwendung verarbeiten. Und das beste daran: Man bezahlt nur das, was auch verbraucht wird. Sprich wenn die Anwendung tagelang nur so vor sich hindümpelt und auf den großen Ansturm wartet, läuft sie auf nur einem oder wenigen Dynos. Gibt es dann ein Besucheransturm, schaltet das Heroku-System dynamisch weitere Dynos innerhalb von wenigen Sekunden dazu und verteilt so die Last. Schwindet der Besucherstrom, fährt Heroku die Dynos auf ein Minimum herunter.

Abgerechnet wird am Ende die Laufzeit der Dynos sekundengenau. Ein perfektes System. Anstatt einen riesigen Server mit enorm viel Power und zu horrenden monatlichen Kosten anzumieten, wird die Cloud bemüht. Und man zahlt nur für das, was auch wirklich verbraucht wurde.

Wer mir nun solch einen Provider in deutschen Landen nennen kann, dem bin ich zu ewigem Dank verpflichtet.

Tastaturkürzel für Visual Studio 2010 aktualisiert

28 Juli 2010

Wie ich euch bereits im Juni erzählt habe, gibt es von Microsoft eine Übersicht der Tastaturkürzel zu den Visual Studio Produkten. Diese Übersicht hat das Visual Studio Team nun überarbeitet und bietet eine aktuellere Version zum Herunterladen an.

Tastaturkürzel im Visual Studio 2010 C#

Die Übersicht ist sowohl im Letter als auch im A4 Format verfügbar und kann somit bestens ausgedruckt und neben den Bildschirm oder an die Pinnwand gehängt werden. Microsoft stellt auch HiRes Versionen bereit, die zum professionellen Druck gehen können.

Aktuellen GIT Zweig dauerhaft in der Konsole anzeigen

23 Juli 2010

Bei meiner Arbeit mit der Versionsverwaltung GIT bewege ich mich meistens auf der Konsole. Weiterhin organisiere ich meine Quellen innerhalb von einem GIT-Repository gerne in verschiedenen Zweigen. So existieren neben dem master meistens noch weitere Zweige. Das Wechseln zwischen diesen ist mit GIT schnell erledigt. Leider verliere ich so oft den Überblick, in welchem Zweig ich mich denn nun aktuell befinde. Dafür gibt es Abhilfe.

Mit GIT wird auch die Bash-Completion installiert. Diese stellt unter anderem mit __git_ps1 eine Funktion bereit, die mir den aktuellen GIT-Zweig ausgibt. Wie der Name der Funktion schon vermuten lässt, kann der Aufruf in der Deklaration von PS1 in der .bashrc hinterlegt werden. Also hab ich meine .bashrc wie folgt angepasst:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1 "(%s)") \$ '

Mit dem nächsten Öffnen der Bash wird mir in jedem GIT-Verzeichnis der aktuelle Zweig ausgegeben. Das ganze sieht dann so aus:

GIT Zweig in der Bash

Ich finde die Ausgabe schon sehr nützlich. Wie habt ihr eure PS1 eingestellt? Gibt es Alternativen, die mir vielleicht mehr Informationen kompakt darstellen können?

CCD in Brownfield Projekten – Teil 4

20 Juli 2010

Nach langem Warten ist es endlich so weit. Stefan Lieser und Ralf Westphal haben auf heise developer den vierten Teil ihrer Artikelreihe “CCD in Brownfield Projekten” veröffentlicht. In den letzten 3 Teilen haben die beiden beschrieben, wie ein Sicherheitsnetz, bestehend aus Quellcodeverwaltung, automatisierten Tests und automatischer Produktion, aufgebaut wird. In dem vierten Teil geht es nun darum, den Überblick in gewachsenen Brownfieldprojekten wiederzuerlangen.

Grundtenor des Artikels ist “Teile und Herrsche”. Die Architekten betrachten unter diesem Aspekt die enge Verwobenheit von GUI, Programmlogik und Datenhaltung, die wohl in jedem Brownfieldprojekt vorzufinden sein dürfte. Meist besteht eine Anwendung aus einer GUI sowie einer Datenhaltung. Und genau hier setzen die beiden Architekten an und erörtern recht gekonnt, warum genau dieser Umstand sowohl den Quellcode als auch die Entwickler in enge Schranken zwängt.

Als Abhilfe öffnen Ralf und Stefan den Blick für eine Vielzahl an GUIs sowie eine Vielzahl an Datenhaltungen. Jede spezialisiert auf ihren Einsatz. Klingt erst einmal komplizierter und nach mehr Arbeit. Ist es vielleicht auch. Aber durch diese Betrachtungsweise öffnen die beiden den Blick für die Partitionierung einer großen Softwareanwendung. Kleinere Partitionen mit klar abgesteckten Aufgaben sind leichter zu handhaben und zu überschauen als eine große Eierlegendewollmilchsau-Anwendung. Ganz im Sinne von “Teile und Herrsche”.

Neugierig geworden? Ich hoffe doch. Denn die Lektüre von CCD in Brownfield Projekten – Teil 4 ist sehr empfehlenswert.

[Linux] Single Sign On mittels SSH

15 Juli 2010

Nun dürfte es sich ja bereits herumgesprochen haben, dass auf entfernte Rechner per SSH zugegriffen wird. Sei es um die Rechner zu administrieren oder auf ein dort befindliches Git-, Subversion- oder was auch immer für ein Repository zugegriffen wird. Aus Sicherheitsgründen kommt zur Authentifizierung ein SSH-Schlüsselpaar zum Einsatz wobei der öffentliche Schlüssel auf jeden SSH-Server kopiert wird, der erreicht werden soll.

Soweit das Setup. Wenn nun auf den entfernten Rechner zugegriffen wird, erfolgt die Authentifizierung nicht durch das Übertragen eines Passwortes an den Server sondern per SSH-Schlüssel. Dieser kann und sollte auch beim Erzeugen mit einem Passwort gesichert werden. Beim Verwenden des SSH-Schlüssels wird nun lokal dieses Passwort abgefragt.

Wer nicht bei jedem Kontakt zum Server, was bei der Verwendung von GIT durchaus viele sein können, nicht jedesmal das Passwort eintippen möchte, greift zu ssh-add. Das schaltet nach Eingabe des korrekten Passwortes den SSH-Schlüssel frei und fügt ihm den SSH-Agenten zu. Dieser wird bei jedem SSH-Befehl nach dem freigeschalteten Schlüssel abgefragt.

Das ist schon recht komfortabel. Dank Pluggable Authentication Modules kann aber bereits beim Login am lokalen Rechner der SSH-Schlüssel freigeschalten und an den SSH-Agenten übergeben werden. Per

sudo aptitude install libpam-ssh

wird PAM-SSH installiert. Die Debian- und damit auch die Ubuntu-Pakete richten die Authentifizierung so ein, dass normal gegen das Unix-Passwort authentifiziert wird. Danach gelangt das Passwort an PAM-SSH, welches den SSH-Schlüssel frei schaltet. Vorausgesetzt natürlich beide Passwörter sind gleich.

Perfekt! Leider hat diese Konstellation einen Haken. Ist das Heimatverzeichnis per ecryptfs verschlüsselt, hat PAM keine Chance auf den sicheren SSH-Schlüssel, der im Normalfall in ~./ssh/ gespeichert wird, zuzugreifen. Das Problem ist bekannt und einen entsprechenden Bugreport gibt es auch.

Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Deutschland
This work by Andreas Richter is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Deutschland.