<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>XING Blog » Tech Blog</title>
	
	<link>http://blog.xing.com</link>
	<description>The corporate blog of XING</description>
	<lastBuildDate>Tue, 14 May 2013 05:10:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/xing/xing-tech-blog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="xing/xing-tech-blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Jumping through your network: XING and Internet Explorer 9</title>
		<link>http://blog.xing.com/2010/10/jumping-through-your-network-xing-and-internet-explorer-9/</link>
		<comments>http://blog.xing.com/2010/10/jumping-through-your-network-xing-and-internet-explorer-9/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 10:32:11 +0000</pubDate>
		<dc:creator>Mark Weber</dc:creator>
				<category><![CDATA[Tech Blog]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[Internet Explorer 9]]></category>

		<guid isPermaLink="false">http://blog.xing.com/?p=10854</guid>
		<description><![CDATA[<p>We always strive to do everything to provide the best experience for our users, leveraging modern technology in a way that will appeal to as many people as possible. Every so often, simple steps can make a huge difference. For &#8230;</p>]]></description>
				<content:encoded><![CDATA[<p>We always strive to do everything to provide the best experience for our users, leveraging modern technology in a way that will appeal to as many people as possible. Every so often, simple steps can make a huge difference. For instance, just a year ago we changed our sub-menu navigation to a hover-based structure, eliminating one click every time a member wants to access the non-primary tab of a feature (e.g. checking their personal outbox). One year on, I think we can count the saved clicks in the millions. That’s exactly the way we like to do things: Having the user save time and effort.</p>
<p><a href="http://www.beautyoftheweb.com/#/highlights/all-around-fast">Internet Explorer 9 and its features</a> are another great example of this paradigm, which is why we instantly decided to implement its features on our platform. The seamless – but not obtrusive – integration of core website functionality in the actual browser window and thus in the operating system itself is right in line with the general trend of “living in the web”, an ever-ongoing process whereby the overall experience on the computer becomes the web experience itself. It actually reminds me of previous ideas such as the Active Desktop that came with Internet Explorer 4 (wow, how time flies… XING didn’t even exist back then!) – or, of course, the <a href="http://www.google.de/url?sa=t&amp;source=web&amp;cd=2&amp;ved=0CBwQFjAB&amp;url=http%3A%2F%2Fblog.xing.com%2F2010%2F03%2Foutlook-social-connector-links-xing-with-outlook/">Outlook Social Connector</a>, which you can also use to keep up to speed about what’s going on within your XING network.<span id="more-10854"></span></p>
<p>XING now supports Microsoft Pinned Sites, which allows any website to be added to the user’s Start Menu using browser commands available in the IE File and Page menus (Add to Start Menu), or by dragging and dropping the address bar pin icon into the Start Menu. This functionality means that XING.com can be listed in the “All Programs” menu, allowing us to provide a fully branded experience similar to any native Windows application.</p>
<p>Once the user has pinned our site we support Jump List Tasks, which are application-specific actions tailored to XING.com. We provide a set of static URIs that can be accessed at any time even if the browser instance isn’t running. What’s more: Tasks provide a mechanism for XING end users to easily access our core functionalities even when they are not on the site. XING also enables end users to quickly access Messaging, Events, Groups, Contacts and the Jobs section.</p>
<p>On top of this, XING communicates certain notifications to end users by displaying an overlay icon above the taskbar button. MS SiteMode provides an API to surface overlay icons. This functionality is actually used to notify our users of new private messages and new contact requests. Overlay icons are designed to grab users’ attention when the view to the Pinned Site browser window is blocked. This might be when the browser window is minimized or when the browser window is concealed by another window.</p>
<p>We like nothing better than making networking easier and saving time for our users, click by click. We’ve recently done <a href="http://blog.xing.com/2010/09/more-of-everything-xing%e2%80%99s-product-offensive-unveiled/">a lot of intensive polishing up of the platform</a> – and the next few months will bring even more cool stuff for our back-end front end, and most importantly, for you. Because, as we like to say: All business is social.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xing.com/2010/10/jumping-through-your-network-xing-and-internet-explorer-9/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>OpenSocial: XING Updates from Version 0.8 to 0.9</title>
		<link>http://blog.xing.com/2010/03/opensocial-xing-updates-from-version-0-8-to-0-9/</link>
		<comments>http://blog.xing.com/2010/03/opensocial-xing-updates-from-version-0-8-to-0-9/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 16:31:10 +0000</pubDate>
		<dc:creator>Christopher Blum</dc:creator>
				<category><![CDATA[Tech Blog]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[XING PARTNER ECOSYSTEM]]></category>

		<guid isPermaLink="false">http://blog.xing.com/?p=9450</guid>
		<description><![CDATA[<p><a href="http://blog.xing.com/2009/04/xing-and-opensocial/">Here at XING</a> we’ve been working on implementing OpenSocial since 2007. In May 2009 we launched the <a href="http://blog.xing.com/2009/05/the-first-opensocial-applications-go-live-on-xing/">first XING applications</a> on our platform, and have also hosted apps from third-party providers <a href="http://blog.xing.com/2009/07/ship-it-introducing-the-xing-partner-ecosystem/">as part of the XING Partner Ecosystem</a> since July &#8230;</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.xing.com/2009/04/xing-and-opensocial/">Here at XING</a> we’ve been working on implementing OpenSocial since 2007. In May 2009 we launched the <a href="http://blog.xing.com/2009/05/the-first-opensocial-applications-go-live-on-xing/">first XING applications</a> on our platform, and have also hosted apps from third-party providers <a href="http://blog.xing.com/2009/07/ship-it-introducing-the-xing-partner-ecosystem/">as part of the XING Partner Ecosystem</a> since July 22. Our partner applications add a number of business-relevant functions to the XING platform such as online conferences, project management, calendars and presentations.</p>
<p>And it’s not just our partners who are driving things forward &#8211; we are also continually developing the system. You can read about the latest developments in our weekly <a href="http://blog.xing.com/tag/release/">Release Flash</a> which lets you know about all of the improvements we have made to our apps. For the last few weeks we’ve been working on a monster of a project which involved updating the XING OpenSocial infrastructure from version 0.8 to 0.9. This may only seem like a small step, but in fact it&#8217;s a proverbial giant leap for the infrastructure.<span id="more-9450"></span></p>
<h3>Our Aim: Silent Migration</h3>
<p>So what does updating to OpenSocial 0.9 mean for XING users? Well, nothing for the meantime as we want this migration transition to take place silently. In real terms this means that all existing apps on OpenSocial 0.8 will continue to run on the latest version without the developers making any changes. So a key part of our work is to ensure backwards compatibility within the XING Partner Ecosystem.</p>
<h3>Technical Improvements in OpenSocial 0.9</h3>
<p>The update to version 0.9 also adds a number of new features to improve the quality of our apps even further. Features include templates for various frequently used areas of the user interface, and tags (small code snippets) that can be added to certain entities using <em>OSML</em> (OpenSocial Markup Language), an SGML-based language, in much the same way as with HTML. This means that the code used for typical OpenSocial app functions is much shorter, with one such example being &lt;os: PeopleSelector&gt; which is used to select contacts.</p>
<p>So what is the benefit for you as a user other than having access to a standardized interface? Firstly, developers and third-party users have access to these standards, which in turn reduces the amount of time required and the number of potential sources of error. This results in more resources being available to continue developing the app.</p>
<p>The latest version of OpenSocial now also includes what is known as <em>data pipelining,</em> which in principle is a simplified and standardized request within the app based on the user’s social graphs. This was also possible in the past, but only by using wieldy JavaScript routines.  User privacy is not affected by the pipeline with users retaining their previous privacy settings.</p>
<p>The switch to OpenSocial 0.9 is due to take place in March 2010. Please visit the <a href="http://www.opensocial.org/">OpenSocial Foundation</a> website or the <a href="https://www.xing.com/net/pri95bc26x/opensocial">XING OpenSocial Group</a> for more information.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xing.com/2010/03/opensocial-xing-updates-from-version-0-8-to-0-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New recruitment tools on XING – this time: Firebug</title>
		<link>http://blog.xing.com/2010/01/new-recruitment-tools-on-xing-%e2%80%93-this-time-firebug/</link>
		<comments>http://blog.xing.com/2010/01/new-recruitment-tools-on-xing-%e2%80%93-this-time-firebug/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 13:59:32 +0000</pubDate>
		<dc:creator>Christopher Blum</dc:creator>
				<category><![CDATA[Tech Blog]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Jobs]]></category>

		<guid isPermaLink="false">http://blog.xing.com/?p=8962</guid>
		<description><![CDATA[<p>A few of you might have already <a href="http://img519.yfrog.com/i/m79.gif/">noticed</a>: Surfing with <a href="http://getfirebug.com/">Firebug</a>, the Firefox extension particularly useful for developers, reveals our ever-innovative path when it comes to getting new talents on board.  The moment you open up the Firebug &#8230;</p>]]></description>
				<content:encoded><![CDATA[<p>A few of you might have already <a href="http://img519.yfrog.com/i/m79.gif/">noticed</a>: Surfing with <a href="http://getfirebug.com/">Firebug</a>, the Firefox extension particularly useful for developers, reveals our ever-innovative path when it comes to getting new talents on board.  The moment you open up the Firebug console, our screen welcomes you (click to enlarge):</p>
<p><a href="http://blog.xing.com/wp-content/uploads/2010/01/XING_firebug_01.png"><img class="alignnone size-full wp-image-8967" title="XING_firebug_01_small" src="http://blog.xing.com/wp-content/uploads/2010/01/XING_firebug_01_small.png" alt="" width="500" height="74" /></a></p>
<p><span id="more-8962"></span>You can then see all our positions (and the Boolean value for their awesomeness) by inspecting the <em>Object</em>:</p>
<p><a href="http://blog.xing.com/wp-content/uploads/2010/01/XING_firebug_02.png"><img class="alignnone size-full wp-image-8965" title="XING_firebug_02_small" src="http://blog.xing.com/wp-content/uploads/2010/01/XING_firebug_02_small.png" alt="" width="500" height="99" /></a></p>
<p>Feel free to check the source code <a href="http://www.xing.com/js/xing/fun/we_are_hiring.js">here</a>.</p>
<p>If your individual coding awesomeness also gets a 1 – apply now! Of course, there’s still the conventional way as well – the <a href="http://corporate.xing.com/english/company/careers-at-xing/">careers at XING</a> website. This article &#8211; and many more can also be found in the <a href="http://devblog.xing.com/">XING Devblog</a>!</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>DE</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:1; 	mso-generic-font-family:roman; 	mso-font-format:other; 	mso-font-pitch:variable; 	mso-font-signature:0 0 0 0 0 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-fareast-language:EN-US;} span.objecttitle 	{mso-style-name:objecttitle; 	mso-style-unhide:no;} span.objectpropvalue 	{mso-style-name:objectpropvalue; 	mso-style-unhide:no;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt; 	mso-ascii-font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-hansi-font-family:Calibri;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 70.85pt 2.0cm 70.85pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Normale Tabelle"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} --> <!--[endif]--></p>
<p class="MsoNormal"><span lang="EN-US">You can then see all our positions (and the Boolean value for their awesomeness) by inspecting the <span class="objecttitle"><em>Object</em>:</span> <span class="objectpropvalue"> </span></span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xing.com/2010/01/new-recruitment-tools-on-xing-%e2%80%93-this-time-firebug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Developers Blog Launched</title>
		<link>http://blog.xing.com/2010/01/new-developers-blog-launched/</link>
		<comments>http://blog.xing.com/2010/01/new-developers-blog-launched/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 16:25:18 +0000</pubDate>
		<dc:creator>Alexander Greim</dc:creator>
				<category><![CDATA[Tech Blog]]></category>

		<guid isPermaLink="false">http://blog.xing.com/?p=8766</guid>
		<description><![CDATA[<p><a href="http://devblog.xing.com"></a></p>
<p>Hooray: it&#8217;s been a long time in the making, but today we&#8217;re finally launching our XING Developers Blog, where you can keep in touch with our developers and all the stuff they&#8217;re up to, including but not limited to working &#8230;</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://devblog.xing.com"><img class="alignright size-full wp-image-8771" src="http://blog.xing.com/wp-content/uploads/2010/01/devblog-e1263819680479.png" alt="XING Devblog" width="200" height="106" /></a></p>
<p>Hooray: it&#8217;s been a long time in the making, but today we&#8217;re finally launching our XING Developers Blog, where you can keep in touch with our developers and all the stuff they&#8217;re up to, including but not limited to working with languages and platforms like Ruby on Rails, Perl, Java or Javascript.</p>
<p>Head over to <a href="http://devblog.xing.com">devblog.xing.com</a> or subscribe to the <a href="http://devblog.xing.com/feed/">RSS feed</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xing.com/2010/01/new-developers-blog-launched/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Twitter as a monitoring tool</title>
		<link>http://blog.xing.com/2010/01/using-twitter-as-a-monitoring-tool/</link>
		<comments>http://blog.xing.com/2010/01/using-twitter-as-a-monitoring-tool/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 09:47:00 +0000</pubDate>
		<dc:creator>Dr. Johannes Mainusch</dc:creator>
				<category><![CDATA[Tech Blog]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://blog.xing.com/?p=8619</guid>
		<description><![CDATA[<p>I love monitoring. This is no news to all my coworkers at XING, as I have a reputation in the company for being the guy who even graphed his daughters diaper weights… anyway, here’s one of my favorite graphing applications: &#8230;</p>]]></description>
				<content:encoded><![CDATA[<div id="attachment_8621" class="wp-caption alignright" style="width: 310px"><a href="http://blog.xing.com/wp-content/uploads/2010/01/Twitter_Monitoring.png"><img class="size-medium wp-image-8621" title="Twitter_Monitoring" src="http://blog.xing.com/wp-content/uploads/2010/01/Twitter_Monitoring-300x183.png" alt="" width="300" height="183" /></a><p class="wp-caption-text">These peaks tell us something...</p></div>
<p>I love monitoring. This is no news to all my coworkers at XING, as I have a reputation in the company for being the guy who even graphed his daughters diaper weights… anyway, here’s one of my favorite graphing applications: Monitoring our site via user comments on twitter.</p>
<p>Last Thursday we had a really short network glitch around 2pm due to some necessary ad hoc maintenance. Parts of the site were down for roughly ten minutes. As I said, only certain parts of our platform was down. But still, our users noticed it (of course!) and twittered about it (see the image on the right).</p>
<p>For several months I have been playing around with a graph showing the number of XING tweets per hour – normally around 30 (in case you&#8217;re bad at math, that’s one #XING tweet every two minutes), but whenever it peaks, that’s an indicator of something, well, irregular. Just have a look at 2pm on Thursday: the network switch, I mean glitch&#8230;</p>
<p>Now, I only have to find a way to plug the graph into a completely automated alarm of some sort&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xing.com/2010/01/using-twitter-as-a-monitoring-tool/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Making sure it still works: Regression Testing at XING</title>
		<link>http://blog.xing.com/2009/12/making-sure-it-still-works-regression-testing-at-xing/</link>
		<comments>http://blog.xing.com/2009/12/making-sure-it-still-works-regression-testing-at-xing/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 15:51:53 +0000</pubDate>
		<dc:creator>Tobias Geyer</dc:creator>
				<category><![CDATA[Tech Blog]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[Quality assurance]]></category>
		<category><![CDATA[regression testing]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://blog.xing.com/?p=8189</guid>
		<description><![CDATA[<p>Agile development processes like SCRUM (confer <a href="http://blog.xing.com/2009/05/scrum-xing-a-case-study/">Scrum @ XING &#8211; a case study</a>) raise the bar for quality assurance professionals. The biggest challenge we need to overcome is getting used to release cycles of two to four weeks.</p>
<p>Even &#8230;</p>]]></description>
				<content:encoded><![CDATA[<p>Agile development processes like SCRUM (confer <a href="http://blog.xing.com/2009/05/scrum-xing-a-case-study/">Scrum @ XING &#8211; a case study</a>) raise the bar for quality assurance professionals. The biggest challenge we need to overcome is getting used to release cycles of two to four weeks.</p>
<p>Even in teams that are running smoothly there&#8217;s often not enough time besides the regular quality assurance (QA) of newly developed features to execute manual regression tests. Every new line of code that&#8217;s added to a program has the potential to break existing functionality. Therefore it&#8217;s not enough to test new functionality – the existing one also needs to be tested. This is done by re-executing test cases from previous development cycles and called &#8220;regression testing&#8221;. Of course engineers write automated tests themselves that should prevent existing code from breaking but those tend to be on a unit or component level. System tests that use the frontend to enter data and verify all layers take a lot of time to run and would hinder engineers in their daily development work.<br />
The usual solution for this problem consists of testers creating automated regression tests.<span id="more-8189"></span></p>
<h3>The tools for regression testing</h3>
<p>The QA department at XING has developed a framework, which is used by testers inside project teams to create regression tests. This framework is based on TestNG and Selenium.</p>
<p><a href="http://testng.org/">TestNG</a> is a JUnit-like test framework that (besides the usual unit test capabilities) makes it possible to assign test methods to groups.  A test method that&#8217;s testing a search functionality in a backend interface will be assigned to &#8220;search&#8221; and &#8220;backend&#8221;. Since the test method is run in short acceptance tests it will also be assigned to &#8220;acceptance&#8221;. These groups can be used to create different suites, filtering all test methods for certain groups. That way we&#8217;re able to run short acceptance tests (filtering for group &#8220;acceptance&#8221;) and full-blown system tests (no group filtering) from the same test code. It&#8217;s also possible to run a test that focuses on parts of the system, e.g. the search.</p>
<p><a href="http://seleniumhq.org/">Selenium</a> is a test engine for most common browsers. While a lot of the web testing frameworks operate on a HTTP level and verify against the HTML code of a website, Selenium acts like a real user inside the browser. This is what actually allows us to test websites like XING with a high amount of JavaScript and AJAX.</p>
<p>We have now extended these tools quite heavily, although they were very powerful in the first place. The extensions start with improved logging mechanisms (results are written both in a database and our wiki) and don&#8217;t stop with default methods for the core functionalities of the XING platform (e.g. login and logout).</p>
<h3>Automated test cases and their advantages</h3>
<p>A usual automated test case looks like this:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;">@Description<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;TC-UC5-01-01<span style="color: #000099; font-weight: bold;">\n</span>search for string that is not available (neither company nor have)&quot;</span><span style="color: #009900;">&#41;</span>
@Test<span style="color: #009900;">&#40;</span>groups <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">&quot;frontend&quot;</span>, <span style="color: #0000ff;">&quot;search&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> TC_UC5_01_01<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #003399;">String</span> keyword <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;abcdefghijklmnop&quot;</span><span style="color: #339933;">;</span>
login<span style="color: #009900;">&#40;</span>TestUser.<span style="color: #006633;">dont_care</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
openCompanyPages<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
searchCompanyByKeyword<span style="color: #009900;">&#40;</span>keyword<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
verifyCompanyCount<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
verifyCompanySearchNoResult<span style="color: #009900;">&#40;</span>keyword<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>This has a couple of advantages:</p>
<ol>
<li>The first thing to notice in this example is the speaking names of the methods. These shall ensure that even people without a deep technical knowledge understand what the test is about. This is especially helpful in case of a failing test.</li>
<li>Another advantage of these methods is the separation of test workflow and actual HTML frontend. Maintenance efforts are greatly reduced this way, since frontend changes lead to a change in a single isolation method instead of many changes in multiple test workflows (see below)</li>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> openCompanyPages<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">IOException</span> <span style="color: #009900;">&#123;</span>
<span style="color: #003399;">String</span> locator <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;//*[@href='/companies/']&quot;</span><span style="color: #339933;">;</span>
waitForElementIsPresent<span style="color: #009900;">&#40;</span>locator, Timeout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
clickAndWait<span style="color: #009900;">&#40;</span>locator, Timeout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<li>The third advantage can be found while writing the automated tests. Since the workflows use the isolation methods, they can be created without having to use the actual frontend of the application. As soon as the frontend is available the isolation methods need to be implemented and the tests can be run.</li>
</ol>
<p>In some sprints we managed to have the automated tests up and running before the manual testing finished.</p>
<p>The automated regression tests created by the project teams are executed on a daily basis in addition to the tests written by the engineers, to achieve a maximum of resistance against regression defects.</p>
<h3>A recent example: Company profiles</h3>
<p>Regression tests tend to grow over the lifespan of a project. In the past half year we&#8217;ve been automating more than 500 test cases that form part of the &#8220;Company Profiles&#8221; project. This is equivalent to about 60% of the specified manual test cases and takes about two hours to execute. The tests written by engineers, by comparison, consist of 330 test cases and take 83 seconds to run.</p>
<p><a rel="attachment wp-att-8195" href="http://blog.xing.com/2009/12/making-sure-it-still-works-regression-testing-at-xing/qa_testresults/"><img class="alignnone size-full wp-image-8195" title="QA_Testresults" src="http://blog.xing.com/wp-content/uploads/2009/12/QA_Testresults.png" alt="QA_Testresults" width="500" height="212" /></a></p>
<p>As you can see by the spikes in this chart, the regression tests found some errors which were then successfully fixed before the release. Most of the &#8220;noise&#8221; coming from errors and failures persistent throughout the whole chart can be attributed to an unstable server that the tests were executed on. This noise remains constant even as the amount of test cases increases, keeping the investigation efforts also at a constant level.<br />
Using the powerful logging mechanisms we have in place it&#8217;s easy to determine which tests do more harm than good. These will be made more robust and if that&#8217;s not possible they will be deactivated.</p>
<p>Having an extensive suite of automated regression tests in place gives QA professionals both freedom and security: freedom to concentrate on the newly developed features and security that the old features are still working as intended. Using the techniques mentioned above, the costs for maintenance are lower than the costs for manual regression tests and a lot lower than the costs for bug fixes.</p>
<p>One week after the GoLive of the second version of Company Profiles we can see that the effort involved in regression test automation and manual testing was well worth it. There was a total of three reported bugs, all of them minor and fixed within a week. Compared to 624 person days of development effort, three bugs really are negligible.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xing.com/2009/12/making-sure-it-still-works-regression-testing-at-xing/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>XING: Uptimes, Downtimes – and what we do</title>
		<link>http://blog.xing.com/2009/11/xing-uptimes-downtimes-%e2%80%93-and-what-we-do/</link>
		<comments>http://blog.xing.com/2009/11/xing-uptimes-downtimes-%e2%80%93-and-what-we-do/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 15:16:27 +0000</pubDate>
		<dc:creator>Dr. Johannes Mainusch</dc:creator>
				<category><![CDATA[Tech Blog]]></category>

		<guid isPermaLink="false">http://blog.xing.com/?p=8029</guid>
		<description><![CDATA[<p>It happens pretty rarely, but sometimes our platform is affected too by operational faults and malfunctions. Of course we try to keep these hiccups to an absolute minimum. Our content is stored and supplied from two different data processing centers &#8230;</p>]]></description>
				<content:encoded><![CDATA[<div id="attachment_8032" class="wp-caption alignright" style="width: 310px"><a href="http://blog.xing.com/wp-content/uploads/2009/11/XING-uptime-average.png"><img class="size-medium wp-image-8032" title="XING-uptime-average" src="http://blog.xing.com/wp-content/uploads/2009/11/XING-uptime-average-300x225.png" alt="XING-uptime-average" width="300" height="225" /></a><p class="wp-caption-text">XING is fully available 99.85% of the time.</p></div>
<p>It happens pretty rarely, but sometimes our platform is affected too by operational faults and malfunctions. Of course we try to keep these hiccups to an absolute minimum. Our content is stored and supplied from two different data processing centers for instance, which means that our users can be re-routed from one to the other dependently on demand and performance.  All systems have a failover cluster operation guaranteeing high performance and stability, as well as having sufficient reserves to cope better with peak loads. Making sure our platform is both available and fast is our number one priority.</p>
<p>Sometimes though, like last Wednesday&#8217;s morning for instance, we do encounter unforeseen problems. There isn’t an IT system anywhere that is 100% fault-tolerant – there will always be systematic <em>single points of failure</em> that will send part or all of the entire system crashing with them. In this latest case a defect network component corrupted a mechanism, which was specifically required to safeguard against failure (<em>Spanning Tree Protocol</em>). We will be analyzing and intercepting this error to make sure it doesn’t crop up again.<span id="more-8029"></span></p>
<p>A look at the figures for the past twelve months shows that we are very close to our high targets, an average uptime ratio of 99.95%. In other words, this means that XING should not be offline for more than four hours and 2 minutes over the entire year. Or to put it yet another way: This is equivalent to around 44 seconds a day. Crashes affecting just certain parts of the platform have also been included in this statistic.</p>
<p>Here are the availability figures for the past twelve months:</p>
<table style="border: 1px dotted #e97f02;border-spacing: 10px; margin-bottom: 10px;" border="0">
<tbody>
<tr>
<td style="color: #e97f02;">Month</td>
<td style="color: #e97f02;">Availability</td>
</tr>
<tr>
<td>Nov 08</td>
<td>99,88%</td>
</tr>
<tr>
<td>Dez 08</td>
<td>99,75%</td>
</tr>
<tr>
<td>Jan 09</td>
<td>99,60%</td>
</tr>
<tr>
<td>Feb 09</td>
<td>99,97%</td>
</tr>
<tr>
<td>Mrz 09</td>
<td>99,80%</td>
</tr>
<tr>
<td>Apr 09</td>
<td>99,93%</td>
</tr>
<tr>
<td>Mai 09</td>
<td>99,87%</td>
</tr>
<tr>
<td>Jun 09</td>
<td>99,96%</td>
</tr>
<tr>
<td>Jul 09</td>
<td>99,95%</td>
</tr>
<tr>
<td>Aug 09</td>
<td>99,83%</td>
</tr>
<tr>
<td>Sep 09</td>
<td>99,76%</td>
</tr>
<tr>
<td>Oct 09</td>
<td>99,91%</td>
</tr>
<tr>
<td>Average</td>
<td>99,85%</td>
</tr>
</tbody>
</table>
<p>To form a meaningful graph from these figures the vertical axis needs to be scaled up dramatically in order to see any fluctuations at all:</p>
<div id="attachment_8031" class="wp-caption alignnone" style="width: 510px"><a href="http://blog.xing.com/wp-content/uploads/2009/11/XING-uptime-12months.png"><img class="size-full wp-image-8031" title="XING-uptime-12months" src="http://blog.xing.com/wp-content/uploads/2009/11/XING-uptime-12months.png" alt="XING-uptime-12months" width="500" height="375" /></a><p class="wp-caption-text">Chart: XING availability during the last twelve months.</p></div>
<p>Despite this record, every minute of downtime is a blow to us – as we know how important it is that our members can send messages, make contacts and network at any time. That’s why we’ll keep doing everything in our power to maximize stability and availability of our platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xing.com/2009/11/xing-uptimes-downtimes-%e2%80%93-and-what-we-do/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Agile development with Kanban: XING reveals all at the w-jax’09 in Munich</title>
		<link>http://blog.xing.com/2009/11/agile-development-with-kanban-xing-reveals-all-at-the-w-jax09-in-munich/</link>
		<comments>http://blog.xing.com/2009/11/agile-development-with-kanban-xing-reveals-all-at-the-w-jax09-in-munich/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 16:46:43 +0000</pubDate>
		<dc:creator>Susanne Reppin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Tech Blog]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://blog.xing.com/?p=7983</guid>
		<description><![CDATA[<p>Just how agile is XING? How agilely do we feel? At this year’s <a href="http://it-republik.de/jaxenter/wjax09/">w-jax 09</a>, <a href="https://www.xing.com/profile/Johannes_Mainusch">Johannes Mainusch</a> and myself talked openly about the XING culture, what kind of people we are, what we’re aiming for and what’s important to &#8230;</p>]]></description>
				<content:encoded><![CDATA[<div id="attachment_7912" class="wp-caption alignright" style="width: 310px"><a href="http://blog.xing.com/wp-content/uploads/2009/11/XING_WJAX09_Vortrag.JPG"><img class="size-medium wp-image-7912 " title="XING_WJAX09_Vortrag" src="http://blog.xing.com/wp-content/uploads/2009/11/XING_WJAX09_Vortrag-300x225.jpg" alt=" Susanne Reppin (left) and Dr. Johannes Mainusch on the wjax stage." width="300" height="225" /></a><p class="wp-caption-text"> Susanne Reppin (left) and Dr. Johannes Mainusch on the wjax stage.</p></div>
<p>Just how agile is XING? How agilely do we feel? At this year’s <a href="http://it-republik.de/jaxenter/wjax09/">w-jax 09</a>, <a href="https://www.xing.com/profile/Johannes_Mainusch">Johannes Mainusch</a> and myself talked openly about the XING culture, what kind of people we are, what we’re aiming for and what’s important to us. XING releases weekly updates on the platform, innovating therefore all the time during ongoing operation of the platform. We don’t want to have to put a halt to anything, and not when it comes to agile software development either.</p>
<p>XING already develops projects effectively using Scrum (see also <a href="http://blog.xing.com/2009/05/einfuhrung-von-scrum-bei-xing-%e2%80%93-ein-erfahrungsbericht/">Scrum @ XING – a case study</a>). Alongside this, we’ve been working for nine months to put Kanban in place for one our maintenance teams – as both a methodology and philosophy. The initial idea for this came from Ralf Wirdemann, who’s an agile coach. Selecting Kanban fits in with our belief in agile and lean software development and to drive this forward in the future.<span id="more-7983"></span></p>
<p>People took a great interest in our <a href="http://it-republik.de/jaxenter/wjax09/sessions?tid=1289">speech</a> (here&#8217;s the <a href="http://www.slideshare.net/XING_com/agil-bleiben-motorhaube-auf-bei-xing">slideshare</a> and our <a href="http://blog.xing.com/wp-content/uploads/2009/11/w-jax09_XING_AG.pdf">PDF with notes</a>, both in German). We explained why Scrum is so well-suited to our project work, as it protects the team from disruptions during the sprints – but that precisely this protection is contra-productive when applied to a team operating in close interplay with live operation of the platform. Kanban is considerably better suited to integrating disruptions – which bugs are after all – in an ad hoc way, and is therefore ideal for a maintenance team.</p>
<p>One of the major success factors here is of course the team itself. All team members were already experienced in agile development and wanted to learn more in a professional context. After about six weeks we were all surprised at how much more effectively and fast we could now go about our daily work.</p>
<p>Please note: The full talk held at the w-jax 2009 in Munich will be published in the next few weeks by w-jax.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xing.com/2009/11/agile-development-with-kanban-xing-reveals-all-at-the-w-jax09-in-munich/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>False alarm with outdated virus scanner: An update will help</title>
		<link>http://blog.xing.com/2009/11/false-alarm-with-outdated-virus-scanner-an-update-will-help/</link>
		<comments>http://blog.xing.com/2009/11/false-alarm-with-outdated-virus-scanner-an-update-will-help/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 09:24:02 +0000</pubDate>
		<dc:creator>Christian Burtchen</dc:creator>
				<category><![CDATA[Tech Blog]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[virus alarm]]></category>

		<guid isPermaLink="false">http://blog.xing.com/?p=7969</guid>
		<description><![CDATA[<p>Just to make it perfectly clear from the outset: There is no virus on the XING platform, nor is there any code that might be damaging to your computer. Under certain – very specific – circumstances, you might find though &#8230;</p>]]></description>
				<content:encoded><![CDATA[<p>Just to make it perfectly clear from the outset: There is no virus on the XING platform, nor is there any code that might be damaging to your computer. Under certain – very specific – circumstances, you might find though that your virus scanner sets off a false alarm if it hasn’t been updated for a long time.</p>
<p>The reason: A module we have developed ourselves that serves to load files in a browser once the page itself has already been loaded. This is useful because it means we don’t have to send all functionalities and graphics that might possibly be used through the network at once for every page accessed, which saves you a lot of time waiting for pages to load. If you then decide to use a feature or function that isn’t yet loaded – such as the photo upload in your profile, this small additional feature can then be loaded separately.</p>
<p>The browser feature that our module accesses posed a security loopholes in earlier versions of Internet Explorer. You can read more about this here: <a href="http://www.securiteam.com/windowsntfocus/5MP0G15RFM.html">Microsoft Internet Explorer onreadystatechange Memory Corruption Vulnerability</a>.</p>
<p>The good news is that Microsoft solved this problem in their own browser some time ago. (It might be worth you visiting <a href="http://windowsupdate.com/">windowsupdate.com</a> to make sure your operating system and Internet Explorer are both fully up-to-date.)</p>
<p>If you use an outdated version of the virus scanner F-Secure though, which has not received an update since the removal of the security loophole in Internet Explorer, it will show you a false alarm if you use the Microsoft browser.<span id="more-7969"></span></p>
<p><a href="https://www.xing.com/profile/Bjoern_Kaiser6">Björn Kaiser</a>, one of our software experts, had this to say about the matter: “We did everything in our power here to make sure we avoided any major difficulties here. Even though it wasn’t a security breach at all, we still didn’t want to unsettle our users with nonsensical warning messages from a virus scanner that wasn’t updated. He spent three days trying to pinpoint the exact source of the problem, combing through 60,000 lines of Javascript code to locate the one line that triggers the warning message. One harmless line, lots of work! Thanks to my colleague <a href="https://www.xing.com/profile/Ingo_Chao">Ingo</a> as well for all the great debugging he did …”</p>
<p>Doing without onreadystatechange was out of the question. This would have meant that certain modules wouldn’t work at all anymore. The solution our developers came up with was relatively simple in comparison: Thanks to</p>
<p>var handler = ["onr", "eadystatec", "hange"].join(&#8220;&#8221;);</p>
<p>the virus scanner no longer recognizes the supposedly bad “onreadystatechange“. The string function join enables the components to be brought together and implemented though – without triggering the false alarm.</p>
<p>There was of course no danger to your data or computer at any point in time here. We contacted the manufacturer too to make sure that this was in fact a case of a false alarm.</p>
<p>Having said this you should make it a top priority, in your own interests, to update your virus scanner to the latest standards. At the same time we’ll continue to do everything to ensure the most secure networking possible on our platform, without any unnecessary warning messages.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xing.com/2009/11/false-alarm-with-outdated-virus-scanner-an-update-will-help/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making errors look good</title>
		<link>http://blog.xing.com/2009/10/making-errors-look-good/</link>
		<comments>http://blog.xing.com/2009/10/making-errors-look-good/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 15:55:19 +0000</pubDate>
		<dc:creator>Timothy Payton</dc:creator>
				<category><![CDATA[Tech Blog]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DOM complexity]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://blog.xing.com/?p=7553</guid>
		<description><![CDATA[<p>There are many html forms on XING – when you sign up, when you write a message, or when you discuss in a group. We do most of our form validations on the server side. This allows us to apply complex &#8230;</p>]]></description>
				<content:encoded><![CDATA[<p>There are many html forms on XING – when you sign up, when you write a message, or when you discuss in a group. We do most of our form validations on the server side. This allows us to apply complex validations, prevents code duplication, and apply security checks.</p>
<p>This works well – you define the requirements for the specific field (such as &lt;input&gt;) and Rails returns the page with an error message, also highlighting the corresponding field in red. Sounds good, but that’s actually where the problem is. Rails surrounds the field with a &lt;div&gt; that is styled via CSS.<span id="more-7553"></span></p>
<p>This additional &lt;div&gt; <em>may</em> lead to CSS problems especially in pixel-precise layouts such as the XING html forms, it <em>may</em> break the HTML structure &#8211; and it <em>will</em> add completely unneeded DOM complexity.</p>
<h3>Changing how Rails handles fields with errors</h3>
<p>The technical details of how we solved it follow. We were not the first ones to encounter this problem, inquirylabs also talked about (and solved) it in their blog post <a href="http://blog.inquirylabs.com/2006/04/13/highlight-background-of-fields-with-errors/">Highlight background of fields with errors</a>. The basic idea is rather simple: We rewrote the method Rails uses to handle form field errors to create cleaner html. The best solution we can think of is to add a class directly to the error elements, and that class has styling to border the error fields in red. No added DOM elements, no more broken structure, just clean code.</p>
<p>Here is the default rails html output</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="html" style="font-family:monospace;">&lt;div class=&quot;fieldWithErrors&quot;&gt;
&lt;input /&gt;Test&lt;/div&gt;</pre></td></tr></table></div>

<p>Here is what our changes output</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="html" style="font-family:monospace;">&lt;input class=&quot;input-error&quot; /&gt;Test</pre></td></tr></table></div>

<p>Luckily, Rails already provides a simple entry point for cleaning things up. In active_record_helper.rb in the actionpack gem, there is a class variable defined @@field_error_proc, which can be redefined to apply custom error handling on the html input fields. We’ve uploaded the code to github: <a href="http://github.com/xing/classy_field_errors">http://github.com/xing/classy_field_errors</a>.</p>
<p>It&#8217;s a plugin, so just:</p>
<ul>
<li>script/plugin install git://github.com/xing/classy_field_errors.git</li>
<li>Put the css contained in field_error_proc.css in your base css file</li>
</ul>
<p>The method we call inside the block, does exactly what we want. You pass it an element and a css class. It then applies that css class to input, textarea, or select elements, either adding the class to the existing classes or adding a class attribute to the element.</p>
<p>The method itself just calls the HtmlElement class method add_css_class which does what you’d think it does: It instantiates an HtmlElement object, <em>adds the class</em> passed into the elements and returns the changed html_element (which is really a string).</p>
<p>So, with the added class, we can do the same error highlighting, but without any added DOM complexity and with the intended semantic separation of HTML for content and CSS for styling.</p>
<p>Our solution produces the same basic results as inquirylabs, but also took care of 2 edge cases:</p>
<ul>
<li> it only adds the CSS class if the element doesn&#8217;t have it already, so in the rare case that an input field has two errors, the code remains clean</li>
<li> the code also works with self-closing &lt;input/&gt; tags</li>
</ul>
<p>Thanks to Ladislav Martincik, Sebastian Roebke, Mark Schuette and Hendrik Mans who all contributed to making this code highly efficient and clean.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xing.com/2009/10/making-errors-look-good/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
