Jul 03
Auch mit Rails 2.1 und dem xss_terminate Plugin scheint es Probleme zu geben. Beim Speichern eines Objekts kommt immer der Fehler
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
Der Fix ist einfach: Eine neue Version des Plugins herunterladen, diese ist gefixt und das Problem ist gelöst.
Jul 03
Wie man an meinen letzten beiden Blogeinträgen erkennt, versuche ich momentan ein Projekt auf Rails 2.1 umzustellen. Das ist nicht all zu schwer, da wir das Projekt vorher auf Rails 2.0 laufen hatten, allerdings gibt es doch einige Stellen die mich wundern.
Zum Einen lief Gettext nach der Umstellung nicht mehr und jetzt auch acts_as_taggable_on_steroids nicht mehr. Beim Aufruf von xyz.tag_list gab es eine Fehlermeldung:
stack level too deep
Weiterlesen »
Jun 26
Ohne jetzt hier wieder den alten Kampf zwischen WebORB und RubyAMF als Schnittstelle zwischen Ruby und Flex anzufachen, wollte ich hier etwas aus unserer eigenen Erfahrung berichten.
Vor einiger Zeit sind haben wir ein größeres Projekt von WebORB auf RubyAMF umgebaut. Wir hatten die Anwendung zuerst mit WebORB aufgebaut, da das WebORB besser gepflegt schien und RubyAMF nicht mehr weiter entwickelt wird (jedenfalls nicht vom ursprünglichen Entwickler und nicht momentan, wer weis was die Zukunft bringt). Doch mit der Zeit stellten wir fest, dass WebORB seeehr langsam ist und ausserdem sehr speicherhungrig. Wir haben ein System mit mehreren Mongrel-Instanzen laufen, dass von einem monit überwacht wird.
Weiterlesen »
Jun 06
Wieder zurück aus China und schon fleißig am arbeiten!
Nachdem wir 3 Wochen Urlaub in China gemacht haben, ohne den Laptop mit zu nehmen und überhaupt nicht ans arbeiten zu denken, bin ich jetzt seit 1 Woche wieder hier und schon wieder fleißig dabei. Vor ein paar Tagen gabs ein neues Projekt von einem Web2.0-Startup, wobei meine beiden Chefs meinten, es wäre gut wenn ich für dieses Projekt als Projektleiter fungiere, also Ansprechperson bin, die Arbeiten koordiniere und gleichzeitig natürlich auch noch programmiere. Spaß machen tuts, im Moment läufts aber auch noch ganz gut. Wer weis wie es zum Abgabetermin hin wird
Ausserdem habe ich heute mit meinem Chef einen kleinen Workshop zum Thema OpenID bei einem großen, bekannten Telefon-/Handy-Konzern gegeben, wobei ich nur den kleineren Teil der Praxis und der Umsetzung mit RubyOnRails durchgeführt habe. Das hieß heute morgen um 5 Uhr aufstehen und um 6 Uhr mit dem Zug nach Düsseldorf. Solange auf den Beinen zu sein, hinterlässt so langsam seine Spuren und ich freue mich nachher ins Bett zu fallen.
Zu unseren Ausführungen zu OpenID mit RubyOnRails werde ich demnächst näheres berichten, wenn die Zeit zum ordentlichen bloggen wieder reicht.
Apr 08
In den letzten Tagen habe ich bei Indiginox unsere erste Facebook-Applikation programmiert. Heute war der Tag der Veröffentlichung auf Facebook und damit haben wir den Lebenstraum meines Chefs erfüllt
Where Did I Leave It?
Diese Applikation nutzt die Weisheit der Masse, um verlorene Dinge wieder zu finden. Wie das?
Ein User der etwas wiedergefunden hat, geht auf http://apps.facebook.com/wheredidileaveit und speichert den Fundort ab. Sucht ein anderer Benutzer z.B. nach seinem Mobiltelefon, so erhält er als Ergebnis die Orte an denen andere ihr Mobiltelefon wiedergefunden haben. Diese Fundorte werden in einer Tag-Cloud dargestellt, wobei die häufigsten Orte größer dargestellt werden. Dadurch erhält der Suchende wertvolle Tipps, an welchen Stellen er noch suchen könnte.
Um so mehr Personen diese Applikation nutzen, um so genauer werden die Suchergebnisse, da natürlich repräsentativere Aussagen zum möglichen Fundort eines Objekts gemacht werden können.
Die Anwendung wurde mit RubyOnRails entwickelt und daraufhin in Facebook eingebaut. Dabei kam das Rails-Plugin rfacebook zum Einsatz, dass eine einfache Einbindung von Rails-Projekten in Facebook ermöglicht. Ausserdem werden neue Einträge zu Fundorten im Facebook Mini-Feed des Users und per Twitter-Feed (Username: wheredidileave) ausgegeben. Diese Anwendung ist ein Beispiel für die Integration verschiedenster aktueller Web2.0-Anwendungen und deren Möglichkeiten.
Die Anwendung wurde heute freigegeben und ist nun für jeden Facebook-User zugänglich.
Where Did I Leave It?
Apr 05
Endlich mal wieder ein Post von mir!
Nach langer Zeit der Abstinenz habe ich wieder Lust zu schreiben und hier gleich der zweite Post heute:
ActionMailer und Emails mit Anhang
Hier als Beispiel eine Funktion aus einem MailerModel:
def newsletter(letter, recipient, attach = nil)
@recipients = recipient.email
@from = EMAIL_FROM_ADDRESS_CONSTANT
@subject = letter.title@body["letter"] = letter
@body["recipient"] = recipient
part :content_type => "text/html",
:body => render_message('newsletter', @body)
unless attach.nil?
attachment :content_type => attach.content_type.to_s,
:body => File.read(attach.full_filename().to_s),
:filename => attach.filename
end
end
Beim Versenden von E-Mails mit Attachment muss die E-Mail als Multipart-Mail codiert werden, da sonst der eigentliche Text/Body der E-Mail nicht mit verschickt wird. Der Text der E-Mail wird dabei als text/html oder text/plain über die Funktion render_message(”filename_der_view_der_email”, @body”) erstellt. Das Attachment wird mit dem Content- Type der Datei die versendet wird codiert. Das Plugin Attachment_fu ist dabei eine großartige Hilfe, aber dazu vielleicht mehr in einem anderen Post.
Bis denne!
Jan 17
Stemming ist ein Verfahren, um – mit Hilfe von Algorithmen – den Wortstamm von Wörtern zu ermitteln. Dies wird z.B. bei Suchmaschinen angewendet, damit die Suche nicht an einem eingebenen Wort scheitert, dass zwar nicht in der Datenbank als solches zu finden ist, wohl aber dessen Wortstamm, z.B. Gitarren => Gitarre.Ferret und ActsAsFerret bietet eine einfach zu konfigurierende Unterstützung für dieses Stemming:Eine Datei
im lib/-Verzeichnis anlegen:
require 'rubygems'
require 'ferret'
class StemmingAnalyzer < Ferret::Analysis::Analyzer
include Ferret::Analysis
def initialize(stop_words = FULL_GERMAN_STOP_WORDS)
@stop_words = stop_words
end
def token_stream(field, str)
StemFilter.new(StopFilter.new(LowerCaseFilter.new(StandardTokenizer.new(str)),@stop_words), 'de')
end
end
Im zu durchsuchenden Model dann folgendes:
acts_as_ferret :fields =>
{ :bandname => {}, :firstName_if_public => {}, :tag_list => {}, :comment_list => {}},
:ferret => { :analyzer => StemmingAnalyzer.new, :remote => true}
Dabei ist darauf zu achten, dass, wenn ihr den DrB-Server verwenden wollt, :remote => true innerhalb des :ferret-Attributs sein muss. Bei uns war dieses ausserhalb, woraufhin bei einem Aufruf von XYZ.rebuild_index nur nil zurückgeliefert wurde und Stemming nicht funktionierte. Siehe unten unter UPDATE. Über script/console kann dann schön getestet werden. Wenn man nebenbei noch die log/ferret_server.log anschaut, kann man sehen, dass jetzt automatisch Suchwörter wie “und” in XYZ.find_by_contents(”Gitarren und Geigen”) entfernt werden. Ausserdem kann man sehen, dass z.B. “Geigen” auf “Geig” reduziert wird, womit sich dann auch Wörter wir Geige finden lassen.
UPDATE
Nach einigen Problemen mit Ferret in unserem Projekt ist klar geworden, dass der Drb-Server mit meiner Konfiguration nicht verwendet wurde. Interessanterweise nur auf unserem Development-Server. Hier eine acts_as_ferret Konfig die funktioniert:
acts_as_ferret ({:fields =>
[:bandname, :shortname, :tag_list, :comment_list],
:remote => true},
{:analyzer => StemmingAnalyzer.new})
Jan 15
… und der heisst Aljoscha Everding.
Wenn er da ist, dann sitzt er genau hier, mir gegenüber, und wie man schon an seinen Stuhl-Armlehnen sehen kann, ist er nicht grad der kleinste
Aber ein total Netter. Gestern war der erste Tag und er durfte sich erstmal mit der Installation unseres Projektes ligx.de auf seinem neuen Macbook ausruhen. Heute kann er endlich zeigen was in ihm steckt
Aber das wird wohl kein Problem werden, schließlich hat er seine Diplomarbeit in RubyOnRails gemacht.
Also dann, auf eine gute Zusammenarbeit!

Sep 17
Gestern war der erste Tag (inoffizielle) RailsConf-Tag: BratwurstOnRails. Die Berliner Rails-User-Group hatte einen fröhlichen Grillabend organisiert der wie das Foto zeigt auch gut besucht wurde.

Sep 15

Morgen nachmittag gehts los mit dem ICE zur RailsConfEurope in Berlin. Wirklich interessante Themen und Tutorials stehen an und natürlich BratwurstOnRails morgen abend
See you at RailsConf!