<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Der Gleisarbeiter &#187; Ruby</title>
	<atom:link href="http://www.gleisarbeiter.de/category/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gleisarbeiter.de</link>
	<description></description>
	<lastBuildDate>Wed, 16 Dec 2009 08:52:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WebORB vs. RubyAMF</title>
		<link>http://www.gleisarbeiter.de/2008/06/26/weborb-vs-rubyamf/</link>
		<comments>http://www.gleisarbeiter.de/2008/06/26/weborb-vs-rubyamf/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 17:33:37 +0000</pubDate>
		<dc:creator>gleisarbeiter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[RubyAMF]]></category>
		<category><![CDATA[Mongrel]]></category>
		<category><![CDATA[Monit]]></category>
		<category><![CDATA[WebORB]]></category>

		<guid isPermaLink="false">http://www.gleisarbeiter.de/index.php/2008/06/26/weborb-vs-rubyamf/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>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.<br />
<span id="more-45"></span><br />
Zur WebORB-Zeit hatten wir annähernd jeden Tag einen Mongrel-Neustart, da der Speicherbedarf zu groß geworden war. Durch den Umstieg auf RubyAMF hatten wir jetzt seit langem keinen Neustart mehr benötigt. Es scheint also, als wäre irgendwo in WebORB ein Speicherleck, dass schließlich die Mongrels volllaufen lässt. Ausserdem ist RubyAMF ca. 10mal schneller, was die Requests/sekunde an geht.</p>
<p>Ein weiterer schöner Vorteil von RubyAMF ist, dass es eindeutig mehr Ruby ist. Die Services die man mit WebORB schreibt sind im Stil von Java-Webservices aufgebaut, man hat einen eigenen Ordner &#8220;services&#8221; im Rails-Project in dem dann die Services zu finden sind. Die RubyAMF-Services sind aber normale Controller, die von ApplicationController abgeleitet sind, man kann Filter verwenden, sogar wieder logger.debug u.ä. was bei WebORB nur über Umwege (RAILS_LOGGER_DEFAULT.debug) möglich war. Die Parameter von Flex kommen jetzt als Hash (z.B. params[0][:username]) herein und können so schön weiterverwendet werden. Selbst ganze Objekte können so im Parameter-Hash übergeben werden: params[0][:user_object]</p>
<p>Insgesamt scheint mir RubyAMF eine sehr gute Wahl gewesen zu sein und ich würde ich freuen wenn jemand noch weitere Projekte für uns hat, die wir mit RubyAMF umsetzen können.</p>
<p>Wir sind also immer auf der Suche nach neuen Flex/Rails Projekten!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gleisarbeiter.de/2008/06/26/weborb-vs-rubyamf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenID und Konsorten</title>
		<link>http://www.gleisarbeiter.de/2008/06/06/openid-und-konsorten/</link>
		<comments>http://www.gleisarbeiter.de/2008/06/06/openid-und-konsorten/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 15:14:49 +0000</pubDate>
		<dc:creator>gleisarbeiter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[Web2.0]]></category>
		<category><![CDATA[Workshop]]></category>

		<guid isPermaLink="false">http://www.gleisarbeiter.de/index.php/2008/06/06/openid-und-konsorten/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Wieder zurück aus China und schon fleißig am arbeiten!</p>
<p>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 <img src='http://www.gleisarbeiter.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<p>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.</p>
<p>Zu unseren Ausführungen zu OpenID mit RubyOnRails werde ich demnächst näheres berichten, wenn die Zeit zum ordentlichen bloggen wieder reicht. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.gleisarbeiter.de/2008/06/06/openid-und-konsorten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erste Facebook-Applikation online: Where Did I Leave It?</title>
		<link>http://www.gleisarbeiter.de/2008/04/08/erste-facebook-applikation-online-where-did-i-leave-it/</link>
		<comments>http://www.gleisarbeiter.de/2008/04/08/erste-facebook-applikation-online-where-did-i-leave-it/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 19:29:30 +0000</pubDate>
		<dc:creator>gleisarbeiter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[Applikation]]></category>
		<category><![CDATA[Fundort]]></category>
		<category><![CDATA[masse]]></category>
		<category><![CDATA[rfacebook]]></category>
		<category><![CDATA[Suche]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[weisheit]]></category>
		<category><![CDATA[WhereDidILeaveIt]]></category>
		<category><![CDATA[wisdom]]></category>

		<guid isPermaLink="false">http://www.gleisarbeiter.de/index.php/2008/04/08/erste-facebook-applikation-online-where-did-i-leave-it/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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 <a href="http://www.silentpenguin.com" target="_blank">meines Chefs</a> erfüllt <img src='http://www.gleisarbeiter.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://apps.facebook.com/wheredidileaveit" title="Where Did I Leave It?" target="_blank">Where Did I Leave It?</a></p>
<p>Diese Applikation nutzt die Weisheit der Masse, um verlorene Dinge wieder zu finden. Wie das?</p>
<p>Ein User der etwas wiedergefunden hat, geht auf <a href="http://apps.facebook.com/wheredidileaveit" target="_blank">http://apps.facebook.com/wheredidileaveit</a> 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.</p>
<p>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.</p>
<p>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: <a href="http://twitter.com/wheredidileave" target="_blank">wheredidileave</a>) ausgegeben. Diese Anwendung ist ein Beispiel für die Integration verschiedenster aktueller Web2.0-Anwendungen und deren Möglichkeiten.</p>
<p>Die Anwendung wurde heute freigegeben und ist nun für jeden Facebook-User zugänglich.</p>
<p><a href="http://apps.facebook.com/wheredidileaveit" title="Where Did I Leave It?" target="_blank">Where Did I Leave It? </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gleisarbeiter.de/2008/04/08/erste-facebook-applikation-online-where-did-i-leave-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RubyonRails Emails mit Anhang per ActionMailer</title>
		<link>http://www.gleisarbeiter.de/2008/04/05/rubyonrails-emails-mit-anhang-per-actionmailer/</link>
		<comments>http://www.gleisarbeiter.de/2008/04/05/rubyonrails-emails-mit-anhang-per-actionmailer/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 14:48:53 +0000</pubDate>
		<dc:creator>gleisarbeiter</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[ActionMaile]]></category>
		<category><![CDATA[anhang]]></category>
		<category><![CDATA[Emails]]></category>
		<category><![CDATA[Multipart]]></category>
		<category><![CDATA[RubyOnRails]]></category>

		<guid isPermaLink="false">http://www.gleisarbeiter.de/index.php/2008/04/05/rubyonrails-emails-mit-anhang-per-actionmailer/</guid>
		<description><![CDATA[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&#40;letter, recipient, attach = nil&#41;
  @recipients = recipient.email
  @from = EMAIL_FROM_ADDRESS_CONSTANT
  @subject = letter.title@body&#91;&#34;letter&#34;&#93; = letter
  [...]]]></description>
			<content:encoded><![CDATA[<p>Endlich mal wieder ein Post von mir!<br />
Nach langer Zeit der Abstinenz habe ich wieder Lust zu schreiben und hier gleich der zweite Post heute:</p>
<p>ActionMailer und Emails mit Anhang</p>
<p>Hier als Beispiel eine Funktion aus einem MailerModel:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> newsletter<span style="color:#006600; font-weight:bold;">&#40;</span>letter, recipient, attach = <span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#0066ff; font-weight:bold;">@recipients</span> = recipient.<span style="color:#9900CC;">email</span>
  <span style="color:#0066ff; font-weight:bold;">@from</span> = EMAIL_FROM_ADDRESS_CONSTANT
  <span style="color:#0066ff; font-weight:bold;">@subject</span> = letter.<span style="color:#9900CC;">title</span>@body<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;letter&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> = letter
  <span style="color:#0066ff; font-weight:bold;">@body</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;recipient&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> = recipient
  part <span style="color:#ff3333; font-weight:bold;">:content_type</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;text/html&quot;</span>,
       <span style="color:#ff3333; font-weight:bold;">:body</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> render_message<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'newsletter'</span>, <span style="color:#0066ff; font-weight:bold;">@body</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">unless</span> attach.<span style="color:#0000FF; font-weight:bold;">nil</span>?
    attachment <span style="color:#ff3333; font-weight:bold;">:content_type</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> attach.<span style="color:#9900CC;">content_type</span>.<span style="color:#9900CC;">to_s</span>,
               <span style="color:#ff3333; font-weight:bold;">:body</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">read</span><span style="color:#006600; font-weight:bold;">&#40;</span>attach.<span style="color:#9900CC;">full_filename</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_s</span><span style="color:#006600; font-weight:bold;">&#41;</span>,
               <span style="color:#ff3333; font-weight:bold;">:filename</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> attach.<span style="color:#9900CC;">filename</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>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(&#8221;filename_der_view_der_email&#8221;, @body&#8221;) erstellt. Das Attachment wird mit dem Content- Type der Datei die versendet wird codiert. Das <a href="http://agilewebdevelopment.com/plugins/attachment_fu" target="_blank">Plugin Attachment_fu</a> ist dabei eine großartige Hilfe, aber dazu vielleicht mehr in einem anderen Post.</p>
<p>Bis denne!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gleisarbeiter.de/2008/04/05/rubyonrails-emails-mit-anhang-per-actionmailer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Array#delete_at Rätsel</title>
		<link>http://www.gleisarbeiter.de/2008/04/05/arraydelete_at-ratsel/</link>
		<comments>http://www.gleisarbeiter.de/2008/04/05/arraydelete_at-ratsel/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 14:39:17 +0000</pubDate>
		<dc:creator>gleisarbeiter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[delete_at]]></category>

		<guid isPermaLink="false">http://www.gleisarbeiter.de/index.php/2008/04/05/arraydelete_at-ratsel/</guid>
		<description><![CDATA[Schonmal versucht die ersten 100 Einträge in einem Array so zu löschen?

0.upto&#40;100&#41; do &#124;index&#124;


 array.delete_at&#40;index&#41;


end

Ich tats und verwunderte mich warum die Einträge in dem Array anscheinend willkürlich gelöscht wurden. Tataa, nach halbstündiger Ärgerei die Lösung:

0.upto&#40;100&#41; do  


  array.delete_at&#40;0&#41;


end

Wie blöd, aber dadurch soll man ja am Besten lernen :-/ 
]]></description>
			<content:encoded><![CDATA[<p>Schonmal versucht die ersten 100 Einträge in einem Array so zu löschen?</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">0.<span style="color:#9900CC;">upto</span><span style="color:#006600; font-weight:bold;">&#40;</span>100<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>index<span style="color:#006600; font-weight:bold;">|</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"> <span style="color:#CC0066; font-weight:bold;">array</span>.<span style="color:#9900CC;">delete_at</span><span style="color:#006600; font-weight:bold;">&#40;</span>index<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Ich tats und verwunderte mich warum die Einträge in dem Array anscheinend willkürlich gelöscht wurden. Tataa, nach halbstündiger Ärgerei die Lösung:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">0.<span style="color:#9900CC;">upto</span><span style="color:#006600; font-weight:bold;">&#40;</span>100<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span>  </pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  <span style="color:#CC0066; font-weight:bold;">array</span>.<span style="color:#9900CC;">delete_at</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Wie blöd, aber dadurch soll man ja am Besten lernen :-/ </p>
]]></content:encoded>
			<wfw:commentRss>http://www.gleisarbeiter.de/2008/04/05/arraydelete_at-ratsel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stemming mit ActsAsFerret</title>
		<link>http://www.gleisarbeiter.de/2008/01/17/stemming-mit-actsasferret/</link>
		<comments>http://www.gleisarbeiter.de/2008/01/17/stemming-mit-actsasferret/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 14:53:49 +0000</pubDate>
		<dc:creator>gleisarbeiter</dc:creator>
				<category><![CDATA[Ferret]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[ActsAsFerret]]></category>
		<category><![CDATA[acts_as_ferret]]></category>
		<category><![CDATA[Analysis]]></category>
		<category><![CDATA[Stemming]]></category>

		<guid isPermaLink="false">http://www.gleisarbeiter.de/?p=14</guid>
		<description><![CDATA[Stemming ist ein Verfahren, um &#8211; mit Hilfe von Algorithmen &#8211; 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 =&#62; Gitarre.Ferret und ActsAsFerret bietet eine [...]]]></description>
			<content:encoded><![CDATA[<p>Stemming ist ein Verfahren, um &#8211; mit Hilfe von Algorithmen &#8211; 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 =&gt; Gitarre.Ferret und ActsAsFerret bietet eine einfach zu konfigurierende Unterstützung für dieses Stemming:Eine Datei</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">stemming_analyzer.<span style="color:#9900CC;">rb</span></pre></div></div>

<p>im lib/-Verzeichnis anlegen:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'ferret'</span>
<span style="color:#9966CC; font-weight:bold;">class</span> StemmingAnalyzer <span style="color:#006600; font-weight:bold;">&amp;</span>lt; <span style="color:#6666ff; font-weight:bold;">Ferret::Analysis::Analyzer</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#6666ff; font-weight:bold;">Ferret::Analysis</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span>stop_words = FULL_GERMAN_STOP_WORDS<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@stop_words</span> = stop_words
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">def</span> token_stream<span style="color:#006600; font-weight:bold;">&#40;</span>field, str<span style="color:#006600; font-weight:bold;">&#41;</span>
  StemFilter.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>StopFilter.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>LowerCaseFilter.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>StandardTokenizer.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>str<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>,@stop_words<span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'de'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Im zu durchsuchenden Model dann folgendes:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">acts_as_ferret <span style="color:#ff3333; font-weight:bold;">:fields</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt;
  <span style="color:#006600; font-weight:bold;">&#123;</span>  <span style="color:#ff3333; font-weight:bold;">:bandname</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>, <span style="color:#ff3333; font-weight:bold;">:firstName_if_public</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>,  <span style="color:#ff3333; font-weight:bold;">:tag_list</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>, <span style="color:#ff3333; font-weight:bold;">:comment_list</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#125;</span>,
  <span style="color:#ff3333; font-weight:bold;">:ferret</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006600; font-weight:bold;">&#123;</span>    <span style="color:#ff3333; font-weight:bold;">:analyzer</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; StemmingAnalyzer.<span style="color:#9900CC;">new</span>, <span style="color:#ff3333; font-weight:bold;">:remote</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p><strike>Dabei ist darauf zu achten, dass, wenn ihr den DrB-Server verwenden wollt, :remote =&gt; 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.</strike> <strong>Siehe unten unter UPDATE</strong>. Ü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 &#8220;und&#8221; in XYZ.find_by_contents(&#8221;Gitarren und Geigen&#8221;) entfernt werden. Ausserdem kann man sehen, dass z.B. &#8220;Geigen&#8221; auf &#8220;Geig&#8221; reduziert wird, womit sich dann auch Wörter wir Geige finden lassen.</p>
<p><b>UPDATE</b></p>
<p>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:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">acts_as_ferret <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>:fields <span style="color:#006600; font-weight:bold;">=&gt;</span>
      <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:bandname</span>, <span style="color:#ff3333; font-weight:bold;">:shortname</span>, <span style="color:#ff3333; font-weight:bold;">:tag_list</span>, <span style="color:#ff3333; font-weight:bold;">:comment_list</span><span style="color:#006600; font-weight:bold;">&#93;</span>,
       <span style="color:#ff3333; font-weight:bold;">:remote</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#125;</span>,
      <span style="color:#006600; font-weight:bold;">&#123;</span>:analyzer <span style="color:#006600; font-weight:bold;">=&gt;</span> StemmingAnalyzer.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.gleisarbeiter.de/2008/01/17/stemming-mit-actsasferret/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex &amp; RubyOnRails</title>
		<link>http://www.gleisarbeiter.de/2008/01/11/flex-rubyonrails/</link>
		<comments>http://www.gleisarbeiter.de/2008/01/11/flex-rubyonrails/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 16:28:45 +0000</pubDate>
		<dc:creator>gleisarbeiter</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Ligx]]></category>
		<category><![CDATA[Mapping]]></category>
		<category><![CDATA[Onlinemusicstar]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[WebORB]]></category>

		<guid isPermaLink="false">http://www.gleisarbeiter.de/?p=29</guid>
		<description><![CDATA[Onlinemusicstar.de ist jetzt Ligx.de und dazu noch mit Flash/Flex Oberfläche. Nachdem wir uns bei der Umsetzung  vorerst auf HTML+RoR beschränkt hatten, ist aus diesem Projekt jetzt eine Flex+RoR-Anwendung geworden. Dabei wird auf Server-Seite das RailsPlugin WebORB verwendet, mit dem im J2EE-Stil Webservices zur Verfügung gestellt und diese dann von Flex aufgerufen werden können.
Durch die [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.onlinemusicstar.de" target="_blank">Onlinemusicstar.de</a> ist jetzt <a href="http://www.ligx.de" target="_blank">Ligx.de</a> und dazu noch mit Flash/Flex Oberfläche. Nachdem wir uns bei der Umsetzung  vorerst auf HTML+RoR beschränkt hatten, ist aus diesem Projekt jetzt eine Flex+RoR-Anwendung geworden. Dabei wird auf Server-Seite das RailsPlugin WebORB verwendet, mit dem im J2EE-Stil Webservices zur Verfügung gestellt und diese dann von Flex aufgerufen werden können.</p>
<p>Durch die Möglichkeiten des ClassMappings haben wir ausserdem die Möglichkeit RubyObjekte zwischen Flex und RoR hin- und herzuschicken, anstatt POST-Variablen oder xml-Daten, was doch alles sehr vereinfacht. Ein Beispiel:</p>

<div class="wp_syntax"><div class="code"><pre class="rails" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> updateUserData<span style="color:#006600; font-weight:bold;">&#40;</span>user_object<span style="color:#006600; font-weight:bold;">&#41;</span>
  user_object.<span style="color:#5A0A0A; font-weight:bold;">save</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Diese Funktion speichert die persönlichen Daten eines Users ab. Das interessante daran ist, dass wir nicht etwas einen Block an Variablen erhalten (den wir dann über params[...] speichern müssten), sondern wir erhalten von der Flex-Seite ein User-Objekt, welches wir auch sofort speichern können und können genauso einfach Objekte (die über das Classmapping definiert wurden) zurückschicken.</p>
<p>Was dabei herauskommt sieht man auf <a href="http://www.ligx.de">www.ligx.de</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gleisarbeiter.de/2008/01/11/flex-rubyonrails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First day at RailsConfEurope &#8211; BratwurstOnRails</title>
		<link>http://www.gleisarbeiter.de/2007/09/17/first-day-at-railsconfeurope-bratwurstonrails/</link>
		<comments>http://www.gleisarbeiter.de/2007/09/17/first-day-at-railsconfeurope-bratwurstonrails/#comments</comments>
		<pubDate>Mon, 17 Sep 2007 06:10:08 +0000</pubDate>
		<dc:creator>gleisarbeiter</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[RailsConf]]></category>

		<guid isPermaLink="false">http://www.gleisarbeiter.de/?p=28</guid>
		<description><![CDATA[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.
 			 
]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p><a href="http://gleisarbeiter.files.wordpress.com/2007/09/bild003.jpg" title="bild003.jpg"><img src="http://gleisarbeiter.files.wordpress.com/2007/09/bild003.thumbnail.jpg" alt="bild003.jpg" /></a><a href="void(0)" id="file-link-32" title="bild005.jpg" class="file-link image"> 			 <img src="http://gleisarbeiter.files.wordpress.com/2007/09/bild005.thumbnail.jpg" alt="bild005.jpg" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gleisarbeiter.de/2007/09/17/first-day-at-railsconfeurope-bratwurstonrails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RailConf 2007 in Berlin</title>
		<link>http://www.gleisarbeiter.de/2007/09/15/railconf-2007-in-berlin/</link>
		<comments>http://www.gleisarbeiter.de/2007/09/15/railconf-2007-in-berlin/#comments</comments>
		<pubDate>Sat, 15 Sep 2007 11:18:02 +0000</pubDate>
		<dc:creator>gleisarbeiter</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby/Rails]]></category>

		<guid isPermaLink="false">http://www.gleisarbeiter.de/?p=26</guid>
		<description><![CDATA[


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!
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.railsconfeurope.com"><br />
<img src="http://conferences.oreillynet.com/images/railseurope2007/banners/468x60.jpg" width="468" height="60" border="0" alt="RailsConf Europe 2007" /><br />
</a></p>
<p>Morgen nachmittag gehts los mit dem ICE zur RailsConfEurope in Berlin. Wirklich interessante Themen und Tutorials stehen an und natürlich BratwurstOnRails morgen abend <img src='http://www.gleisarbeiter.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>See you at RailsConf!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gleisarbeiter.de/2007/09/15/railconf-2007-in-berlin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails Functionality Tests mit Goldberg</title>
		<link>http://www.gleisarbeiter.de/2007/08/30/rails-functionality-tests-mit-goldberg/</link>
		<comments>http://www.gleisarbeiter.de/2007/08/30/rails-functionality-tests-mit-goldberg/#comments</comments>
		<pubDate>Thu, 30 Aug 2007 06:52:23 +0000</pubDate>
		<dc:creator>gleisarbeiter</dc:creator>
				<category><![CDATA[Goldberg]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Benutzerverwaltung]]></category>
		<category><![CDATA[Functionality Tests]]></category>
		<category><![CDATA[Rollensystem]]></category>

		<guid isPermaLink="false">http://www.gleisarbeiter.de/?p=25</guid>
		<description><![CDATA[Nach dem ich mich jetzt so einige Zeit mit dem Testen von Railsapplikationen beschäftige, habe ich wieder etwas Interessantes herausgefunden.
Wie kann ich meine Goldberg-Tabelleninhalte möglichst einfach in meine Testdatenbank laden?
Eigentlich ganz einfach:
Im Rails_Root

rake goldberg:dump_bootstrap

aufrufen, damit werden die Tabelleninhalte von Goldberg in das Verzeichnis vendor/plugins/goldberg/db gedumpt und zwar im yml-Format.
In den Functionality/Unit-Tests z.B. in der setup [...]]]></description>
			<content:encoded><![CDATA[<p>Nach dem ich mich jetzt so einige Zeit mit dem Testen von Railsapplikationen beschäftige, habe ich wieder etwas Interessantes herausgefunden.</p>
<p>Wie kann ich meine Goldberg-Tabelleninhalte möglichst einfach in meine Testdatenbank laden?</p>
<p>Eigentlich ganz einfach:</p>
<p>Im Rails_Root</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">rake goldberg:dump_bootstrap</pre></div></div>

<p>aufrufen, damit werden die Tabelleninhalte von Goldberg in das Verzeichnis vendor/plugins/goldberg/db gedumpt und zwar im yml-Format.</p>
<p>In den Functionality/Unit-Tests z.B. in der setup Methode einfach den Befehl</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">GoldbergMigration.<span style="color:#9900CC;">load_bootstrap</span></pre></div></div>

<p>aufrufen und die Test-Tabellen werden mit den aktuellen Goldbergdaten gefüllt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gleisarbeiter.de/2007/08/30/rails-functionality-tests-mit-goldberg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
