<?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>Linux @ Home &#187; ruby</title>
	<atom:link href="http://www.linuxhome.ch/tag/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.linuxhome.ch</link>
	<description>Pinguine, Politik undsoweiter...</description>
	<lastBuildDate>Thu, 29 Jul 2010 22:14:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=997</generator>
		<item>
		<title>Singleton-Pattern in Perl und Ruby</title>
		<link>http://www.linuxhome.ch/geek/singleton-pattern-in-perl-und-ruby/</link>
		<comments>http://www.linuxhome.ch/geek/singleton-pattern-in-perl-und-ruby/#comments</comments>
		<pubDate>Sat, 09 Feb 2008 18:31:32 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.linuxhome.ch/ruby/singleton-pattern-in-perl-und-ruby/</guid>
		<description><![CDATA[Als auf der Arbeit einmal Langeweile angesagt war, diskutierte ich mit meinem lieben Arbeitskollegen Boris über Software-Patterns (Entwurfsmuster). Da kam uns die Idee, ein paar Patterns in unserer jeweils bevorzugten Programmiersprache umzusetzen. Als erstes, da relativ einfach: Singleton, also beispielsweise eine Klasse, die sich nur einmal instanzieren lässt und eine Funktion bereitstellt, die diese Instanz [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d6b1294fe73eea0bc9dc84a732e5e880&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Als auf der Arbeit einmal Langeweile angesagt war, diskutierte ich mit meinem lieben Arbeitskollegen Boris über <a title="Entwurfsmuster" href="http://de.wikipedia.org/wiki/Entwurfsmuster">Software-Patterns (Entwurfsmuster)</a>. Da kam uns die Idee, ein paar Patterns in unserer jeweils bevorzugten Programmiersprache umzusetzen.</p>
<p>Als erstes, da relativ einfach: <a title="Singleton Pattern" href="http://de.wikipedia.org/wiki/Singleton_%28Entwurfsmuster%29">Singleton</a>, also beispielsweise eine Klasse, die sich nur einmal instanzieren lässt und eine Funktion bereitstellt, die diese Instanz zurückgibt (&#8220;new&#8221; oder &#8220;instance&#8221;).</p>
<p><span id="more-45"></span></p>
<p>Er überraschte mich schon kurz danach mit einer Implementation in Perl, die er ohne Online-Hilfe einfach so mal kurz geschrieben hat. Ich war von den Socken, denn Singleton wird in Perl nicht direkt angeboten. Da hat sich sein großes Talent wieder mal gezeigt. Gleichzeitig war ich froh, dass ich in Ruby schon Schnittstellen für verschiedenste Pattern zur Verfügung habe, denn ich bin nicht wirklich der geborene Programmierer.</p>
<p>Hier die Boris&#8217; Perl-Version, in Form eines Moduls und eines Testskriptes, bitte erwartet keine genaue Erklärungen von mir, was z.B. die Funktion &#8220;bless&#8221; genau macht usw.:</p>
<p>einzelgaenger.pm:</p>
<pre>package einzelgaenger;

use strict;

my $ref = 0;
my $class = '';

sub getInstance {
        $class = shift;
        unless ($ref) {
                $ref = {};
                bless($ref,$class);
        }
        return($ref);
}

sub say {
        my $this = shift;
        if ($this-&gt;{'hit'}) {
                print "AUTSCH! Ich sag nichts mehr, du!\n";
        }
        else {
                print "Ich bin ein $class. Mich gibt es nur einmal, egal
wie oft du mich instanzierst, du bekommst immer: $this\n";
        }
}

sub hit {
        my $this = shift;
        $this-&gt;{'hit'} = 1;
        print "*klaps!*\n";
}

1;</pre>
<p>einzelgaenger-test.pl:</p>
<pre>use strict;
use einzelgaenger;

print &lt;&lt;TEXT;

Wulli &#038; Peter  -  Das Singleton-Pattern
***************************************

TEXT

print "Wir machen uns einen Wulli.\n";       my $wulli =
einzelgaenger-&gt;getInstance();
print "Wir machen uns einen Peter.\n\n";     my $peter =
einzelgaenger-&gt;getInstance();

print "Wulli sagt: ";                        $wulli-&gt;say();
print "Peter sagt: ";                        $peter-&gt;say();

print "\nWir schlagen Wulli...  ";           $wulli-&gt;hit();
print "Peter sagt: ";                        $peter-&gt;say();

print "\nWulli und Peter sind ein und der selbe!\n";

print "\n";
exit 0;</pre>
<p>Hier der Output:</p>
<pre> Wulli &#038; Peter  -  Das Singleton-Pattern
***************************************

Wir machen uns einen Wulli.
Wir machen uns einen Peter.

Wulli sagt: Ich bin ein einzelgaenger. Mich gibt es nur einmal, egal
wie oft du mich instanzierst, du bekommst immer: einzelgaenger=HASH(0x8968c28)
Peter sagt: Ich bin ein einzelgaenger. Mich gibt es nur einmal, egal
wie oft du mich instanzierst, du bekommst immer: einzelgaenger=HASH(0x8968c28)

Wir schlagen Wulli...  *klaps!*
Peter sagt: AUTSCH! Ich sag nichts mehr, du!

Wulli und Peter sind ein und der selbe!</pre>
<p>Und hier dasselbe in Ruby. Es zeigt wieder mal, dass Ruby die ideale Sprache ist für schreib- und denkfaule Admins wie ich einer bin:</p>
<pre>#!/usr/bin/env ruby

require 'singleton'

class Einzelgaenger

  include Singleton

  def id_ausgeben
    self.object_id
  end

end

peter = Einzelgaenger.instance
wullie = Einzelgaenger.instance

print "Peter sagt: \"Hallo, ich bin der Peter, meine ID ist: #{peter.id_ausgeben}!\"\n"
print "Wullie meint dazu: \"Hmmm...seltsam, mein ID ist: #{wullie.id_ausgeben}!?!\"\n"

print "\nPeter und Wullie sind also ein und derselbe! Von Einzelgaenger kann keine weitere Instanz gebildet werden\n"</pre>
<p>Hier der Output:</p>
<pre>Peter sagt: "Hallo, ich bin der Peter, meine ID ist: -604372568!"
Wullie meint dazu: "Hmmm...seltsam, meine ID ist: -604372568!?!"

Peter und Wullie sind also ein und derselbe! Von Einzelgaenger kann keine weitere Instanz gebildet werden.</pre>
<p>Als nächstes war dann das <a title="Beobachter-Muster" href="http://de.wikipedia.org/wiki/Beobachter_%28Entwurfsmuster%29">Beobachter-Muster</a> dran, aber dazu später mehr&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhome.ch/geek/singleton-pattern-in-perl-und-ruby/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ein stiller Wechsel</title>
		<link>http://www.linuxhome.ch/news/der-stille-wechsel/</link>
		<comments>http://www.linuxhome.ch/news/der-stille-wechsel/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 19:07:23 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[In eigener Sache]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.linuxhome.ch/2007/12/17/der-stille-wechsel/</guid>
		<description><![CDATA[Leider hat sich das Ruby-basierte Typo (nicht zu verwechseln mit dem CMS Typo3)als nicht sehr performant erwiesen. Obwohl ich sogar ein Mongrel-Cluster-Setup aufgesetzt habe, dauerte das Rendering der Index-Seite teilweise über 40 Sekunden, wenn die entsprechende Seite im Cache ungültig wurde. Leider fand ich keine brauchbare Lösung dafür, deshalb bin ich auf das &#8220;verwandte&#8221; WordPress [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d6b1294fe73eea0bc9dc84a732e5e880&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Leider hat sich das Ruby-basierte <a href="http://typosphere.org/" title="Typosphere">Typo</a> (nicht zu verwechseln mit dem <a href="http://de.wikipedia.org/wiki/Content-Management-System" title="Content Management System">CMS</a> <a href="http://de.wikipedia.org/wiki/Content-Management-System" title="Typo3 CMS">Typo3</a>)als nicht sehr performant erwiesen. Obwohl ich sogar ein <a href="http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/" title="Mongrel Capistrano Apache Setup">Mongrel-Cluster-Setup</a> aufgesetzt habe, dauerte das Rendering der Index-Seite teilweise über 40 Sekunden, wenn die entsprechende Seite im Cache ungültig wurde. Leider fand ich keine brauchbare Lösung dafür, deshalb bin ich auf das &#8220;verwandte&#8221; WordPress umgestiegen, wo ich zum Glück auch dasselbe Theme verwenden konnte.</p>
<p>Das Einzige, was ich nicht gut übernehmen konnte, waren die Kommentare. Da es aber bisher nur beim Artikel  <a href="http://www.linuxhome.ch/2007/10/12/linux-distributions-test-nr-1-pclinux-os-2007" title="Linux Distributions Test Nr. 1 PC Linux OS 2007">&#8220;Linux-Distributions Test Nr. 1: *** PCLinux OS 2007 ***&#8221;</a> viele davon gab, habe ich sie separat als <a href="http://www.linuxhome.ch/linux/kommentare-zu-linux-distributions-test-nr-1-pclinux-os-2007-fur-wechsel-zu-wordpress/" title="Kommentare zu PCLinuxOS2007 Review">Artikel</a> übernommen.</p>
<p>Die Typo-Entwickler waren im IRC nicht wirklich sehr an der Weiterentwicklung der Software interessiert. Auf meine Anfrage, ob denn bald eine rudimentäre Datei-Verwaltung für Uploads möglich wäre, erhielt ich lediglich die Antwort «Wenn Du das unbedingt willst, forke doch die Software». Naja, so funktioniert Opensource, ich war ja auch in der Lage, mit Ruby das Zitat-Plugin ohne Probleme zu schreiben, aber die Upload-Verwaltung erwies sich als ein für mich zu großer Brocken.</p>
<p>Mit <a href="http://www.wordpress.org" title="wordress homepage">wordpress</a> habe ich mich für eine äußerst komfortable Lösung entschieden, welche ständig weiterentwickelt wird und die praktisch alles an Plugins schon mitbringt, was ich brauche. Die externe Generierung von Seitenstatistiken im Dashboard von wordpress.com ist auch sehr komfortabel und rundet das geniale Gesamtbild ab. Daumen hoch!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhome.ch/news/der-stille-wechsel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->