<?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>Christoph Bünte&nbsp;&raquo; Software Entwicklung Berlin</title>
	<atom:link href="http://www.christophbuente.de/feed" rel="self" type="application/rss+xml" />
	<link>http://www.christophbuente.de</link>
	<description>Software Entwicklung</description>
	<lastBuildDate>Thu, 29 Jul 2010 05:42: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>Rails Hosting bei Rocket Rentals &#8211; auch mit Staging Umgebung</title>
		<link>http://www.christophbuente.de/2010-07-20-rails-hosting-bei-rocket-rentals-auch-mit-staging-umgebung/</link>
		<comments>http://www.christophbuente.de/2010-07-20-rails-hosting-bei-rocket-rentals-auch-mit-staging-umgebung/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 09:19:09 +0000</pubDate>
		<dc:creator>Christoph Bünte</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[staging]]></category>
		<category><![CDATA[Virtualhost]]></category>

		<guid isPermaLink="false">http://www.christophbuente.de/?p=449</guid>
		<description><![CDATA[Mein aktuelles Projekt an dem ich arbeite ist wheelmap.org. Wheelmap.org stellt eine Anwendung für Rollstuhlfahrer bereit, die es ihnen ermöglicht herauszufinden, welche Orte rollstuhlgerecht sind, und welche nicht. Wheelmap wird auf den Server von Rocket Rentals gehostet. Die Jungs von Rocket Rentals bieten neben Rails Hosting auch Co-Working Space und professionelle Anwendungsentwicklung.
Da ich hauptsächlich in [...]]]></description>
			<content:encoded><![CDATA[<p>Mein aktuelles Projekt an dem ich arbeite ist <a title="Rollstuhlgerechte Orte finden" href="http://wheelmap.org">wheelmap.org</a>. Wheelmap.org stellt eine Anwendung für Rollstuhlfahrer bereit, die es ihnen ermöglicht herauszufinden, welche Orte rollstuhlgerecht sind, und welche nicht. Wheelmap wird auf den Server von <a title="To the web and back" href="http://www.rocket-rentals.de/de/">Rocket Rentals</a> gehostet. Die Jungs von Rocket Rentals bieten neben Rails Hosting auch <a title="CoWorking bei Rocket Rentals" href="http://www.rocket-rentals.de/coworking">Co-Working Space</a> und professionelle Anwendungsentwicklung.<br />
Da ich hauptsächlich in meinem Büro entwickle, besteht die Notwendigkeit in regelmässigen Abständen meinen Fortschritt zu präsentieren. Und das möglichst auf einem Server im Netz und nicht auf meiner Entwicklungsmaschine. Dafür eignet sich die Live Anwendung allerdings schlecht. Kleinere Fehler oder unvollständige Features möchte man nicht auf den echten Benutzer loslassen. Deswegen habe ich eine Staging Umgebung eingerichtet, die jeweils den aktuellen Entwicklungsstand zeigt. Die Live Umgebung läuft weiterhin nur mit einer stabilen Version. Und so gehts:<span id="more-449"></span>Als erstes muss in DNS Konfiguration eine Subdomain eingerichtet werden. Das ist von Rocket Rentals unabhängig und sollte durch den DNS Provider oder auf dessen Weboberfläche vorgenommen werden. In meinem Fall ist die Domain: <a href="http://staging.wheelmap.org">staging.wheelmap.org</a></p>
<p><img class="alignleft size-medium wp-image-460" style="margin: 5px;" title="screenshot_admin_rocket_rentals" src="http://www.christophbuente.de/wp-content/uploads/screenshot_admin_rocket_rentals-300x147.jpg" alt="screenshot_admin_rocket_rentals" width="300" height="147" /> Damit der Rocket Rentals Server richtig auf den Request reagieren kann, muss im Admin Frontend ebenfalls eine Subdmain angelegt werden. Dazu logged man sich unter beim <a title="Rocket Rentals Login" href="https://login.rocket-rentals.de:8080/">Hosting</a> ein. Im oberen Menü wählt man &#8220;Sites&#8221;. Aus dem linken Menü wählt man dann &#8220;Subdomain&#8221; aus. Das Host Feld beinhaltet den Namen der Subdomain. Der Redirect Type ist &#8220;No flag&#8221;. Der Redirect Path ist &#8220;/&lt;subdomain&gt;_&lt;domain&gt;_&lt;tld&gt;&#8221;. Beispiel: &#8220;/staging_wheelmap_org&#8221;. Nach dem Speichern dauert es höchstens 15 Minuten, bis die Änderungen aktiv sind. In der Zwischenzeit können wir aber schon eine neue Datenbank anlegen. Das ist besonders wichtig, da wir nicht die Produktivdatenbank versehentlich verändern wollen, wenn die Auftraggeber die neue Version ausprobieren und dabei Daten manipulieren. Auch das kann auf der Admin Seite des Rocket Rentals Frontend geschehen. Usernamen und Passwort für die Datenbank nicht vergessen!</p>
<p>Dann muss auf dem Rechner, der das deployment durchführt eine Capistrano Erweiterung installiert werden:</p>
<pre lang="bash&quot;">sudo gem install capistrano-ext</pre>
<p>Danach muss die deploy.rb Datei etwas angepasst werden. Füge folgende Zeilen an den Anfang der Datei:</p>
<pre lang="ruby"># config/deploy.rb

set :stages,        ['staging', 'production']
set :default_stage, 'staging'
require 'capistrano/ext/multistage'</pre>
<p>Jetzt werden für jede Umgebung im Rails Projekt unter config/deploy/ eine eigene Datei mit dem Umgebungsnamen angelegt:</p>
<pre lang="bash">mkdir -p config/deploy
touch config/deploy/staging.rb
touch config/deploy/production.rb</pre>
<p>Aus der bisherigen deploy.rb Datei müssen folgende Zeilen in die config/deploy/production.rb kopiert werden:</p>
<pre lang="ruby"># config/deploy/production.rb

set :application, 'domain_tld' # Beispiel: wheelmap_org
set :db_names, :production =&gt; 'prod_db_name'
set :db_user, 'prod_db_username'
set :db_password, 'prod_db_password'
set :rails_env,   'production'</pre>
<p>Anschließend müssen diese Zeilen in der config/deploy.rb auskommentiert oder gelöscht werden.</p>
<p>In der config/deploy/staging.rb Datei müssen jetzt die Angaben für die Staging Umgebung gemacht werden:</p>
<pre lang="ruby"># config/deploy/staging.rb

set :application, 'subdomain_domain_tld' #Beispiel: staging_wheelmap_org
set :db_names, :production =&gt; 'staging_db_name'
set :db_user, 'staging_db_username'
set :db_password, 'staging_db_password'
set :rails_env,   'staging'</pre>
<p>Nun sind alle Vorbereitungen getroffen und wir können die Staging Umgebung einrichten:</p>
<pre>cap staging deploy:setup</pre>
<p>Danach kann die Anwendung deployed werden:</p>
<pre>cap staging deploy:cold</pre>
<p>Will man die Live Version deployen führt man folgenden Befehl aus:</p>
<pre>cap production deploy</pre>
<p>Bei Problemen oder Fragen einfach einen Kommentar hinterlassen.</p>

	Tags: <a href="http://www.christophbuente.de/tag/apache/" title="Apache" rel="tag">Apache</a>, <a href="http://www.christophbuente.de/tag/capistrano/" title="Capistrano" rel="tag">Capistrano</a>, <a href="http://www.christophbuente.de/tag/deployment/" title="deployment" rel="tag">deployment</a>, <a href="http://www.christophbuente.de/tag/hosting/" title="hosting" rel="tag">hosting</a>, <a href="http://www.christophbuente.de/tag/passenger/" title="passenger" rel="tag">passenger</a>, <a href="http://www.christophbuente.de/tag/ruby/" title="ruby" rel="tag">ruby</a>, <a href="http://www.christophbuente.de/tag/ruby-on-rails/" title="Ruby on Rails" rel="tag">Ruby on Rails</a>, <a href="http://www.christophbuente.de/tag/staging/" title="staging" rel="tag">staging</a>, <a href="http://www.christophbuente.de/tag/virtualhost/" title="Virtualhost" rel="tag">Virtualhost</a><br />

	<h4>Verwandten Beiträge</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.christophbuente.de/2009-10-29-opensocial-gadgets-apps-fur-studivz-selbst-entwickeln/" title="Opensocial Gadgets &#8211; Apps für StudiVZ selbst entwickeln (29.10.2009)">Opensocial Gadgets &#8211; Apps für StudiVZ selbst entwickeln</a> (5)</li>
	<li><a href="http://www.christophbuente.de/2007-11-25-ruby-on-rails-auf-mac-os-x-5-minuten-kurzanleitung/" title="Ruby on Rails auf Mac OS X &#8211; 5 Minuten Kurzanleitung (25.11.2007)">Ruby on Rails auf Mac OS X &#8211; 5 Minuten Kurzanleitung</a> (2)</li>
	<li><a href="http://www.christophbuente.de/2009-05-16-remarkable-rails-anwendungen-automatisch-testen/" title="Remarkable &#8211; Rails Anwendungen automatisch testen (16.05.2009)">Remarkable &#8211; Rails Anwendungen automatisch testen</a> (0)</li>
	<li><a href="http://www.christophbuente.de/2007-10-05-frei-nehmen-um-zu-lernen/" title="Rails tutorial &#8211;  Eine Woche lang Agile Webentwicklung (5.10.2007)">Rails tutorial &#8211;  Eine Woche lang Agile Webentwicklung</a> (0)</li>
	<li><a href="http://www.christophbuente.de/2007-08-05-objekte-und-beziehungen/" title="Objekte und Beziehungen (5.08.2007)">Objekte und Beziehungen</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.christophbuente.de/2010-07-20-rails-hosting-bei-rocket-rentals-auch-mit-staging-umgebung/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ein letztes lautes Knirschen &#8211; Backup Platte defekt!</title>
		<link>http://www.christophbuente.de/2009-11-21-ein-letztes-lautes-knirschen-backup-platte-defekt/</link>
		<comments>http://www.christophbuente.de/2009-11-21-ein-letztes-lautes-knirschen-backup-platte-defekt/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 23:20:35 +0000</pubDate>
		<dc:creator>Christoph Bünte</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[defekt]]></category>
		<category><![CDATA[festplatte]]></category>
		<category><![CDATA[maxtor]]></category>
		<category><![CDATA[time machine]]></category>

		<guid isPermaLink="false">http://www.christophbuente.de/?p=440</guid>
		<description><![CDATA[Nach 5 Jahren hat es heute Abend meine Maxtor OneTouch II 300GB Platte entschärft. In meinem Beisein gab sie während eines TimeMachine Backups ein herzhaftes Kratzen und Murren von sich. Danach noch einige lautstarke Versuche, noch mal auf die Beine bzw. die 7200U/min zu kommen &#8230; vergebens.
Möge sie, und meine Backups in Frieden Ruhen. 5 [...]]]></description>
			<content:encoded><![CDATA[<p>Nach 5 Jahren hat es heute Abend meine Maxtor OneTouch II 300GB Platte entschärft. In meinem Beisein gab sie während eines TimeMachine Backups ein herzhaftes Kratzen und Murren von sich. Danach noch einige lautstarke Versuche, noch mal auf die Beine bzw. die 7200U/min zu kommen &#8230; vergebens.</p>
<p>Möge sie, und meine Backups in Frieden Ruhen. 5 Jahre sind ein stolzes Alter!</p>
<hr/>
<strong>Update:</strong> Ohne Backup geht&#8217;s natürlich nicht. Dank Cyberport arbeitet jetzt eine WD Caviar SE 500GB Platte in dem alten Maxtor OneTouch II Gehäuse. In ein paar Stunden wird auch das initial Backup fertig sein, so dass ich auch wieder ruhig schlafen kann. Für die nächsten Jahre wird die Platte hoffentlich noch reichen, man drücke mir die Daumen <img src='http://www.christophbuente.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

	Tags: <a href="http://www.christophbuente.de/tag/backup/" title="backup" rel="tag">backup</a>, <a href="http://www.christophbuente.de/tag/crash/" title="crash" rel="tag">crash</a>, <a href="http://www.christophbuente.de/tag/defekt/" title="defekt" rel="tag">defekt</a>, <a href="http://www.christophbuente.de/tag/festplatte/" title="festplatte" rel="tag">festplatte</a>, <a href="http://www.christophbuente.de/tag/maxtor/" title="maxtor" rel="tag">maxtor</a>, <a href="http://www.christophbuente.de/tag/time-machine/" title="time machine" rel="tag">time machine</a><br />

	<h4>Verwandten Beiträge</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.christophbuente.de/2009-09-08-korruptes-dateisystem-datenrettung-mit-time-machine-und-drobo/" title="Korruptes Dateisystem &#8211; Datenrettung mit Time Machine und Drobo (8.09.2009)">Korruptes Dateisystem &#8211; Datenrettung mit Time Machine und Drobo</a> (5)</li>
	<li><a href="http://www.christophbuente.de/2009-09-10-apache-startet-nach-time-machine-restore-nicht-mehr/" title="Apache startet nach Time Machine Restore nicht mehr (10.09.2009)">Apache startet nach Time Machine Restore nicht mehr</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.christophbuente.de/2009-11-21-ein-letztes-lautes-knirschen-backup-platte-defekt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Opensocial Gadgets &#8211; Apps für StudiVZ selbst entwickeln</title>
		<link>http://www.christophbuente.de/2009-10-29-opensocial-gadgets-apps-fur-studivz-selbst-entwickeln/</link>
		<comments>http://www.christophbuente.de/2009-10-29-opensocial-gadgets-apps-fur-studivz-selbst-entwickeln/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 19:39:51 +0000</pubDate>
		<dc:creator>Christoph Bünte</dc:creator>
				<category><![CDATA[Web Entwicklung]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[beispiel]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[gadgets]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[meinvz]]></category>
		<category><![CDATA[opensocial]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[schuelervz]]></category>
		<category><![CDATA[studivz]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[widgets]]></category>

		<guid isPermaLink="false">http://www.christophbuente.de/?p=399</guid>
		<description><![CDATA[Wie StudiVZ bereits angekündigt hat, werden die ersten opensocial Anwendungen für ihre Plattform bald live gehen. Entwickler können sich schon jetzt registrieren und ihre so genannten Gadgets in einer Sandbox ausprobieren.
Ich habe das Vergnügen für meinen aktuellen Kunden DaWanda ein Gadget für StudiVZ zu entwickeln. Ein Gadget besteht aus einer XML Datei, die definiert, um [...]]]></description>
			<content:encoded><![CDATA[<p>Wie <a href="http://developer.studivz.net/2009/09/24/opensocial-is-now-available-in-our-vz-sandbox/">StudiVZ</a> bereits angekündigt hat, werden die ersten <a href="http://code.google.com/intl/de-DE/apis/opensocial/">opensocial</a> Anwendungen für ihre Plattform bald live gehen. Entwickler können sich schon jetzt registrieren und ihre so genannten Gadgets in einer Sandbox ausprobieren.</p>
<p>Ich habe das Vergnügen für meinen aktuellen Kunden <a href="http://www.dawanda.com">DaWanda</a> ein Gadget für StudiVZ zu entwickeln. Ein Gadget besteht aus einer XML Datei, die definiert, um welche Anwendung es sich handelt, wer der Author ist usw. Dazu gehören wahlweise mehrere CSS und Javascript Dateien. Nachdem man alles in eine Zip Datei, die den gleichen namen wie die XML Datei trägt, gepackt hat, kann man die Anwendung in die Sandbox hochladen und ausprobieren. Eine Beispiel Datei könnte so aussehen:</p>
<pre escaped="true" lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;Module&gt;
  &lt;ModulePrefs
    title="Example StudiVZ Gadget"
    title_url="http://www.christophbuente.de"
    author="Christoph Bünte"
    author_email="info@christophbuente.de"
    description="Example description"
    screenshot="http://www.christophbuente.de/images/screenshot.jpg"
    thumbnail="http://www.christophbuente.de/images/thumbnail.jpg"&gt;
    &lt;Require feature="opensocial-0.8" /&gt;
    &lt;Require feature="views" /&gt;
  &lt;/ModulePrefs&gt;
  &lt;Content type="html" &gt;
    &lt;![CDATA[
      &lt;script&gt;
        function init() {
          // Put initialization code here
        }
        gadgets.util.registerOnLoadHandler(init);
      &lt;/script&gt;
    &lt;div id='container'&gt;&lt;/div&gt;
    ]]&gt;
  &lt;/Content&gt;
&lt;/Module&gt;</pre>
<p><span id="more-399"></span><br />
Jede Interaktion des Benutzers mit der Anwendung wird mit Hilfe weiterer Javascript Funktionen behandelt. Dazu stehen eine Reihe eingebauter Funktionen aus dem Opensocial Container bereit. Darüber hinaus haben die Entwickler von StudiVZ eine <a href="http://developer.studivz.net/wiki/index.php/Gadgets_API">API Beschreibung</a> der zusätzlichen Funktionen bereit gestellt. Was aber, wenn man nun nicht mit Javascript entwickeln möchte bzw. kann? Es besteht die Möglichkeit Flash Content einzubinden. Man kann aber auch ein beliebiges Backend einbinden. Dieses Backend muss nur 2 Bedingungen erfüllen:</p>
<ul>
<li>Es muss auf <acronym title="Hypertext Transfer Protocol">HTTP</acronym> Requests reagieren können und beliebiges <acronym title="Hypertext Markup Language">HTML</acronym>,<acronym title="Cascading Style Sheet">CSS</acronym> und JavaScript zurück liefern</li>
<li>Es muss im Namen des Applikationsbenutzers einen OAuth signierten Request an die StudiVZ <acronym title="Representational State Transfer">REST</acronym> <acronym title="Application Programming Interface">API</acronym> schicken können.</li>
</ul>
<p><a href="http://www.christophbuente.de/wp-content/uploads/Bild-7.png"><img class="size-full wp-image-419 alignleft" title="Request Opensocial Backend" src="http://www.christophbuente.de/wp-content/uploads/Bild-7.png" alt="Schema: Request Opensocial Backend" width="348" height="376" /></a><br />
Wie im Schema zu sehen, sendet der User einen Request, um die Applikation zu benutzen. Der Container liest darauf hin den Inhalt der XML Datei aus. Dort ist neben einem DIV Container lediglich ein externes Javascript referenziert. In dem Javascript sind einfache Methoden zum Navigieren und Interagieren definiert. Das rendern des HTML übernimmt ein Ruby Backend. Das braucht zum Render unter Umständen noch zusätzliche Informationen wie zum Beispiel Name und Foto des Benuter usw. Diese Informationen holt es sich mit einem OAuth signierten Request von der abgebildeten REST API. Das vom Ruby Backend erzeugte HTML rendert der Opensocial Container in einem IFrame im Browser des Benutzers. Für eine bessere Übersicht definieren wir im XML einzelne Views, die jeweils einen eigenen Endpunkt im Backend haben. Eine einfache gadget.xml mit 2 definierten Views für Profil und Vollansicht mit Backend Anbindung:</p>
<pre escaped="true" lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;Module&gt;
  &lt;ModulePrefs
    title="Spitzenmässiges StudiVZ Gadget mit Backendanbindung"
    title_url="http://www.christophbuente.de"
    author="Christoph Bünte"
    author_email="info@christophbuente.de"&gt;
    &lt;Require feature="opensocial-0.8" /&gt;
    &lt;Require feature="views" /&gt;
  &lt;/ModulePrefs&gt;
  &lt;Content type="html" view="profile" &gt;
    &lt;![CDATA[
      &lt;script type="text/javascript" src="http://www.yourbackend.com/profile.js" &gt;&lt;/script&gt;
      &lt;div id='profile'&gt;&lt;/div&gt;
    ]]&gt;
  &lt;/Content&gt;
  &lt;Content type="html" view="canvas" &gt;
    &lt;![CDATA[
      &lt;script type="text/javascript" src="http://www.yourbackend.com/canvas.js" &gt;&lt;/script&gt;
      &lt;div id='canvas'&gt;&lt;/div&gt;
    ]]&gt;
  &lt;/Content&gt;
&lt;/Module&gt;</pre>
<p>Das referenzierte Javascript ist ebenfalls sehr schlank. Darin wird lediglich eine Backend URL aufgerufen und deren Response Body in das profile bzw. canvas div geschrieben.</p>
<pre>function init{
  var url = 'http://www.yourbackend.com/profile/'
  var params = {};
  params[gadgets.io.RequestParameters.AUTHORIZATION]=gadgets.io.AuthorizationType.SIGNED;
  gadgets.io.makeRequest(url, requestCallback, params);

}

function requestCallback(obj) {
	document.getElementById('profile').innerHTML = obj.data;
}</pre>
<p>Damit die REST API benutzt werden kann, muss man sich an ihr Authentifizieren. Da das Backend aber dumm ist, hat es keine Userdaten, um sich dort anzumelden. Glücklicherweise ist der Request aus dem Javascript mit dem verschlüsselten Authentifierungsdaten des angemeldeten Anwendungsbenutzers signiert. Mit deren Hilfe können wir einen neuen, signierten Request erzeugen, den die API akzeptieren wird. Doch zuerst muss die Glültigkeit der Signatur überprüft werden:</p>
<p><code>sudo gem install oauth --source http://gemcutter.org</code></p>
<pre lang="ruby">
require 'oauth'
require 'oauth/consumer'
require 'oauth/request_proxy/action_controller_request'
require 'oauth/signature/rsa/sha1'
require 'oauth/signature/hmac/sha1'

class ApplicationController < ActionController::Base

  before_filter <img src='http://www.christophbuente.de/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> auth_required

  def oauth_required
    cert_file = File.join(RAILS_ROOT, 'public', 'public.cer')
    cert_str = File.read(cert_file)
    consumer = OAuth::Consumer.new(ConsumerToken, cert_str)

    begin
      pass = OAuth::Signature.build(request, :consumer => consumer).verify
      logger.info "Signature verification returned: #{pass}"
    rescue OAuth::Signature::UnknownSignatureMethod => e
      logger.error "ERROR "+ e.message
    end

    render :text => "OAuth access denied", :status => :unauthorized  unless pass
  end
</pre>
<p>Die URL für das öffentliche Zertifikat wird mit jedem Request mit geschickt. Einmal runterladen sollte reichen. Ich denke, man muss es nicht bei jedem Request erneut vom StudiVZ Server laden. Den Consumer Token findet ihr in der OAuth Section eurer Gadget Sandbox (http://www.meinvz.net/GadgetDeveloper/GadgetOAuth/xxx). xxx ist deine Gadget ID.</p>
<p>Sollte der before_filter nicht abbrechen war die Signatur korrekt und der Request kann bearbeitet werden. Aus einem mir nicht bekannten Grund ist der Request des Containers an das Backend mit der RSA-SHA1 Methode signiert. Dafür wird das Zertifikat benötigt. Für den Request an die API muss die HMAC-SHA1 Methode verwendet werden. Dafür wird ein neuer Consumer benötigt:</p>
<pre lang="ruby">def get_owner
  consumer = OAuth::Consumer.new(ConsumerToken, ConsumerSecret,
      :signature_method => 'HMAC-SHA1',
      :site => "http://sandbox.gadgets.apivz.net",
      :scheme => :query_string,
      :http_method => :get)
  requestor_param = {:xoauth_requestor_id => params[:opensocial_owner_id]}.to_param
  access_token = OAuth::AccessToken.new(consumer)
  response = access_token.get("/social/rest/people/#{params[:opensocial_owner_id]}/@self?#{requestor_param}")
  owner_attributes = JSON.parse(response.body)['entry']
end</pre>
<p>Feedback, Fragen und Kritik sind immer gerne willkommen.</p>

	Tags: <a href="http://www.christophbuente.de/tag/backend/" title="backend" rel="tag">backend</a>, <a href="http://www.christophbuente.de/tag/beispiel/" title="beispiel" rel="tag">beispiel</a>, <a href="http://www.christophbuente.de/tag/example/" title="example" rel="tag">example</a>, <a href="http://www.christophbuente.de/tag/gadgets/" title="gadgets" rel="tag">gadgets</a>, <a href="http://www.christophbuente.de/tag/howto/" title="howto" rel="tag">howto</a>, <a href="http://www.christophbuente.de/tag/meinvz/" title="meinvz" rel="tag">meinvz</a>, <a href="http://www.christophbuente.de/tag/opensocial/" title="opensocial" rel="tag">opensocial</a>, <a href="http://www.christophbuente.de/tag/ruby/" title="ruby" rel="tag">ruby</a>, <a href="http://www.christophbuente.de/tag/ruby-on-rails/" title="Ruby on Rails" rel="tag">Ruby on Rails</a>, <a href="http://www.christophbuente.de/tag/schuelervz/" title="schuelervz" rel="tag">schuelervz</a>, <a href="http://www.christophbuente.de/tag/studivz/" title="studivz" rel="tag">studivz</a>, <a href="http://www.christophbuente.de/tag/tutorial/" title="Tutorial" rel="tag">Tutorial</a>, <a href="http://www.christophbuente.de/tag/widgets/" title="widgets" rel="tag">widgets</a><br />

	<h4>Verwandten Beiträge</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.christophbuente.de/2008-04-01-widgets-bei-myspace-externe-programme-bei/" title="widgets bei myspace &#8211; externe Programme benutzen (1.04.2008)">widgets bei myspace &#8211; externe Programme benutzen</a> (1)</li>
	<li><a href="http://www.christophbuente.de/2007-12-21-voiceglue-konfiguration-server-fur-sprachanwendungen-einrichten/" title="VoiceGlue Konfiguration &#8211; Server für Sprachanwendungen einrichten (21.12.2007)">VoiceGlue Konfiguration &#8211; Server für Sprachanwendungen einrichten</a> (0)</li>
	<li><a href="http://www.christophbuente.de/2007-12-06-voiceglue-installation-interactive-voice-response-leicht-gemacht/" title="VoiceGlue Installation &#8211; Interactive Voice Response leicht gemacht (6.12.2007)">VoiceGlue Installation &#8211; Interactive Voice Response leicht gemacht</a> (6)</li>
	<li><a href="http://www.christophbuente.de/2008-01-24-stripes-framework-tests-fur-actionbeans-im-wizard-modus/" title="Stripes Framework &#8211; Tests für ActionBeans im Wizard Modus (24.01.2008)">Stripes Framework &#8211; Tests für ActionBeans im Wizard Modus</a> (0)</li>
	<li><a href="http://www.christophbuente.de/2007-11-02-shell-ausgabeumleitung-fehlermeldungen-in-der-standardausgabe/" title="Shell Ausgabeumleitung &#8211; Fehlermeldungen in der Standardausgabe (2.11.2007)">Shell Ausgabeumleitung &#8211; Fehlermeldungen in der Standardausgabe</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.christophbuente.de/2009-10-29-opensocial-gadgets-apps-fur-studivz-selbst-entwickeln/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Kalenderwoche &#8211; eine Einführung</title>
		<link>http://www.christophbuente.de/2009-09-18-kalenderwoche-eine-einfuehrung/</link>
		<comments>http://www.christophbuente.de/2009-09-18-kalenderwoche-eine-einfuehrung/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 17:46:14 +0000</pubDate>
		<dc:creator>Christoph Bünte</dc:creator>
				<category><![CDATA[mac os x]]></category>
		<category><![CDATA[DIN1355]]></category>
		<category><![CDATA[ical]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Kalenderjahr]]></category>
		<category><![CDATA[Kalenderwoche]]></category>
		<category><![CDATA[MacBook]]></category>
		<category><![CDATA[Monatskalender]]></category>
		<category><![CDATA[Sonntag]]></category>
		<category><![CDATA[Termin]]></category>
		<category><![CDATA[Tischplaner]]></category>

		<guid isPermaLink="false">http://www.christophbuente.de/?p=380</guid>
		<description><![CDATA[Ein Kalenderjahr besteht aus 365 Tagen á 7 Tagen je Woche, rein rechnerisch also aus 52,143 Wochen. In der Regel sind es 52 Wochen. Einzig wenn das Jahr mit einem Donnerstag beginnt, so wie in diesem Jahr, sind es 53 Wochen. Und weil es im deutschen für alles eine DIN gibt, hat auch die Berechnung [...]]]></description>
			<content:encoded><![CDATA[<p>Ein Kalenderjahr besteht aus 365 Tagen á 7 Tagen je Woche, rein rechnerisch also aus 52,143 Wochen. In der Regel sind es 52 Wochen. Einzig wenn das Jahr mit einem Donnerstag beginnt, so wie in diesem Jahr, sind es 53 Wochen. Und weil es im deutschen für alles eine <acronym title="Deutsche Industrienorm" >DIN</acronym> gibt, hat auch die Berechnung der <a href="http://de.wikipedia.org/wiki/Kalenderwoche#Kalenderwoche">Kalenderwoche</a> eine, und zwar DIN 1355. Darin ist auch geregelt, dass der Sonntag immer der letzte Tag der Woche ist, und nicht der erste. Die Kalenderwoche 1 ist übrigens die, in der 4. Januar enthalten ist.</p>
<p><span id="more-380"></span></p>
<p>Als Freiberufler habe ich oft Termin mit Kunden. Sei es zur Akquise,  Projektbesprechung oder Produktabnahme. Doch sehr oft kommen Terminvorschläge per E-Mail und sehen etwa so aus:</p>
<blockquote><p>Sehr geehrter Herr Bünte,</p>
<p>wir möchten Ihnen einen Termin für die Projektbesprechung in der KW 24 vorschlagen &#8230;</p></blockquote>
<p>Aber wann zum Henker ist die <acronym title="Kalenderwoche" lang="de">KW</acronym> 24? Ich habe weder einen 3 Monatskalender in meinen kleinen Büro hängen, und ich habe auch keinen Tischplaner. Das einzige, was ich habe ist mein Macbook und mein iPhone. Beide haben einen Kalender, die sich auch super miteinander synchronisieren. Aber was beide nicht haben, ist eine Anzeige, welche Kalenderwoche gerade ist.</p>
<p>Getreu dem Motto: <a href="http://de.wikipedia.org/wiki/Liste_geflügelter_Worte/D#Dem_Ingeni.C3.B6r_ist_nichts_zu_schw.C3.B6r">&#8220;<em>Einem Ingeniör ist nichts zu schwör</em>&#8220;</a> habe ich mir meinen eigenen Webkalender programmiert. Den habe ich mit meinem <a href="http://www.apple.com/de/macosx/what-is-macosx/mail-ical-contacts-apps.html">iCal</a> aboniert und nun habe ich die Kalenderwochen immer im Blick. Sollte noch jemand Interesse an diesem Kalender haben, der klicke auf den Link:<br />
<h4><a href="webcal://kalenderwoche.christophbuente.de" >Kalenderwochen</a></h4></p>

	Tags: <a href="http://www.christophbuente.de/tag/din1355/" title="DIN1355" rel="tag">DIN1355</a>, <a href="http://www.christophbuente.de/tag/ical/" title="ical" rel="tag">ical</a>, <a href="http://www.christophbuente.de/tag/iphone/" title="iphone" rel="tag">iphone</a>, <a href="http://www.christophbuente.de/tag/kalenderjahr/" title="Kalenderjahr" rel="tag">Kalenderjahr</a>, <a href="http://www.christophbuente.de/tag/kalenderwoche/" title="Kalenderwoche" rel="tag">Kalenderwoche</a>, <a href="http://www.christophbuente.de/tag/macbook/" title="MacBook" rel="tag">MacBook</a>, <a href="http://www.christophbuente.de/tag/monatskalender/" title="Monatskalender" rel="tag">Monatskalender</a>, <a href="http://www.christophbuente.de/tag/sonntag/" title="Sonntag" rel="tag">Sonntag</a>, <a href="http://www.christophbuente.de/tag/termin/" title="Termin" rel="tag">Termin</a>, <a href="http://www.christophbuente.de/tag/tischplaner/" title="Tischplaner" rel="tag">Tischplaner</a><br />

	<h4>Verwandten Beiträge</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.christophbuente.de/2008-08-19-lastfm-fur-das-iphone-gute-musik-fur-unterwegs/" title="last.fm für das iPhone &#8211; gute Musik für unterwegs (19.08.2008)">last.fm für das iPhone &#8211; gute Musik für unterwegs</a> (6)</li>
	<li><a href="http://www.christophbuente.de/2009-09-08-korruptes-dateisystem-datenrettung-mit-time-machine-und-drobo/" title="Korruptes Dateisystem &#8211; Datenrettung mit Time Machine und Drobo (8.09.2009)">Korruptes Dateisystem &#8211; Datenrettung mit Time Machine und Drobo</a> (5)</li>
	<li><a href="http://www.christophbuente.de/2008-09-25-gratis-klingeltoene-fuers-iphone-herunterladen-oder-einfach-selbst-erstellen/" title="Gratis Klingeltöne fürs iPhone herunterladen &#8211; oder einfach selbst erstellen! (25.09.2008)">Gratis Klingeltöne fürs iPhone herunterladen &#8211; oder einfach selbst erstellen!</a> (5)</li>
	<li><a href="http://www.christophbuente.de/2007-12-25-apple-macbook-verarbeitung-mangelhaft/" title="Apple MacBook &#8211; Verarbeitung mangelhaft! (25.12.2007)">Apple MacBook &#8211; Verarbeitung mangelhaft!</a> (9)</li>
	<li><a href="http://www.christophbuente.de/2009-09-10-apache-startet-nach-time-machine-restore-nicht-mehr/" title="Apache startet nach Time Machine Restore nicht mehr (10.09.2009)">Apache startet nach Time Machine Restore nicht mehr</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.christophbuente.de/2009-09-18-kalenderwoche-eine-einfuehrung/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Justizministerin Brigitte Zypries über das Zugangserschwerungsgesetz</title>
		<link>http://www.christophbuente.de/2009-09-10-justizministerin-brigitte-zypries-uber-das-zugangserschwerungsgesetz/</link>
		<comments>http://www.christophbuente.de/2009-09-10-justizministerin-brigitte-zypries-uber-das-zugangserschwerungsgesetz/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 19:29:50 +0000</pubDate>
		<dc:creator>Christoph Bünte</dc:creator>
				<category><![CDATA[Politik]]></category>
		<category><![CDATA[SPD]]></category>
		<category><![CDATA[TAZ]]></category>
		<category><![CDATA[Verträg]]></category>
		<category><![CDATA[Zugangserschwerungsgesetz]]></category>
		<category><![CDATA[Zypries]]></category>

		<guid isPermaLink="false">http://www.christophbuente.de/?p=362</guid>
		<description><![CDATA[War es ein Fehler, das Gesetz mit den Internetsperren zu machen?

Nein. Das Gesetz ist notwendig geworden, weil die Kollegin von der Leyen angefangen hat, Verträge mit den Providern über diese Sperren zu schließen. Ich habe gleich zu Beginn der Debatte deutlich gemacht, dass eine solche Vertragslösung nicht mit unserer Verfassung vereinbar ist.
Zugangssperren sind ein Eingriff [...]]]></description>
			<content:encoded><![CDATA[<h3>War es ein Fehler, das Gesetz mit den Internetsperren zu machen?</h3>
<blockquote cite="http://www.taz.de/1/politik/schwerpunkt-ueberwachung/artikel/1/die-piraten-sind-mir-zu-konservativ/">
<p>Nein. Das Gesetz ist notwendig geworden, weil die Kollegin von der Leyen angefangen hat, Verträge mit den Providern über diese Sperren zu schließen. Ich habe gleich zu Beginn der Debatte deutlich gemacht, dass eine solche Vertragslösung nicht mit unserer Verfassung vereinbar ist.</p>
<p>Zugangssperren sind ein Eingriff in Grundrechte und bedürfen deshalb von Verfassungs wegen eines Gesetzes. Um so wenig Rechte wie möglich zu beschränken, hat die SPD im Gesetzgebungsverfahren den Grundsatz „Löschen vor Sperren“ durchgesetzt. Das Problem an der Debatte war, dass sie kaum sachlich zu führen war.</p>
</blockquote>
<h3>Sie haben bei dem Gesetz also mitgemacht, weil die Union Sie in die Enge getrieben hat?</h3>
<blockquote cite="http://www.taz.de/1/politik/schwerpunkt-ueberwachung/artikel/1/die-piraten-sind-mir-zu-konservativ/">
<p>Nein, ich musste vielmehr zur Kenntnis nehmen, dass die Provider bereit waren, diese Verträge abzuschließen. Und um in dieser Situation Rechtssicherheit für die Betroffenen zu schaffen, ging kein Weg an der gesetzlichen Regelung vorbei. Wir betreten damit juristisches und technisches Neuland, deshalb die Befristung, um nach drei Jahren zu überprüfen, ob sie hält, was wir uns davon versprochen haben.</p>
</blockquote>
<p><cite>Quelle: <a href="http://www.taz.de/1/politik/schwerpunkt-ueberwachung/artikel/1/die-piraten-sind-mir-zu-konservativ/">taz.de</a></cite></p>
<p>Glückwunsch, wir zäumen das Pferd von hinten auf! Erst werden unter Inkaufnahme von Grundrechtsverletzungen Verträge geschlossen, und anschließend wird entgegen jeder Expertenmeinung und gegen den Volkswillen ein Gesetz erlassen, was diese Handlungen legitimiert. Morgen schließt der Herr Schäuble vielleicht Verträge mit allen Vermietern in Deutschland über Herausgabe eines Zweitschlüssels, damit das Aufbrechen der Türen nicht mehr so lange dauert. Und dann wird der Bundestag auch diese Verträge mit neuen Gesetzen legitimieren. Wollen wir hoffen, dass die Vermieter in diesem Land nicht bereit sind diese Art Verträge zu schließen. Sonst kann die amtierende Bundesregierung ja gar nicht anders. Wann wachen die Wähler endlich auf?</p>

	Tags: <a href="http://www.christophbuente.de/tag/spd/" title="SPD" rel="tag">SPD</a>, <a href="http://www.christophbuente.de/tag/taz/" title="TAZ" rel="tag">TAZ</a>, <a href="http://www.christophbuente.de/tag/vertrag/" title="Verträg" rel="tag">Verträg</a>, <a href="http://www.christophbuente.de/tag/zugangserschwerungsgesetz/" title="Zugangserschwerungsgesetz" rel="tag">Zugangserschwerungsgesetz</a>, <a href="http://www.christophbuente.de/tag/zypries/" title="Zypries" rel="tag">Zypries</a><br />

	<h4>Verwandten Beiträge</h4>
	<ul class="st-related-posts">
	<li>Es gibt keine verwandten Beiträge</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.christophbuente.de/2009-09-10-justizministerin-brigitte-zypries-uber-das-zugangserschwerungsgesetz/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apache startet nach Time Machine Restore nicht mehr</title>
		<link>http://www.christophbuente.de/2009-09-10-apache-startet-nach-time-machine-restore-nicht-mehr/</link>
		<comments>http://www.christophbuente.de/2009-09-10-apache-startet-nach-time-machine-restore-nicht-mehr/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 11:17:34 +0000</pubDate>
		<dc:creator>Christoph Bünte</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[directory]]></category>
		<category><![CDATA[error_log]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[Konsole]]></category>
		<category><![CDATA[MacBook]]></category>
		<category><![CDATA[restore]]></category>
		<category><![CDATA[time machine]]></category>
		<category><![CDATA[Webserver]]></category>

		<guid isPermaLink="false">http://www.christophbuente.de/?p=353</guid>
		<description><![CDATA[Sicherlich hast du gelesen, dass ich vor kurzem mein MacBook von einem Time Machine Backup neu aufsetzen musste, weil der Rechner nicht mehr bootete. Nach dem Restore schien alles gut zu laufen, aber der Apache Webserver startete nicht mehr:

$ ps aux &#124; grep httpd
christoph  6783   0.0  0,0   599828  [...]]]></description>
			<content:encoded><![CDATA[<p>Sicherlich hast du gelesen, dass ich vor kurzem mein MacBook von einem Time Machine Backup neu aufsetzen musste, weil der Rechner nicht mehr bootete. Nach dem Restore schien alles gut zu laufen, aber der Apache Webserver startete nicht mehr:<br />
<span id="more-353"></span></p>
<pre lang="bash">$ ps aux | grep httpd
christoph  6783   0.0  0,0   599828    504 s000  R+    1:01pm   0:00.00 grep httpd</pre>
<p>In der Konsole fand ich folgende Zeilen:</p>
<pre lang="log">07.09.09 12:21:27 org.apache.httpd[1405] (2)No such file or directory: httpd: could not open error log file /private/var/log/apache2/error_log.
07.09.09 12:21:27 org.apache.httpd[1405] Unable to open logs
07.09.09 12:21:27 com.apple.launchd[1] (org.apache.httpd[1405]) Exited with exit code: 1
07.09.09 12:21:27 com.apple.launchd[1] (org.apache.httpd) Throttling respawn: Will start in 10 seconds
</pre>
<p>Offensichtlich ging das was mit dem Öffnen der Logdatei schief.</p>
<pre lang="bash">$ ls /private/var/log/apache/error_log
/private/var/log/apache/error_log: No such file or directory
</pre>
<p>Das Verzeichnis /private war nicht wieder erstellt worden. Also habe ich ein neues angelegt:</p>
<pre lang="bash">$ sudo mkdir -p /private/var/log/apache2</pre>

	Tags: <a href="http://www.christophbuente.de/tag/apache/" title="Apache" rel="tag">Apache</a>, <a href="http://www.christophbuente.de/tag/backup/" title="backup" rel="tag">backup</a>, <a href="http://www.christophbuente.de/tag/directory/" title="directory" rel="tag">directory</a>, <a href="http://www.christophbuente.de/tag/error_log/" title="error_log" rel="tag">error_log</a>, <a href="http://www.christophbuente.de/tag/httpd/" title="httpd" rel="tag">httpd</a>, <a href="http://www.christophbuente.de/tag/konsole/" title="Konsole" rel="tag">Konsole</a>, <a href="http://www.christophbuente.de/tag/macbook/" title="MacBook" rel="tag">MacBook</a>, <a href="http://www.christophbuente.de/tag/restore/" title="restore" rel="tag">restore</a>, <a href="http://www.christophbuente.de/tag/time-machine/" title="time machine" rel="tag">time machine</a>, <a href="http://www.christophbuente.de/tag/webserver/" title="Webserver" rel="tag">Webserver</a><br />

	<h4>Verwandten Beiträge</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.christophbuente.de/2009-09-08-korruptes-dateisystem-datenrettung-mit-time-machine-und-drobo/" title="Korruptes Dateisystem &#8211; Datenrettung mit Time Machine und Drobo (8.09.2009)">Korruptes Dateisystem &#8211; Datenrettung mit Time Machine und Drobo</a> (5)</li>
	<li><a href="http://www.christophbuente.de/2009-11-21-ein-letztes-lautes-knirschen-backup-platte-defekt/" title="Ein letztes lautes Knirschen &#8211; Backup Platte defekt! (21.11.2009)">Ein letztes lautes Knirschen &#8211; Backup Platte defekt!</a> (0)</li>
	<li><a href="http://www.christophbuente.de/2010-07-20-rails-hosting-bei-rocket-rentals-auch-mit-staging-umgebung/" title="Rails Hosting bei Rocket Rentals &#8211; auch mit Staging Umgebung (20.07.2010)">Rails Hosting bei Rocket Rentals &#8211; auch mit Staging Umgebung</a> (1)</li>
	<li><a href="http://www.christophbuente.de/2009-09-18-kalenderwoche-eine-einfuehrung/" title="Kalenderwoche &#8211; eine Einführung (18.09.2009)">Kalenderwoche &#8211; eine Einführung</a> (6)</li>
	<li><a href="http://www.christophbuente.de/2007-12-25-apple-macbook-verarbeitung-mangelhaft/" title="Apple MacBook &#8211; Verarbeitung mangelhaft! (25.12.2007)">Apple MacBook &#8211; Verarbeitung mangelhaft!</a> (9)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.christophbuente.de/2009-09-10-apache-startet-nach-time-machine-restore-nicht-mehr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>500 Internal Server Error &#8211; Apache config vs. WP-Super-Cache</title>
		<link>http://www.christophbuente.de/2009-09-09-500-internal-server-error-apache-config-vs-wp-super-cache/</link>
		<comments>http://www.christophbuente.de/2009-09-09-500-internal-server-error-apache-config-vs-wp-super-cache/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 19:40:15 +0000</pubDate>
		<dc:creator>Christoph Bünte</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[AllowOverride]]></category>
		<category><![CDATA[directory]]></category>
		<category><![CDATA[Direktive]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[ExpiresActive]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Virtualhost]]></category>
		<category><![CDATA[WP-Super-Cache]]></category>

		<guid isPermaLink="false">http://www.christophbuente.de/?p=344</guid>
		<description><![CDATA[Den ganzen Tag war die Seite nicht ereichbar. Alle Besucher (ausser mir) sahen nur ein:
500 Internal Server Error
Als eingeloggter User bekam ich eine andere Seite serviert und sah diesen Fehler nicht. Einzig die Tatsache, dass der Traffic total eingebrochen ist machte mich stutzig. An dieser Stelle vielen Dank an Wolfgang Klenk, der mich bei Facebook [...]]]></description>
			<content:encoded><![CDATA[<p>Den ganzen Tag war die Seite nicht ereichbar. Alle Besucher (ausser mir) sahen nur ein:</p>
<pre>500 Internal Server Error</pre>
<p>Als eingeloggter User bekam ich eine andere Seite serviert und sah diesen Fehler nicht. Einzig die Tatsache, dass der Traffic total eingebrochen ist machte mich stutzig. An dieser Stelle vielen Dank an <a href="http://www.facebook.com/wklenk">Wolfgang Klenk</a>, der mich bei Facebook darauf aufmerksam machte, dass mein Server nicht richtig funktioniert. Die Fehlerlogdatei enthielt massenhaft folgende Fehlermeldung:</p>
<pre>wp-content/cache/.htaccess: ExpiresActive not allowed here</pre>
<p>Der Übeltäter war das <a href="http://wordpress.org/extend/plugins/wp-super-cache/">WP-Super-Cache Plugin</a> in Kombination mit meiner <a href="http://httpd.apache.org/">Apache</a> Konfiguration. Meine Direktory Direktive im <a href="http://httpd.apache.org/docs/2.0/mod/core.html#virtualhost">Virtualhost</a> Eintrag sah so aus:</p>
<pre>&lt;directory "/var/www/htdocs/www.christophbuente.de"&gt;
   Options FollowSymLinks
   AllowOverride FileInfo
   Order allow,deny
   Allow from all
 &lt;/directory&gt;
</pre>
<p>Wie in der readme.txt des WP-Super-Cache plugins zu lesen ist, wird aber für die <a href="http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride">AllowOverride</a> Option der Wert All vorausgesetzt. Nachdem ich das nun angepasst habe, ist der Server auch wieder. Hier die richtige Konfiguration.</p>
<pre >&lt;directory "/var/www/htdocs/www.christophbuente.de"&gt;
   Options FollowSymLinks
   AllowOverride All
   Order allow,deny
   Allow from all
 &lt;/directory&gt;
</pre>
<p>Vielleicht bewahrt es jemanden in er Zukunft vor dem gleichen Problem. Mich auf jeden Fall!</p>

	Tags: <a href="http://www.christophbuente.de/tag/allowoverride/" title="AllowOverride" rel="tag">AllowOverride</a>, <a href="http://www.christophbuente.de/tag/directory/" title="directory" rel="tag">directory</a>, <a href="http://www.christophbuente.de/tag/direktive/" title="Direktive" rel="tag">Direktive</a>, <a href="http://www.christophbuente.de/tag/error/" title="Error" rel="tag">Error</a>, <a href="http://www.christophbuente.de/tag/expiresactive/" title="ExpiresActive" rel="tag">ExpiresActive</a>, <a href="http://www.christophbuente.de/tag/htaccess/" title="htaccess" rel="tag">htaccess</a>, <a href="http://www.christophbuente.de/tag/plugin/" title="Plugin" rel="tag">Plugin</a>, <a href="http://www.christophbuente.de/tag/server/" title="Server" rel="tag">Server</a>, <a href="http://www.christophbuente.de/tag/virtualhost/" title="Virtualhost" rel="tag">Virtualhost</a>, <a href="http://www.christophbuente.de/tag/wp-super-cache/" title="WP-Super-Cache" rel="tag">WP-Super-Cache</a><br />

	<h4>Verwandten Beiträge</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.christophbuente.de/2010-07-20-rails-hosting-bei-rocket-rentals-auch-mit-staging-umgebung/" title="Rails Hosting bei Rocket Rentals &#8211; auch mit Staging Umgebung (20.07.2010)">Rails Hosting bei Rocket Rentals &#8211; auch mit Staging Umgebung</a> (1)</li>
	<li><a href="http://www.christophbuente.de/2009-09-10-apache-startet-nach-time-machine-restore-nicht-mehr/" title="Apache startet nach Time Machine Restore nicht mehr (10.09.2009)">Apache startet nach Time Machine Restore nicht mehr</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.christophbuente.de/2009-09-09-500-internal-server-error-apache-config-vs-wp-super-cache/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Korruptes Dateisystem &#8211; Datenrettung mit Time Machine und Drobo</title>
		<link>http://www.christophbuente.de/2009-09-08-korruptes-dateisystem-datenrettung-mit-time-machine-und-drobo/</link>
		<comments>http://www.christophbuente.de/2009-09-08-korruptes-dateisystem-datenrettung-mit-time-machine-und-drobo/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 20:56:47 +0000</pubDate>
		<dc:creator>Christoph Bünte</dc:creator>
				<category><![CDATA[mac os x]]></category>
		<category><![CDATA[Ausfall]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[Dateisystem]]></category>
		<category><![CDATA[datenrettung]]></category>
		<category><![CDATA[disk error]]></category>
		<category><![CDATA[Drobo]]></category>
		<category><![CDATA[festplatte]]></category>
		<category><![CDATA[Leopard]]></category>
		<category><![CDATA[MacBook]]></category>
		<category><![CDATA[os x]]></category>
		<category><![CDATA[restore]]></category>
		<category><![CDATA[Snow Leopard]]></category>
		<category><![CDATA[Sparsebundle]]></category>
		<category><![CDATA[time machine]]></category>

		<guid isPermaLink="false">http://www.christophbuente.de/?p=309</guid>
		<description><![CDATA[Mein Tag fing an wie immer! Frühstücken mit meiner Freundin &#8211; Latte Macchiato und Toast. Danach kurz E-mails checken. Mein Notebook und das Netzger&#228;t untder den Arm klemmen und ab zur Arbeit. Dort angekommen wird alles ordentlich verkabelt und ab geht die wilde Fahrt. Weit gefehlt! Das erste Kuriosum was mir auffällt ist, dass skype [...]]]></description>
			<content:encoded><![CDATA[<p>Mein Tag fing an wie immer! Frühstücken mit meiner Freundin &#8211; Latte Macchiato und Toast. Danach kurz E-mails checken. Mein Notebook und <a href="http://www.conrad.de/Messtechnik-Netzgerate/">das Netzger&auml;t</a> untder den Arm klemmen und ab zur Arbeit. Dort angekommen wird alles ordentlich verkabelt und ab geht die wilde Fahrt. Weit gefehlt! Das erste Kuriosum was mir auffällt ist, dass skype sich nicht mehr verbinden kann. Na gut denk ich, auch die haben mal Computerprobleme, ohne zu ahnen, dass ich das Problem hatte! Ich will vorsichtshalber in meinem Schlüsselbund das <a href="http://www.skype.com">Skype</a> Passwort raussuchen und es mal auf der Skype webseite versuchen. Mein Gesicht :O hätte ich gerne gesehen, als ich die gähnende Leere in meinem Schlüsselbund sah! Alles weg, aber wirklich alles. Nicht nur sämtliche Passwörter für Webseiten und installierte Anwendungen, sondern auch die sicheren Notizen mit allen Lizenzschlüsseln meiner gekauften Software. Na großartig! Boot tut gut denke ich, und starte den Rechner neu.</p>
<p><span id="more-309"></span></p>
<p>Dieser Zahn wurde mir ca. 30 Sekunden nach ertönen des allseits beliebten C-Dur Akkordes aus den Lautsprechern meines <a href="http://www.apple.com/de/macbook/">MacBooks</a> gezogen. Denn der Bildschirm wurde erneut schwarz und der Rechner startete erneut. Dies hätte sich noch bis in die Unendlichkeit fortgesetzt &#8230; doch da kam mir eine Idee. Durch drücken der Taste <em>V</em> während des Bootvorganges wird der &#8220;Verbose Mode&#8221; gestartet, welcher zusätzliche Informationen auf dem Bildschirm ausgibt. Alles sieht normal aus. Speicher und Festplatten werden erkannt, doch eine Zehntel Sekunde vor dem erneuten Start erblicken meine Augen viel Text, der irgendwas mit <em>disk error</em> enthält. Ein Hauptgewinn am Montag morgen.</p>
<p>Nachdem ich von meiner neuen <a href="http://www.apple.com/de/macosx/">Snow Leopard</a> <acronym lang="en" title="Digital Versatile Disc">DVD</acronym> gebootet hatte, probierte ich das Dateisystem auf dem MacBook zu reparieren. Doch bereits nach wenigen Sekunden wurde mir der nächste Schlag versetzt. In großen roten Buchstaben stand zu lesen:</p>
<blockquote><p><span style="color:red;font-size:18px;">The volume MacOSX could not be repaired. Error: Filesystem verify or repair failed.</span></p></blockquote>
<p>Ganz grosses Kino, also ab zurück nach Hause. Der Tag war dahin &#8230;</p>
<p>
Zu Hause wieder von der Snow Leopard DVD booten, weil ich die Leopard DVD nicht finden konnte. Nach dem Booten gibt es sogar die Möglichkeit mit einem kabellosen Netzwerk zu verbinden. Mein Backup befindet sich auf meinem <a href="http://www.drobo.com/products/drobo.php">Drobo</a> nebst <a href="http://www.drobo.com/products/droboshare.php">Drobo Share</a>. Dank einer Erweiterung läuft ein <acronym lang="en" title="Apple Filing Protocol">AFP</acronym> Daemon auf dem Drobo Share, der eine <a href="http://www.apple.com/de/timecapsule/">Time Capsule</a> simuliert. Doch leider konnte kein Backup im Netzwerk gefunden werden. Warum sollte heute auch etwas auf Anhieb klappen? Nach umständlichen &#8220;herunterfahren&#8221; des Drobo Share habe ich den Drobo direkt per <acronym lang="en" title="Universal Serial Bus">USB</acronym> an mein MacBook angeschlossen. Und siehe da, es wurden Backups gefunden. Doch leider war das neueste gut 2 Monate alt. Naja, besser als nichts. Wenn der Rechner erstmal wieder läuft, kann man der Frage auf den Grund gehen, wo die anderen Backups sind. Schließlich wurde heute morgen um 9:10 das letzte Backup erfolgreich abgeschlossen, irgendwo muss es ja sein. Ich wählte also das neueste Backup aus, in freudiger Erwartung, meinen Rechner in ca. 2-3 Stunden wieder in Betrieb nehmen zu können. Leider dauerte es schon allein eine gute Stunde, bis <a href="http://www.apple.com/de/macosx/what-is-macosx/time-machine.html">Time Machine</a> das Backup untersucht hatte, um festzustellen, dass es tatsächlich auf die eingebaute <acronym lang="en" title="Solid State Disk">SSD</acronym> Festplatte passt. Weitere 7 Stunden vergingen, bis das Backup von ca. 180 <acronym lang="en" title="Giga Byte">GB</acronym> zurück gespielt war. Es war ein gutes Gefühl, als der Rechner wieder bootete. Wenn auch noch mit dem alten Stand von Juli.</p>
<p> Um Time Machine mit einer im Netz freigegebenen AFP Freigabe zu betreiben, muss man ein so genanntes <em>SparseBundle</em> anlegen. Das ist eine mitwachsende Imagedatei, die mit Mac OS 10.5 eingeführt wurde. Was ich nicht wusste ist, dass diese Datei eigentlich ein Verzeichnis ist, welches in verschachtelten Unterverzeichnissen, den so genannten <em>Bands</em> die eigentlichen Nutzdaten ablegt. Direkt im Oberverzeichnis des Drobo lag ein Sparsebundle: <code>chrisbook_002500a9495c.sparsebundle</code>. Im Unterverzeichnis <a href="http://code.google.com/p/backmyfruitup/">DroboCapsule</a> lag ein weiteres, gleichnamiges Bundle, welches die neuen Backups enthielt. Leider konnte das Time Machine Restore Programm auf der Mac OS X DVD keine Unterverzeichnisse durchsuchen, oder gab sich mit dem ersten gefundenen zufrieden. Nachdem ich die Sparsebundles ausgetauscht habe, ging der Spass von vorne los:</p>
<ol>
<li>Mac OS X Installations DVD Booten</li>
<li>Time Machine Restore Programm starten</li>
<li>Neuestes Backup auswählen</li>
<li>Backup und verfügbaren Platz auf dem Rechner überprüfen lassen</li>
<li>Backup zurück spielen</li>
</ol>
<p>Am frühen Morgen war es dann vollbracht. Der Rechner war vollständig wieder her gestellt. Einzig der <a href="http://www.apple.com/macosx/what-is-macosx/spotlight.html">Spotlight</a> Index musste komplett neu erstellt werden. Bei 180GB nahm das gut 4 Stunden in Anspruch. Was den Fehler genau verursacht hat, war leider nicht zu ergründen. Ich hoffe nicht, dass es erste Ausfallerscheinungen meiner SSD Platte sind. Der S.M.A.R.T Status ist ok, also hoffen wir das beste. In diesem Sinne: <em>&#8220;Backup early, backup often!&#8221;</em></p>

	Tags: <a href="http://www.christophbuente.de/tag/ausfall/" title="Ausfall" rel="tag">Ausfall</a>, <a href="http://www.christophbuente.de/tag/backup/" title="backup" rel="tag">backup</a>, <a href="http://www.christophbuente.de/tag/dateisystem/" title="Dateisystem" rel="tag">Dateisystem</a>, <a href="http://www.christophbuente.de/tag/datenrettung/" title="datenrettung" rel="tag">datenrettung</a>, <a href="http://www.christophbuente.de/tag/disk-error/" title="disk error" rel="tag">disk error</a>, <a href="http://www.christophbuente.de/tag/drobo/" title="Drobo" rel="tag">Drobo</a>, <a href="http://www.christophbuente.de/tag/festplatte/" title="festplatte" rel="tag">festplatte</a>, <a href="http://www.christophbuente.de/tag/leopard/" title="Leopard" rel="tag">Leopard</a>, <a href="http://www.christophbuente.de/tag/macbook/" title="MacBook" rel="tag">MacBook</a>, <a href="http://www.christophbuente.de/tag/os-x/" title="os x" rel="tag">os x</a>, <a href="http://www.christophbuente.de/tag/restore/" title="restore" rel="tag">restore</a>, <a href="http://www.christophbuente.de/tag/snow-leopard/" title="Snow Leopard" rel="tag">Snow Leopard</a>, <a href="http://www.christophbuente.de/tag/sparsebundle/" title="Sparsebundle" rel="tag">Sparsebundle</a>, <a href="http://www.christophbuente.de/tag/time-machine/" title="time machine" rel="tag">time machine</a><br />

	<h4>Verwandten Beiträge</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.christophbuente.de/2009-09-10-apache-startet-nach-time-machine-restore-nicht-mehr/" title="Apache startet nach Time Machine Restore nicht mehr (10.09.2009)">Apache startet nach Time Machine Restore nicht mehr</a> (0)</li>
	<li><a href="http://www.christophbuente.de/2009-11-21-ein-letztes-lautes-knirschen-backup-platte-defekt/" title="Ein letztes lautes Knirschen &#8211; Backup Platte defekt! (21.11.2009)">Ein letztes lautes Knirschen &#8211; Backup Platte defekt!</a> (0)</li>
	<li><a href="http://www.christophbuente.de/2007-11-25-ruby-on-rails-auf-mac-os-x-5-minuten-kurzanleitung/" title="Ruby on Rails auf Mac OS X &#8211; 5 Minuten Kurzanleitung (25.11.2007)">Ruby on Rails auf Mac OS X &#8211; 5 Minuten Kurzanleitung</a> (2)</li>
	<li><a href="http://www.christophbuente.de/2009-09-18-kalenderwoche-eine-einfuehrung/" title="Kalenderwoche &#8211; eine Einführung (18.09.2009)">Kalenderwoche &#8211; eine Einführung</a> (6)</li>
	<li><a href="http://www.christophbuente.de/2007-12-25-apple-macbook-verarbeitung-mangelhaft/" title="Apple MacBook &#8211; Verarbeitung mangelhaft! (25.12.2007)">Apple MacBook &#8211; Verarbeitung mangelhaft!</a> (9)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.christophbuente.de/2009-09-08-korruptes-dateisystem-datenrettung-mit-time-machine-und-drobo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Remarkable &#8211; Rails Anwendungen automatisch testen</title>
		<link>http://www.christophbuente.de/2009-05-16-remarkable-rails-anwendungen-automatisch-testen/</link>
		<comments>http://www.christophbuente.de/2009-05-16-remarkable-rails-anwendungen-automatisch-testen/#comments</comments>
		<pubDate>Sat, 16 May 2009 10:14:17 +0000</pubDate>
		<dc:creator>Christoph Bünte</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[functional test]]></category>
		<category><![CDATA[integration test]]></category>
		<category><![CDATA[model validation]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[remarkable]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[testspec]]></category>
		<category><![CDATA[unit test]]></category>
		<category><![CDATA[validation test]]></category>

		<guid isPermaLink="false">http://www.christophbuente.de/?p=251</guid>
		<description><![CDATA[
Seit über einem Jahr entwickle ich Webanwendungen mit Ruby on Rails. Und seit dieser Zeit schreibe ich Tests für meine Anwendungen. Angefangen von Test::Unit über test/spec bis zu RSpec. Doch selten gingen mir Tests leicht von der Hand. Ständig stelle ich mir die Frage: Wie viel teste ich? Habe ich genug getestet? Teste ich schon [...]]]></description>
			<content:encoded><![CDATA[<p><!--noadsense--><br />
Seit über einem Jahr entwickle ich Webanwendungen mit Ruby on Rails. Und seit dieser Zeit schreibe ich Tests für meine Anwendungen. Angefangen von <a href="http://api.rubyonrails.org/classes/Test/Unit/Assertions.html">Test::Unit</a> über <a href="http://test-spec.rubyforge.org/test-spec/">test/spec</a> bis zu <a href="http://rspec.info/">RSpec</a>. Doch selten gingen mir Tests leicht von der Hand. Ständig stelle ich mir die Frage: Wie viel teste ich? Habe ich genug getestet? Teste ich schon Rails Code?</p>
<p>Die verschiedenen Test Frameworks haben ihre Vor- und Nachteile. Test::Unit ist relativ einfach und schnell. test/spec und RSpec hingegen deutlich lesbarer, jedoch auch langsamer. Sie eigenen sich deshalb besser, um die Tests als Dokumentation zu verwenden. Test::Unit und test/spec verwenden für Viewtests den Umweg über die Controller, was sie im Vergleich zu RSpec deutlich langsamer macht. In Rspec testet man jede Schicht des <acronym title="Model View Controller">MVC</acronym> Musters separat. Das Verhalten der jeweils anderen Schichten wird mit Mocks und Stubs simuliert. Integration Tests mit Cucumber testen dann das Zusammenspiel aller Schichten.</p>
<p><a href="http://github.com/carlosbrando">Carlos Dandos</a> und <a href="http://github.com/josevalim">José Valims</a> <a href="http://github.com/carlosbrando/remarkable/tree/master">Remarkable</a> ist das mit Abstand großartigste Plugin für <a href="http://rubyonrails.org/">Ruby on Rails</a>, was mir seit langem über den Weg gelaufen ist, denn es reduziert Tests auf das nötigste! Man schreibt in unglaublich expressiver Form, was das erwartete Verhalten ist. Das auf RSpec basierende Remarkable testet mit einer Vielzahl von Custom Matchers die Erwartung ab.</p>
<p><span id="more-251"></span></p>
<p>Ein Beispiel für ein Model Validation Test in Test::Unit</p>
<pre escaped="true" lang="ruby" line="1">class UserTest &lt; Test::Unit
  def test_user_not_valid_if_name_is_blank
    user = User.create
    assert user.invalid?
    assert_equal :blank, :user.errors[:name]
  end
end</pre>
<p>Ein Beispiel für ein Model Validation Test in test/spec</p>
<pre escaped="true" lang="ruby">context 'User validations' do
  specify 'user should not be valid if name is blank' do
    user = User.create
    user.should.not.be.valid
    user.errors[:name].should == :name
  end
end</pre>
<p>Ein Beispiel für ein Model Validation Test in RSpec</p>
<pre escaped="true" lang="ruby">describe User do
  it 'should not be valid if name is blank' do
    user = User.create
    user.should_not_be_valid
    user.errors[:name].should == :blank
  end
end</pre>
<p>Und jetzt der gleiche Test mit Remarkable:</p>
<pre escaped="true" lang="ruby">describe User do
  it { should validate_presence_of(:name) } # RSpec syntax
  should_validate_presence_of :name # Remarkable macro syntax
end</pre>
<p>Ok, was musst du tun, um Remarkable verwenden zu können? Falls noch nicht geschen, solltest du das Gem Verzeichnis von <a href="http://gems.github.com">Github</a> als Quelle für weitere Gems lokal registrieren:</p>
<pre lang="bash">sudo gem sources -a http://gems.github.com</pre>
<p>Danach müssen die benötigten Gems installiert werden:</p>
<pre lang="bash">sudo gem install rspec -v 1.2.6
sudo gem install rspec-rails -v 1.2.6
sudo gem install remarkable_rails</pre>
<p>Für alle, die noch eine Rails Version &lt; 2.2 verwenden müssen zusätzlich den <a href="http://github.com/svenfuchs/i18n/tree/master">I18n Backport von Sven Fuchs</a> installieren:</p>
<pre lang="bash">sudo gem install svenfuchs-i18n</pre>
<p>Abschließend müssen im Rootverzeichnis des entsprechenden Rails Projektes noch einige helper scripte generiert werden:</p>
<pre lang="bash">ruby script/generate rspec</pre>
<p>Welche Matcher bringt Remarkable mit?</p>
<ul>
<li>Matcher für <em>alle</em> Validierungen mit <em>allen</em> Optionen</li>
<li>Matcher für <em>alle</em> Assoziationen mit <em>fast allen</em> Optionen</li>
<li>Named Scopes und Massenzuweisungsmatchern</li>
<li>Datenbank Matcher für Indexes usw.</li>
</ul>
<p>Ein typischer Unit Test mit Remarkable könnte so aussehen:</p>
<pre escaped="true" lang="ruby">require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe User, 'validations' do
  should_validate_presence_of   :username, :email, :password
  should_validate_length_of     :username, :minimum =&gt; 6
  should_validate_acceptance_of :agreement
end

describe User, 'associations' do
  should_have_many :images
  should_have_many :posts
  should_have_one  :profile
end

describe User, 'database' do
  should_have_column :activated, :type =&gt; :boolean
  should_have_index  :username
end

describe User, 'named scopes' do
  should_have_scope :with_image, :joins =&gt; :images
  should_have_scope :activated,  :conditions =&gt; { :activated =&gt; true }
end</pre>
<p>Und von nun an möchte ich nicht mehr hören, dass testen zu schwer sei. Alles Ausreden!</p>
<p>In diesem Sinne, Test frei.</p>

	Tags: <a href="http://www.christophbuente.de/tag/cucumber/" title="cucumber" rel="tag">cucumber</a>, <a href="http://www.christophbuente.de/tag/functional-test/" title="functional test" rel="tag">functional test</a>, <a href="http://www.christophbuente.de/tag/integration-test/" title="integration test" rel="tag">integration test</a>, <a href="http://www.christophbuente.de/tag/model-validation/" title="model validation" rel="tag">model validation</a>, <a href="http://www.christophbuente.de/tag/rails/" title="rails" rel="tag">rails</a>, <a href="http://www.christophbuente.de/tag/remarkable/" title="remarkable" rel="tag">remarkable</a>, <a href="http://www.christophbuente.de/tag/rspec/" title="rspec" rel="tag">rspec</a>, <a href="http://www.christophbuente.de/tag/ruby-on-rails/" title="Ruby on Rails" rel="tag">Ruby on Rails</a>, <a href="http://www.christophbuente.de/tag/testing/" title="Testing" rel="tag">Testing</a>, <a href="http://www.christophbuente.de/tag/testspec/" title="testspec" rel="tag">testspec</a>, <a href="http://www.christophbuente.de/tag/unit-test/" title="unit test" rel="tag">unit test</a>, <a href="http://www.christophbuente.de/tag/validation-test/" title="validation test" rel="tag">validation test</a><br />

	<h4>Verwandten Beiträge</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.christophbuente.de/2007-11-24-advancing-rails-ein-workshop-mit-david-a-black/" title="Advancing Rails &#8211; Ein Workshop mit David A. Black (24.11.2007)">Advancing Rails &#8211; Ein Workshop mit David A. Black</a> (0)</li>
	<li><a href="http://www.christophbuente.de/2008-01-24-stripes-framework-tests-fur-actionbeans-im-wizard-modus/" title="Stripes Framework &#8211; Tests für ActionBeans im Wizard Modus (24.01.2008)">Stripes Framework &#8211; Tests für ActionBeans im Wizard Modus</a> (0)</li>
	<li><a href="http://www.christophbuente.de/2007-11-25-ruby-on-rails-auf-mac-os-x-5-minuten-kurzanleitung/" title="Ruby on Rails auf Mac OS X &#8211; 5 Minuten Kurzanleitung (25.11.2007)">Ruby on Rails auf Mac OS X &#8211; 5 Minuten Kurzanleitung</a> (2)</li>
	<li><a href="http://www.christophbuente.de/2007-10-05-frei-nehmen-um-zu-lernen/" title="Rails tutorial &#8211;  Eine Woche lang Agile Webentwicklung (5.10.2007)">Rails tutorial &#8211;  Eine Woche lang Agile Webentwicklung</a> (0)</li>
	<li><a href="http://www.christophbuente.de/2010-07-20-rails-hosting-bei-rocket-rentals-auch-mit-staging-umgebung/" title="Rails Hosting bei Rocket Rentals &#8211; auch mit Staging Umgebung (20.07.2010)">Rails Hosting bei Rocket Rentals &#8211; auch mit Staging Umgebung</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.christophbuente.de/2009-05-16-remarkable-rails-anwendungen-automatisch-testen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zum Schutz unserer Kinder &#8230;</title>
		<link>http://www.christophbuente.de/2009-05-07-zum-schutz-unserer-kinder/</link>
		<comments>http://www.christophbuente.de/2009-05-07-zum-schutz-unserer-kinder/#comments</comments>
		<pubDate>Thu, 07 May 2009 07:32:18 +0000</pubDate>
		<dc:creator>Christoph Bünte</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Berichterstattung]]></category>
		<category><![CDATA[CDU]]></category>
		<category><![CDATA[Demokratie]]></category>
		<category><![CDATA[Kontrollinstrumentarium]]></category>
		<category><![CDATA[Netzsperren]]></category>
		<category><![CDATA[Randgruppe]]></category>
		<category><![CDATA[Rechtsverständnis]]></category>
		<category><![CDATA[Regierung]]></category>
		<category><![CDATA[Schutz]]></category>
		<category><![CDATA[Volksmacht]]></category>
		<category><![CDATA[Zensur]]></category>

		<guid isPermaLink="false">http://www.christophbuente.de/?p=241</guid>
		<description><![CDATA[will die Regierung das so genannte Netzsperren-Gesetz erlassen. Jeder wird sagen: Ist doch toll, wir müssen unserer Kinder davor schützen!
Die Initiatorin, Bundesfamilienministerin Ursula von der Leyen (CDU), erhofft sich durch das Gesetz wirksamen Schutz gegen die Verbreitung von kinderpornografischen Inhalten
 Was keiner der Beteiligten freiwillig ausspricht ist, dass ein neues Kontrollinstrumentarium installiert werden soll, um [...]]]></description>
			<content:encoded><![CDATA[<p>will die Regierung das so genannte Netzsperren-Gesetz erlassen. Jeder wird sagen: Ist doch toll, wir müssen unserer Kinder davor schützen!</p>
<blockquote><p>Die Initiatorin, Bundesfamilienministerin Ursula von der Leyen (CDU), erhofft sich durch das Gesetz wirksamen Schutz gegen die Verbreitung von kinderpornografischen Inhalten</p></blockquote>
<p> Was keiner der Beteiligten freiwillig ausspricht ist, dass ein neues Kontrollinstrumentarium installiert werden soll, um den &#8220;rechtsfreien Raum Internet&#8221; wirkungsvoll zu kontrollieren. Ist dies erstmal getan, spielt es keine Rolle mehr, ob es sich dabei um Kinderporno, Rohrbomben, Links- oder Rechtsextreme Hetze, vielleicht sogar soziale Randgruppen oder regierungsfeindliche Berichterstattung handelt. Die technische Wirksamkeit dieser Maßnahme ist ausserdem nicht bewiesen. Die soziale und emotionale Wirkung wird allerdings immens sein.</p>
<p><span id="more-241"></span><br />
<!--adsensestart--></p>
<p>Sollte dieses Gesetz tatsächlich erlassen werden, sind wir auf dem besten Weg, die Demokratie den Abfluss runter zu spülen. Dabei nähern wir uns bzgl. des Rechtsverständnisses mit großen Schritten der Volksmacht China an. Herzlichen Glückwunsch, Herrn Schäuble wird es freuen!</p>
<h4>Weitere Informationen zum diesem Thema:</h4>
<ul>
<li><a href="http://www.jensscholz.com/2009/04/warum-es-um-zensur-geht.htm">Warum es um Zensur geht</a></li>
<li><a href="http://www.spiegel.de/netzwelt/web/0,1518,622653,00.html">Petition gegen Filtergesetz gestartet</a></li>
<li><a href="https://epetitionen.bundestag.de/index.php?PHPSESSID=195e81e63e9381bfb6265e57d973accf&amp;action=petition;sa=details;petition=3860">Online Petition gegen das Netzsperren Gesetz</a></li>
</ul>

	Tags: <a href="http://www.christophbuente.de/tag/berichterstattung/" title="Berichterstattung" rel="tag">Berichterstattung</a>, <a href="http://www.christophbuente.de/tag/cdu/" title="CDU" rel="tag">CDU</a>, <a href="http://www.christophbuente.de/tag/demokratie/" title="Demokratie" rel="tag">Demokratie</a>, <a href="http://www.christophbuente.de/tag/kontrollinstrumentarium/" title="Kontrollinstrumentarium" rel="tag">Kontrollinstrumentarium</a>, <a href="http://www.christophbuente.de/tag/netzsperren/" title="Netzsperren" rel="tag">Netzsperren</a>, <a href="http://www.christophbuente.de/tag/randgruppe/" title="Randgruppe" rel="tag">Randgruppe</a>, <a href="http://www.christophbuente.de/tag/rechtsverstandnis/" title="Rechtsverständnis" rel="tag">Rechtsverständnis</a>, <a href="http://www.christophbuente.de/tag/regierung/" title="Regierung" rel="tag">Regierung</a>, <a href="http://www.christophbuente.de/tag/schutz/" title="Schutz" rel="tag">Schutz</a>, <a href="http://www.christophbuente.de/tag/volksmacht/" title="Volksmacht" rel="tag">Volksmacht</a>, <a href="http://www.christophbuente.de/tag/zensur/" title="Zensur" rel="tag">Zensur</a><br />

	<h4>Verwandten Beiträge</h4>
	<ul class="st-related-posts">
	<li>Es gibt keine verwandten Beiträge</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.christophbuente.de/2009-05-07-zum-schutz-unserer-kinder/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 2.132 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-07-29 13:19:25 -->
