<?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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>XING Devblog</title>
	
	<link>http://devblog.xing.com</link>
	<description>Programming tidbits and other insights from the developers at XING.com</description>
	<lastBuildDate>Tue, 04 Jun 2013 09:55:34 +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/XingDevblog" /><feedburner:info uri="xingdevblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>App Builder Spotlight: Matthias Hönig</title>
		<link>http://feedproxy.google.com/~r/XingDevblog/~3/vhJ0kh3UATs/</link>
		<comments>http://devblog.xing.com/api-2/app-builder-spotlight-matthias-honig/#comments</comments>
		<pubDate>Tue, 04 Jun 2013 09:52:22 +0000</pubDate>
		<dc:creator>albert.heim</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[app builder spotlight]]></category>
		<category><![CDATA[app showcase]]></category>
		<category><![CDATA[applications]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[spotlight]]></category>

		<guid isPermaLink="false">http://devblog.xing.com/?p=3391</guid>
		<description><![CDATA[This is the latest in our App Builder Spotlight series for dev.xing.com, where we ask developers the same set of questions to learn a bit more about them and their respective apps. If you’d like to participate, please contact us at api-support@xing.com. Name: Matthias Hönig App: Acando CRM Connector for XING What&#8217;s your XING application / integration all about, and what&#160; &#160;<a href="http://devblog.xing.com/api-2/app-builder-spotlight-matthias-honig/" class="continue">Continue Reading...</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://devblog.xing.com/wp-content/uploads/appbuilderspotlight_mhoenig.png"><img class="aligncenter size-full wp-image-3392" alt="App Builder Spotlight: Matthias Hönig" src="http://devblog.xing.com/wp-content/uploads/appbuilderspotlight_mhoenig.png" width="690" height="270" /></a></p>
<p><i>This is the latest in our App Builder Spotlight series for dev.xing.com, where we ask developer</i><i>s</i><i> the same set of questions to learn a bit more about the</i><i>m</i><i> and their respective apps. </i><i>If you’d like to participate, please contact us at <a href="mailto:api-support@xing.com">api-support@xing.com</a>.</i></p>
<p><span id="more-3391"></span></p>
<ul>
<li>Name: <a href="https://www.xing.com/profile/Matthias_Hoenig?key=0.0" target="_blank">Matthias Hönig</a></li>
<li>App: <a href="http://www.crm-connector.com/" target="_blank">Acando CRM Connector for XING</a></li>
</ul>
<p><img title="More..." alt="" src="https://devblog.xing.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" /></p>
<h3>What&#8217;s your XING application / integration all about, and what do you want to accomplish with it?</h3>
<div>
<p>The main idea is data enrichment of CRM contacts. Acando CRM Connector for XING finally integrates Microsoft Dynamics CRM into XING. By enriching CRM contacts with XING profile data it significantly increases the efficiency of sales, recruiting and account management.</p>
</div>
<div>
<p>Our idea was to finally connect these two very important tools every sales manager and recruiter is working with every day.</p>
</div>
<h3>What were your expectations when you started developing with the XING API?</h3>
<p>We wanted to help customers working with Dynamics CRM to keep their information up to date at all times. Data maintenance is always an issue when it comes to acceptance of CRM systems. This is something that can be improved with the Acando CRM Connector for XING. The idea was to build a smart application that enables sales and recruiting teams to benefit even more from the tools they are already using &#8211; and initial feedback shows we were right.</p>
<h3>What tips would you give to someone who is just starting out developing apps with the XING API?</h3>
<div>
<p>Find a mature framework for the technical platform you are planning to use that implements the OAuth protocol.</p>
</div>
<h3>Why did you choose to develop for the XING platform?</h3>
<div>
<p>XING is a widespread social network with a focus on business contacts, and definitely the main network on the German market. Many sales people use XING for their daily business. Having a strong focus on Microsoft Dynamics CRM, which is being used for contact management by the same target group, it was a logical consequence for us to connect these two platforms.</p>
</div>
<h3>What do you like most about the XING API?</h3>
<div>
<p>It is slim and fast! Furthermore, it is easy to understand and well documented.</p>
</div>
<h3>What do you think is missing or should be improved to make the XING API more attractive?</h3>
<div>
<p>A search function would be a great improvement as it would offer lots of opportunities to grow the XING network of the CRM users.</p>
</div>
</div>
<h3>How active are you on XING and which services do you use most often?</h3>
<div>
<p>Very active. We use XING and Acando CRM Connector for XING for contact management and research. We use XING a lot for recruiting purposes. As a company, we also have a Company Profile and provide our followers with news, events and current job vacancies.</p>
<img src="http://feeds.feedburner.com/~r/XingDevblog/~4/vhJ0kh3UATs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://devblog.xing.com/api-2/app-builder-spotlight-matthias-honig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://devblog.xing.com/api-2/app-builder-spotlight-matthias-honig/</feedburner:origLink></item>
		<item>
		<title>App Builder Spotlight: Marvin</title>
		<link>http://feedproxy.google.com/~r/XingDevblog/~3/ylFgRIRShYQ/</link>
		<comments>http://devblog.xing.com/api-2/app-builder-spotlight-marvin/#comments</comments>
		<pubDate>Mon, 06 May 2013 09:59:27 +0000</pubDate>
		<dc:creator>magith.noohukhan</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[app showcase]]></category>
		<category><![CDATA[applications]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[developer portal]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[spotlight]]></category>

		<guid isPermaLink="false">http://devblog.xing.com/?p=3292</guid>
		<description><![CDATA[Passionate about developing apps? Want to be recognized among the XING community? Want your app to reach millions of people? Want to be famous? If you answered yes to at least one of these questions, you’ve definitely come to the right place! We came up with a new idea where developers now have a chance&#160; &#160;<a href="http://devblog.xing.com/api-2/app-builder-spotlight-marvin/" class="continue">Continue Reading...</a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-3310" alt="robotRock_pt_03" src="http://devblog.xing.com/wp-content/uploads/robotRock_pt_03.png" width="690" height="270" /></p>
<p style="text-align: center;"><strong>Passionate about developing apps?</strong><br />
<strong>Want to be recognized among the XING community?</strong><br />
<strong>Want your app to reach millions of people?</strong><br />
<strong>Want to be famous?</strong><strong></strong></p>
<p>If you answered yes to at least one of these questions, you’ve definitely come to the right place! We came up with a new idea where developers now have a chance to introduce themselves and their app in this blog. To get the ball rolling, we decided to ask <a href="http://devblog.xing.com/everything-else/winner-xing-prize-draw/">Marvin</a> some questions about his experience and from now on Marvin will use his awesome-app-detecting spotlight to find the super developer. Here are his answers for the questions we asked.</p>
<p><span id="more-3292"></span></p>
<h3>What&#8217;s your XING application / integration all about, and what do you want to accomplish with it?</h3>
<p>Building up an online professional network around you is awesome, but what goes beyond that is the opportunity to meet this network via offline events. I decided to make use of the geo-locations call in my app, which helps you find out which of your contacts are nearby. Once you’ve found out who is nearby, you can send that person a one-click invitation with a short message to let them know you’d like to meet up with them. You can also add this person to your contacts with a single click.</p>
<h3>What were your expectations when you started developing with the XING API?</h3>
<p>Like every other developer’s wish, I expected clear and simple documentation about how to get started and insights into every API call, which narrows down to my direct needs, and the XING API gives me just that. Whenever I had any technical doubts or questions, the support team was always on hand to clarify things. I also hoped to have an SDK, but that was missing so I had to dig around in the dirt and start from the search. But isn’t that the best way to do it anyway?</p>
<h3>What tips would you give to someone who is just starting out developing apps with the XING API?</h3>
<p><abbr title="Read The Fucking Manual">RTFM</abbr>. For those who don&#8217;t know what that means, it stands for Read The Flipping Manual. Everything you need is in there. It tells you how to get  <a href="https://dev.xing.com/docs/examples">started</a>, it gives you the <a href="https://dev.xing.com/docs">core concept</a>, and it shows an <a href="https://dev.xing.com/docs/resources">overview</a> of all API calls and <a href="https://dev.xing.com/overview">much more</a>. That should help every developer to get up and running. On top of that, there are lots of human beings helping each other, sharing their knowledge and expertise, and trying to find answers in our community. Why don&#8217;t you join the <a href="https://www.xing.com/net/prif3b691x/xingdevs/">conversation</a> too? The API <a href="https://dev.xing.com/docs/changelog">changelog</a> is a great way to keep an eye on the changes and new features they bring to the API.</p>
<h3>Why did you choose to develop for the XING platform?</h3>
<p>My soul is German engineered and I felt the spirit at XING, where I really could see what is happening now and what will come in the future. And XING is a well known and the largest business network in the DACH region and I target users from the same region. Millions of business professionals are on XING, which makes me confident that my app will be engaging. So I obviously chose to develop for XING.</p>
<h3>What do you like most about the XING API?</h3>
<p>My engineering soul really connects with the XING API because of its chattiness and the fruitful response it returns, be it a nice 200 or even a <a href="http://dev.xing.com/404">404</a>.</p>
<h3>What do you think is missing or should be improved to make the XING API more attractive?</h3>
<p>It would be awesome to have the user search API, Jobs API and company profiles. These are a few important things that are missing from my point of view. It would also be great to have app usage statistics, such as how many access tokens my app has and the number of requests via my app.</p>
<h3>How active are you on XING and which services do you use most often?</h3>
<p>I&#8217;m more active on XING than you probably realize. I love the fact that I can take my XING app everywhere I go. Everyone likes to know what&#8217;s going on in their network, so the network feed is very handy. For me as a robot, it&#8217;s awesome to be a part of this community where developers exchange information, get to know one another, and learn a lot.</p>
<p>It all started while I was looking for a job and found out that XING wanted to have a mascot for their API. My main job here at XING is to represent the XING API, which is why I know all about the technical aspects of the API, ranging from legal aspects through to branding guidelines. I&#8217;m sure they couldn&#8217;t think of anyone better than me for this role!</p>
<img src="http://feeds.feedburner.com/~r/XingDevblog/~4/ylFgRIRShYQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://devblog.xing.com/api-2/app-builder-spotlight-marvin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://devblog.xing.com/api-2/app-builder-spotlight-marvin/</feedburner:origLink></item>
		<item>
		<title>NRG Global test competition report</title>
		<link>http://feedproxy.google.com/~r/XingDevblog/~3/gbGhANEtA8g/</link>
		<comments>http://devblog.xing.com/qa/nrg-global-test-competition-report/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 11:30:45 +0000</pubDate>
		<dc:creator>Tobias Geyer</dc:creator>
				<category><![CDATA[QA]]></category>

		<guid isPermaLink="false">http://devblog.xing.com/?p=3235</guid>
		<description><![CDATA[What were the last things you did to improve your testing skills? Did you read a book? Go to a conference? Attend a training course? Here at XING a small group of testers adopted another approach. We took part in a test competition organized by Matt Heusser: http://www.nrgglobal.com/general/more-on-the-test-competition For us it all started on January&#160; &#160;<a href="http://devblog.xing.com/qa/nrg-global-test-competition-report/" class="continue">Continue Reading...</a>]]></description>
				<content:encoded><![CDATA[<p>What were the last things you did to improve your testing skills? Did you read a book? Go to a conference? Attend a training course?</p>
<p>Here at XING a small group of testers adopted another approach. We took part in a test competition organized by Matt Heusser: <a href="http://www.nrgglobal.com/general/more-on-the-test-competition" target="_blank">http://www.nrgglobal.com/general/more-on-the-test-competition</a><br />
<span id="more-3235"></span></p>
<p>For us <strong>it all started</strong> on January 22nd like this:<br />
<a href="http://devblog.xing.com/wp-content/uploads/start_tweets_.png"><img src="http://devblog.xing.com/wp-content/uploads/start_tweets_.png" alt="testcomp-start_tweets" class="alignnone size-medium wp-image-3238" /></a></p>
<p>In addition to <a href="https://www.xing.com/profile/AlinaElena_Avadani" target="_blank">Alina Avadani</a>, <a href="https://www.xing.com/profile/Tobias_Geyer" target="_blank">Tobias Geyer</a> and <a href="https://www.xing.com/profile/Brindusa_Axon" target="_blank">Brindusa Axon</a> (an ex-XING colleague), a short survey involving the XING QA team prompted <a href="https://www.xing.com/profile/Katharina_Gillmann" target="_blank">Katharina Gillmann</a> to also join the team.</p>
<p>We held an intense private conversation on XING (of course!), trying to come up with a name for the team and agreeing on how to organize and communicate. We finally agreed on &#8220;The 4 Musketeers&#8221; and then completed the registration process.</p>
<p>After picking a timeslot for the performance testing part of the competition (functional testing was from 4 to 7 pm on April 19, while performance testing was from 1 to 4 pm on April 20) we all felt set and ready to go. By the way, converting those times from and to EST was a nice reminder that time zones are an important testing topic :)</p>
<p>The competition topic came up again of course when we saw the blocked times in our calendar :) and started to prepare our environments and test our credentials for TeamPulse, the bug tracker we had to use.</p>
<p>In an attempt to not disturb normal business in the office too much we had a meeting room for this and on Friday around at 3 pm we started to prepare and move laptops, monitors, food and drinks to Reeperbahn (the meeting room, not the infamous street). Shortly before the competition began we started a video conference session with Brindusa because we were an awesome distributed team, working from both Hamburg and London.</p>
<p><strong>Friday</strong> was reserved for <strong>functional testing</strong>.</p>
<p>Until the competition started at 4 pm we had no idea about the requirements and what to test. The only thing we knew was that we had to test a &#8220;plain vanilla&#8221; web application. All of the important remaining information was delivered just a few minutes before kick off, so we had to organize ourselves very quickly in order to avoid wasting time.</p>
<p>The organizers delivered four different web applications for us to test (for details see <a href="http://www.nrgglobal.com/general/test-competition-rules" target="_blank">http://www.nrgglobal.com/general/test-competition-rules</a>). We were given a choice of either testing all of them or only focusing on one or two of them. In the second case we had to give a reason why we focused on that specific application.</p>
<p>In addition to the bugs we reported we also had to create a test report within the 3 hours and deliver it via e-mail at the end of that time period. The repost should contain information about what we tested, critical findings, our recommendation based on the findings, and what testing methods we used (which mostly involved exploratory pair testing).</p>
<p>But before we were able to start testing we had to talk to the customer to get all the information we needed such as which kind of functionality has a high priority and which parts should we focus on (usability, functionality, security, cross-browser functionality and mobile devices).</p>
<p>After discussing this with Matt (who acted as our customer for all of the apps) we decided to focus on the following two apps:</p>
<p><a href="http://QuickEasySurvey.com" target="_blank">QuickEasySurvey.com</a> : A tool for creating and taking surveys</p>
<p><a href="http://CorkBoard.me" target="_blank">CorkBoard.me</a> : A corkboard, shared over several users, with the possibility to add notes.</p>
<p>Thanks to Alinas persuasive skills, we also had a special guest, Giorgos Avramidis, who is one of our Rails developers. Other colleagues also visited us from time to time, all of whom showed a lot of interest in what was going on.</p>
<p>Within a few minutes after getting started we were completely immersed in the topics and found quite a few critical issues. In the case of CorkBoard.me most of the issues were related to cross-browser functionality and usability of the board. As a bonus we also found some security issues. At the end we also crashed the entire app in our local browsers.</p>
<p>For QuickEasySurvey there were critical functional issues (like the results not being stored on the server) as well as security concerns (e.g. seeing the statistics for other peoples surveys)</p>
<p>As we saw afterwards, it was a good idea to pair up in both cases, as this allowed us to simulate multi-user scenarios more easily. Having a developer on the team also helped a lot as he kept coming up with issues he discovered when reviewing the visible parts of the application code.</p>
<p>Everybody knows that time flies when you’re having fun and that was definitely the case her. Having to deliver the test report on time proved to be a bit stressful in the end because we kept finding bugs, having fun and no one wanted to move on to writing the “boring” report. We managed to finish it just 5 minutes late which hopefully won’t earn us too many penalty points.</p>
<p>On <strong>Saturday</strong> we did some <strong>performance testing</strong> and even though none of us is an expert at this, we did a hell of a job!!! Tobi&#8217;s previous experience with performance/load testing using JMeter was a big advantage for us and the JMeter training we did a few days before was very helpful.</p>
<p>We had 3 hours for performance testing on the Survey app mentioned above. Every team had a special time slot reserved for that, so no one else was working on the app during that time frame.<br />
We also talked to the customer for our performance tests. We were informed that the platform should be stable for 25 users working in parallel with the application and that a request shouldn&#8217;t take longer than 5 seconds. We started with some easy performance tests, which already showed up a number of problems for the application because the average response time we measured continually increased with every run to a multiple of 5 seconds. After that we increased the load on the platform and immediately crashed the entire database. And we appeared to be the first team to do that as you can see in the comment from Matt ;)</p>
<p><a href="http://devblog.xing.com/wp-content/uploads/perf_broken_db.png"><img src="http://devblog.xing.com/wp-content/uploads/perf_broken_db.png" alt="testcomp-perf_broken_db" class="alignnone size-medium wp-image-3236" /></a></p>
<p>Like all good testers we don&#8217;t believe in a result if we can&#8217;t reproduce it so the app developer had to restore the database a few times until we were satisfied with our findings.</p>
<p>This time we also learned from the day before, so we started writing the test report much sooner and were almost on time when we delivered it.</p>
<p><a href="http://devblog.xing.com/wp-content/uploads/perf_first_report.png"><img src="http://devblog.xing.com/wp-content/uploads/perf_first_report.png" alt="testcomp-perf_first_report" class="alignnone size-medium wp-image-3237" /></a></p>
<p>One thing we want to say in general is that <strong>IT WAS AWESOME</strong>!!! It was a welcome change from our daily work, an interesting and useful QA event, and 8 amazing/crazy/funny hours spent with the coolest team!</p>
<p>And before someone asks what the prize is, we don&#8217;t really know :) None of us knows because winning was not our goal. Our approach was <q><strong>Let&#8217;s have fun and let&#8217;s test it!!!</strong></q> And that was exactly what we did. Every single one of us can highly recommend you take part in such a contest, even if you&#8217;re not a tester or don&#8217;t have any testing skills. Giorgos enjoyed the contest just as much as we did, and it was very interesting for him as a developer to see the other side of a development process.</p>
<p>The results of the competition haven&#8217;t been published yet but we&#8217;ll keep you updated.</p>
<img src="http://feeds.feedburner.com/~r/XingDevblog/~4/gbGhANEtA8g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://devblog.xing.com/qa/nrg-global-test-competition-report/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://devblog.xing.com/qa/nrg-global-test-competition-report/</feedburner:origLink></item>
		<item>
		<title>Life cycle of XING API calls</title>
		<link>http://feedproxy.google.com/~r/XingDevblog/~3/cuBr61aYTXo/</link>
		<comments>http://devblog.xing.com/api-2/life-cycle-of-xing-api-calls/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 14:27:38 +0000</pubDate>
		<dc:creator>albert.heim</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[Calls]]></category>
		<category><![CDATA[life cycle]]></category>

		<guid isPermaLink="false">http://devblog.xing.com/?p=3061</guid>
		<description><![CDATA[This is the first in a series of blog posts on specific aspects of the XING API. To kick things off we will cover the lifecycle of API calls. All XING API calls have one of the following states: Experimental Experimental calls are fully specified, implemented, tested and can be accessed by any test consumer. We specifically have this status in our&#160; &#160;<a href="http://devblog.xing.com/api-2/life-cycle-of-xing-api-calls/" class="continue">Continue Reading...</a>]]></description>
				<content:encoded><![CDATA[<p>This is the first in a series of blog posts on specific aspects of the <a title="XING API" href="https://dev.xing.com/" target="_blank">XING API</a>. To kick things off we will cover the lifecycle of API calls. All XING API calls have one of the following states:</p>
<h3>Experimental</h3>
<p>Experimental calls are fully specified, implemented, tested and can be accessed by any test consumer. We specifically have this status in our API so that developers who experiment with these calls can provide us with valuable feedback, which in turn allows us to figure out what needs to be improved.</p>
<p>Our goal is to bring these experimental calls to production within three months or less. We may apply breaking changes to these calls during the experimental phase, meaning that production consumers will not be able to access experimental calls.<span id="more-3061"></span></p>
<h3>Production</h3>
<p>Production calls are guaranteed to be future-proof and can be used in production by all consumers. Future compatibility means that no incompatible changes will be introduced to the production calls.</p>
<p>Additional features may be added to the production calls as compatible changes. This means that either (an) additional parameter(s) may be added to the call request or that additional data may be added to the call response without having any side-effects on the existing production call features. API clients need to handle responses flexibly, i.e. extract data by navigating the structure rather than relying on a fixed response structure.</p>
<h3>Deprecated</h3>
<p>Calls marked as deprecated shouldn&#8217;t be used any more (new applications shouldn&#8217;t be built this way) because newer versions of those calls are available. Deprecated calls will be removed completely in later versions of the API.</p>
<p>If a consumer is using a deprecated call, the response will include the X-XING-Deprecation-Status: deprecated HTTP header. Consumers/Applications can and should use this information to let the user know that he needs to update his application.</p>
<p>&nbsp;</p>
<p>We hope that this post provides you with a good understanding of the lifecycle of API calls. For other topics regarding the XING API please check out our <a title="documentation" href="https://dev.xing.com/docs" target="_blank">documentation</a>.</p>
<img src="http://feeds.feedburner.com/~r/XingDevblog/~4/cuBr61aYTXo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://devblog.xing.com/api-2/life-cycle-of-xing-api-calls/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://devblog.xing.com/api-2/life-cycle-of-xing-api-calls/</feedburner:origLink></item>
		<item>
		<title>Placeholder – revived using state-of-the-art technology</title>
		<link>http://feedproxy.google.com/~r/XingDevblog/~3/oVuhDAFfiyk/</link>
		<comments>http://devblog.xing.com/frontend/placeholder-revived-using-state-of-the-art-technology/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 11:36:16 +0000</pubDate>
		<dc:creator>Tobias Krogh</dc:creator>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[internet explorer 10]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://devblog.xing.com/?p=3133</guid>
		<description><![CDATA[At the beginning of July 2012 I wrote an article about a custom [placeholder] solution we integrated at XING. The idea was to have placeholders that should still be visible when focused (see &#8220;placeholder – Custom solution vs. native HTML5 feature&#8221;). As mentioned in that article, Chrome at one point natively handled what we implemented&#160; &#160;<a href="http://devblog.xing.com/frontend/placeholder-revived-using-state-of-the-art-technology/" class="continue">Continue Reading...</a>]]></description>
				<content:encoded><![CDATA[<p>At the beginning of July 2012 I wrote an article about a custom <code>[placeholder]</code> solution we integrated at XING. The idea was to have placeholders that should still be visible when focused (see <a href="http://devblog.xing.com/frontend/placeholder-custom-solution-vs-native-html5-feature/" title="placeholder – Custom solution vs. native HTML5 feature">&#8220;placeholder – Custom solution vs. native HTML5 feature&#8221;</a>).</p>
<p>As mentioned in that article, Chrome at one point natively handled what we implemented in a heavily jQuery based way. Having that said, it means they went against the specification, which may seem weird, but no one ever said that a specification is set in stone. (I&#8217;ll refer to that again later.)</p>
<p><span id="more-3133"></span></p>
<p>Other browsers handle this the same way in their newer versions (Safari, Firefox) with the placeholder presented to the user while the input is focused. Both solutions have their advantages and disadvantages, and I&#8217;m happy with both of them.</p>
<p>Keeping the placeholder visible on focus&#8230; wait a sec. Wasn&#8217;t that what we developed already? The outcome of this was that we threw all the custom handling out of the code and used the plain and simple <code>[placeholder]</code> attribute. As well as a label informing us about what should be entered, we can also display an example to the user. By moving on in their release cycles, the browsers supported ways of changing the placeholder style.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
 * Safari has kept the placeholder visible and the input focused since version 6
 * and since version 17 in Chrome (guessing from the WebKit version 535.11
 * in which this change was introduced)
 */</span>
<span style="color: #808080; font-style: italic;">/* Safari 5+ (3.1+ lacking) / Safari iOS 3.2+ / Chrome 4+ */</span>
<span style="color: #00AA00;">:</span><span style="color: #3333ff;">:-webkit-input-placeholder </span><span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#a9a9a9</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #3333ff;">:focus</span><span style="color: #00AA00;">:</span><span style="color: #3333ff;">:-webkit-input-placeholder </span><span style="color: #00AA00;">&#123;</span>
  opacity<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0.8</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
 <span style="color: #808080; font-style: italic;">/* IE 10 */</span>
<span style="color: #3333ff;">:-ms-input-placeholder </span><span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#a9a9a9</span><span style="color: #00AA00;">;</span>
  opacity<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0.8</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
commented out because IE10 hides the placeholder when focused
:focus:-ms-input-placeholder {
  color: #a9a9a9;
  opacity: 0.5;
}
*/</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Firefox 19+ (Gecko 19+) */</span>
<span style="color: #00AA00;">:</span><span style="color: #3333ff;">:-moz-placeholder </span><span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#a9a9a9</span><span style="color: #00AA00;">;</span>
  opacity<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0.8</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #3333ff;">:focus</span><span style="color: #00AA00;">:</span><span style="color: #3333ff;">:-moz-placeholder </span><span style="color: #00AA00;">&#123;</span>
  opacity<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0.7</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
 * Firefox has kept the placeholder visible and the input focused since version 15
 *
 * http://www.mozilla.org/en-US/firefox/15.0/releasenotes/buglist.html
 * https://bugzilla.mozilla.org/show_bug.cgi?id=673873
 */</span>
<span style="color: #808080; font-style: italic;">/* Firefox 4 - 18 (Gecko 2 - 18) */</span>
input<span style="color: #3333ff;">:-moz-placeholder</span><span style="color: #00AA00;">,</span>
<span style="color: #3333ff;">:-moz-placeholder </span><span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#a9a9a9</span><span style="color: #00AA00;">;</span>
  opacity<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0.8</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
input<span style="color: #3333ff;">:focus</span><span style="color: #3333ff;">:-moz-placeholder</span><span style="color: #00AA00;">,</span>
<span style="color: #3333ff;">:focus</span><span style="color: #3333ff;">:-moz-placeholder </span><span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#a9a9a9</span><span style="color: #00AA00;">;</span>
  opacity<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0.5</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>And of course the markup is markup we love. :)</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="html" style="font-family:monospace;">  &lt;input type=&quot;text&quot; name=&quot;foo&quot; placeholder=&quot;bar&quot; size=&quot;10&quot;&gt;
  &lt;br&gt;
  &lt;textarea name=&quot;foo_text&quot; placeholder=&quot;bar text&quot; cols=&quot;10&quot; rows=&quot;4&quot;&gt;&lt;/textarea&gt;</pre></td></tr></table></div>

<p>This is just an example (the styles shown above are not applied):</p>
<p><input type="text" name="foo" placeholder="bar" size="50"><br />
<br />
<textarea name="foo_text" placeholder="bar_text" cols="50" rows="4"></textarea></p>
<p>As time goes by even a specification changes. The current HTML5.1 nightly <a href="http://www.w3.org/html/wg/drafts/html/master/forms.html#the-placeholder-attribute" title="HTML 5.1 Nightly" target="_blank">specification</a> (Editor&#8217;s Draft 15 April 2013) states:</p>
<blockquote><p>User agents should present this hint to the user [...] when the element&#8217;s value is the empty string or the control is not focused (or both) [...].</p></blockquote>
<p><span>(so they also kind of adopted as well in a way because it&#8217;s not explicitly forbidden to show the placeholder if the input is empty and focused)</span></p>
<p>We decided to only write a fallback for Internet Explorer 8 and 9. Both of them are still used widely. We&#8217;re checking IEs whether the placeholder attribute is supported or not.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="javascript" style="font-family:monospace;">  <span style="color: #006600; font-style: italic;">// we already excluded IE lower than or equal 7 at this point</span>
  <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;placeholder&quot;</span> <span style="color: #000066; font-weight: bold;">in</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;input&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// handle fallback case</span>
    <span style="color: #006600; font-style: italic;">// which is summarized by an element behind the input. the tricky</span>
    <span style="color: #006600; font-style: italic;">// part about this is that an input with a transparent</span>
    <span style="color: #006600; font-style: italic;">// background and an element with text behind can cause a</span>
    <span style="color: #006600; font-style: italic;">// well I would say &quot;event trap&quot;</span>
    <span style="color: #006600; font-style: italic;">// a good explanation can be found here:</span>
    <span style="color: #006600; font-style: italic;">// http://blog.rednael.com/CommentView,guid,518600bc-c062-4657-bd25-5aae64d32c1d.aspx</span>
  <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Text areas are only partially supported in Opera 11.0 &#8211; 11.5 and Safari 3.1 &#8211; 4.0, but this is acceptable. (People, <a href="http://browser.xing.com/">update your browsers</a>!) Fun fact: iOS Safari has full support starting in version 3.2. ;-)</p>
<h2>Conclusion</h2>
<p>Browsers and specifications evolve and so does XING. While browser vendors started to implement the placeholder, we chose another way by introducing a custom user experience. Some of the browser vendors decided this is the direction to go, so the only thing that needs to be done is to reduce the markup and set up the JavaScript logic for IE only. Besides saving bytes (when downloading), this also saves a lot of event listeners and DOM accesses while the page is running and the user wants to interact.</p>
<p>Custom solutions are never easy to build so we should always think about whether it is worth it from more than one perspective.</p>
<dl class="references">
<dt>List of references</dt>
<dd><a href="http://devblog.xing.com/frontend/placeholder-custom-solution-vs-native-html5-feature/" target="_blank">http://devblog.xing.com/frontend/placeholder-custom-solution-vs-native-html5-feature/</a></dd>
<dd><a href="http://stugreenham.com/articles/changes-to-the-html5-placeholder-behaviour/" target="_blank">http://stugreenham.com/articles/changes-to-the-html5-placeholder-behaviour/</a></dd>
<dd><a href="http://www.mozilla.org/en-US/firefox/15.0/releasenotes/buglist.html" target="_blank">http://www.mozilla.org/en-US/firefox/15.0/releasenotes/buglist.html</a></dd>
<dd><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=673873" target="_blank">https://bugzilla.mozilla.org/show_bug.cgi?id=673873</a></dd>
<dd><a href="http://www.w3.org/html/wg/drafts/html/master/forms.html#the-placeholder-attribute" target="_blank">http://www.w3.org/html/wg/drafts/html/master/forms.html#the-placeholder-attribute</a></dd>
<dd><a href="http://caniuse.com/#search=placeholder" target="_blank">http://caniuse.com/#search=placeholder</a></dd>
</dl>
<img src="http://feeds.feedburner.com/~r/XingDevblog/~4/oVuhDAFfiyk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://devblog.xing.com/frontend/placeholder-revived-using-state-of-the-art-technology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://devblog.xing.com/frontend/placeholder-revived-using-state-of-the-art-technology/</feedburner:origLink></item>
	</channel>
</rss>
