Passenger and OpenID

I recently updated Passenger 2.0.6 to 2.2.4 and experienced that openID logins were not working anymore. Seems like it tries to log output to some strange log location.

However: If anyone comes across the same problem: Simply add

OpenID::Util.logger = RAILS_DEFAULT_LOGGER

to your environment.rb file and everything will work like a treat again.

In Bruges.

Well, while there were some serious storms hitting Germany this weekend, we decided to fool the weather and escape to Belgium. Why Belgium? 2 reasons: Beaches there are the closest to the Rhein-Main-Area and we wanted to visit Bruges. Why Bruges? Because it looked so nice in “In Bruges” (or “Brügge sehen und sterben” for my German readers. Yes, I know. Another strange German sentence with too many words anyway!). Don’t be shocked: We didn’t drive there to get some fancy celebrity pictures or to plunge our faces into some weird cardbord cut-outs showing Colin Farrell. Well, might look nicer though. It was the landscape and the pitoresque oldtown of Bruges which attracted us upfront.

Actually, this was the first time Hollywood didn’t disappoint me: Bruges is really nice. A lot of small streets, nice and old buildings, most of them built in the 17th century. Definetely worth a visit. We went to a very nice restaurant in the evening called t’Schrijzverke. Ate good fish there and had plenty of good wine. We stood a night in our hotel (which is ok but looks much nicer on the website than in real life) and moved on to the seaside the day after.

To be honest:  we’ve been to all villages by the sea from Koksijde in the west to Kokke in the north-east. All of them are not nice (don’t want to say ugly).  Really. The beaches are excellent and beautiful. If you want do go sailing or surfing, you’ll find excellent conditions there.  But if you expect nice romantic villages with small restaurants at the beach: Visit another country. The beach is covered with huge hotels (7 floors mostly), appartment houses or casinos. Hard to believe that the government still allows building these houses. There are a lot of construction sites and the area from Koksijde to Oostende doesn’t have any free space on the beach. Oostende… well, I don’t want to talk about this city.

We were searching for a hotel and a nice spot all day long and drove along the cost for almost 70 kilometeres. Finally, we ended up in Knokke. Beautiful beaches but also ugly hotels. However, this small town was nicer than the ones western Oostende. So, we stood here and found a hotel: The hotel was built in 1980 (at least the elevator was telling that on a sign), so the furniture was. But it is clean and not wrecked at all: It looks like the time has stopped ticking since 1980. We enjoyed or time and found a really nice beach bar called “Bar Alain”. This 10 seats bar is in the middle of the beach and offers a small range of beers and wines. Nice service and relaxed ambience. Really enjoyed ourselves dispite the huge hotels in our back.

The next day we drove to Gent, a 240k popolation city. Just like Brugge, this city comes along with a lot of old buildings from the 16th century, a gothic cathedral, a water castle and a lot of small streets and squares. Seems like this city is very creative: There are lots of galleries, boutiques and musicians. We’ll definetely come back as 2 hours were simply not enough to discover this beautiful city.

Pfingstturnier Wiesbaden.

Jedes Jahr an Pfingsten findet das Pfingstturnier im Schlosspark in Biebrich statt. Ich bin nun alles andere als ein Pferdemensch. Abgesehen von merkwürdigen Choreographien, bei denen Pferde und Menschen im (geordneten?) Chaos auf dem Reitplatz unterwegs sind, bietet der Abend aber immer wieder auch für Laien das eine oder andere Highlight.

Anbei einige Impressionen des gestrigen Abends.  Wie immer: Klick aufs Foto bringt Euch weiter.

Rails’ to_xml w/ multiple associations.

This is a pain and took me about an hour to figure out today.

Rails ActiveRecord instances offer a nice function to render xml:

my_model.to_xml()

This method can be fed with a parameter

:include => []

to have all associations being integrated in the XML tree, just like when calling

my_model = MyModel.find( :include => [association])

But when I tried to use it, it always failed when dealing with nested associations. Until I found out the trick.
This is how it works: Basically you need to build a list of nested hashes.

class Book < ActiveRecord::Base
  has_many :pages
  has_one :owner
end
class Owner < ActiveRecord::Base
  has_many :books
end
class Page < ActiveRecord::Base
  has_many :spots_of_coffees
  belongs_to :book
end
class SpotOfCoffee < ActiveRecord::Base
  belongs_to :page
end

Now, you want to create a nice XML output containing a book, with its owner, pages and all spots of coffee?
Pretty easy:

  @book = Book.first
  includes = {} # let's build a hash; it's easier to read. At least for me...
  includes[:owner] = {} # owner has no association. So, let's take an empty hash as target
  includes[:pages] = { :include => :spots_of_coffee } #load pages and include its spots of coffee
    
  respond_to do |format|
    format.xml  { render :text => @book.to_xml(:include => includes) }
  end

Lustige Begegnung.

Da geht man mal für zwei Stunden wandern am Kloster Eberbach und kommt an eine kleine “Farm” mit lustigen Tieren. Offensichtlich Lamas, mitten im Wald. Noch komischer war, dass das Fell der Tiere offensichtlich schon sommertauglich geschoren war. Bis auf den Kopf. Aber seht selbst.

The best is yet to come: Sommer.

Tja, jetzt haben wir wieder zarte 11°C, die Sonne lässt sich nicht mehr blicken und ich habe ständig Déjà-vus: Ist es schon wieder November? Ich weiß, man sollte sich nicht beschweren, schließlich haben wir in den letzten drei Wochen einen kleinen Einblick bekommen, was Sommer bedeutet. Und schon ist es auch wieder rum. Aber bestimmt nur vorerst.

Um die Zeit bis zum richtigen Sommer zu verkürzen, habe ich erstens einige schöne Frühlingsimpressionen aus Wiesbaden und zweitens einen kleinen Musiktipp: A Camp – Stronger than Jesus.


Rails: Custom image sizes using has_attachment

Ever wanted to offer users the possibility to define their very own image sizes for uploaded pictures?

Here’s how you can quickly do that.

You will have a class acting as a an attachment such as:

class AssetImage < ActiveRecord::Base

has_attachment :content_type => :image,
:storage => :file_system,
:max_size => 1.megabytes,
:path_prefix => "public/system/images/#{ActiveRecord::Base.configurations[RAILS_ENV]['domain_name']}/assets/images",
:thumbnails => { :large => '450>', :normal => '300', :medium => '200', :thumbnail => [100,75] },
:processor => :rmagick

validates_as_attachment

...

First add a cattr_accessor to store your custom size in the class:

cattr_accessor :custom_size

Now, add a before_save callback which takes the assigned value and adds it to the list of requested image sizes. It is using the value as a minimum size while keeping aspect ratio.

#store custom size
def before_save
  return if AssetImage.custom_size.nil?
  attachment_options[:thumbnails][:custom] = AssetImage.custom_size.to_s + ">"
end

In your controller do something like this: Take a value from your parameters and store it in your model to have your image customized.

def add_image
  AssetImage.custom_size = params[:custom_size].to_i.to_s rescue "100"
  a = AssetImage.new(params[:asset_image])
  a.save
  redirect_to :action => :index
end

Tabubruch.

Manchmal muss man Dinge tun, von denen man immer dachte, man würde davon verschont bleiben. So manch schlaflose Nacht lag vor dem gestrigen, ereignisreichen Tag. Große Dinge warfen ihre Schatten voraus. Der eigene Charakter schien sich auf eine Gradwanderung zu begeben. Was wohl die eigene Familie denken würde? Drohte die gesellschaftliche Isolation? Wie sollte mein Leben danach weitergehen? Musste ich das Land verlassen? Gut vorbereitet und dennoch von einem unguten Gefühl begleitet ging es los, der Puls bereits auf 120.

Auch beim Betreten der Bühne in dem Saal im Hinterhof eines Hauses in Wiesbaden war mir nicht klar, was mich erwarten würde. Ob die vielen Farben, die ich in dem Moment wahrnahm, auf eine nahende Ohnmacht schließen ließen? Oder war der Saal wirklich so bunt? Nicht nur die Wände: nein auch farbenfrohe Wesen schienen sich in ungeordneter Weise in alle Richtungen zu bewegen. Augen zu und durch, es wird nicht so schlimm werden.

Die ersten Töne von “Bier her, Bier her! Oder wir fallen um!” sorgten für nahezu extatische Zustände bei den buten Objekten zu meinen Füßen. Diese hatten auch Stimmen und entpuppten sich als Menschen- unfassbar. Im Nu stimmten wir auch schon “Bier ist die Seele vom Klavier” an. Weitere extatische und verzückte Schreie. Noch war ich am Leben. Gefährlich wurde es erst beim Höhepunkt unserer Show: Es gibt kein Bier auf Hawaii. Ich habe das nie überprüft, aber vielleicht stimmt das echt. Das würde zumindest die absolute Inbrunst erklären, mit welcher die menschlichen Bunt-Wesen im Zuschauerraum mitsangen. Solch ehrliche Textzeilen kann man nur singen, wenn der Inhalt den Tatsachen entspricht. Merke: Nicht nach Hawaii. Zumindest nicht ohne Bier. Der fast militärische Gesang bei diesem Lied ließ mich erschaudern. Dann aprubte Stille.

Noch kurz überwunden und das eine oder andere zaghafte “Helau” gerufen- aus Angst, sonst gelyncht zu werden. Offensichtlich ist dies ein freundlicher Gruß, denn wir wurden unter rythmischem Klatschen von der Bühne geführt. Vielleicht eine Art Friendserklärung?

Wie auch immer: Ich lebe noch. Aber ich habe das Gefühl, davon irgendwann einmal meinem Therapeuten zu berichten.

WordPress und iPhone

So, nun kann ich auch direkt aus meinem iPhone bloggen. Ist das nicht toll?

Es gibt ein nettes Tool, das direkt auf die RPC Schnittstelle meines Blogs zugreift. Somit sitze ich gerade im Office in Dublin und poste fleißig in mein Blog.

Wer das kleine Programm sucht, findet es im App Store unter “WordPress” (Überraschung). Unterstützt werden alle Versionen von WordPress ab 2.5.1