<?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>developer.studivz.net</title>
	<atom:link href="http://developer.studivz.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://developer.studivz.net</link>
	<description>where the VZ developers blog</description>
	<lastBuildDate>Thu, 19 Nov 2009 11:03:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>VZ @ IPC und WebTech</title>
		<link>http://developer.studivz.net/2009/11/12/vz-ipc-und-webtech/</link>
		<comments>http://developer.studivz.net/2009/11/12/vz-ipc-und-webtech/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 09:31:55 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ipc]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=2084</guid>
		<description><![CDATA[Vom 15.11. bis zum 18.11. finden nächste Woche in Karlsruhe die International PHP conference und die Webtech Conference statt. VZ Netzwerke unterstützt diese Konferenzen als Silber Sponsor und ist mit einem Stand, vier Sessions und einer Keynote vertreten:
 



Push-Implementierung in der studiVZ iPhone App
Max Horváth, Steffen Irrgang
In dieser Session berichten wir, wie studiVZ die Push-Funktionalität [...]]]></description>
			<content:encoded><![CDATA[<p>Vom <strong>15.11.</strong> bis zum <strong>18.11.</strong> finden nächste Woche in Karlsruhe die International PHP conference und die Webtech Conference statt. VZ Netzwerke unterstützt diese Konferenzen als Silber Sponsor und ist mit einem Stand, vier Sessions und einer Keynote vertreten:</p>
<p style="margin-bottom: 0cm"><img src="http://developer.studivz.net/wp-content/uploads/2009/11/ipc.png" alt="IPC Logo" /> <img src="http://developer.studivz.net/wp-content/uploads/2009/11/webtech.jpg" alt="IPC Logo" /></p>
<p style="margin-bottom: 0cm">
<ul>
<li>
<p style="margin-bottom: 0cm"><strong>Push-Implementierung in der studiVZ iPhone App</strong><br />
Max Horváth, Steffen Irrgang<br />
In dieser Session berichten wir, wie studiVZ die Push-Funktionalität auf der iPhone- und auf der Serverseite implementiert hat. Wir zeigen, wie der Client sich über das studiVZ-API anmeldet und über welche Architektur Push-Nachrichten auf dem iPhone landen. Dabei wird näher auf die AMQP-Queue-Infrastruktur von studiVZ eingegangen und gezeigt, welchen Fluss eine Benachrichtigung bei studiVZ durchlebt, bis sie auf dem iPhone eines Nutzers ankommt.</p>
<p style="margin-bottom: 0cm"><a title="Push Implementation" href="http://developer.studivz.net/wp-content/uploads/2009/11/Push-Implementation.pdf" target="_self">Download Slides</a></p>
<p>16.11.2009 | 09:45 – 10:45</li>
</ul>
<p style="margin-bottom: 0cm">
<ul>
<li>
<p style="margin-bottom: 0cm"><strong>OAuth – ein offener Standard für die sichere Authentifizierung in APIs</strong><br />
Bastian Hofmann, Max Horváth, Andre Zayarni<br />
In dieser Session widmen wir uns dem offenen Standard OAuth. Er wird für die sichere Authentifizierung in APIs genutzt. Wir zeigen, wie man OAuth implementiert und wieso es sinnvoll ist, Drittanwendungen über OAuth an die eigene API anzubinden. Außerdem gehen wir darauf ein, wie eine eigene Webapplikation mittels OAuth mit anderen Services verbunden werden kann.</p>
<p><a title="OAuth" href="http://developer.studivz.net/wp-content/uploads/2009/11/OAuth.pdf" target="_self">Download Slides</a></p>
<p>16.11.2009 | 14:30 – 15:30</p>
<p style="margin-bottom: 0cm">
</li>
<li>
<p style="margin-bottom: 0cm"><strong>OpenSocial in der Praxis</strong><br />
Sebastian Galonska, Bastian Hofmann<br />
OpenSocial bietet vielfältige Möglichkeiten, die Funktionalität eines Social Networks zu erweitern. Dabei sind die Konzepte zur Entwicklung von Gadgets einfach zu erlernen. In dieser Session geben wir Einblicke, wie Gadgets für die VZ-Netzwerke, aber auch jeden anderen OpenSocial-kompatiblen Container, erstellt und veröffentlicht werden können. Dabei berücksichtigen wir auch Aspekte wie Skalierung und Sicherheit.</p>
<p><a title="OpenSocial" href="http://developer.studivz.net/wp-content/uploads/2009/11/OpenSocial_in_der_Praxis.pdf" target="_self">Download Slides</a></p>
<p>17.11.2009 | 10:30 – 11:30</p>
<p style="margin-bottom: 0cm">
</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm"><strong>Best Practices bei der Entwicklung von öffentlichen APIs</strong><br />
Steffen Irrgang, Max Horváth, Andre Zayarni<br />
In dieser Session soll praxisnah erörtert werden, welche Fallstricke und vor allem welche Best Practices in Bezug auf die Entwicklung von öffentlichen APIs zu beachten sind. Dabei konzentrieren wir uns auf RESTful Web Services sowie auf den offenen Authentifizierungsstandard OAuth.</p>
<p><a title="API" href="http://developer.studivz.net/wp-content/uploads/2009/11/Best-Practices-APIs.pdf" target="_self">Download Slides</a></p>
<p>17.11.2009 | 16:30 – 17:30</li>
</ul>
<ul>
<li>
<p style="margin-bottom: 0cm"><strong>Keynote: Bugfree, agil und überhaupt</strong><br />
Jodok Batlogg<br />
In his keynote Jodok will highlight some insights on studiVZ. How important are agile processes? Is studiVZ really bugfree or is there a need for a bugtracking system? Why should one additional line of SQL require 10 additional servers and how can good profiling save you 20 of them?<br />
18.11.2009 | 11:45 – 12:30</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/11/12/vz-ipc-und-webtech/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apache Hadoop Get Together Berlin</title>
		<link>http://developer.studivz.net/2009/11/11/apache-hadoop-get-together-berlin/</link>
		<comments>http://developer.studivz.net/2009/11/11/apache-hadoop-get-together-berlin/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 17:02:54 +0000</pubDate>
		<dc:creator>nils</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[hadoop]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=2078</guid>
		<description><![CDATA[We would like to announce the December-2009 Hadoop Get Together in newthinking store Berlin.
When: 16. December 2009 at 5:00pm
Where: newthinking store, Tucholskystr. 48, Berlin, Germany
As always there will be slots of 20min each for talks on your Hadoop topic. After each talk there will be a lot time to discuss. You can order drinks directly [...]]]></description>
			<content:encoded><![CDATA[<p>We would like to announce the December-2009 Hadoop Get Together in <a href="http://newthinking-store.de/">newthinking store Berlin</a>.</p>
<p><strong>When:</strong> 16. December 2009 at 5:00pm<br />
<strong>Where:</strong> newthinking store, Tucholskystr. 48, Berlin, Germany</p>
<p>As always there will be slots of 20min each for talks on your Hadoop topic. After each talk there will be a lot time to discuss. You can order drinks directly at the bar in the newthinking store. If you like, you can order pizza. We will go to <a href="http://www.aufsturz.de/">Cafe Aufsturz</a> after the event for some beer and something to eat.</p>
<p><strong>Talks scheduled so far:</strong></p>
<p><strong>Richard Hutton</strong> (nugg.ad): &#8220;Moving from five days to one hour.&#8221; &#8211; This talk explains how we made data processing scalable at nugg.ad. The company&#8217;s core business is online advertisement targeting. Our servers receive 10,000 requests per second resulting in data of 100GB per day.</p>
<p>As the classical data warehouse solution reached its limit, we moved to a framework built on top of Hadoop to make analytics speedy, data mining detailed and all of our lives easier. We will give an overview of our solution involving file system structures, scheduling, messaging and programming languages from the future.</p>
<p><strong>Jörg Möllenkamp</strong> (Sun): &#8220;Hadoop on Sun&#8221;<br />
Abstract: Hadoop is a well known technology inside of Sun. This talk want to show some interesting use cases of Hadoop in conjunction with Sun technologies. The first show case wants to demonstrate how Hadoop can used to load massive multicore system with up to 256 threads in a single system to the max. The second use case shows how several mechanisms integrated in Solaris can ease the deployment and operation of Hadoop even in non-dedicated environments. The last usecase will show the combination of the Sun Grid Engine and Hadoop. Talk may contain command-line demonstrations ;).</p>
<p><strong>Nikolaus Pohle</strong> (nurago): &#8220;M/R for MR &#8211; Online Market Research powered by Apache Hadoop. Enable consultants to analyze online behavior for audience segmentation, advertising effects and usage patterns.&#8221;</p>
<p>We would like to invite you, the visitor to also tell your Hadoop story, if you like, you can bring slides &#8211; there will be a beamer. Thanks for Isabel Drost who is organizing this event and for Newthinking Store for providing Space. VZnet Netzwerke is sponsoring the video recording of the talks.</p>
<p>Registration: </p>
<li>
<a href="http://upcoming.yahoo.com/event/4842528/">http://upcoming.yahoo.com/event/4842528/</a></li>
<li><a href="https://www.xing.com/events/apache-hadoop-berlin-426025">https://www.xing.com/events/apache-hadoop-berlin-426025</a></li>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/11/11/apache-hadoop-get-together-berlin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>N✮SQL Berlin Roundup</title>
		<link>http://developer.studivz.net/2009/11/06/nosql-berlin-roundup/</link>
		<comments>http://developer.studivz.net/2009/11/06/nosql-berlin-roundup/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 10:30:29 +0000</pubDate>
		<dc:creator>tim_l</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[ACID]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[key_value_stores]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[paxos]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[riak]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=2057</guid>
		<description><![CDATA[Key-value-stores and other non-relational databases are a hot topic right now, as it increasingly turns out that the traditional (= relational) approach is difficult to scale horizontally. In other words, it may be time — as Bob Ippolito put it — to &#8220;Drop ACID and think about data&#8221;.
If you couldn&#8217;t make it to the first [...]]]></description>
			<content:encoded><![CDATA[<p>Key-value-stores and other non-relational databases are a hot topic right now, as it increasingly turns out that the traditional (= relational) approach is difficult to scale horizontally. In other words, it may be time — as Bob Ippolito put it — to <a href="http://blip.tv/file/1949416">&#8220;Drop ACID and think about data&#8221;</a>.</p>
<p>If you couldn&#8217;t make it to the first &#8220;<a href="http://nosqlberlin.de/">NoSQL Meetup Berlin</a>&#8221; which recently took place at <a href="http://newthinking-store.de/">newthinking store</a> — all the talks have been recorded and are on vimeo now:</p>
<ul>
<li><a href="http://vimeo.com/7308152">Consistency in Distributed Key/Value Stores</a>, Monika Moser<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="225" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7308152&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="225" src="http://vimeo.com/moogaloop.swf?clip_id=7308152&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object>
</li>
<li><a href="http://vimeo.com/7307342">Redis — Fast and Furious</a>, Mathias Meyer<br />
<object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7307342&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7307342&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object></li>
<li><a href="http://vimeo.com/7310793">Peer to Peer Applications with CouchDB</a>, Jan Lehnardt<br />
<object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7310793&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7310793&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object></li>
<li><a href="http://vimeo.com/7318171">Riak</a>, Martin Scholl<br />
<object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7318171&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7318171&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object></li>
<li><a href="http://vimeo.com/7326668">MongoDB</a>, Mathias Stearn<br />
<object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7326668&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7326668&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object></li>
<li><a href="http://vimeo.com/7328320">4th Generation Object Databases</a>, Prof. Stefan Edlich<br />
<object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7328320&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7328320&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object></li>
</ul>
<p><a href="http://www.heise.de/open/artikel/NoSQL-Konferenz-in-Berlin-838943.html">Heise</a> has a good summary (in german).</p>
<p>Here at StudiVZ we are following this topic very closely and are actively investigating some of the alternatives. At the moment, <a href="http://incubator.apache.org/cassandra/">Cassandra</a> looks very promising to us.</p>
<p>Some more links:</p>
<ul>
<li><a href="http://themindstorms.blogspot.com/2009/05/quick-reference-to-alternative-data.html">Quick Reference to Alternative data storages</a></li>
<li><a href="http://pl.atyp.us/wordpress/?p=2417">Comparing Key/Value Stores</a>, <a href="http://pl.atyp.us/wordpress/?p=2435">Round 2</a></li>
<li><a href="http://journal.uggedal.com/nosql-east-2009---summary-of-day-1">NoSQL East 2009 &#8211; Summary of Day 1</a>, <a href="http://journal.uggedal.com/nosql-east-2009---summary-of-day-2">Day 2</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/11/06/nosql-berlin-roundup/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Yesterday&#8217;s GeekNight</title>
		<link>http://developer.studivz.net/2009/10/08/yesterdays-geeknight/</link>
		<comments>http://developer.studivz.net/2009/10/08/yesterdays-geeknight/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 12:06:19 +0000</pubDate>
		<dc:creator>Sebastian Galonska</dc:creator>
				<category><![CDATA[GeekNight]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=2025</guid>
		<description><![CDATA[Yesterday we had our 2nd GeekNight and it was at least as successfull as our first event of that manner. It was a premiere in two ways:

We broadcasted the sessions live through uStream
Our partner Wooga showed BrainBuddies, the first OpenSocial Gadget running on our platforms. It will become available when we launch OpenSocial

We had about [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday we had our 2nd GeekNight and it was at least as successfull as our first event of that manner. It was a premiere in two ways:</p>
<ul>
<li>We broadcasted the sessions live through uStream</li>
<li>Our partner Wooga showed BrainBuddies, the first OpenSocial Gadget running on our platforms. It will become available when we launch OpenSocial</li>
</ul>
<p>We had about 70 visitors at the <a href="http://www.volksbar-berlin.de/fotos/fotos.html" target="_blank">Volksbar</a> and over 30 people watched the live stream.<br />
As requested you can download our presentations on the <a href="http://developer.studivz.net/wp-content/uploads/2009/10/geeknight-vcard.pdf" target="_blank">vCard</a> and on <a href="http://developer.studivz.net/wp-content/uploads/2009/10/geeknight-brainbuddies.pdf" target="_blank">BrainBuddies</a> in German.</p>
<p><a href="http://www.studivz.net/geeknight" target="_blank">Watch out for upcoming dates</a> so you can come and join us next time!</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/10/08/yesterdays-geeknight/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>DevHouseBerlin</title>
		<link>http://developer.studivz.net/2009/10/04/devhouseberlin/</link>
		<comments>http://developer.studivz.net/2009/10/04/devhouseberlin/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 08:29:13 +0000</pubDate>
		<dc:creator>jodok</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=2020</guid>
		<description><![CDATA[Today you have the last chance to get your hands dirty! Our friends at Box119 open their doors for DevHouseBerlin.
DevHouseBerlin is a fun-packed weekend of hacking and sharing knowledge. The Box119 office is open for a weekend and invites hackers of all sorts to join us working on projects, sharing code and ideas and just [...]]]></description>
			<content:encoded><![CDATA[<p>Today you have the last chance to get your hands dirty! Our friends at Box119 open their doors for <a href="http://devhouseberlin.de">DevHouseBerlin</a>.</p>
<blockquote><p><em>DevHouseBerlin is a fun-packed weekend of hacking and sharing knowledge. The <a href="http://boxhagener119.de/">Box119</a> office is open for a weekend and invites hackers of all sorts to join us working on projects, sharing code and ideas and just hanging out among fellow geeks.</em></p>
<p><em>DevHouseBerlin is highly influenced by the <a href="http://superhappydevhouse.org/">SuperHappyDevHouse</a>:</em></p>
<p><em>SuperHappyDevHouse is a non-exclusive event intended for creative and curious people interested in technology. We&#8217;re about knowledge sharing, technology exploration, and ad-hoc collaboration. Come to have fun, build things, learn things, and meet new people. It&#8217;s called hacker culture, and we&#8217;re here to encourage it.</em></p></blockquote>
<p>VZ is happy to provide you with first class <a href="http://spreeschnittchen.de/">Spreeschnittchen</a> Catering. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/10/04/devhouseberlin/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>OpenSocial is now available in our VZ Sandbox</title>
		<link>http://developer.studivz.net/2009/09/24/opensocial-is-now-available-in-our-vz-sandbox/</link>
		<comments>http://developer.studivz.net/2009/09/24/opensocial-is-now-available-in-our-vz-sandbox/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 15:13:12 +0000</pubDate>
		<dc:creator>Sebastian Galonska</dc:creator>
				<category><![CDATA[GeekNight]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=2009</guid>
		<description><![CDATA[We are proud to announce that our Gadget Sandbox with OpenSocial 0.8.1 integration is up and running. Developers can upload and test their gadgets against our platforms and request the approval to make them available to our users.
All interested developers are invited to join our OpenSocial support group on meinVZ and studiVZ where more information [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://developer.studivz.net/wp-content/uploads/2009/09/vzsandbox.png" alt="" width="273" height="262" />We are proud to announce that our Gadget Sandbox with OpenSocial 0.8.1 integration is up and running. Developers can upload and test their gadgets against our platforms and request the approval to make them available to our users.<br />
All interested developers are invited to join our OpenSocial support group on <a href="http://www.meinvz.net/Groups/Overview/eede06c756b38f6e" target="_blank">meinVZ</a> and <a href="http://www.studivz.net/Groups/Overview/eede06c756b38f6e" target="_blank">studiVZ</a> where more information can be found about how to become a VZ OpenSocial Gadget developer.</p>
<p>We strongly believe that OpenSocial should also been taken literally so we started a monthly <a href="http://www.studivz.net/geeknight" target="_blank">GeekNight</a> where all interested developers are informed about our current projects and the release status of our OpenSocial implementation.</p>
<p>OpenSocial will become fully available by the end of the year. This leaves enough room to be out with stable and tested gadgets for the container&#8217;s OpenSocial launch.<br />
However we already use GoogleGadgets to provide interactive ads and games on our platforms.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/09/24/opensocial-is-now-available-in-our-vz-sandbox/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>VZNetzwerke für Android verfügbar</title>
		<link>http://developer.studivz.net/2009/09/03/vznetzwerke-fur-android-verfugbar/</link>
		<comments>http://developer.studivz.net/2009/09/03/vznetzwerke-fur-android-verfugbar/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 15:24:11 +0000</pubDate>
		<dc:creator>christian</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=1971</guid>
		<description><![CDATA[Endlich ist es soweit, die mobile Variante der VZNetzwerke &#8211; studiVZ, meinVZ und schülerVZ &#8211; ist seit gestern im Android Market kostenlos verfügbar.
Über den mobilen Browser gelangt man direkt über folgende Links zur entsprechenden Anwendung im Market:
market://search?q=pname:net.studivz.android.studivz
market://search?q=pname:net.studivz.android.meinvz
market://search?q=pname:net.studivz.android.schuelervz
  
Die derzeitige Version 1.0b verfügt unter Anderen über folgende Funktionen:

Buschfunk
Lesen und schreiben von Nachrichten
Anzeigen der Freundesliste
Anzeige der [...]]]></description>
			<content:encoded><![CDATA[<p>Endlich ist es soweit, die mobile Variante der VZNetzwerke &#8211; studiVZ, meinVZ und schülerVZ &#8211; ist seit gestern im Android Market kostenlos verfügbar.</p>
<p>Über den mobilen Browser gelangt man direkt über folgende Links zur entsprechenden Anwendung im Market:</p>
<p>market://search?q=pname:net.studivz.android.studivz<br />
market://search?q=pname:net.studivz.android.meinvz<br />
market://search?q=pname:net.studivz.android.schuelervz</p>
<p><a href="http://developer.studivz.net/wp-content/uploads/2009/09/profile.png"></a><a href="http://developer.studivz.net/wp-content/uploads/2009/09/profile.png"><img class="alignnone size-thumbnail wp-image-582" src="http://developer.studivz.net/wp-content/uploads/2009/09/profile.png" alt="" width="200" height="290" /></a> <a href="http://developer.studivz.net/wp-content/uploads/2009/09/profile.png"></a><a href="http://developer.studivz.net/wp-content/uploads/2009/09/studiVZDescription.png"><img class="alignnone size-thumbnail wp-image-583" src="http://developer.studivz.net/wp-content/uploads/2009/09/studiVZDescription.png" alt="" width="200" height="290" /></a> <a href="http://developer.studivz.net/wp-content/uploads/2009/09/profile.png"></a><a href="http://developer.studivz.net/wp-content/uploads/2009/09/VZnetzwerke.png"><img class="alignnone size-thumbnail wp-image-581" src="http://developer.studivz.net/wp-content/uploads/2009/09/VZnetzwerke.png" alt="" width="200" height="290" /></a></p>
<p>Die derzeitige Version 1.0b verfügt unter Anderen über folgende Funktionen:</p>
<ul>
<li>Buschfunk</li>
<li>Lesen und schreiben von Nachrichten</li>
<li>Anzeigen der Freundesliste</li>
<li>Anzeige der letzten Besucher</li>
<li>Gruscheln</li>
</ul>
<p>Die erste Version stellt somit die wesentlichen Funktionen bereit und wird nun zügig mit weiteren Features, wie sie bereits von der normalen Web-Oberfläche bekannt sind, erweitert.</p>
<p>Bis dahin freuen wir uns natürlich über jegliches Feedback zu den Anwendungen.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/09/03/vznetzwerke-fur-android-verfugbar/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Serving objects is more than plain delivery</title>
		<link>http://developer.studivz.net/2009/08/31/serving-objects-is-more-than-plain-delivery/</link>
		<comments>http://developer.studivz.net/2009/08/31/serving-objects-is-more-than-plain-delivery/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 07:00:16 +0000</pubDate>
		<dc:creator>jodok</dc:creator>
				<category><![CDATA[Operations]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[Traffic]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=1747</guid>
		<description><![CDATA[On April 26th 2007 Steve Souders wrote:
The user&#8217;s proximity to your web server has an impact on response times. Deploying your content across multiple, geographically dispersed servers will make your pages load faster from the user&#8217;s perspective. [...] Remember that 80-90% of the end-user response time is spent downloading all the components in the page: [...]]]></description>
			<content:encoded><![CDATA[<p>On April 26th 2007 <a href="http://developer.yahoo.net/blog/archives/2007/04/high_performanc_1.html" target="_blank">Steve Souders wrote</a>:</p>
<blockquote><p>The user&#8217;s proximity to your web server has an impact on response times. Deploying your content across multiple, geographically dispersed servers will make your pages load faster from the user&#8217;s perspective. [...] Remember that 80-90% of the end-user response time is spent downloading all the components in the page: images, stylesheets, scripts, Flash, etc. [...] A <a href="http://en.wikipedia.org/wiki/Content_delivery_network" target="_blank">content delivery network</a> (CDN) is a collection of web servers distributed across multiple locations to deliver content more efficiently to users.</p></blockquote>
<p style="text-align: left;">Steve posted this approx. <strong>e^3.25809654</strong> days after(!) we started to use a CDN for our web sites. Just some days later we noticed the desired effect. Our users started to make more and more traffic. The activity grew. Of course a CDN is some kind of luxury but it&#8217;s worth to invest into such a service at a special time. And from our point of view we thought it was time to. We were right.</p>
<p style="text-align: left;">Actually round about <strong>286.356,421^2</strong> objects will be requested per month by our users. More than the half of that (<strong>5,4E10</strong> objects) are photos. Small, medium and big sized ones. So each of all photo files we store will be loaded <strong>round(pow(2,4.91))</strong> times in a month. That makes a monthly traffic volume of more ore less <strong>265.334.489.612.288</strong> bytes only for these kind of objects. The total traffic of all delivered objects per month is something about <strong>1,402939962446178</strong> times higher.</p>
<p>At high traffic times there are over <strong>11000011010100000<sub>2</sub></strong> requests per second hitting our CDN and we are happy that our origin servers only get the <strong>(5^5)</strong>th part of it.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://developer.studivz.net/wp-content/uploads/2009/08/cdn.gif" border="0" alt="" /></p>
<p>As a side effect we can learn something about the behaviour of our users because the performance graphs can show us for example what they do in the evening. Maybe the <a href="http://de.wikipedia.org/wiki/Horst_Schimanski" target="_blank">Schimanski</a> serials on 26th of July was one of the reasons for the spikes after 8 pm (see graph above) which are nothing else than commercial breaks. Have a break, have a visit at studiVZ.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/08/31/serving-objects-is-more-than-plain-delivery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>VZ meets OpenSocial GeekNight</title>
		<link>http://developer.studivz.net/2009/08/18/studivz-meets-opensocial-geeknight/</link>
		<comments>http://developer.studivz.net/2009/08/18/studivz-meets-opensocial-geeknight/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 09:26:44 +0000</pubDate>
		<dc:creator>Sebastian Galonska</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=1901</guid>
		<description><![CDATA[Heute, am 20.08.2009, veranstalten wir eine GeekNight, um euch über den aktuellen Entwicklungsstand in Hinsicht auf die Einführung von OpenSocial auf unseren Plattformen zu informieren. Die Veranstaltung ist offen für alle Entwickler, Agenturen und technisch Interessierte.
Nährere Infos sind auf dem entsprechenden Edelprofil bei studiVZ und meinVZ zu finden.
Wir freuen uns auf viele Interessante Gespräche in [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="border: 0pt none;" src="http://developer.studivz.net/wp-content/uploads/2009/08/opensocial_logo.jpg" alt="opensocial" width="363" height="60" />Heute, am 20.08.2009, veranstalten wir eine GeekNight, um euch über den aktuellen Entwicklungsstand in Hinsicht auf die Einführung von OpenSocial auf unseren Plattformen zu informieren. Die Veranstaltung ist offen für alle Entwickler, Agenturen und technisch Interessierte.</p>
<p>Nährere Infos sind auf dem entsprechenden Edelprofil bei <a href="http://www.studivz.net/geeknight" target="_blank">studiVZ</a> und <a href="http://www.meinvz.net/geeknight" target="_blank">meinVZ</a> zu finden.</p>
<p>Wir freuen uns auf viele Interessante Gespräche in gepflegter Atmosphäre!</p>
<p><strong>Update<br />
</strong>Wir werden Ende September eine weitere GeekNight in Berlin veranstalten, um euch über den aktuellen Stand zu informieren. Der Termin wird rechtzeitig angekündigt, versprochen ;).</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/08/18/studivz-meets-opensocial-geeknight/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Automated acceptance tests using Selenium Grid without parallelization</title>
		<link>http://developer.studivz.net/2009/08/17/automated-acceptance-tests-using-selenium-grid-without-parallelization/</link>
		<comments>http://developer.studivz.net/2009/08/17/automated-acceptance-tests-using-selenium-grid-without-parallelization/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 07:00:53 +0000</pubDate>
		<dc:creator>dirk</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[acceptance]]></category>
		<category><![CDATA[automated]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=1873</guid>
		<description><![CDATA[Originally we built our automated acceptance tests within our agile development process on a continuous integration server using Selenium with only one Selenium Remote Control. The tests were executed on a fixed browser under a specific operating system. With the growth of the test cases in the test suite the execution time of the builds [...]]]></description>
			<content:encoded><![CDATA[<p>Originally we built our automated acceptance tests within our agile development process on a continuous integration server using Selenium with only one <a title="Selenium RC" href="http://seleniumhq.org/projects/remote-control/" target="_blank">Selenium Remote Control</a>. The tests were executed on a fixed browser under a specific operating system. With the growth of the test cases in the test suite the execution time of the builds extended rapidly, so the tests could not directly identify defects and thus a part of their function was lost.</p>
<p>The common strategy to solve this problem is to install <a title="Selenium Grid" href="http://selenium-grid.seleniumhq.org/how_it_works.html" target="_blank">Selenium Grid</a> on the machine that formerly hosted the one Selenium RC to parallelize the execution of the tests. By connecting only 4 Selenium RC&#8217;s to this Grid Hub the execution time of these tests is reduced by a factor of 4 without any additional hardware and without rewriting the tests. The only prerequisite for this is that the used testing framework supports a parallelized test execution, i.e. it must be able to start more than one test of a test suite simultaneously and assign the answers supplied by Selenium Grid to the right test again.</p>
<p>Although our used testing framework PHPUnit does not provide a parallel execution of tests yet we found a way to use the benefits of Selenium Grid in our testing environment. Our continuous integration server provides the possibility to set up more than one build agent to run the Selenium driven acceptance tests. If we would do this with one single Selenium RC these agents would stress this RC rapidly because there is no possibility to check its state. The agents would start new tests no matter how many tests are already running at this RC.</p>
<p>So we installed Selenium Grid with 4 connected Remote Controls as described above. We can now control the number of simultaneously running tests, because Selenium Grid starts only so many test suites as RC&#8217;s are connected. Other incoming requests are queued in the Selenium Grid Hub until one of the connected RC&#8217;s has finished its test suite. Unlike the common usage of Selenium Grid we have not yet a real parallelization with this solution, since the test suites from the build agents of the continuous integration server run simultaneously, but each is still to be processed sequentially. But we have always the option of switching to a real parallelization when our testing framework supports it.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/08/17/automated-acceptance-tests-using-selenium-grid-without-parallelization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mckoy &#8211; [m]em[c]ache [k]ey [o]bservation [y]ield</title>
		<link>http://developer.studivz.net/2009/08/10/mckoy-memcache-key-observation-yield/</link>
		<comments>http://developer.studivz.net/2009/08/10/mckoy-memcache-key-observation-yield/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 13:02:22 +0000</pubDate>
		<dc:creator>levon</dc:creator>
				<category><![CDATA[Daily Business]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[mckoy]]></category>
		<category><![CDATA[Memcache]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=1789</guid>
		<description><![CDATA[We wanted to speed up our web-applications by alleviating our database-loads. So we decided to use the distributed memory object caching system, memcached. Due to the many requests of our memcached-systems (about 1.5 million requests per second), we built a tool (called mckoy), which is capable to perform statistics and debugging information about all memcache-requests [...]]]></description>
			<content:encoded><![CDATA[<p>We wanted to speed up our web-applications by alleviating our database-loads. So we decided to use the distributed memory object caching system, <a href="http://www.danga.com/memcached/" target="_blank"><strong>memcached</strong></a>. Due to the many requests of our memcached-systems (about 1.5 million requests per second), we built a tool (called <strong>mckoy</strong>), which is capable to perform statistics and debugging information about all memcache-requests in our network.</p>
<p><strong>mckoy</strong> is a memcache protocol sniffer (based on pcap library) and statistics builder. It automatically detects and parses each key (and its value) and memcache-api methods.  At  the  end of the sniffing session, the results are used to build the statisticis.<strong> mckoy </strong>was written to analyse our web application and its usage of  memcache-api in PHP. For example: We wanted to know how many <em>set()</em> and <em>get() </em>methods were invoked in a given time. Based on these results,  we had to make changes to improve the usage of memcache-api for PHP. You can run <strong>mckoy</strong> on any UNIX based systems. It was tested on many *BSD and Linux systems. <strong>mckoy</strong> is licensed under GPLv3 and completely published as opensource project!</p>
<p>You can run <strong>mckoy</strong> in various modes (see manpage!). For example, if you want to sniff pattern &#8220;foobar&#8221; for all memcache-api methods and with live capturing, use:<strong> </strong></p>
<p><strong>mckoy</strong> -i <em>&lt;interface&gt;</em> -e <em>&#8220;port 11211&#8243;</em> -m <em>5</em> -k <em>foobar</em> -v</p>
<p>And this is, how it looks like:<br />
<img src="http://developer.studivz.net/wp-content/uploads/2009/08/mckoy2.png" alt="" width="730" height="500" /></p>
<p>Unfortunately, there are some known bugs. :) For example: An SIGSEGV will encounter when ^C is sent from user. Also, we noticed that <strong>mckoy </strong>isn&#8217;t able to handle memcached-1.2.8 &lt;= 1.4.* correctly. These bugs will be fixed in the next version as soon as possible! For the next version I also planned to build in udp and binary support.</p>
<p>You can offcially download <strong>mckoy</strong> from:<br />
<a href="http://www.lamergarten.de/releases.html"><em>http://www.lamergarten.de/releases.html </em></a><br />
or<br />
<a href="http://sourceforge.net/projects/mckoy/"><em>http://sourceforge.net/projects/mckoy/</em></a></p>
<p>cheers.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/08/10/mckoy-memcache-key-observation-yield/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>About Erlang/OTP and Multi-core performance in particular &#8211; Kenneth Lundin</title>
		<link>http://developer.studivz.net/2009/07/30/about-erlangotp-and-multi-core-performance-in-particular-kenneth-lundin/</link>
		<comments>http://developer.studivz.net/2009/07/30/about-erlangotp-and-multi-core-performance-in-particular-kenneth-lundin/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 09:48:25 +0000</pubDate>
		<dc:creator>fabrizio</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[SMP]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=1718</guid>
		<description><![CDATA[I attended an awesome talk by Kenneth Lundin about Erlang/OTP at the Erlang Factory in London. The main topic was SMP and it&#8217;s improvements it in the latest release(s). That&#8217;s exactly one of the main reasons for Erlang, parallelize computations on many cores, without worrying about locks in shared memory.
Some of the issues they&#8217;ve been [...]]]></description>
			<content:encoded><![CDATA[<p>I attended an awesome talk by Kenneth Lundin about Erlang/OTP at the Erlang Factory in London. The main topic was SMP and it&#8217;s improvements it in the latest release(s). That&#8217;s exactly one of the main reasons for Erlang, parallelize computations on many cores, without worrying about locks in shared memory.</p>
<p>Some of the issues they&#8217;ve been working on:</p>
<ol>
<li>Erlang now detects CPU Topology automatically at startup.</li>
<li>Multiple run-queues</li>
<li>You can lock schedulers to logical CPU&#8217;S</li>
<li>Improved message passing &#8211; reduced lock time</li>
</ol>
<p>They improved more things of course but considering SMP these are the most important ones.</p>
<ol>
<li>Erlang now detects the CPU topology of your system automatically at startup.  You may still override this automatic setup using:<br />
<code>erl +sct L0-3c0-3<br />
erlang:system_flag(cpu_topology,CpuTopology).</code></li>
<li>Multiple run queues &#8230; what does that mean?  We should first take a look at how Erlang does SMP:
<ul>
<li>Erlang without SMP:<br />
Without SMP support the Erlang VM had one Scheduler for one runqueue. So all the jobs were pushed on one queue and fetched by one scheduler.</li>
<li>Erlang SMP / before R13<br />
They started more schedulers that were pulling jobs from one queue. Sounds more parallel but still not performing as good as desired on many cores.</li>
<li>Erlang SMP R13<br />
Several schedulers like in the former solution but each of them has it&#8217;s own runqueue. The problem with this approach is that it can of course happen that you end up with some empty and some full queues because of the different runtime of the processes. So they build something called migration logic that is controlling and balancing the different runqueues.</li>
</ul>
<p>They migration logic does:</p>
<ul>
<li>collect statistics about the maxlength of all scheduler&#8217;s runqueues</li>
<li>setup migration paths</li>
<li>Take away jobs from full-load schedulers and pushing jobs on low load scheduler queues</li>
</ul>
<p>Running on full load or not! If all schedulers are not fully loaded, jobs will be migrated to schedulers with lower id’s and thus  making some schedulers inactive.</p>
<p>This makes perfectly sense because the more schedulers and runqueues you need the more migrating has to be done. Using SMP support with many schedulers makes only sense if you&#8217;re really optimizing for many cores and you will have decreased performance on systems with few cores.</li>
<li>Binding schedulers to CPU&#8217;s is really worth looking at it.  The more cores your CPU has the more important it&#8217;ll be and the more performance improvement you&#8217;ll gain.  You can force the erlang VM to do scheduler binding by:<br />
<code>erl +sbt db<br />
erlang:system_flag(scheduler_bind_type,default_bind).</code><code>1&gt;erlang:system_info(cpu_topology).<br />
[{processor,[{core,{logical,0}},<br />
{core,{logical,3}},<br />
{core,{logical,1}},<br />
{core,{logical,2}}]}]<br />
2&gt; erlang:system_info(scheduler_bindings).<br />
{unbound,unbound,unbound,unbound}<br />
fabrizio@machine:~$ erl +sbt db<br />
1&gt; erlang:system_info(scheduler_bindings).<br />
{0,1,3,2}</code></li>
</ol>
<p><img src="http://developer.studivz.net/wp-content/uploads/2009/07/bmsmpr13-schedulerbindingsmall.png" alt="Benchmark - Scheduler Binding - Kenneth Lundin" /><br />
Source: presentation Kenneth Lundin &#8211; Erlang-Factory</p>
<p>You can test and benchmark SMP using following flags:<br />
<code>fabrizio@machine:~$ erl -smp disable       //default is auto<br />
fabrizio@machine:~$ erl +S 2:4               //Number of Schedulers : Schedulers online</code></p>
<p>With erlang:system_info/1 you can use the following atoms</p>
<p># cpu_topology<br />
# multi_scheduling<br />
# scheduler_bind_type<br />
scheduler_bindings<br />
logical_processors<br />
multi_scheduling_blockers<br />
scheduler_id<br />
schedulers<br />
# schedulers_online<br />
smp_support</p>
<p>The ones marked with # can be set using system_flag/2</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/07/30/about-erlangotp-and-multi-core-performance-in-particular-kenneth-lundin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Memcache Feeds</title>
		<link>http://developer.studivz.net/2009/05/08/memcache-feeds/</link>
		<comments>http://developer.studivz.net/2009/05/08/memcache-feeds/#comments</comments>
		<pubDate>Fri, 08 May 2009 15:50:01 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Buschfunk]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[Memcache]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=1539</guid>
		<description><![CDATA[Buschfunk, die Möglichkeit die Statusnachrichten (&#8221;Ist gerade&#8230;&#8221;) deiner Freunde auf unseren VZ&#8217;s anzuzeigen, ist nun/nur der Beginn der VZ Feeds. Letzlich ist der Buschfunk nur die Zusammenführung aller Statusnachrichten deiner Freunde auf der Startseite.
Nach dem Launch der ersten Version des Buschfunks, gab es bereits wenige Minuten später einen riesigen Impakt auf unserer Serverfarm. Dies führte [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Buschfunk</strong>, die Möglichkeit die Statusnachrichten (&#8221;Ist gerade&#8230;&#8221;) deiner Freunde auf unseren VZ&#8217;s anzuzeigen, ist nun/nur der Beginn der VZ Feeds. Letzlich ist der Buschfunk nur die Zusammenführung aller Statusnachrichten deiner Freunde auf der Startseite.</p>
<p>Nach dem Launch der ersten Version des Buschfunks, gab es bereits wenige Minuten später einen riesigen Impakt auf unserer Serverfarm. Dies führte dazu, dass wir bereits nach einem Tag die Statusnachrichtendatenbank auf eigene Server umziehen mussten. Ihr seht hier die absolute Anzahl von Statusaktualisierungen pro Minute (getrennt nach studiVZ/meinVZ = blau/flacher Graph und schuelerVZ = rot/steiler Graph):</p>
<p><img class="aligncenter size-medium wp-image-1574" src="http://developer.studivz.net/wp-content/uploads/2009/05/zugriffe_mb2-300x251.png" alt="zugriffe_mb2" width="395" height="329" /></p>
<p>Man kann Feeds, also Mitteilungen über Statusaktualisierungen eines Freundes, unterschiedlich implementieren und stellt sich dabei einigen Herausforderungen, gerade wenn es nicht nur um die optimale Speicherung, sondern auch um performante Zugriffe und logisches Zusammenführen von ähnlichen Feedeinträgen geht.</p>
<p>Wir haben uns für erste Tests in Richtung Social-Feeds für eine reine Memcache-Implementierung entschieden. Man hat den Vorteil, dass man die ohnehin nur momentan interessanten Posts von Usern nicht in der Datenbank vorhalten muss und Memcacheoperationen dazu noch um einiges schneller sind. Für einen Feed baut man sich im einfachsten Fall eine Queue pro User mit sortierten Einträgen auf, die man als Entity im Memcache ablegt. Da man nicht unendlich viele Einträge vorhalten muss und ein Memcacheobjekt per default eh nur 1 MB pro Eintrag groß sein darf, limitiert man die Queue auf eine feste Anzahl und wirft bei einem neuen Eintrag einfach alte Einträge weg.</p>
<p>Ok, genug der Einleitung, kommen wir zu ein paar Codeschnippseln. Am besten baut man sich ein Interface, welches sich um das Handling von Feedeinträgen kümmert:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">interface</span> FeedEntry <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//referenziertes Memcacheobject, also eigentlicher Inhalt</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getFeedEntryReference<span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//ist der Eintrag sichtbar -&gt; Privacy</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> isFeedEntryHidden<span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//initialer Aufbau</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> initializeFeedEntry<span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#91;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#93;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Jetzt haben wir einen beliebig erweiterbaren Feed Typen und können mit Implementierungen, wie zum Beispiel Statusänderungen von Nutzerprofilen, Microblogeinträgen etc, beginnen.</p>
<p>Was man jetzt noch braucht, ist das eigentliche Aufbauen der Queue, also Füllen des Feeds mit Feed Typen. Man sollte sich überlegen, woraus ein Eintrag innerhalb der Queue aussehen soll. Es sollte die <strong>id</strong> des Users, einen Zeitstempel, sowie den eigentlichen Inhalt enthalten. Wir haben uns dafür entschieden, den Inhalt des Eintrages nur als Referenz in der Queue zu halten, damit bei Änderungen nicht jedes Queueobjekt, sondern lediglich das referenzierte Memcacheobjekt geändert werden muss. Ausserdem will man die Daten nicht doppelt im Speicher halten.</p>
<p>Beispielhaft könnte eine vereinfachte Queue folgendermaßen aussehen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$queue</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
<span style="color: #cc66cc;">0</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'timestamp'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'userId'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">123456789</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'contentId'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1000</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> TYPE_MICROBLOG<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
<span style="color: #cc66cc;">1</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'timestamp'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'userId'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1234567910</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'contentId'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1001</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span>  <span style="color: #339933;">=&gt;</span> TYPE_PHOTOCOMMENT<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#91;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Mit Hilfe des Typs und dessen konkreter Implementierung eines Feed Entries kann nun der eigentliche Inhalt aus einem weiteren Memcacheobjekt oder aus der Datenbank geholt werden. Sortiert ist die Queue bereits nach dem Einfügen eines neuen Entries. Wird nun der Content hinter einer solchen Referenz gelöscht, so braucht man die Queues der User, dessen Feeds beeinflusst werden, nicht updaten, da der Feed beim Einlesen automatisch merkt, dass die Referenz nicht mehr gültig ist und diese &#8220;überspringt&#8221;.</p>
<p>Für&#8217;s Aufbauen der Queue noch ein Tipp: Verwendet lieber mehrmaliges <strong>array_reverse</strong> im Zusammenhang mit <strong>array_push</strong>, anstatt ein <strong>array_shift</strong>! Das ist um Welten schneller, wenn man ein Element vorn ranhängt bzw. hinten anfügt.</p>
<p>(Quelle: <a title="http://www.ingo-schramm.de/blog/archives/9-PHP-array_shift-does-not-scale.html" href="http://www.ingo-schramm.de/blog/archives/9-PHP-array_shift-does-not-scale.html" target="_blank">http://www.ingo-schramm.de/blog/archives/9-PHP-array_shift-does-not-scale.html</a>)</p>
<p>Da der Memcache, wenn der ihm zugewiesene Speicher vollläuft, wenig frequentierte Bereiche freigibt, muss man sich zwangsweise überlegen, wie man mit Datenverlusten innerhalb der Queue umgeht. Dazu könnte man zyklische Backups der Queueeinträge oder ein initiales Befüllen der Feedeinträge implementieren (im Interface bereits vorgesehen). Die eigentlichen Daten (bsp. das konkrete Statusupdate) bleiben natürlich erhalten und liegen in der Datenbank persistent vor, es geht hierbei nur um die Referenzen auf diese Einträge.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/05/08/memcache-feeds/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Erlang R13A Benchmark</title>
		<link>http://developer.studivz.net/2009/05/04/erlang-r13a-benchmark/</link>
		<comments>http://developer.studivz.net/2009/05/04/erlang-r13a-benchmark/#comments</comments>
		<pubDate>Mon, 04 May 2009 10:23:16 +0000</pubDate>
		<dc:creator>Ingo Schramm</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=1036</guid>
		<description><![CDATA[I made a little benchmark to check out the new Erlang Release R13A and the behavior of the multiple run queues. The benchmarking program was the same I used in another benchmark you may find here. You may also find the sources at that location. As already noted there the slope from 1 CPU to [...]]]></description>
			<content:encoded><![CDATA[<p>I made a little benchmark to check out the new Erlang Release R13A and the behavior of the multiple run queues. The benchmarking program was the same I used in <a href="http://www.ingo-schramm.de/blog/archives/10-Erlang-Release-R13B-Preview-Benchmark.html" target="_blank">another benchmark you may find here</a>. You may also find the sources at that location. As already noted there the slope from 1 CPU to 2 CPUs is due to the &#8220;bad&#8221; implementation made to challange the Erlang SMP features. The mashine was an 8 core Intel Xeon 3 GHz with a 64bit 2.6.9 Linux, Erlang kernel polling active.</p>
<p style="text-align: center;"><a href="http://developer.studivz.net/wp-content/uploads/2009/04/erlangr13a_8cpu.png" target="_blank"><img class="aligncenter size-thumbnail wp-image-1038" style="border: 0pt none;" src="http://developer.studivz.net/wp-content/uploads/2009/04/erlangr13a_8cpu-150x150.png" border="0" alt="erlangr13a_8cpu" width="150" height="150" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/05/04/erlang-r13a-benchmark/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Da Guckst Du &#8211; Hingucker auf dem Profil</title>
		<link>http://developer.studivz.net/2009/04/08/da-guckst-du-hingucker-auf-dem-profil/</link>
		<comments>http://developer.studivz.net/2009/04/08/da-guckst-du-hingucker-auf-dem-profil/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 10:52:34 +0000</pubDate>
		<dc:creator>Sebastian Galonska</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Google Gadget]]></category>
		<category><![CDATA[Hingucker]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=1033</guid>
		<description><![CDATA[Der Nächste Schritt in Richtung Google Gadget Integration auf unserer Plattform ist abgeschlossen. Und wir haben ein neues Baby, den &#8220;Hingucker&#8221;.
Ab jetzt kann jeder Benutzer seinen Lieblingshingucker aus einer Gruppe auf sein eigenes Profil entführen.
Wir beginnen mit dem 11Freunde Hingucker (StudiVZ/MeinVZ).
Viel Spaß!

]]></description>
			<content:encoded><![CDATA[<p>Der Nächste Schritt in Richtung Google Gadget Integration auf unserer Plattform ist abgeschlossen. Und wir haben ein neues Baby, den &#8220;Hingucker&#8221;.<br />
Ab jetzt kann jeder Benutzer seinen Lieblingshingucker aus einer Gruppe auf sein eigenes Profil entführen.</p>
<p style="text-align: left;">Wir beginnen mit dem <strong>11Freunde</strong> Hingucker (<a href="http://www.studivz.net/Groups/Overview/a6423ac94245db7e" target="_blank">StudiVZ</a>/<a href="http://www.meinvz.net/Groups/Overview/a6423ac94245db7e" target="_blank">MeinVZ</a>).</p>
<p>Viel Spaß!</p>
<p style="text-align: center;"><img class="size-full wp-image-1346 aligncenter" title="2009-04-29_145902" src="http://developer.studivz.net/wp-content/uploads/2009/04/2009-04-29_145902.png" alt="2009-04-29_145902" width="397" height="407" /></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/04/08/da-guckst-du-hingucker-auf-dem-profil/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Ein Stückchen studiVZ &#8211; Web Slices</title>
		<link>http://developer.studivz.net/2009/03/20/ein-stuckchen-studivz-web-slices/</link>
		<comments>http://developer.studivz.net/2009/03/20/ein-stuckchen-studivz-web-slices/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 15:10:53 +0000</pubDate>
		<dc:creator>volker</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[ie8]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[web slice]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=794</guid>
		<description><![CDATA[Mal wieder steht der Release eines neuen Browsers auf der Agenda, denn Microsoft bringt mit dem Internet Explorer 8 eine brandneue Reinkarnation seines Haus-und-Hof-Browsers auf den Markt. Schnell soll er sein &#8211; laut eigenen Aussagen &#8211; und einige neue Funktionen erwarten uns: Angefangen von Accelerators (z.B. Adresse markieren und direkt auf Google Live Maps anschauen) [...]]]></description>
			<content:encoded><![CDATA[<p>Mal wieder steht der Release eines neuen Browsers auf der Agenda, denn Microsoft bringt mit dem Internet Explorer 8 eine brandneue Reinkarnation seines Haus-und-Hof-Browsers auf den Markt. Schnell soll er sein &#8211; laut eigenen Aussagen &#8211; und einige neue Funktionen erwarten uns: Angefangen von Accelerators (z.B. Adresse markieren und direkt auf <del datetime="2009-03-16T08:35:33+00:00">Google</del> Live Maps anschauen) über InPrivate Browsing (auch bekannt als &#8220;Porno-Funktion&#8221;) bis hin zum SmartScreen Filter, der uns vor bösen Webseiten schützen soll. Und natürlich viel viel mehr.</p>
<p>Intern waren vor allem unsere HTML/CSS und JavaScript-Fachkräfte schon tatkräftig bei der Arbeit, um unsere Seite (und vor allem den Chat) für den IE8 fit zu machen. Erfreulicherweise gibt es aber garnicht mal soviele Unterschiede zum IE7, somit gehen die Anpassungen relativ schnell von der Hand.</p>
<p>Eine weitere &#8211; vielleicht sogar die größte &#8211; Neuerung, wird bereits jetzt von unseren Platformen unterstützt: Die Web Slices (<a href="http://msdn.microsoft.com/en-us/library/cc304073.aspx">Web Slice Format Specification</a>). Web Slices sind eigentlich eine Mischung aus Favoriten mit Vorschaufunktion und RSS-Feeds. Man kann sich Bestandteile einer Webseite abonieren, die dann in regelmäßigen Zeitabständen automatisch aktualisiert werden. Der Anwender wird dann automatisch über Veränderungen informiert und muss nicht jedesmal selbst aktiv werden. Ansich also eine ganz nette Funktionalität. Auch in der IE-Addon Gallery sind wir schon vertreten, zu bestaunen unter <a href="http://www.ieaddons.com/de/social/">www.ieaddons.com/de/social</a>.</p>
<p style="text-align: center;"><a href="http://developer.studivz.net/wp-content/uploads/2009/03/2009-03-30_130221.png"><img class="aligncenter size-medium wp-image-1017" title="IE8 Add-On Gallery" src="http://developer.studivz.net/wp-content/uploads/2009/03/2009-03-30_130221-300x163.png" alt="IE8 Add-On Gallery" width="300" height="163" /></a></p>
<p>Bei uns kann man ein Web Slice hinzufügen, mit dem man den vollen Überblick über Aktivitäten im eigenen Netzwerk bekommt. Wer war auf meiner Seite? Habe ich neue Nachrichten? Hat mir jemand etwas gezeigt? Das sind nur einige Fragen, die dort beantwortet werden und zwar egal auf welcher Seite man gerade unterwegs ist. Voraussetzung ist, dass der Nutzer unsere (auch recht neue) Remember-Me-Funktion (die persistener Cookie beim Anwender setzt) aktiviert hat, sonst muss man sich jedesmal neu einloggen.</p>
<p>Technisch ist ein Web Slice simpel aufgebaut:</p>
<ul>
<li>Ein umgebendes (DIV-)Tag mit der Klasse &#8220;hslice&#8221; und einer ID</li>
<li>Ein Tag mit der Klasse &#8220;entry-title&#8221;, deren Inhalt den Titel definiert</li>
<li>Ein Tag mit der Klasse &#8220;entry-content&#8221; für den eigentlichen Inhalt der angezeigt werden soll</li>
</ul>
<p>Darüber hinaus kann dieses Basis-Konzept eines Web Slices natürlich noch erweitert werden. Bei studiVZ kommt z.B. eine &#8220;Alternative Display Source&#8221; und eine &#8220;Alternative Update Source&#8221; zum Einsatz, damit nicht bei jedem Update die komplette Startseite aufgerufen werden muss, sondern wirklich nur das, was auch im Web Slice angezeigt wird.</p>
<p>Die nachstehende Grafik soll die Zusammenhänge nochmals verdeutlichen:</p>
<div id="attachment_806" class="wp-caption aligncenter" style="width: 601px"><img class="size-full wp-image-806" src="http://developer.studivz.net/wp-content/uploads/2009/03/webslices2.png" alt="WebSlice bei studiVZ" width="591" height="518" /><p class="wp-caption-text">WebSlice bei studiVZ</p></div>
<p>Wenn ihr den IE8 bereits am Start habt, könnt ihr das Web Slice auf der <a href="http://www.studivz.net/Start">Startseite</a> oder in der <a href="http://www.ieaddons.com/de/social">IE-Addon Gallery</a> abonieren. Natürlich gibt&#8217;s das Web Slice für alle drei Platformen.</p>
<p><strong>Zusatz:</strong><br />
Auch für den Firefox wird bereits ein Plug-In für die <a href="http://www.glazman.org/weblog/dotclear/index.php?post/2008/03/10/WebSlices-in-Firefox-4">Web Slices</a> und die <a href="http://www.kaply.com/weblog/2008/03/07/microsoft-activities-for-firefox-new-version/">Activities</a> umgesetzt. Sieht auf jeden Fall interessant aus.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/03/20/ein-stuckchen-studivz-web-slices/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>PHP SPL Data Structures Benchmark</title>
		<link>http://developer.studivz.net/2009/03/18/php-spl-data-structures-benchmark/</link>
		<comments>http://developer.studivz.net/2009/03/18/php-spl-data-structures-benchmark/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 08:46:59 +0000</pubDate>
		<dc:creator>Ingo Schramm</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[SPL]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=942</guid>
		<description><![CDATA[Data structures and collections are one of the most wanted features for the Standard PHP Library SPL over the last few years. With PHP 5.3 we&#8217;ll finally get a little of what we want and this is good news. With data structures like stack,  queue, heap or priority queue implemented in C we expect PHP [...]]]></description>
			<content:encoded><![CDATA[<p>Data structures and collections are one of the most wanted features for the Standard PHP Library SPL over the last few years. With PHP 5.3 we&#8217;ll finally get a little of what we want and this is good news. With data structures like stack,  queue, heap or priority queue implemented in C we expect PHP programming to become somewhat more efficient.</p>
<p>Inspired by this post <a title="http://blueparabola.com/blog/spl-deserves-some-reiteration" href="http://blueparabola.com/blog/spl-deserves-some-reiteration" target="_blank">http://blueparabola.com/blog/spl-deserves-some-reiteration</a> we decided to run our own benchmarks to either verify or disapprove the results posted. Our benchmarks were executed on a 64bit RHEL with PHP 5.3.0beta1. As you may expect, we carefully excluded startup or compilation time and measured only the code blocks in question. We used getrusage() to determine CPU time consumption. A huge number of iterations guaranteed smooth results.</p>
<p>The first structure under consideration was the SplFixedArray. If you only need numerical indices you now can create an array of fixed size that does not have to grow while more and more items are inserted. Dealing with an SplFixedArray saves you about 10 percent of runtime compared to a plain old PHP array.</p>
<p>Next we tried the SplStack and SplQueue. It is usually easy to implement a stack and a queue with plain arrays. Using array_push(), array_pop() and array_shift() is straightforward. It may be a surprise to the average PHP programmer to learn about the runtime behaviour of these functions. Worst is array_shift() because of the internal rehashing and the experienced PHP programmer may &#8211; for critical code at least &#8211; try to access arrays by indices maintaining counters, for example. This is much more efficient. Compared to the functions, at least SplQueue is something like an upset, but it is possible to find comparable solutions with plain PHP.</p>
<p style="text-align: center;"><a href="http://developer.studivz.net/wp-content/uploads/2009/03/bars_full_ok.png" target="_blank"><img class="aligncenter size-medium wp-image-946" style="border: 0pt none;" src="http://developer.studivz.net/wp-content/uploads/2009/03/bars_full_ok-300x125.png" alt="bars_full_ok" width="300" height="125" /></a></p>
<p>There is a little danger to compare apples and pears when turning towards SplHeap and SplPriorityQueue. What is the proper representation of a heap implemented using plain old arrays only? It&#8217;s a sorted array, ok. But a heap is sorted for each insert, so, do we really have to sort the array for each insert? Who will do this in real life?</p>
<p>It&#8217;s the use case that decides about the sorting strategy. If you are supposed to carefully separate writing the heap and reading from it, it is sufficient to sort it once. That way you beat SPL. But if you have to mix reading and writing arbitrarily the SPL will beat plain arrays by far. This is shown in the pictures below. For the mixed strategy we read once for 5 inserts and the SplMinHeap scales very well. The same holds for SplMaxHeap and SplPriorityQueue.</p>
<p style="text-align: center;"><a href="http://developer.studivz.net/wp-content/uploads/2009/03/splminheap_rw_separated.png" target="_blank"><img class="size-medium wp-image-945 aligncenter" style="border: 0pt none;" src="http://developer.studivz.net/wp-content/uploads/2009/03/splminheap_rw_separated-300x189.png" alt="splminheap_rw_separated" width="300" height="189" /></a></p>
<p style="text-align: center;"><a href="http://developer.studivz.net/wp-content/uploads/2009/03/splminheap_rw_mixed.png" target="_blank"><img class="size-medium wp-image-944 aligncenter" style="border: 0pt none;" src="http://developer.studivz.net/wp-content/uploads/2009/03/splminheap_rw_mixed-300x200.png" alt="splminheap_rw_mixed" width="300" height="200" /></a></p>
<p>Lessons learned:</p>
<ul>
<li>SPL rules</li>
<li>use SPL data structures where appropriate for a particular use case, they are efficient and comfortable</li>
<li>benchmarking is error prone</li>
<li>anyway, always benchmark performance critical code blocks</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/03/18/php-spl-data-structures-benchmark/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MySQL DBA Tools</title>
		<link>http://developer.studivz.net/2009/03/16/mysql-dba-tools/</link>
		<comments>http://developer.studivz.net/2009/03/16/mysql-dba-tools/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 15:52:50 +0000</pubDate>
		<dc:creator>nils</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[dsh]]></category>
		<category><![CDATA[Ganglia]]></category>
		<category><![CDATA[gmetric]]></category>
		<category><![CDATA[InnoDB]]></category>
		<category><![CDATA[iostat]]></category>
		<category><![CDATA[Maatkit]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[myTop]]></category>
		<category><![CDATA[Nagios]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=812</guid>
		<description><![CDATA[Als MySQL Datenbankadministrator ist man täglich damit beschäftigt, unzählige Datenbank-Server am Laufen zu halten. Hier eine Auswahl an Werkzeugen, die man unbedingt in der täglichen Arbeit braucht:

myTop
show innodb status
DSH (Distributed SSH Shell)
Maatkit (http://www.maatkit.org/)

Aus Maatkit eignet sich mk-query-digest besonders gut, um ein System nach einem Neustart der Datenbank &#8220;aufzuwärmen&#8221;.

mk-query-digest --processlist h=d-mm-05-1-svz --execute h=d-mm-05-2-svz \
   [...]]]></description>
			<content:encoded><![CDATA[<p>Als <a href="http://www.mysql.com">MySQL</a> Datenbankadministrator ist man täglich damit beschäftigt, unzählige Datenbank-Server am Laufen zu halten. Hier eine Auswahl an Werkzeugen, die man unbedingt in der täglichen Arbeit braucht:</p>
<ul>
<li><a href="http://jeremy.zawodny.com/mysql/mytop/" target="_blank">myTop</a></li>
<li><a href="http://dev.mysql.com/doc/refman/5.0/en/innodb-monitors.html" target="_blank">show innodb status</a></li>
<li><a href="http://www.netfort.gr.jp/~dancer/software/dsh.html.en" target="_blank">DSH</a> (Distributed SSH Shell)</li>
<li>Maatkit (<a href="http://www.maatkit.org/" target="_blank">http://www.maatkit.org/</a>)</li>
</ul>
<p>Aus Maatkit eignet sich <strong>mk-query-digest</strong> besonders gut, um ein System nach einem Neustart der Datenbank &#8220;aufzuwärmen&#8221;.</p>
<blockquote>
<pre>mk-query-digest --processlist h=d-mm-05-1-svz --execute h=d-mm-05-2-svz \
   --filter '$event-&gt;{fingerprint} =~ m/^select/</pre>
</blockquote>
<p>Außerdem kann man damit sehr elegant an einem Zweitsystem verschiedene Dinge testen und die Auswirkungen direkt beobachten.<br />
Es bietet sich dazu an, dass man sein System damit immer genau im Blick hat:</p>
<ul>
<li><a href="http://ganglia.info/" target="_blank">Ganglia</a> (Distributiertes Grid Monitoring)</li>
</ul>
<p style="text-align: center;"><img class="size-medium wp-image-813 aligncenter" title="ganglia-view" src="http://developer.studivz.net/wp-content/uploads/2009/03/ganglia-view-300x202.jpg" alt="ganglia-view" width="300" height="202" /></p>
<p style="text-align: center;">
<p style="text-align: left;">Ganglia ist eine Allzweckwaffe, um ein Gefühl dafür zu bekommen, wie eine Datenbank &#8220;lebt&#8221;. Es visualisiert quasi den Herzschlag des Systems. Durch <a href="http://ganglia.sourceforge.net/gmetric/" target="_blank">gmetric</a> bekommt man zudem die Möglichkeit mit wenig Aufwand alle möglichen Parameter vom System oder der Datenbank an Ganglia zu übergeben und damit zu visualisieren. Basics dabei sind die<em> Queries per Second</em>, <em>Slave Lag</em> und <em>Slow Queries per Second</em>.</p>
<ul>
<li>iostat -x</li>
</ul>
<p>Was ist auf meinen Platten los? Wie verteilt sich das await auf die einzelnen Devices? Viel sieht man damit leider nicht, aber es gibt deswegen <a href="http://developer.studivz.net/2009/03/11/mysql-und-innodb_io_pattern/">Erweiterungen für MySQL</a>, die das IO bis auf Tabellen und Indizes runterbrechen können.</p>
<ul>
<li><a href="http://www.nagios.org/" target="_blank">Nagios</a> &#8211; damit man den Fehler auch mitbekommt</li>
</ul>
<p><a href="http://blog.koehntopp.de/archives/1553-Ein-Nagios-Plugin-fuer-MySQL.html" target="_blank">Kristian Köhntopp</a> hat dafür was Nettes gebaut. Man braucht an der Stelle also nicht mehr ganz so viel tun.</p>
<p>Nicht zu vergessen der Kommandozeilenclient <strong>mysql</strong> mit einem ordentlichen Prompt, damit man nicht bei mehreren Maschinen durcheinander kommt:</p>
<blockquote>
<p style="text-align: left;">[mysql]<br />
prompt = \u@hostname[\d]&gt;\_</p></blockquote>
<p style="text-align: left;">
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/03/16/mysql-dba-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A good piece of geek stuff &#8211; client side image processing with Gears</title>
		<link>http://developer.studivz.net/2009/03/13/a-good-piece-of-geek-stuff-client-side-image-processing-with-gears/</link>
		<comments>http://developer.studivz.net/2009/03/13/a-good-piece-of-geek-stuff-client-side-image-processing-with-gears/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 10:04:21 +0000</pubDate>
		<dc:creator>fabrizio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[gears]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[photo uploader]]></category>

		<guid isPermaLink="false">http://blog.studivz.net/?p=168</guid>
		<description><![CDATA[In the latest downtime we released a beta version of a new photo uploader. Since we removed the Java based uploader some time ago, we&#8217;ve been dreaming of offering our users an uploader that&#8217;s able to do the same as the applet did, without requiring Java and of course with less conflicts on the different [...]]]></description>
			<content:encoded><![CDATA[<p>In the latest downtime we released a beta version of a new photo uploader. Since we removed the Java based uploader some time ago, we&#8217;ve been dreaming of offering our users an uploader that&#8217;s able to do the same as the applet did, without requiring Java and of course with less conflicts on the different clients.</p>
<p>So the requirements for the uploader were :</p>
<ul>
<li>uploading (of course :D)</li>
<li>scaling</li>
<li>rotating</li>
<li>compression</li>
</ul>
<p>We implemented a Flash based uploader that could do a multiupload but neither scale nor compress the pictures before upload. So there is the problem, no direct access to the local files on the client.</p>
<p>On the Google Developer Days in Munich last year a collegue and I heard of the possibilities Gears offers and we were quite suprised how far it pushes the abilities of the client. Dreaming of all the geeky things I could do with Gears I also hoped to be able to solve that fileaccess problem. But unfortunately Gears did not offer the announced canvas API and also the desktop API hadn&#8217;t implemented the needed interfaces so far.</p>
<p>Enough story let&#8217;s look at the code &#8230;</p>
<blockquote><p><code><br />
var desktop = google.gears.factory.create('beta.desktop');<br />
var localServer = google.gears.factory.create('beta.localserver');<br />
var store = localServer.createStore('picturesTemp');</code></p></blockquote>
<p>November 24, 2008: Google released the 0.5 version of Gears and there it was, the local server offered captureBlob() .</p>
<p>We created the needed Gears features, desktop for the fileaccess, localserver to store the files on the client.</p>
<blockquote><p><code><br />
$('#openFile').bind('click', function(){<br />
      gearsComponents_.desktop.openFiles(openFilesCallback_, {<br />
      filter: ['image/jpeg', 'image/png', 'image/bmp', 'image/gif']<br />
   });<br />
});</code></p></blockquote>
<p>Here we&#8217;re binding the filepicker dialog to some button, providing a filter to delimit the shown files to supported types.</p>
<blockquote><p><code>var url = yourdomain;<br />
var openFilesCallback_ = function(files){<br />
   var file = files_.shift();<br />
   gearsComponents_.pictureStorage.captureBlob(file.blob, url, "image/" + file.name.substring(file.name.lastIndexOf('.') + 1));<br />
}</code></p></blockquote>
<p>Capturing the blob to the local server like shown above solves two problems. Now we can access the files and import them into the canvas element, because it can be delivered via the same domain as the main page so there is no crossdomain security problem.</p>
<blockquote><p><code>var canvas = $('&lt;canvas&gt;').get(0);<br />
var context = canvas.getContext('2d');<br />
canvas.width = canvasOriginal.width * fac;<br />
canvas.height = canvasOriginal.height * fac;<br />
context.scale(fac, fac);<br />
context.drawImage(canvasOriginal, 0, 0);</code></p></blockquote>
<p>In this example the canvasOriginal is the canvas/image from the localserver. We can now rotate, scale etc. the picture if the browser supports these actions on the canvas element.</p>
<p>You can also apply filters on the images by extracting the picture information as pixelarray modifying it and pushing it back:</p>
<blockquote><p><code><br />
// get the imagedata<br />
var imgdata = canvasOriginalContext.getImageData(0, 0, canvasOriginal.width, canvasOriginal.height);<br />
// do something with the pixel data<br />
// push the imagedata back<br />
context.putImageData(processedData, 0, 0);</code></p></blockquote>
<p>As Javascript blocks while executing code this will for sure cause serious GUI problems, so let&#8217;s use a Gears worker to solve that problem.<br />
First we have to create a workerpool:</p>
<blockquote><p><code><br />
var workerPool = (function(){<br />
   if (window.google) {<br />
      return google.gears.factory.create('beta.workerpool');<br />
   }<br />
}());</code></p></blockquote>
<p>The workerpool needs an onmessage handler which will be called on receiving messages by a childworker:</p>
<blockquote><p><code><br />
workerPool.onmessage = function(a, b, message){<br />
   //message will contain our processed pixelarray<br />
};</code></p></blockquote>
<p>The workers have no access to the dom so we only push the pixelarray in and get it back in the onmessage handler</p>
<blockquote><p><code><br />
// accessing the predefined workerpool<br />
var script = 'var wp = google.gears.workerPool;' +<br />
'wp.onmessage = function(a, b, message) {' +<br />
'var data = message.body[0];' +<br />
'//Process the data here' +<br />
'//send the data back to the worker pool'<br />
'wp.sendMessage(reply, message.sender);' +<br />
// create a childworker by script (could also be created by url pointing to a script)<br />
var childWorkerId = workerPool.createWorker(script);</code></p></blockquote>
<p>We currently only use workers to apply a filter to the pictures.</p>
<p>Now we can do anything we want with the pictures but what about sending them to the server.</p>
<p>The solution to that problem is the toDataURL() method of the canvas element which exports the pictures to a &#8220;data URL&#8221;, which we can send to the server by a simple xhr as post.</p>
<p>According to the HTML5 spec toDataURL() should support several parameters first the data type  &#8211; e.g. toDataURL(&#8217;image/jpeg&#8217;) &#8211; the second parameter should be the compression rate as float value.</p>
<p>The compression rate does not seem to be supported by Firefox so far, so you should leave it blank then Firefox uses it&#8217;s default value.</p>
<p>The released beta version of the Gears uploader only supports Firefox because of the missing canvas (especially picture export) support in most of the browsers. Another drawback is that Gears is not available on all OS/browser combinations.</p>
<p>I hope that Safari will soon support (didn&#8217;t look at Safari 4 so far) the needed Canvas export methods, so that the uploader will work with Mac/Safari.</p>
<p>The CanvasAPI of Gears is already available in the sources but it&#8217;s not sure if and when it will be released. So perhaps some day there will be also a canvas element available in IE via Gears.</p>
<p>Have fun with the Gears uploader!</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/03/13/a-good-piece-of-geek-stuff-client-side-image-processing-with-gears/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>MySQL und INNODB_IO_PATTERN</title>
		<link>http://developer.studivz.net/2009/03/11/mysql-und-innodb_io_pattern/</link>
		<comments>http://developer.studivz.net/2009/03/11/mysql-und-innodb_io_pattern/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 17:24:18 +0000</pubDate>
		<dc:creator>nils</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[InnoDB]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Percona]]></category>
		<category><![CDATA[Tuning]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=731</guid>
		<description><![CDATA[Percona ist ein Consultingunternehmen für MySQL und hilft als remote DBA, bei Architekturplanungen, Trouble Shooting und Database Recovery. Percona wurde 2006 von Peter Zaitsev und Vadim Tkachenko gegründet.
Seit einiger Zeit nutzen wir auf unserer Plattform die MySQL-Version von Percona, weil es unheimlich praktische Patches gibt, die uns als DBA das Leben erleichtern.

Session status to check [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-764 alignright" style="border: 0pt none;" src="http://developer.studivz.net/wp-content/uploads/2009/03/logo_mysql_sun_a.gif" alt="logo_mysql_sun_a" width="114" height="68" /><a href="http://www.percona.com" target="_blank">Percona</a> ist ein Consultingunternehmen für MySQL und hilft als remote DBA, bei Architekturplanungen, Trouble Shooting und Database Recovery. Percona wurde 2006 von Peter Zaitsev und Vadim Tkachenko gegründet.</p>
<p>Seit einiger Zeit nutzen wir auf unserer Plattform die MySQL-Version von Percona, weil es unheimlich praktische Patches gibt, die uns als DBA das Leben erleichtern.</p>
<ul>
<li>Session status to check fragmentation of the last InnoDB scan</li>
<li>SHOW USER/TABLE/INDEX statistics</li>
<li>SHOW PATCHES</li>
<li>Adds additional information of InnoDB internal hash table memories in SHOW INNODB STATUS</li>
<li>Information schema table of InnoDB IO counts for each datafile pages</li>
<li>Adds INFOMATION_SCHEMA.PROCESSLIST with TIME_MS column</li>
<li>Add locks held, remove locked records in SHOW INNODB STATUS</li>
<li>Extended statistics in slow.log</li>
<li>Patch allows redirect output of error.log to syslog-ng</li>
<li>Information of fsync callers in InnoDB</li>
<li>Show innodb buffer pool content</li>
</ul>
<p>Mit <strong>show index_statistics</strong> sieht man z.B. sehr gut, wieviele Rows durch welchen Index gelesen wurden. Ideal, um nicht benutzte Indizes aufzuspüren.<br />
Natürlich will man auch wissen, wie sich die IO auf einzelne Tabellen und Indizes verteilt. Dafür gibt es dann im Information-Schema die Tabelle <strong><a href="http://www.percona.com/docs/wiki/patches:innodb_io_pattern" target="_blank">INNODB_IO_PATTERN</a></strong>:</p>
<blockquote><pre>$ describe INNODB_IO_PATTERN;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| SPACE      | bigint(11)  | NO   |     | 0       |       |
| OFFSET     | bigint(11)  | NO   |     | 0       |       |
| INDEX_ID   | bigint(11)  | NO   |     | 0       |       |
| TABLE_NAME | varchar(32) | NO   |     | NULL    |       |
| INDEX_NAME | varchar(32) | NO   |     | NULL    |       |
| N_READ     | bigint(11)  | NO   |     | 0       |       |
| N_WRITE    | bigint(11)  | NO   |     | 0       |       |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.01 sec)
 </pre>
</blockquote>
<p>Bevor man Auswertungen starten kann, muss MySQL erstmal Daten sammeln:</p>
<blockquote><p><code>$ set global innodb_io_pattern_trace = 1;<br />
$ set global innodb_io_pattern_trace_running = 1;<br />
$ set global innodb_io_pattern_trace_size_limit = 1;<br />
-- Anzahl der Pages die gesammelt werden sollen</code></p></blockquote>
<p>Man muss auch unbedingt darauf achten, dass man genug freien Hauptspeicher hat, bevor man das Tracing startet.<br />
Auswertung des IO für jeden Index, getrennt nach Read und Write:</p>
<blockquote><p><code>$ select sum(i.n_read) n_read, sum(i.n_write) n_write, index_name, table_name from information_schema.innodb_io_pattern i group by index_id</code></p></blockquote>
<p><a href="http://www.percona.com/docs/wiki/patches:start" target="_blank">Dokumenation</a>, Sourcen und Binaries finden sich im <a href="http://www.percona.com/docs/wiki/release:start" target="_blank">Wiki </a>von Percona. Großes Lob also an die verschiedenen Entwickler, die dafür sorgen, dass auch die Datenbanken bei studiVZ unheimlich gut performen. Hier aus unserem <a href="http://ganglia.info/" target="_blank">Grid Monitoring</a> die aggregierte Datenbanklast in Queries pro Sekunden:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-771" style="border: 0pt none;" title="qps1" src="http://developer.studivz.net/wp-content/uploads/2009/03/qps1.png" alt="qps1" width="397" height="182" /></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/03/11/mysql-und-innodb_io_pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zahl(en) des Tages</title>
		<link>http://developer.studivz.net/2009/02/23/zahlen-des-tages/</link>
		<comments>http://developer.studivz.net/2009/02/23/zahlen-des-tages/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 12:48:12 +0000</pubDate>
		<dc:creator>dietrich</dc:creator>
				<category><![CDATA[Daily Business]]></category>
		<category><![CDATA[Dell]]></category>
		<category><![CDATA[Megapixel]]></category>
		<category><![CDATA[Monitor]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=483</guid>
		<description><![CDATA[Der typische Entwickler-Arbeitsplatz bei uns hat 2x 24-Zoll-Monitore. Viele sind Dell 2408WFP. Einige Leute sind auch mit Notebooks ausgestattet. Und wieder andere haben neben einem 24er- einen 17-Zöller stehen.

Alle Bildschirme der Entwicklungsabteilung (inkl. System Operations) zusammen genommen kommt man auf

202 Megapixel (Mpx)

Das sind ziemlich exakt so viele Pixel wie die HIPerWall an der UC Irvine. [...]]]></description>
			<content:encoded><![CDATA[<p>Der typische Entwickler-Arbeitsplatz bei uns hat 2x 24-Zoll-Monitore. Viele sind <a href="http://accessories.euro.dell.com/sna/productdetail.aspx?c=de&amp;l=de&amp;cs=dedhs1&amp;sku=147256" target="_blank">Dell 2408WFP</a>. Einige Leute sind auch mit Notebooks ausgestattet. Und wieder andere haben neben einem 24er- einen 17-Zöller stehen.</p>
<p style="text-align: center;"><a href="http://developer.studivz.net/wp-content/uploads/2009/02/p1050431.jpg"><img class="size-medium wp-image-484 aligncenter" src="http://developer.studivz.net/wp-content/uploads/2009/02/p1050431-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p>Alle Bildschirme der Entwicklungsabteilung (inkl. System Operations) zusammen genommen kommt man auf</p>
<blockquote>
<h2>202 Megapixel (Mpx)</h2>
</blockquote>
<p>Das sind ziemlich exakt so viele Pixel wie die <a href="http://www.apple.com/science/profiles/hiperwall/" target="_blank">HIPerWall an der UC Irvine</a>. Wobei die dort 30-Zoll-Geräte nutzen und somit für die selben Mpx weniger Monitore brauchen.</p>
<p>Wenn man unsere 202 Megapixel auf eine Bildschirmwand im Seitenverhältnis 16:10 verteilen würde, hätte man eine Monitor-Einheit von 18.000 x 11.250 px. Mit den bei 24-Zöllern üblichen 94 <a href="http://en.wikipedia.org/wiki/Pixels_per_inch" target="_blank">PPI</a> wäre das eine Fläche von etwa 191 Zoll x 119 Zoll. Das entspricht</p>
<blockquote>
<h2>4,8m x 3,0m</h2>
</blockquote>
<p>In dieser Rechnung sind noch nicht die vielen Leute mit Geräten dabei, die bei studiVZ in anderen Bereichen arbeiten. Da gibt es u.a. noch Marketing, Sales und vor allem den großen Support.</p>
<p>Und das hier sind noch zwei Schnappschüsse aus dem Maschinenraum. Die Büros und die Backfabrik stellen wir bestimmt später nochmal etwas genauer vor.</p>
<p style="text-align: center;">
<a href="http://developer.studivz.net/wp-content/uploads/2009/02/p1050450.jpg"><img class="size-medium wp-image-561" src="http://developer.studivz.net/wp-content/uploads/2009/02/p1050450-300x200.jpg" alt="" width="300" height="200" /> <a href="http://developer.studivz.net/wp-content/uploads/2009/02/p1050456.jpg"><img class="size-medium wp-image-566" src="http://developer.studivz.net/wp-content/uploads/2009/02/p1050456-300x200.jpg" alt="" width="300" height="200" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/23/zahlen-des-tages/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Auf der Suche nach den verschwundenen Fotos</title>
		<link>http://developer.studivz.net/2009/02/19/auf-der-suche-nach-den-verschwundenen-fotos/</link>
		<comments>http://developer.studivz.net/2009/02/19/auf-der-suche-nach-den-verschwundenen-fotos/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 13:23:27 +0000</pubDate>
		<dc:creator>jodok</dc:creator>
				<category><![CDATA[Operations]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[Fotos]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[RefControl]]></category>
		<category><![CDATA[Referrer]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=512</guid>
		<description><![CDATA[Am Dienstag, den 17.02., haben wir bei unserem Content Delivery/Distribution Network (CDN) ein sogenanntes &#8220;Referrer Checking&#8221; aktiviert. Wird also versucht ein Foto, das bei uns liegt, auf einer anderen Internetseite einzubinden (Stichwort Hotlinking), kommt nicht das gewünschte Foto sondern die nebenstehende Grafik.
Übrigens&#8230; In Spitzen laden VZ Nutzer mal locker über 1.000.000 neue Fotos am Tag [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-513" style="border: 0pt none;" title="hotlinking" src="http://developer.studivz.net/wp-content/uploads/2009/02/hotlinking.gif" alt="hotlinking" width="180" height="108" />Am Dienstag, den 17.02., haben wir bei unserem Content Delivery/Distribution Network (<a href="http://de.wikipedia.org/wiki/Content_Distribution_Network" target="_blank">CDN</a>) ein sogenanntes &#8220;Referrer Checking&#8221; aktiviert. Wird also versucht ein Foto, das bei uns liegt, auf einer anderen Internetseite einzubinden (Stichwort <a href="http://de.wikipedia.org/wiki/Hotlinking" target="_blank">Hotlinking</a>), kommt nicht das gewünschte Foto sondern die nebenstehende Grafik.</p>
<p>Übrigens&#8230; In Spitzen laden VZ Nutzer mal locker über <strong>1.000.000 neue Fotos am Tag</strong> bei uns hoch und es werden um die/über <strong>70.000 Anfragen pro Sekunde</strong> an unser CDN gestellt. Das CDN schützt unsere Image Server (die Server, die die ganzen Fotos und anderen statischen Inhalte ausliefern) davor, sich dieser enormen Last selber stellen zu müssen.</p>
<blockquote><p><strong>Ich weiß nicht, was ich verbrochen habe, aber ich sehe seit einigen Tagen keine Fotos mehr im meinVZ, studiVZ oder schülerVZ. Hilfeee!</strong></p></blockquote>
<p>Dafür kann es verschiedene Gründe geben. Letztlich reduziert sich das darauf, dass euer Browser (Firefox, Internet Explorer, Safari, Opera usw.) keinen korrekten &#8220;<a href="http://de.wikipedia.org/wiki/Referrer" target="_blank">Referrer</a>&#8221; übermittelt. Daran muss nicht direkt der Browser schuld sein. Antiviren-, Firewall- oder Proxy-Software zum Beispiel beeinflussen die Übermittlung des Referrers bzw. verändern diesen dahingehend, dass anstelle des korrekten Referrers ein &#8220;Blocked by Firewall XYZ&#8221; übermittelt wird, sofern man dies nicht deaktiviert. Manche haben sich vielleicht das Firefox Add-on &#8220;<a href="https://addons.mozilla.org/de/firefox/addon/953" target="_blank">RefControl</a>&#8221; installiert. Dort und bei der anderen Software sollte zumindest das Senden eines leeren Referrers eingestellt sein. Dann müsste alles wieder funktionieren.</p>
<p><strong>[UPDATE]</strong><br />
Wir haben uns unterdessen dazu entschieden, auch leere Referrer zu akzeptieren. Deshalb wurde der Artikel entsprechend angepasst und ist jetzt etwas übersichtlicher geworden.</p>
<p><strong>[UPDATE]</strong><br />
Unterdessen sind leere Referrer wieder von der Whitelist gestrichen worden. Wer jetzt noch mit den Fotos ein Problem hat, schaue bitte in die entsprechenden Hilfegruppen:</p>
<p><a href="http://www.meinvz.net/Groups/Overview/fbd443e298aee375" target="_blank">http://www.meinvz.net/Groups/Overview/fbd443e298aee375</a><br />
<a href="http://www.studivz.net/Groups/Overview/193b82ce5c44d2ba" target="_blank">http://www.studivz.net/Groups/Overview/193b82ce5c44d2ba</a><br />
<a href="http://www.schuelervz.net/Groups/Overview/f2d4f75f70701b0f" target="_blank">http://www.schuelervz.net/Groups/Overview/f2d4f75f70701b0f</a></p>
<p><strong>[UPDATE]</strong><br />
Leere Referer sind wieder erlaubt.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/19/auf-der-suche-nach-den-verschwundenen-fotos/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Google Gadgets &#8211; Jetzt auch bei uns</title>
		<link>http://developer.studivz.net/2009/02/18/google-gadgets-jetzt-auch-bei-uns/</link>
		<comments>http://developer.studivz.net/2009/02/18/google-gadgets-jetzt-auch-bei-uns/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 09:18:00 +0000</pubDate>
		<dc:creator>Sebastian Galonska</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Google Gadgets]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=491</guid>
		<description><![CDATA[Ein wenig Schweiß und Fleiß war schon vonnöten, doch seit heute sind wir mit den ersten Gadgets online. Basierend auf dem Google-Gadget Standard haben wir die Möglichkeit geschaffen, dynamische Inhalte von Drittanbietern in unsere Gruppenseiten einzubinden.
Unser besonderer Dank gilt hier Chris Chabot von Google, der die Basis des von uns eingesetzten Shindig Servers entwickelt hat. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-500 alignright" style="border: 0pt none;" src="http://developer.studivz.net/wp-content/uploads/2009/02/google.jpg" alt="" width="150" height="63" />Ein wenig Schweiß und Fleiß war schon vonnöten, doch seit heute sind wir mit den ersten Gadgets online. Basierend auf dem Google-Gadget Standard haben wir die Möglichkeit geschaffen, dynamische Inhalte von Drittanbietern in unsere Gruppenseiten einzubinden.</p>
<p>Unser besonderer Dank gilt hier Chris Chabot von Google, der die Basis des von uns eingesetzten <a href="http://incubator.apache.org/shindig/" target="_blank">Shindig</a> Servers entwickelt hat. Natürlich waren noch einige studiVZ-spezifische Anpassungen notwendig. Unter Anderem haben wir zusätzlich zum Standard den &#8220;Group&#8221;-View eingeführt, der speziell für die Anzeige von Gadgets in Gruppen optimiert ist. Auch müssen Anbieter von Gadgets nicht mehr um die Last auf ihren Servern bangen, denn dank intelligenter Verteilung der statischen Inhalte auf unserer CDN Farm, ist die Verfügbarkeit der Inhalte gewährleistet.</p>
<p>Wir befinden uns noch in der Beta-Phase, weitere Funktionalitäten werden folgen. Ihr dürft also gespannt sein ;)</p>
<p>Die ersten Fussballverein-Gadgets in Kooperation mit <a href="http://www.bild.de/" target="_blank">Bild.de</a> könnt ihr in den folgenden Gruppen bewundern:</p>
<h2>studiVZ</h2>
<h2><img class="alignright size-full wp-image-502" src="http://developer.studivz.net/wp-content/uploads/2009/02/bild_de_gadget_2009-02-18_105706.png" alt="bild_de_gadget_2009-02-18_105706" width="398" height="406" /></h2>
<ul>
<li><a href="http://www.studivz.net/Groups/Overview/1bee305fd246d6d3" target="_blank">FC Bayern</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/77770f4539d757ad" target="_blank">Borussia Dortmund *BVB 09*</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/26bc584bdc949c75" target="_blank">Schalke 04</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/b4ff404a05b155aa" target="_blank">Hertha BSC Berlin 1892 e.V.</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/260381adaf1f175c" target="_blank">Werder Bremen</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/3387543b3ae26972" target="_blank">HSV</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/0bd983318bf4df12" target="_blank">1. FC Köln</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/b8e84da7a09b66fa" target="_blank">Bayer 04 Leverkusen</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/c37276b4c50eff2f" target="_blank">HANNOVER 96 &#8211; Mein Verein</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/e3fced5ea0b3b0d5" target="_blank">VfL Wolfsburg</a><a href="http://www.studivz.net/Groups/Overview/0b9f443248423dac" target="_blank"><br />
</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/0b9f443248423dac" target="_blank">VfB Stuttgart</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/3ff26230585609f9" target="_blank">Eintracht Frankfurt</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/8201d89d9e12369c" target="_blank">TSG 1899 Hoffenheim</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/3bff54cb91e7765a" target="_blank">FC Energie Cottbus</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/279d99a4f5ccb85e" target="_blank">VFL.Borussia Mönchengladbach 1900 e.V.</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/e9c856db4a8d5022" target="_blank">I ♥ DSC ARMINIA BIELEFELD</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/47cb566991cd2130" target="_blank">VfL Bochum</a></li>
<li><a href="http://www.studivz.net/Groups/Overview/7a5bcdbaf42366c4" target="_blank">KSC</a></li>
</ul>
<h2>schülerVZ</h2>
<ul>
<li><a href="http://www.schuelervz.net/Groups/Overview/8ad44cd111892319" target="_blank">FC Bayern München &#8211; FCB</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/fa5919da0ad16a54" target="_blank">FC Bayern München</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/6c342d19be7d1a41" target="_blank">Borussia Dortmund</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/77f0c40ec134fbc0" target="_blank">FC SCHALKE 04</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/cc6f79d4639bcddc" target="_blank">SV Werder Bremen</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/1eba47dfd399d5fd" target="_blank">HSV</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/70afd4f6bea22192" target="_blank">Hertha BSC Berlin</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/1aea13bf05ebd917" target="_blank">1. FC Köln</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/29de6454255087a5" target="_blank">Bayer 04 Leverkusen</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/b42e4f170c9f08de" target="_blank">Hannover 96 Fanclub</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/e8cd2268000f29fa" target="_blank">VfL Wolfsburg</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/09839c3700cb1758" target="_blank">VfB Stuttgart</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/23469667deea940e" target="_blank">Eintracht Frankfurt</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/aff05ce863a979a5" target="_blank">TSG Hoffenheim</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/4b767ae640867e65" target="_blank">FC Energie Cottbus</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/648c35ef9cbeab14" target="_blank">Borussia Mönchengladbach</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/73e89ae0325b4c7b" target="_blank">Arminia Bielefeld</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/977f250e381fd977" target="_blank">VfL Bochum 1848</a></li>
<li><a href="http://www.schuelervz.net/Groups/Overview/a18981756010e4aa">KSC</a></li>
</ul>
<h2>meinVZ</h2>
<ul>
<li><a href="http://www.meinvz.net/Groups/Overview/1bee305fd246d6d3" target="_blank">FC Bayern</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/77770f4539d757ad" target="_blank">Borussia Dortmund *BVB 09*</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/26bc584bdc949c75" target="_blank">Schalke 04</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/b4ff404a05b155aa" target="_blank">Hertha BSC Berlin 1892 e.V.</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/260381adaf1f175c" target="_blank">Werder Bremen</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/3387543b3ae26972" target="_blank">HSV</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/0bd983318bf4df12" target="_blank">1. FC Köln</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/b8e84da7a09b66fa" target="_blank">Bayer 04 Leverkusen</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/c37276b4c50eff2f" target="_blank">HANNOVER 96 &#8211; Mein Verein</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/e3fced5ea0b3b0d5" target="_blank">VfL Wolfsburg</a><a href="http://www.studivz.net/Groups/Overview/0b9f443248423dac" target="_blank"><br />
</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/0b9f443248423dac" target="_blank">VfB Stuttgart</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/3ff26230585609f9" target="_blank">Eintracht Frankfurt</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/8201d89d9e12369c" target="_blank">TSG 1899 Hoffenheim</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/3bff54cb91e7765a" target="_blank">FC Energie Cottbus</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/279d99a4f5ccb85e" target="_blank">VFL.Borussia Mönchengladbach 1900 e.V.</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/e9c856db4a8d5022" target="_blank">I ♥ DSC ARMINIA BIELEFELD</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/47cb566991cd2130" target="_blank">VfL Bochum</a></li>
<li><a href="http://www.meinvz.net/Groups/Overview/7a5bcdbaf42366c4" target="_blank">KSC</a></li>
</ul>
<p><span style="color: #c0c0c0;">Google sowie das Logo sind ein eingetragenes Zeichen von Google Inc.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/18/google-gadgets-jetzt-auch-bei-uns/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>studiVZ App für iPhone/iPod touch verfügbar</title>
		<link>http://developer.studivz.net/2009/02/13/studivz-app-fur-iphone-ipod-touch-verfugbar/</link>
		<comments>http://developer.studivz.net/2009/02/13/studivz-app-fur-iphone-ipod-touch-verfugbar/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 15:25:22 +0000</pubDate>
		<dc:creator>dietrich</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod touch]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=447</guid>
		<description><![CDATA[Heute war es soweit, die studiVZ iPhone/iPod touch Anwendung ist von Apple freigegeben worden und im App-Store erhältlich. Die App ist natürlich &#8211; ganz in der Tradition des studiVZ &#8211; kostenlos erhältlich und wird es auch bleiben.

Die Versionen für meinVZ und schülerVZ werden in absehbarer Zeit folgen.
Die App wird möglichst zügig weiter entwickelt werden, schließlich [...]]]></description>
			<content:encoded><![CDATA[<p>Heute war es soweit, die studiVZ iPhone/iPod touch Anwendung ist von Apple freigegeben worden und <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300414974&amp;mt=8" target="_blank">im App-Store erhältlich</a>. Die App ist natürlich &#8211; ganz in der Tradition des studiVZ &#8211; kostenlos erhältlich und wird es auch bleiben.</p>
<p style="text-align: center;"><a href="http://developer.studivz.net/wp-content/uploads/2009/02/appstore.jpg"><img class="size-medium wp-image-454 aligncenter" title="studiVZ App" src="http://developer.studivz.net/wp-content/uploads/2009/02/appstore-200x300.jpg" alt="studiVZ App" width="200" height="300" /></a></p>
<p>Die Versionen für meinVZ und schülerVZ werden in absehbarer Zeit folgen.</p>
<p>Die App wird möglichst zügig weiter entwickelt werden, schließlich sind noch lange nicht alle Funktionen damit möglich, die man über die normale Web-Oberfläche nutzen kann. Ihr könnt also gespannt sein.</p>
<p>Bis dahin freuen wir uns über konstruktives Feedback.</p>
<p><strong>[NACHTRAG]</strong><br />
Freigabe war am Freitag, den 13.02. Heute (Montag, 16.02.) liest sich die Top 1 der &#8220;Hitliste&#8221; im deutschen App-Store so:</p>
<p style="text-align: center;"><a href="http://developer.studivz.net/wp-content/uploads/2009/02/app_store_2009-02-16_153102.png" target="_self"><img class="size-full wp-image-474 aligncenter" src="http://developer.studivz.net/wp-content/uploads/2009/02/app_store.jpg" alt="" width="192" height="122" /></a></p>
<p style="text-align: left;"><strong>[NACHTRAG 2]</strong></p>
<p style="text-align: left;">Die Apps für schülerVZ und meinVZ haben es nun auch geschafft und können geladen werden. Hier die App-Store-Links:</p>
<p style="text-align: left;"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300414974&amp;mt=8" target="_blank">studiVZ</a><br />
<a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=305981067&amp;mt=8" target="_blank">meinVZ</a><br />
<a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=306111737&amp;mt=8" target="_blank">schülerVZ</a></p>
<p><a href="http://developer.studivz.net/wp-content/uploads/2009/02/img_0001.jpg"></a><a href="http://developer.studivz.net/wp-content/uploads/2009/02/img_0001.jpg"><img class="alignnone size-thumbnail wp-image-582" src="http://developer.studivz.net/wp-content/uploads/2009/02/img_0001-150x150.jpg" alt="" width="150" height="150" /></a> <a href="http://developer.studivz.net/wp-content/uploads/2009/02/img_0001.jpg"></a><a href="http://developer.studivz.net/wp-content/uploads/2009/02/img_0002.jpg"><img class="alignnone size-thumbnail wp-image-583" src="http://developer.studivz.net/wp-content/uploads/2009/02/img_0002-150x150.jpg" alt="" width="150" height="150" /></a> <a href="http://developer.studivz.net/wp-content/uploads/2009/02/img_0001.jpg"></a><a href="http://developer.studivz.net/wp-content/uploads/2009/02/img_0003.jpg"><img class="alignnone size-thumbnail wp-image-581" src="http://developer.studivz.net/wp-content/uploads/2009/02/img_0003-150x150.jpg" alt="" width="150" height="150" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/13/studivz-app-fur-iphone-ipod-touch-verfugbar/feed/</wfw:commentRss>
		<slash:comments>81</slash:comments>
		</item>
		<item>
		<title>Vorsicht: Ominöse studiVZ Toolbar enthält Trojaner</title>
		<link>http://developer.studivz.net/2009/02/13/vorsicht-ominose-studivz-toolbar-enthalt-trojaner/</link>
		<comments>http://developer.studivz.net/2009/02/13/vorsicht-ominose-studivz-toolbar-enthalt-trojaner/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 08:45:14 +0000</pubDate>
		<dc:creator>jodok</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Backdoor]]></category>
		<category><![CDATA[Toolbar]]></category>
		<category><![CDATA[Trojaner]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=436</guid>
		<description><![CDATA[Dem geneigten Leser dieses Blogs braucht man es vielleicht nicht zu sagen. Ist er doch technisch interessiert und weiß genau um die Gefahren, die irgendwelche zwielichtigen Internetseiten und Programme mit sich bringen können.
Dennoch. Aus aktuellem Anlass wollen wir auch an dieser Stelle eindringlich vor der Browser Extension, Toolbar und sogenannten Symbolleiste &#8220;StudiVZ die Studenten Commuity [...]]]></description>
			<content:encoded><![CDATA[<p>Dem geneigten Leser dieses Blogs braucht man es vielleicht nicht zu sagen. Ist er doch technisch interessiert und weiß genau um die Gefahren, die irgendwelche zwielichtigen Internetseiten und Programme mit sich bringen können.</p>
<p>Dennoch. Aus aktuellem Anlass wollen wir auch an dieser Stelle eindringlich vor der Browser Extension, Toolbar und sogenannten Symbolleiste &#8220;<span id="ctl00_lblSlogan" style="color: #525b64;"><strong>StudiVZ die Studenten Commuity Toolbar</strong>&#8221; </span><span style="text-decoration: underline;">warnen</span>, die einen Trojaner mit Backdoor-Mechanismus enthält und persönliche Daten wie z.B. das studiVZ Passwort des Nutzers auszuspähen versucht. Sie ist nicht von uns. Das erkennt man u.a. daran, dass es nicht einmal ein Impressum oder sonstigen offiziellen Bezug zu uns gibt.</p>
<p>Da studiVZ selber [bis dato] kein Anbieter von Toolbars ist, mit keinem Toolbar-Betreiber kooperiert oder solche bewirbt,  raten wir unseren Nutzern dringend davon ab, Toolbars zu installieren, die mit dem  Namen studiVZ werben. Um Sicherheitslücken zu vermeiden, raten wir unseren Mitgliedern den regulären Weg zu gehen, d.h. mit einem Webbrowser direkt unsere Netzwerke zu besuchen.</p>
<p>Natürlich sollten eine Antivirus- und Firewall-Software auf jedem PC zur Basisausstattung gehören. Letztlich schützt aber auch der gesunde Menschenverstand und ein stets eindringlicher Blick, bevor man sich irgendeine Software installiert.</p>
<p>Siehe auch&#8230;<br />
<a href="http://www.heise.de/security/StudiVZ-Toolbar-mit-Backdoor-in-Umlauf-Update--/news/meldung/132420" target="_blank">http://www.heise.de/security/StudiVZ-Toolbar-mit-Backdoor-in-Umlauf-Update&#8211;/news/meldung/132420</a><br />
<a href="http://www.avertlabs.com/research/blog/index.php/2009/02/10/trojan-bundles-legit-social-network-toolbar-with-backdoor/" target="_blank">http://www.avertlabs.com/research/blog/index.php/2009/02/10/trojan-bundles-legit-social-network-toolbar-with-backdoor/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/13/vorsicht-ominose-studivz-toolbar-enthalt-trojaner/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>studiVZ Wildlife</title>
		<link>http://developer.studivz.net/2009/02/11/studivz-wildlife/</link>
		<comments>http://developer.studivz.net/2009/02/11/studivz-wildlife/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 14:59:34 +0000</pubDate>
		<dc:creator>volker</dc:creator>
				<category><![CDATA[Daily Business]]></category>
		<category><![CDATA[animals]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[gerbils]]></category>
		<category><![CDATA[Haustiere]]></category>
		<category><![CDATA[Rennmäuse]]></category>
		<category><![CDATA[VZ]]></category>
		<category><![CDATA[wildlife]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=391</guid>
		<description><![CDATA[Wenn man auf Wikipedia nach Gerbil sucht, trifft man als erstes auf folgenden Satz:
&#8220;Die Rennmäuse (Gerbillinae) bilden eine Unterfamilie der Langschwanzmäuse und bewohnen die Wüsten, Halbwüsten, Steppen und Savannen Afrikas und Asiens.&#8221; [Quelle: Wikipedia]
Das ist sogar fast richtig &#8211; aber eben nur fast, denn auch in der studiVZ-Entwicklungsabteilung leben zwei Exemplare dieser putzigen Tierart, die [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man auf Wikipedia nach <strong>Gerbil </strong>sucht, trifft man als erstes auf folgenden Satz:</p>
<blockquote><p>&#8220;Die Rennmäuse (Gerbillinae) bilden eine Unterfamilie der Langschwanzmäuse und bewohnen die Wüsten, Halbwüsten, Steppen und Savannen Afrikas und Asiens.&#8221; [Quelle: <a title="Wikipedia Artikel zu Gerbils" href="http://de.wikipedia.org/wiki/Gerbil" target="_blank">Wikipedia</a>]</p></blockquote>
<p>Das ist sogar fast richtig &#8211; aber eben nur fast, denn auch in der studiVZ-Entwicklungsabteilung leben zwei Exemplare dieser putzigen Tierart, die seit nunmehr fast 2 Jahren hier tapfer die Stellung halten. Im kalten Frühjahr 2007 wurde nach einer denkwürdigen Mittagspause die Entscheidung getroffen, dass doch ein Haustier, oder genauer gesagt ein <em>Firmen</em>tier, genau das richtige für uns wäre. Der Hamster war quasi schon ausgesucht und freute sich schon aus seinem stickigen Zoohandlungskäfig in eine bessere Zukunft entlassen zu werden. Tragischerweise (für den Hamster) befanden sich genau unter seinem Käfig die beiden Jungs, die bis heute bei uns ihr Unwesen treiben und sie passten einfach perfekt. Also Hamster wieder rein und Rennmäuse raus, denn zu zweit ist es natürlich auch für die Tierchen schöner. Außerdem stinken Mäuse weniger als Hamster, was ja in einem Großraumbüro ein nicht zu unterschätzender Faktor ist. Der Käfig war auch schon am Start und es ging geradewegs zurück in die Saarbrücker Straße.<br />
<img class="size-medium wp-image-393 alignnone" style="margin: 20px;" src="http://developer.studivz.net/wp-content/uploads/2009/02/foto-0001a-300x225.jpg" alt="Gerbil1" width="300" height="225" /><img class="size-medium wp-image-392 alignnone" style="margin: 20px;" src="http://developer.studivz.net/wp-content/uploads/2009/02/foto-0007-300x225.jpg" alt="Gerbil2" width="300" height="225" /><br />
Tja und seit dem leben die Beiden hier und hören auf die Namen <strong>V</strong> (der Hellere) und <strong>Z</strong>. Und da unsere Entwickler (und auch der Rest der Firma) sehr tierlieb sind, werden die Kleinen auch stets gehegt und gepflegt. Und vor allem auch eifrig gefüttert, was den Beiden eine leicht tischtennisballartige Figur verschafft hat. Dieser Entwicklung versuche ich als hauptverantwortlicher Pfleger durch eine gezielte Diät und mehr Sport Einhalt zu gebieten. Der Tagesablauf gibt außer schlafen, fressen, graben und nichtstun nämlich oft nicht so viel her. Auch wenn ich fest überzeugt bin, dass der Plan für die Weltherrschaft irgendwo in ihrem Micespace verborgen liegt. Achso: &#8220;Micespace&#8221; ist der offizielle Name für ihr Domizil, dass sich mittlerweile in der 3. Reinkarnation befindet. Angefangen hat es mit einem kleinen Plastikgehege über einen vierstöckigen Plattenbaukäfig bis hin zu ihrem heutigen Luxus-Glas-Terrarium-Prenzlberg-Loft.<br />
<img class="alignnone size-medium wp-image-403" style="margin: 20px;" src="http://developer.studivz.net/wp-content/uploads/2009/02/dsc_0386-300x200.jpg" alt="Gerbil4" width="300" height="200" /><img class="alignnone size-medium wp-image-402" style="margin: 20px;" src="http://developer.studivz.net/wp-content/uploads/2009/02/dsc_0419-300x200.jpg" alt="Gerbil3" width="300" height="200" /><br />
Da die Lebenserwartung von solchen Tieren bei bis zu 5 Jahren liegt, haben sie auch genügend Zeit um sich ihren Traum von einer eigenen Yacht zu erfüllen und durch die Karibik zu schippern. Bei dem ganzen Know-How, das sie hier aufsaugen, dürfte das auch kein Problem werden. Als kleines Schmankerl gibt es unten ein kleines &#8220;Unplugged-Video&#8221; aus dem täglichen Wahnsinn im Mäusekäfig (übrigens noch ein altes Video mit der Version 1.0 des Käfigs).</p>
<p><object width="425" height="344" data="http://www.youtube.com/v/XBSWfG17GgE&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/XBSWfG17GgE&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/11/studivz-wildlife/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>UTF-8 Byte Order Marks (BOMs) automatisch entfernen</title>
		<link>http://developer.studivz.net/2009/02/10/utf-8-byte-order-marks-boms-automatisch-entfernen/</link>
		<comments>http://developer.studivz.net/2009/02/10/utf-8-byte-order-marks-boms-automatisch-entfernen/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 16:52:49 +0000</pubDate>
		<dc:creator>timo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[BOM]]></category>
		<category><![CDATA[Charset]]></category>
		<category><![CDATA[UTF-8]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=373</guid>
		<description><![CDATA[ HowTo remove UTF-8 BOM]]></description>
			<content:encoded><![CDATA[<p>Insbesondere in heterogenen Netzwerken in einer Entwicklungsabteilung mit unterschiedlichster Softwarenutzung, kann es schon mal vorkommen, dass jemand einen Editor verwendet, der auf den falschen Zeichensatz eingestellt ist.</p>
<p>Ehe man sich versieht, wird aus dem ehemals unsichtbaren <a href="http://de.wikipedia.org/wiki/Byte_Order_Mark">Byte-Order-Mark-Steuerzeichen</a>, ein sichtbares Zeichen, das besonders am Anfang von .php  und JS-Dateien durchaus für Ungemach sorgen kann, wenn es vom Webbrowser falsch interpretiert wird.  Entweder nur hässlich sichtbar oder der Code funktioniert nicht mehr.</p>
<p>Bei uns prüft ein <a href="http://svnbook.red-bean.com/en/1.4/svn.ref.reposhooks.pre-commit.html">pre-commit</a>-hook jeden SVN-Commit auf BOMs. Und für alle Homepagebastler die sich auch schon das eine oder andere mal darüber geärgert haben &#8211; mit der simplen &#8211; auf einer Shell eines Linux-Rechners ausgeführten Zeile wird man die Dinger komplett los. Wenn man SVN benutzt, kann man die Änderungen danach auch direkt committen, da die SVN-Steuerdateien ausgenommen sind.</p>
<blockquote><p><code>find .  -name .svn -prune -o -type f -print  | while read file;do [ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] &amp;&amp; sed -i -s -e '1s/^\xef\xbb\xbf//' $files $file &amp;&amp; echo "found BOM in: $file";done</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/10/utf-8-byte-order-marks-boms-automatisch-entfernen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wartungsarbeiten/Offline</title>
		<link>http://developer.studivz.net/2009/02/09/wartungsarbeitenoffline/</link>
		<comments>http://developer.studivz.net/2009/02/09/wartungsarbeitenoffline/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 14:27:40 +0000</pubDate>
		<dc:creator>jodok</dc:creator>
				<category><![CDATA[Operations]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[Wartung]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=355</guid>
		<description><![CDATA[Morgen früh (Dienstag, den 10.02.09) gehen wir mit meinVZ, studiVZ und schülerVZ von 01.00 bis ca. 08.00 Uhr offline aufgrund von Wartungsarbeiten an den Datenbanken.

Unter anderem sind wir dabei die Datensätze der Gruppenmitgliedschaften zu partitionieren, die vorher zusammen gespeichert waren. Es gibt von Flickr eine Präsentation über das Data Sharding die ziemlich gut beschreibt, was [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><strong>Morgen früh (Dienstag, den 10.02.09) gehen wir mit meinVZ, studiVZ und schülerVZ von 01.00 bis ca. 08.00 Uhr offline aufgrund von Wartungsarbeiten an den Datenbanken.</strong></p>
<p><img class="size-full wp-image-356 alignright" style="border: 0pt none;" title="Wartung" src="http://developer.studivz.net/wp-content/uploads/2009/02/werkzeug.jpg" alt="Wartung" width="271" height="80" /></p>
<p>Unter anderem sind wir dabei die Datensätze der Gruppenmitgliedschaften zu <a href="http://en.wikipedia.org/wiki/Sharding" target="_blank">partitionieren</a>, die vorher zusammen gespeichert waren. Es gibt von <a href="http://www.flickr.com/">Flickr</a> eine Präsentation über das <a href="http://www.scribd.com/doc/2592098/DVPmysqlucFederation-at-Flickr-Doing-Billions-of-Queries-Per-Day">Data Sharding</a> die ziemlich gut beschreibt, was wir machen werden. Außerdem geht nach tagelanger Arbeit unser neuer <a href="http://en.wikipedia.org/wiki/Linux_Virtual_Server" target="_blank">LVS</a>/ <a href="http://www.linux-ha.org">Heartbeat 2</a>-Cluster mit einer neuen Version online. Mit dem LVS läuft im Backend die komplette Lastverteilung auf die Systeme, dank <a href="http://www.linuxvirtualserver.org/VS-DRouting.html" target="_blank">Direct Server Routing</a> hält sich der Durchsatz auch in Grenzen, da nur die eingehenden Frames durch das System müssen.</p>
<p>Mehr dazu demnächst in einem anderem Blog-Post.</p>
<p>P.S. Der/das Blog bleibt online.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/09/wartungsarbeitenoffline/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>studiVZ for iPhone &#8230; coming soon!</title>
		<link>http://developer.studivz.net/2009/02/09/studivz-for-iphone-coming-soon/</link>
		<comments>http://developer.studivz.net/2009/02/09/studivz-for-iphone-coming-soon/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 12:14:56 +0000</pubDate>
		<dc:creator>max</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod touch]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://developer.studivz.net/?p=339</guid>
		<description><![CDATA[We&#8217;re just waiting for the App Store approval &#8230;
]]></description>
			<content:encoded><![CDATA[
<a href='http://developer.studivz.net/2009/02/09/studivz-for-iphone-coming-soon/img_0003/' title='img_0003'><img width="150" height="150" src="http://developer.studivz.net/wp-content/uploads/2009/02/img_0003-150x150.png" class="attachment-thumbnail" alt="" title="img_0003" /></a>
<a href='http://developer.studivz.net/2009/02/09/studivz-for-iphone-coming-soon/img_0004/' title='img_0004'><img width="150" height="150" src="http://developer.studivz.net/wp-content/uploads/2009/02/img_0004-150x150.png" class="attachment-thumbnail" alt="" title="img_0004" /></a>
<a href='http://developer.studivz.net/2009/02/09/studivz-for-iphone-coming-soon/img_0005/' title='img_0005'><img width="150" height="150" src="http://developer.studivz.net/wp-content/uploads/2009/02/img_0005-150x150.png" class="attachment-thumbnail" alt="" title="img_0005" /></a>
<a href='http://developer.studivz.net/2009/02/09/studivz-for-iphone-coming-soon/img_0006/' title='img_0006'><img width="150" height="150" src="http://developer.studivz.net/wp-content/uploads/2009/02/img_0006-150x150.png" class="attachment-thumbnail" alt="" title="img_0006" /></a>

<p>We&#8217;re just waiting for the App Store approval &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/09/studivz-for-iphone-coming-soon/feed/</wfw:commentRss>
		<slash:comments>89</slash:comments>
		</item>
		<item>
		<title>PHP Bug by Design</title>
		<link>http://developer.studivz.net/2009/02/06/php-bug-by-design/</link>
		<comments>http://developer.studivz.net/2009/02/06/php-bug-by-design/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 22:27:18 +0000</pubDate>
		<dc:creator>Ingo Schramm</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://blog.studivz.net/?p=101</guid>
		<description><![CDATA[Check the following code snippets. They use square bracket syntax to index data in an array and a string.
$array = array(1,2,3);
print $array[0];
&#62;&#62; 1
print $array['foo'];
&#62;&#62; Notice: Undefined index:  foo
$string = '123';
print $string[0];
&#62;&#62; 1
print $string['foo'];
&#62;&#62; 1

If you access a non existing index in an array you will be notified about a non existing index and NULL is [...]]]></description>
			<content:encoded><![CDATA[<p>Check the following code snippets. They use square bracket syntax to index data in an array and a string.</p>
<p><code>$array = array(1,2,3);<br />
print $array[0];<br />
&gt;&gt; 1<br />
print $array['foo'];<br />
&gt;&gt; Notice: Undefined index:  foo</code></p>
<p><code>$string = '123';<br />
print $string[0];<br />
&gt;&gt; 1<br />
print $string['foo'];<br />
&gt;&gt; 1<br />
</code></p>
<p>If you access a non existing index in an array you will be notified about a non existing index and NULL is returned. That&#8217;s fine so far. But what if you&#8217;re doing the same with a string? Is a string an array of characters as you might expect?</p>
<p>Unfortunately not in PHP. A string is a string and accessing a non existing index in a string is a different thing. PHP obviously converts the string index &#8220;foo&#8221; into an integer since strings have only numerical indices. Casting &#8220;foo&#8221; into integer is 0 and the character at position 0 is returned &#8211; without any notice. A string is not an array of characters.</p>
<p>As you may read here <a href="http://bugs.php.net/bug.php?id=44914" target="_blank">http://bugs.php.net/bug.php?id=44914</a> this is also fine for the creators of PHP. For me, I&#8217;m sorry, it&#8217;s a reason to stop using PHP (if I could at least). Implicit type casts in PHP are a story on its own and notoriously leading to subtle and hard to find bugs. But this one is beyond belief.</p>
<p>The only way to protect you from a catastrophe is to check at any and every usage of arrays if you really have an array. Type hint arrays. Use is_array() excessively. Write thousands of tests.</p>
<p>Better choice &#8211; use a well designed programming language. A better supported at least.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/06/php-bug-by-design/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Rechenzentrum</title>
		<link>http://developer.studivz.net/2009/02/04/rechenzentrum/</link>
		<comments>http://developer.studivz.net/2009/02/04/rechenzentrum/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 09:57:14 +0000</pubDate>
		<dc:creator>dietrich</dc:creator>
				<category><![CDATA[Daily Business]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Gütersloh]]></category>
		<category><![CDATA[o2]]></category>
		<category><![CDATA[Rechenzentrum]]></category>

		<guid isPermaLink="false">http://blog.studivz.net/?p=99</guid>
		<description><![CDATA[  
 
Vor Kurzem war unser Operations Team zu einem Workshop in unserem Rechenzentrum bei Telefónica o2 Germany, in dem unsere Server stehen, zu Besuch. Nach drei Stunden Fahrt mit der Deutschen Bahn (6 Uhr aufstehen ist wirklich das Schlimmste was es gibt), sind wir sogar pünktlich angekommen.
In Gütersloh bzw. Verl angekommen, ging es [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developer.studivz.net/wp-content/uploads/2009/02/003.jpg"><img class="alignnone size-medium wp-image-299" src="http://developer.studivz.net/wp-content/uploads/2009/02/003-300x225.jpg" alt="" width="240" height="180" /></a> <a href="http://developer.studivz.net/wp-content/uploads/2009/02/007.jpg"> <img class="alignnone size-medium wp-image-298" src="http://developer.studivz.net/wp-content/uploads/2009/02/007-300x225.jpg" alt="" width="240" height="180" /></a><br />
<a href="http://developer.studivz.net/wp-content/uploads/2009/02/008.jpg"><img class="alignnone size-medium wp-image-305" src="http://developer.studivz.net/wp-content/uploads/2009/02/008-300x225.jpg" alt="" width="240" height="180" /></a> <a href="http://developer.studivz.net/wp-content/uploads/2009/02/005.jpg"><img class="alignnone size-medium wp-image-303" src="http://developer.studivz.net/wp-content/uploads/2009/02/005-300x225.jpg" alt="" width="240" height="180" /></a></p>
<p>Vor Kurzem war unser Operations Team zu einem Workshop in unserem Rechenzentrum bei <a href="http://www.o2online.de/nw/business/angebot/internet/hosting/index.html" target="_blank">Telefónica o2 Germany</a>, in dem unsere Server stehen, zu Besuch. Nach drei Stunden Fahrt mit der Deutschen Bahn (6 Uhr aufstehen ist wirklich das Schlimmste was es gibt), sind wir sogar pünktlich angekommen.</p>
<p>In Gütersloh bzw. <a title="Verl (Google Maps)" href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=an+der+autobahn,+verl&amp;sll=51.883591,8.444753&amp;sspn=0.024026,0.056047&amp;ie=UTF8&amp;t=h&amp;z=16&amp;iwloc=addr" target="_blank">Verl</a> angekommen, ging es auch gleich mit dem vollen Programm los. Besichtigung der zentralen Stromeinspeisung (ein Ring mit 8 Megawatt Leistung), Spannungswandler bei denen die Kupferleiter fast dicker als mancher Arm sind, riesige Dieselaggregate, Batterien für die Überbrückung bis die Generatoren anlaufen. Angeblich dauert es auch  nur 30 Sekunden bis alle Generatoren auf der gleichen Phase laufen und die Spannung umgeschalten wird.</p>
<p>Dann ging es weiter unter die Erde, hunderte lärmende Server, Storage-Systeme, Lastverteiler und tausende Kabel. Bei der Ordnung wünscht man sich, das hinter dem heimischen Schreibtisch die gleiche Ordnung bei den Kabeln herrscht, aber das bleibt wohl bis in alle Ewigkeit ein Wunschtraum.</p>
<p>Außerdem haben wir dort noch ein paar Schränke voll mit Festplatten, die vor allem die Fotos speichern und ausliefern (das folgende Foto ist ein rekursives Foto, denn es enthält sich selbst). Das ist schon ziemlich beeindruckend, wie die Lichter an den Platten blinken, weil draußen tausende Leute Bilder anschauen. Normalerweise sehen wir nur die Zahlen auf dem Bildschirm. Aber kubikmeterweise Technik, die riesig Lärm und Abwärme produziert, zeigt noch viel deutlicher, dass auf den Plattformen einiges los ist.</p>
<p>Wir haben das Gebäude nicht verlassen, ohne einen &#8220;Gruschel mich!&#8221;-Aufkleber auf eine Blende in einem Rack zu kleben. So sehen nun auch andere RZ-Besucher, dass wir da waren.</p>
<p><a href="http://developer.studivz.net/wp-content/uploads/2009/02/002.jpg"><img class="alignnone size-medium wp-image-301" src="http://developer.studivz.net/wp-content/uploads/2009/02/002-225x300.jpg" alt="" width="162" height="216" /></a> <a href="http://developer.studivz.net/wp-content/uploads/2009/02/004.jpg"><img class="alignnone size-medium wp-image-302" src="http://developer.studivz.net/wp-content/uploads/2009/02/004-225x300.jpg" alt="" width="162" height="216" /></a> <a href="http://developer.studivz.net/wp-content/uploads/2009/02/001.jpg"><img class="alignnone size-medium wp-image-300" src="http://developer.studivz.net/wp-content/uploads/2009/02/001-225x300.jpg" alt="" width="162" height="216" /></a> <a href="http://developer.studivz.net/wp-content/uploads/2009/02/006.jpg"><img class="alignnone size-medium wp-image-304" src="http://developer.studivz.net/wp-content/uploads/2009/02/006-225x300.jpg" alt="" width="162" height="216" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/04/rechenzentrum/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Webserver Scalability and Reliability</title>
		<link>http://developer.studivz.net/2009/02/03/webserver-scalability-and-reliability/</link>
		<comments>http://developer.studivz.net/2009/02/03/webserver-scalability-and-reliability/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 15:56:43 +0000</pubDate>
		<dc:creator>Ingo Schramm</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Reliability]]></category>
		<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://blog.studivz.net/?p=14</guid>
		<description><![CDATA[Everybody knows Apache and Tomcat but when I try to talk about such strange things like Yaws or Mochiweb nobody knows what I actually want. These two are HTTP server implementations written in the old fashioned functional language Erlang and running on the famous Open Telecom Platform or OTP. Erlang/OTP was developed in the late [...]]]></description>
			<content:encoded><![CDATA[<p>Everybody knows Apache and Tomcat but when I try to talk about such strange things like Yaws or Mochiweb nobody knows what I actually want. These two are HTTP server implementations written in the old fashioned functional language Erlang and running on the famous Open Telecom Platform or OTP. Erlang/OTP was developed in the late 80s as a fault tolerant and highly scalable system for telecom applications. Nowadays in the social networking community it is daily business to serve some 10.000s of PHP requests per second. So we are facing problems telcos have for a long time.</p>
<p>Apache is the canonical web server to serve PHP to the world. Thinking about technological alternatives in the backend domain we have a look at both Java and Erlang. A rather quick and easy test to compare the scalability of the technologies was to setup web servers delivering the same static document. The image below shows the results.</p>
<p><img class="alignnone size-full wp-image-296" src="http://developer.studivz.net/wp-content/uploads/2009/01/tomcat_apache_yaws_mochiweb3.png" alt="Web Server Scaling by Concurrency" width="521" height="440" /></p>
<p>Apache and Tomcat scale nearly linearly up to a concurrency of 1000. We find that Mochiweb has a breakdown when concurrency reaches 300 but afterwards still scales linearly as Yaws does at a lower level. Absolute performance is less interesting here. What counts is the scaling behavior. Mochiweb for example is not designed first hand to deliver static content but to act as a HTTP endpoint for arbitrary OTP applications. Neither Yaws nor Mochiweb seem to cache documents in the default setup. Also, we did not use HiPE.</p>
<p>Unfortunally we had not yet the chance to verify the measurements given in this post: <a title="http://www.sics.se/~joe/apachevsyaws.html" href="http://www.sics.se/~joe/apachevsyaws.html">http://www.sics.se/~joe/apachevsyaws.html</a> where Yaws still scales linearly (in the average) when Apache has long gone away, at concurrency of 50.000 or even 80.000 and clearly seems to survive DDoS attacks.</p>
<p>In this picture Erlang/OTP may not be a recommendation for classical web delivery but to build reliable services either to provide internal or external API endpoints. An interesing alternative at least.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/03/webserver-scalability-and-reliability/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Alles neu macht der Mai, ähh Februar!</title>
		<link>http://developer.studivz.net/2009/02/02/alles-neu-macht-der-mai-ahh-februar/</link>
		<comments>http://developer.studivz.net/2009/02/02/alles-neu-macht-der-mai-ahh-februar/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 15:00:38 +0000</pubDate>
		<dc:creator>sebastian</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://blog.studivz.net/?p=124</guid>
		<description><![CDATA[Frontend Refactoring macht Userstylesheets und Greasemonkey Scripts unbrauchbar.
Um zukünftig flexibler und effizienter arbeiten zu können, haben wir die Plattformen schülerVZ, studiVZ und meinVZ einem Frontend Refactoring unterzogen. Optisch gibt es nur wenige Änderungen, unter der Haube steckt aber eine neue Konstruktion. Im Rahmen des Refactorings werden wir jetzt nach und nach auch alle Seiten anpassen [...]]]></description>
			<content:encoded><![CDATA[<p><strong><img class="alignright size-full wp-image-261" style="border: 0pt none;" title="greasemonkey" src="http://developer.studivz.net/wp-content/uploads/2009/02/greasemonkey-logothumbnail.gif" alt="greasemonkey" width="128" height="128" />Frontend Refactoring macht Userstylesheets und <a title="Greasespot" href="http://www.greasespot.net/" target="_blank">Greasemonkey</a> Scripts unbrauchbar.</strong></p>
<p>Um zukünftig flexibler und effizienter arbeiten zu können, haben wir die Plattformen schülerVZ, studiVZ und meinVZ einem Frontend Refactoring unterzogen. Optisch gibt es nur wenige Änderungen, unter der Haube steckt aber eine neue Konstruktion. Im Rahmen des Refactorings werden wir jetzt nach und nach auch alle Seiten anpassen und optimieren.</p>
<p>Mitglieder unserer Plattformen, die die Oberfläche via <strong>Userstylesheets </strong>oder <strong>Greasemonkey Scripts</strong> anpassen, werden nach dem nächsten Release (<strong>Donnerstag, 5. Februar 2009</strong>) diese Skripte <strong>nicht mehr verwenden können</strong>. Wer seine Skripte bereits vor dem nächsten Release prüfen und anpassen möchte, kann sich hier eine <strong>Zip-Datei</strong> downloaden. In der Zip-Datei sind wichtige Seiten abgespeichert, sodass man seine Skripte entsprechend anpassen kann.</p>
<p>Wir hoffen, das hilft etwas.</p>
<p><strong><a href="http://developer.studivz.net/wp-content/uploads/2009/02/refac-wo-js.zip">Download Zip-Datei<br />
</a></strong></p>
<p>Schöne Grüße aus dem Maschinenraum.</p>
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/02/alles-neu-macht-der-mai-ahh-februar/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Where the studiVZ developers blog</title>
		<link>http://developer.studivz.net/2009/02/02/5/</link>
		<comments>http://developer.studivz.net/2009/02/02/5/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 10:43:58 +0000</pubDate>
		<dc:creator>jodok</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.studivz.net/?p=5</guid>
		<description><![CDATA[Hier ist er: Der/das studiVZ developer blog.
Wieso? Weshalb? Warum?
Der/das Blog lebt und wird sich ständig weiter entwickeln.
Das passt gut zu uns Entwicklern.
Viel Spaß!



]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Hier ist er: Der/das <strong>studiVZ developer blog</strong>.<br />
<a href="http://developer.studivz.net/about/" target="_self"><strong>Wieso? Weshalb? Warum?</strong></a><br />
Der/das Blog lebt und wird sich ständig weiter entwickeln.<br />
Das passt gut zu uns Entwicklern.</p>
<p style="text-align: left;"><strong>Viel Spaß!</strong></p>
<p style="text-align: center;"><strong><img class="aligncenter size-full wp-image-248" style="border: 0pt none;" title="Netz" src="http://developer.studivz.net/wp-content/uploads/2009/02/wallpaper_netz_1024x7681.jpg" alt="Netz" width="738" height="341" /><br />
</strong></p>
<p style="text-align: center;">
]]></content:encoded>
			<wfw:commentRss>http://developer.studivz.net/2009/02/02/5/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
