<!DOCTYPE html>
<!--[if lte IE 7]><html class="nojs ie7" lang="en"><![endif]-->
<!--[if IE 8]><html class="nojs ie8" lang="en"><![endif]-->
<!--[if (gt IE 8)|!(IE)]><!--><html lang="en" class="nojs" prefix="og: http://ogp.me/ns#"><!--<![endif]-->
<head>
    
<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"beacon-5.newrelic.com","errorBeacon":"bam.nr-data.net","licenseKey":"a1aecb726d","applicationID":"4017795","transactionName":"cVgLFUILXlpdSxhXUkVEFw5fCR1FUFZA","queueTime":5,"applicationTime":127,"agentToken":null,"agent":"js-agent.newrelic.com/nr-476.min.js"}</script>
<script type="text/javascript">(window.NREUM||(NREUM={})).loader_config={xpid:"Uw4BUVZXGwcAVVZVDgQ="};window.NREUM||(NREUM={}),__nr_require=function(t,e,n){function r(n){if(!e[n]){var o=e[n]={exports:{}};t[n][0].call(o.exports,function(e){var o=t[n][1][e];return r(o?o:e)},o,o.exports)}return e[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({QJf3ax:[function(t,e){function n(t){function e(e,n,a){t&&t(e,n,a),a||(a={});for(var c=s(e),f=c.length,u=i(a,o,r),d=0;f>d;d++)c[d].apply(u,n);return u}function a(t,e){f[t]=s(t).concat(e)}function s(t){return f[t]||[]}function c(){return n(e)}var f={};return{on:a,emit:e,create:c,listeners:s,_events:f}}function r(){return{}}var o="nr@context",i=t("gos");e.exports=n()},{gos:"7eSDFh"}],ee:[function(t,e){e.exports=t("QJf3ax")},{}],3:[function(t){function e(t,e,n,i,s){try{c?c-=1:r("err",[s||new UncaughtException(t,e,n)])}catch(f){try{r("ierr",[f,(new Date).getTime(),!0])}catch(u){}}return"function"==typeof a?a.apply(this,o(arguments)):!1}function UncaughtException(t,e,n){this.message=t||"Uncaught error with no additional information",this.sourceURL=e,this.line=n}function n(t){r("err",[t,(new Date).getTime()])}var r=t("handle"),o=t(5),i=t("ee"),a=window.onerror,s=!1,c=0;t("loader").features.err=!0,window.onerror=e,NREUM.noticeError=n;try{throw new Error}catch(f){"stack"in f&&(t(1),t(4),"addEventListener"in window&&t(2),window.XMLHttpRequest&&XMLHttpRequest.prototype&&XMLHttpRequest.prototype.addEventListener&&t(3),s=!0)}i.on("fn-start",function(){s&&(c+=1)}),i.on("fn-err",function(t,e,r){s&&(this.thrown=!0,n(r))}),i.on("fn-end",function(){s&&!this.thrown&&c>0&&(c-=1)}),i.on("internal-error",function(t){r("ierr",[t,(new Date).getTime(),!0])})},{1:8,2:5,3:9,4:7,5:20,ee:"QJf3ax",handle:"D5DuLP",loader:"G9z0Bl"}],4:[function(t){function e(){}if(window.performance&&window.performance.timing&&window.performance.getEntriesByType){var n=t("ee"),r=t("handle"),o=t(2);t("loader").features.stn=!0,t(1),n.on("fn-start",function(t){var e=t[0];e instanceof Event&&(this.bstStart=Date.now())}),n.on("fn-end",function(t,e){var n=t[0];n instanceof Event&&r("bst",[n,e,this.bstStart,Date.now()])}),o.on("fn-start",function(t,e,n){this.bstStart=Date.now(),this.bstType=n}),o.on("fn-end",function(t,e){r("bstTimer",[e,this.bstStart,Date.now(),this.bstType])}),n.on("pushState-start",function(){this.time=Date.now(),this.startPath=location.pathname+location.hash}),n.on("pushState-end",function(){r("bstHist",[location.pathname+location.hash,this.startPath,this.time])}),"addEventListener"in window.performance&&(window.performance.addEventListener("webkitresourcetimingbufferfull",function(){r("bstResource",[window.performance.getEntriesByType("resource")]),window.performance.webkitClearResourceTimings()},!1),window.performance.addEventListener("resourcetimingbufferfull",function(){r("bstResource",[window.performance.getEntriesByType("resource")]),window.performance.clearResourceTimings()},!1)),document.addEventListener("scroll",e,!1),document.addEventListener("keypress",e,!1),document.addEventListener("click",e,!1)}},{1:6,2:8,ee:"QJf3ax",handle:"D5DuLP",loader:"G9z0Bl"}],5:[function(t,e){function n(t){i.inPlace(t,["addEventListener","removeEventListener"],"-",r)}function r(t){return t[1]}var o=(t(1),t("ee").create()),i=t(2)(o),a=t("gos");if(e.exports=o,n(window),"getPrototypeOf"in Object){for(var s=document;s&&!s.hasOwnProperty("addEventListener");)s=Object.getPrototypeOf(s);s&&n(s);for(var c=XMLHttpRequest.prototype;c&&!c.hasOwnProperty("addEventListener");)c=Object.getPrototypeOf(c);c&&n(c)}else XMLHttpRequest.prototype.hasOwnProperty("addEventListener")&&n(XMLHttpRequest.prototype);o.on("addEventListener-start",function(t){if(t[1]){var e=t[1];"function"==typeof e?this.wrapped=t[1]=a(e,"nr@wrapped",function(){return i(e,"fn-",null,e.name||"anonymous")}):"function"==typeof e.handleEvent&&i.inPlace(e,["handleEvent"],"fn-")}}),o.on("removeEventListener-start",function(t){var e=this.wrapped;e&&(t[1]=e)})},{1:20,2:21,ee:"QJf3ax",gos:"7eSDFh"}],6:[function(t,e){var n=(t(2),t("ee").create()),r=t(1)(n);e.exports=n,r.inPlace(window.history,["pushState"],"-")},{1:21,2:20,ee:"QJf3ax"}],7:[function(t,e){var n=(t(2),t("ee").create()),r=t(1)(n);e.exports=n,r.inPlace(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame"],"raf-"),n.on("raf-start",function(t){t[0]=r(t[0],"fn-")})},{1:21,2:20,ee:"QJf3ax"}],8:[function(t,e){function n(t,e,n){var r=t[0];"string"==typeof r&&(r=new Function(r)),t[0]=o(r,"fn-",null,n)}var r=(t(2),t("ee").create()),o=t(1)(r);e.exports=r,o.inPlace(window,["setTimeout","setInterval","setImmediate"],"setTimer-"),r.on("setTimer-start",n)},{1:21,2:20,ee:"QJf3ax"}],9:[function(t,e){function n(){c.inPlace(this,d,"fn-")}function r(t,e){c.inPlace(e,["onreadystatechange"],"fn-")}function o(t,e){return e}var i=t("ee").create(),a=t(1),s=t(2),c=s(i),f=s(a),u=window.XMLHttpRequest,d=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"];e.exports=i,window.XMLHttpRequest=function(t){var e=new u(t);try{i.emit("new-xhr",[],e),f.inPlace(e,["addEventListener","removeEventListener"],"-",function(t,e){return e}),e.addEventListener("readystatechange",n,!1)}catch(r){try{i.emit("internal-error",[r])}catch(o){}}return e},window.XMLHttpRequest.prototype=u.prototype,c.inPlace(XMLHttpRequest.prototype,["open","send"],"-xhr-",o),i.on("send-xhr-start",r),i.on("open-xhr-start",r)},{1:5,2:21,ee:"QJf3ax"}],10:[function(t){function e(t){if("string"==typeof t&&t.length)return t.length;if("object"!=typeof t)return void 0;if("undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer&&t.byteLength)return t.byteLength;if("undefined"!=typeof Blob&&t instanceof Blob&&t.size)return t.size;if("undefined"!=typeof FormData&&t instanceof FormData)return void 0;try{return JSON.stringify(t).length}catch(e){return void 0}}function n(t){var n=this.params,r=this.metrics;if(!this.ended){this.ended=!0;for(var i=0;c>i;i++)t.removeEventListener(s[i],this.listener,!1);if(!n.aborted){if(r.duration=(new Date).getTime()-this.startTime,4===t.readyState){n.status=t.status;var a=t.responseType,f="arraybuffer"===a||"blob"===a||"json"===a?t.response:t.responseText,u=e(f);if(u&&(r.rxSize=u),this.sameOrigin){var d=t.getResponseHeader("X-NewRelic-App-Data");d&&(n.cat=d.split(", ").pop())}}else n.status=0;r.cbTime=this.cbTime,o("xhr",[n,r,this.startTime])}}}function r(t,e){var n=i(e),r=t.params;r.host=n.hostname+":"+n.port,r.pathname=n.pathname,t.sameOrigin=n.sameOrigin}if(window.XMLHttpRequest&&XMLHttpRequest.prototype&&XMLHttpRequest.prototype.addEventListener&&!/CriOS/.test(navigator.userAgent)){t("loader").features.xhr=!0;var o=t("handle"),i=t(2),a=t("ee"),s=["load","error","abort","timeout"],c=s.length,f=t(1);t(4),t(3),a.on("new-xhr",function(){this.totalCbs=0,this.called=0,this.cbTime=0,this.end=n,this.ended=!1,this.xhrGuids={}}),a.on("open-xhr-start",function(t){this.params={method:t[0]},r(this,t[1]),this.metrics={}}),a.on("open-xhr-end",function(t,e){"loader_config"in NREUM&&"xpid"in NREUM.loader_config&&this.sameOrigin&&e.setRequestHeader("X-NewRelic-ID",NREUM.loader_config.xpid)}),a.on("send-xhr-start",function(t,n){var r=this.metrics,o=t[0],i=this;if(r&&o){var f=e(o);f&&(r.txSize=f)}this.startTime=(new Date).getTime(),this.listener=function(t){try{"abort"===t.type&&(i.params.aborted=!0),("load"!==t.type||i.called===i.totalCbs&&(i.onloadCalled||"function"!=typeof n.onload))&&i.end(n)}catch(e){try{a.emit("internal-error",[e])}catch(r){}}};for(var u=0;c>u;u++)n.addEventListener(s[u],this.listener,!1)}),a.on("xhr-cb-time",function(t,e,n){this.cbTime+=t,e?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof n.onload||this.end(n)}),a.on("xhr-load-added",function(t,e){var n=""+f(t)+!!e;this.xhrGuids&&!this.xhrGuids[n]&&(this.xhrGuids[n]=!0,this.totalCbs+=1)}),a.on("xhr-load-removed",function(t,e){var n=""+f(t)+!!e;this.xhrGuids&&this.xhrGuids[n]&&(delete this.xhrGuids[n],this.totalCbs-=1)}),a.on("addEventListener-end",function(t,e){e instanceof XMLHttpRequest&&"load"===t[0]&&a.emit("xhr-load-added",[t[1],t[2]],e)}),a.on("removeEventListener-end",function(t,e){e instanceof XMLHttpRequest&&"load"===t[0]&&a.emit("xhr-load-removed",[t[1],t[2]],e)}),a.on("fn-start",function(t,e,n){e instanceof XMLHttpRequest&&("onload"===n&&(this.onload=!0),("load"===(t[0]&&t[0].type)||this.onload)&&(this.xhrCbStart=(new Date).getTime()))}),a.on("fn-end",function(t,e){this.xhrCbStart&&a.emit("xhr-cb-time",[(new Date).getTime()-this.xhrCbStart,this.onload,e],e)})}},{1:"XL7HBI",2:11,3:9,4:5,ee:"QJf3ax",handle:"D5DuLP",loader:"G9z0Bl"}],11:[function(t,e){e.exports=function(t){var e=document.createElement("a"),n=window.location,r={};e.href=t,r.port=e.port;var o=e.href.split("://");return!r.port&&o[1]&&(r.port=o[1].split("/")[0].split(":")[1]),r.port&&"0"!==r.port||(r.port="https"===o[0]?"443":"80"),r.hostname=e.hostname||n.hostname,r.pathname=e.pathname,"/"!==r.pathname.charAt(0)&&(r.pathname="/"+r.pathname),r.sameOrigin=!e.hostname||e.hostname===document.domain&&e.port===n.port&&e.protocol===n.protocol,r}},{}],gos:[function(t,e){e.exports=t("7eSDFh")},{}],"7eSDFh":[function(t,e){function n(t,e,n){if(r.call(t,e))return t[e];var o=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(t,e,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return t[e]=o,o}var r=Object.prototype.hasOwnProperty;e.exports=n},{}],D5DuLP:[function(t,e){function n(t,e,n){return r.listeners(t).length?r.emit(t,e,n):(o[t]||(o[t]=[]),void o[t].push(e))}var r=t("ee").create(),o={};e.exports=n,n.ee=r,r.q=o},{ee:"QJf3ax"}],handle:[function(t,e){e.exports=t("D5DuLP")},{}],XL7HBI:[function(t,e){function n(t){var e=typeof t;return!t||"object"!==e&&"function"!==e?-1:t===window?0:i(t,o,function(){return r++})}var r=1,o="nr@id",i=t("gos");e.exports=n},{gos:"7eSDFh"}],id:[function(t,e){e.exports=t("XL7HBI")},{}],loader:[function(t,e){e.exports=t("G9z0Bl")},{}],G9z0Bl:[function(t,e){function n(){var t=p.info=NREUM.info;if(t&&t.agent&&t.licenseKey&&t.applicationID&&c&&c.body){p.proto="https"===d.split(":")[0]||t.sslForHttp?"https://":"http://",a("mark",["onload",i()]);var e=c.createElement("script");e.src=p.proto+t.agent,c.body.appendChild(e)}}function r(){"complete"===c.readyState&&o()}function o(){a("mark",["domContent",i()])}function i(){return(new Date).getTime()}var a=t("handle"),s=window,c=s.document,f="addEventListener",u="attachEvent",d=(""+location).split("?")[0],p=e.exports={offset:i(),origin:d,features:{}};c[f]?(c[f]("DOMContentLoaded",o,!1),s[f]("load",n,!1)):(c[u]("onreadystatechange",r),s[u]("onload",n)),a("mark",["firstbyte",i()])},{handle:"D5DuLP"}],20:[function(t,e){function n(t,e,n){e||(e=0),"undefined"==typeof n&&(n=t?t.length:0);for(var r=-1,o=n-e||0,i=Array(0>o?0:o);++r<o;)i[r]=t[e+r];return i}e.exports=n},{}],21:[function(t,e){function n(t){return!(t&&"function"==typeof t&&t.apply&&!t[i])}var r=t("ee"),o=t(1),i="nr@wrapper",a=Object.prototype.hasOwnProperty;e.exports=function(t){function e(t,e,r,a){function nrWrapper(){var n,i,s,f;try{i=this,n=o(arguments),s=r&&r(n,i)||{}}catch(d){u([d,"",[n,i,a],s])}c(e+"start",[n,i,a],s);try{return f=t.apply(i,n)}catch(p){throw c(e+"err",[n,i,p],s),p}finally{c(e+"end",[n,i,f],s)}}return n(t)?t:(e||(e=""),nrWrapper[i]=!0,f(t,nrWrapper),nrWrapper)}function s(t,r,o,i){o||(o="");var a,s,c,f="-"===o.charAt(0);for(c=0;c<r.length;c++)s=r[c],a=t[s],n(a)||(t[s]=e(a,f?s+o:o,i,s,t))}function c(e,n,r){try{t.emit(e,n,r)}catch(o){u([o,e,n,r])}}function f(t,e){if(Object.defineProperty&&Object.keys)try{var n=Object.keys(t);return n.forEach(function(n){Object.defineProperty(e,n,{get:function(){return t[n]},set:function(e){return t[n]=e,e}})}),e}catch(r){u([r])}for(var o in t)a.call(t,o)&&(e[o]=t[o]);return e}function u(e){try{t.emit("internal-error",e)}catch(n){}}return t||(t=r),e.inPlace=s,e.flag=i,e}},{1:20,ee:"QJf3ax"}]},{},["G9z0Bl",3,10,4]);</script>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Mynewsdesk Devcorner - Mynewsdesk</title>
    <meta name="description" content="Get to know whats happening in the development team of Mynewsdesk" />
        <meta name="keywords" content="Press releases, Events, Images, Videos, Documents, Contacts, Press Releases, Press Information, News, Subscribe to press information, send Press releases, publish Press releases." />
    <meta name="robots" content="index, follow" />
    <meta property="fb:app_id" content="164521400263620" />
    <meta content="authenticity_token" name="csrf-param" />
<meta content="FbvDl59otdmZPXZPs2bwImywRXQSmtOIwgSnmb49wJs=" name="csrf-token" />
    <meta property="og:site_name" content="Mynewsdesk" />
<meta property="og:title" content="Mynewsdesk Devcorner" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://www.mynewsdesk.com/devcorner" />
<meta property="og:image" content="http://d9qz450atvita.cloudfront.net/assets/graphics/logos/social-500x500-62de87dd1133c623cae0a05992845575.png" />

<meta property="og:description" content="Get to know whats happening in the development team of Mynewsdesk" />
    <link rel="icon" href="/favicon.ico" type="image/x-icon" />
      <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
      <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-precomposed.png">

         <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1.0">
         
            <link href="http://d9qz450atvita.cloudfront.net/assets/newsroom-d96dbbdbbd04922ed106d174e2d7c7f3.css" media="all" rel="stylesheet" type="text/css" />
    <!--[if IE 7]>
    <link href="http://d9qz450atvita.cloudfront.net/assets/font-awesome/font-awesome-ie7-62dacb07bc4de51da04973e3d5341bdf.css" media="all" rel="stylesheet" type="text/css" />
    <![endif]-->

        <script src="http://d9qz450atvita.cloudfront.net/assets/newsroom-d2cb8f4dd730c91c580a6bde65843979.js" type="text/javascript"></script>

    <!--[if IE]>
      <script src="https://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <script type="text/javascript">
        var _sf_startpt=(new Date()).getTime();
        I18n.locale = 'en';
        var _site = {
            code: "com",
            prefix: "/"
        };
            var addthis_share = {
        url : "http%3A%2F%2Fwww.mynewsdesk.com%2Fdevcorner"
    }
    var addthis_config = {
        username: 'newsdesk',
        data_track_linkbacks: true,
        services_compact: 'favorites, twitter, digg, delicious, myspace, google, facebook, reddit, live, more',
        services_exclude: 'email, print'
    }

    </script>
    <link href="http://d9qz450atvita.cloudfront.net/assets/print-9a4f56b71597a98bff1329b09bdb53d8.css" media="print" rel="stylesheet" type="text/css" />
    
          <script type="text/javascript">
        var _gaq = _gaq || [];
        _gaq.push(['mndTracker._setAccount', 'UA-67918-1']);
_gaq.push(['mndTracker._setDomainName', '.mynewsdesk.com']);
_gaq.push(['mndTracker._setCustomVar', 1, 'mnd-newsroom', '57022', 3]);

_gaq.push(['mndTracker._trackPageview']);
_gaq.push(['analyze._setAccount', 'UA-67918-24']);
_gaq.push(['analyze._setDomainName', '.mynewsdesk.com']);
_gaq.push(['analyze._setCustomVar', 1, 'mnd-newsroom', '57022', 3]);
_gaq.push(['analyze._trackPageview']);

        (function() {
          var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
          ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
          var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();
      </script>

    <script type="text/javascript">
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-49778234-1', { 'cookieDomain': 'mynewsdesk.com', 'name': 'analyze' });
ga('analyze.set', 'dimension2', '2');
ga('analyze.set', 'dimension3', '51495');
ga('analyze.set', 'dimension4', '57022');
ga('analyze.set', 'dimension7', 'PREMIUM');
ga('analyze.set', 'dimension6', 'newsroom#show');
ga('analyze.send', 'pageview');
    </script>

    <link rel="search" type="application/opensearchdescription+xml" title="Mynewsdesk" href="http://www.mynewsdesk.com/opensearch.xml" />
        <link rel="canonical" href="http://www.mynewsdesk.com/devcorner" />
             
    <script async="true" type="text/javascript" src="//cdn.bizible.com/_biz-a.js"></script>
</head>
<body class="app-public namespace-newsroom">
    <!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-PKN4MR"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>
dataLayer = [{
   'site': 'com'
}];
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-PKN4MR');</script>
<!-- End Google Tag Manager -->


    <header id="page-header" class="sb-slide">
    <div class="inner">
        <div class="logo">
    <a href="http://www.mynewsdesk.com/">
        <img alt="Logo_red" class="newsroom" src="http://d9qz450atvita.cloudfront.net/assets/logo_red-2e4a5039e0e8697db9b464572b32ff42.png" />
</a></div>

        <nav>
    <ul class="pills">
            <li class="stories hidden-xs hidden-phone"><a href="http://www.mynewsdesk.com/stories" class="event-tracking" data-event-action="For journalist" data-event-category="Navigation header" data-event-label="">Search stories</a></li>
            <li class="signup hidden-xs hidden-phone"><a href="http://www.mynewsdesk.com/signup/premium" class="event-tracking" data-event-action="Signup" data-event-category="Navigation header" data-event-label="">Sign up</a></li>
            <li class="login hidden-xs hidden-phone"><a href="http://www.mynewsdesk.com/user/signin" class="event-tracking" data-event-action="Login" data-event-category="Navigation header" data-event-label="">Log in</a></li>


        <li class="menu"><button type="button" class="slidebars-toggle"><span class="hidden-xs hidden-phone">Menu&nbsp;</span><i class="icon icon-reorder fa fa-reorder"></i></button></li>
    </ul>
</nav>

    </div>
</header>
<script type="text/javascript">
//<![CDATA[

        jQuery("#page-header .inner").addClass('white-header');
        jQuery("#page-header .inner").find('ul.pills li a').css('color', '#000')
        jQuery("#page-header .inner").find('button').css('color', '#000')

//]]>
</script>


    <div id="sb-site">
        
        

        <div id="content-area" class="clearfix container">
            
                <div id="page-content" class="has-pressroom">
            <div id="newsroom-header" class="newsroom-header">
        
<div class="row-fluid">
    <div class="newsroom-header-content">
            <div class="newsroom-logotype">

                    <h1>Mynewsdesk Devcorner</h1>

                    <a href="/devcorner" title="Go to Mynewsdesk Devcorner&#x27;s Newsroom">
        <span class='logotype'>Mynewsdesk Devcorner</span>
    <span class="pull-right newsroom-collapse-bars toggle-menu">
        <i class="icon icon-chevron-down"></i>
    </span>
</a>


            </div>
        <div class="newsroom-nav-collapse">
    <ul class="newsroom-nav-items">
        <li class="newsroom-nav-item active">
            <a href="/devcorner"><i class='icon-home'></i> <span class='visible-medium-inline'> Overview</span></a>
        </li>
          <li class="newsroom-nav-item">
              <a href="/devcorner/latest_news"><i class='icon-star'></i> News</a>
          </li>
          <li class="newsroom-nav-item">
              <a href="/devcorner/latest_media"><i class='icon-camera'></i> Images & Videos</a>
          </li>
          <li class="newsroom-nav-item">
              <a href="/devcorner/contact_people"><i class='icon-user'></i> Contacts</a>
          </li>
          <li class="newsroom-nav-item">
              <a href="/devcorner/events"><i class='icon-calendar'></i> Events</a>
          </li>
    </ul>
    <div class="newsroom-header-misc">
            
    <a href="/media/follow_toggle/57022" class="event-tracking ajax-tracking internal-follow-button follow-trigger" data-event-action="follow-newsroom" data-event-category="new-follow-signup" data-event-label="follow-header" data-url="/devcorner/follow_overlay">
        <span class="button">
            <span class="follow-icon"><img alt="Mnd-retina" src="http://d9qz450atvita.cloudfront.net/assets/components/follow-button/mnd-retina-0690847fb0ac018d1288365d203a03bb.png" /></span>
            <span class="content">Follow Mynewsdesk Devcorner</span>
        </span>
        <span class="count">
            <i></i>
            <u></u>
            <span class="number">
                13
            </span>
        </span>
</a>
</div>

    <form accept-charset="UTF-8" action="/devcorner/search" class="newsroom-search Bizible-Exclude" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
    <div class="controls">
        <input id="query" name="query" placeholder="Search" type="text" />
    </div>
</form>
</div>

    </div>
</div>

</div>

        <div class="main-content">
            

    
        <div class="article-module">
            <div class="row-fluid">
                <div class="span8">
                    <div class="article-module-content">
                        <div class="row-fluid article-module-slide  article-module-with-image">
        <div class="article-module-image m-span4" data-image-large="http://a5.mndcdn.com/image/upload/t_next_gen_article_module_padding_4_3_v2/ddgfg5nzcspafxvi9oxd.jpg">
            <div class="photo-holder">
                <div class="media-wrapper">
                    <a href="/devcorner/blog_posts/ember-workshop-30173"><img alt="Ddgfg5nzcspafxvi9oxd" class="article-image" src="http://a5.mndcdn.com/image/upload/t_next_gen_span3_padding_4_3/ddgfg5nzcspafxvi9oxd.jpg" /></a>
                </div>
            </div>
        </div>
    <div class="article-module-text m-span8">
        <div class="article-module-text-inner">
                <div class="article-module-contacts">
                        <a href="/devcorner/contact_people/nicolas-medda-developer-45902" title="Nicolas MEDDA">
                            <img src="http://a5.mndcdn.com/image/upload/t_next_gen_thumb_mini/i896f0mowtpmumfjcgxh.jpg">
                        </a>
                        <a href="/devcorner/contact_people/jonas-brusman-36631" title="Jonas Brusman">
                            <img src="http://a2.mndcdn.com/image/upload/t_next_gen_thumb_mini/xgvnfzyxub1ozc8nealc.jpg">
                        </a>
                </div>
            <h2 class="newsroom-list-header"><a href="/devcorner/blog_posts/ember-workshop-30173">Ember Workshop</a></h2>
            <h4 class="meta">
                <span class="hidden-small">
                    <span class="release-type blogpost"><a href="/devcorner/blog_posts">Blog posts</a></span>
                    &nbsp; • &nbsp;
                </span>
                <span class="article-module-published-at">Oct 16, 2014 19:23 GMT</span>
            </h4>
            <div class="hidden-small">
                    <p>Nico and Jonas held our second workshop for getting started with Ember. The team played around of how to create a simple blog.</p>
            </div>
        </div>
    </div>
</div>
<div class="row-fluid article-module-slide  article-module-with-image">
        <div class="article-module-image m-span4" data-image-large="http://a2.mndcdn.com/image/upload/t_next_gen_article_module_padding_4_3_v2/iegosjdqb3mrjywpgakt.jpg">
            <div class="photo-holder">
                <div class="media-wrapper">
                    <a href="/devcorner/blog_posts/fronteers-2014-the-day-that-never-ended-29624"><img alt="Iegosjdqb3mrjywpgakt" class="article-image" src="http://a2.mndcdn.com/image/upload/t_next_gen_span3_padding_4_3/iegosjdqb3mrjywpgakt.jpg" /></a>
                </div>
            </div>
        </div>
    <div class="article-module-text m-span8">
        <div class="article-module-text-inner">
                <div class="article-module-contacts">
                        <a href="/devcorner/contact_people/joakim-westerlund-36636" title="Joakim Westerlund">
                            <img src="http://a2.mndcdn.com/image/upload/t_next_gen_thumb_mini/suz9bsvbglyyrbsjndwc.jpg">
                        </a>
                        <a href="/devcorner/contact_people/emil-loefquist-36633" title="Emil Löfquist">
                            <img src="http://a1.mndcdn.com/image/upload/t_next_gen_thumb_mini/dziaxg94d7uzi36fwtds.jpg">
                        </a>
                </div>
            <h2 class="newsroom-list-header"><a href="/devcorner/blog_posts/fronteers-2014-the-day-that-never-ended-29624">Fronteers 2014 - The Day That Never Ended</a></h2>
            <h4 class="meta">
                <span class="hidden-small">
                    <span class="release-type blogpost"><a href="/devcorner/blog_posts">Blog posts</a></span>
                    &nbsp; • &nbsp;
                </span>
                <span class="article-module-published-at">Oct 15, 2014 07:49 GMT</span>
            </h4>
            <div class="hidden-small">
                    <p>The last chapter in our adventure. Thanks to Fronteers &amp; Burger Bar for making this trip awesome!</p>
            </div>
        </div>
    </div>
</div>
<div class="row-fluid article-module-slide  article-module-with-image">
        <div class="article-module-image m-span4" data-image-large="http://a4.mndcdn.com/image/upload/t_next_gen_article_module_padding_4_3_v2/smhpj0xszomjzqo6y5t1.jpg">
            <div class="photo-holder">
                <div class="media-wrapper">
                    <a href="/devcorner/blog_posts/maker-space-29398"><img alt="Smhpj0xszomjzqo6y5t1" class="article-image" src="http://a4.mndcdn.com/image/upload/t_next_gen_span3_padding_4_3/smhpj0xszomjzqo6y5t1.jpg" /></a>
                </div>
            </div>
        </div>
    <div class="article-module-text m-span8">
        <div class="article-module-text-inner">
                <div class="article-module-contacts">
                        <a href="/devcorner/contact_people/jan-andersson-36635" title="Jan Andersson">
                            <img src="http://a1.mndcdn.com/image/upload/t_next_gen_thumb_mini/ond9sfg50kbtosb2ow3e.jpg">
                        </a>
                        <a href="/devcorner/contact_people/emil-loefquist-36633" title="Emil Löfquist">
                            <img src="http://a1.mndcdn.com/image/upload/t_next_gen_thumb_mini/dziaxg94d7uzi36fwtds.jpg">
                        </a>
                </div>
            <h2 class="newsroom-list-header"><a href="/devcorner/blog_posts/maker-space-29398">Maker Space</a></h2>
            <h4 class="meta">
                <span class="hidden-small">
                    <span class="release-type blogpost"><a href="/devcorner/blog_posts">Blog posts</a></span>
                    &nbsp; • &nbsp;
                </span>
                <span class="article-module-published-at">Oct 12, 2014 12:00 GMT</span>
            </h4>
            <div class="hidden-small">
                    <p>Mynewsdesk moves into the era of Internet of Things by starting a Maker Space</p>
            </div>
        </div>
    </div>
</div>
<div class="row-fluid article-module-slide  article-module-with-image">
        <div class="article-module-image m-span4" data-image-large="http://a3.mndcdn.com/image/upload/t_next_gen_article_module_padding_4_3_v2/zep8vfgw1gdzbsbkwkt7.jpg">
            <div class="photo-holder">
                <div class="media-wrapper">
                    <a href="/devcorner/blog_posts/fronteers-2014-day-1-29296"><img alt="Zep8vfgw1gdzbsbkwkt7" class="article-image" src="http://a3.mndcdn.com/image/upload/t_next_gen_span3_padding_4_3/zep8vfgw1gdzbsbkwkt7.jpg" /></a>
                </div>
            </div>
        </div>
    <div class="article-module-text m-span8">
        <div class="article-module-text-inner">
                <div class="article-module-contacts">
                        <a href="/devcorner/contact_people/joakim-westerlund-36636" title="Joakim Westerlund">
                            <img src="http://a2.mndcdn.com/image/upload/t_next_gen_thumb_mini/suz9bsvbglyyrbsjndwc.jpg">
                        </a>
                        <a href="/devcorner/contact_people/emil-loefquist-36633" title="Emil Löfquist">
                            <img src="http://a1.mndcdn.com/image/upload/t_next_gen_thumb_mini/dziaxg94d7uzi36fwtds.jpg">
                        </a>
                </div>
            <h2 class="newsroom-list-header"><a href="/devcorner/blog_posts/fronteers-2014-day-1-29296">Fronteers 2014 - Day 1</a></h2>
            <h4 class="meta">
                <span class="hidden-small">
                    <span class="release-type blogpost"><a href="/devcorner/blog_posts">Blog posts</a></span>
                    &nbsp; • &nbsp;
                </span>
                <span class="article-module-published-at">Oct 10, 2014 08:23 GMT</span>
            </h4>
            <div class="hidden-small">
                    <p>Our epic adventure continues as we fight through crowds of developers, wade through coffee rivers, eat cookies (a lot of cookies) and learn new front-end survival skills.</p>
            </div>
        </div>
    </div>
</div>
<div class="row-fluid article-module-slide  article-module-with-image">
        <div class="article-module-image m-span4" data-image-large="http://a3.mndcdn.com/image/upload/t_next_gen_article_module_padding_4_3_v2/q52jmfykesaxbousdq6s.jpg">
            <div class="photo-holder">
                <div class="media-wrapper">
                    <a href="/devcorner/blog_posts/fronteers-2014-the-arrival-29243"><img alt="Q52jmfykesaxbousdq6s" class="article-image" src="http://a3.mndcdn.com/image/upload/t_next_gen_span3_padding_4_3/q52jmfykesaxbousdq6s.jpg" /></a>
                </div>
            </div>
        </div>
    <div class="article-module-text m-span8">
        <div class="article-module-text-inner">
                <div class="article-module-contacts">
                        <a href="/devcorner/contact_people/joakim-westerlund-36636" title="Joakim Westerlund">
                            <img src="http://a2.mndcdn.com/image/upload/t_next_gen_thumb_mini/suz9bsvbglyyrbsjndwc.jpg">
                        </a>
                        <a href="/devcorner/contact_people/emil-loefquist-36633" title="Emil Löfquist">
                            <img src="http://a1.mndcdn.com/image/upload/t_next_gen_thumb_mini/dziaxg94d7uzi36fwtds.jpg">
                        </a>
                </div>
            <h2 class="newsroom-list-header"><a href="/devcorner/blog_posts/fronteers-2014-the-arrival-29243">Fronteers 2014 - The Arrival</a></h2>
            <h4 class="meta">
                <span class="hidden-small">
                    <span class="release-type blogpost"><a href="/devcorner/blog_posts">Blog posts</a></span>
                    &nbsp; • &nbsp;
                </span>
                <span class="article-module-published-at">Oct 09, 2014 07:34 GMT</span>
            </h4>
            <div class="hidden-small">
                    <p>After the plane landed, we took the train from Schiphol airport station, riding it like a wild bull, and got off at this once so important harbor city, the center for all sea based trading coming in and out of Europe. We started our journey with a pitstop at the closest Vlaamse frites place we could find.</p>
            </div>
        </div>
    </div>
</div>
<div class="row-fluid article-module-slide  article-module-with-text">
        <div class="article-module-image m-span4">
            <a href="/devcorner/blog_posts/a-simple-https-server-for-development-28395" class="material"><img alt="Media-no-image" src="http://d9qz450atvita.cloudfront.net/assets/redesign/components/newsroom/graphics/media-no-image-81e2649f06729d443e75a9ce76cf33ed.gif" /></a>        </div>
    <div class="article-module-text m-span8">
        <div class="article-module-text-inner">
                <div class="article-module-contacts">
                        <a href="/devcorner/contact_people/nicolas-medda-developer-45902" title="Nicolas MEDDA">
                            <img src="http://a5.mndcdn.com/image/upload/t_next_gen_thumb_mini/i896f0mowtpmumfjcgxh.jpg">
                        </a>
                </div>
            <h2 class="newsroom-list-header"><a href="/devcorner/blog_posts/a-simple-https-server-for-development-28395">A simple httpS server for development</a></h2>
            <h4 class="meta">
                <span class="hidden-small">
                    <span class="release-type blogpost"><a href="/devcorner/blog_posts">Blog posts</a></span>
                    &nbsp; • &nbsp;
                </span>
                <span class="article-module-published-at">Sep 24, 2014 09:11 GMT</span>
            </h4>
            <div class="hidden-small">
                    <div class="hidden-medium">
                        <div class="markdown"><p>Last day, I had to serve some html pages via HTTPS. But didn't really know any simple solution to do this.</p><p>Here is one. A simple wrapper of the python SimpleHTTPServer with support for SSL.</p><p>Before running the server, you'll need to create your certificate :</p><pre>&lt;code&gt;openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes&lt;/code&gt;</pre><p>Now that you have your certificate, create a file srv.py :</p><p><a href="https://gist.github.com/b2l/098967f44c2d64ff55ab" rel="nofollow">gist</a></p><p>Add this file to your path, or simply call it from wherever you want like that :</p><p><code>/path/to/srv.py</code></p><p>This will serve the file in your current directory on <a href="https://localhost:4443" rel="nofollow">https://localhost:4443</a></p><p>If you need a non httpS version to simply serve som static file, you can use the standard python simpleHTTPServer like this :</p><p><code>
python -m SimpleHTTPServer
</code></p></div>
                    </div>
                    <div class="visible-medium">
                        <p>Last day, I had to serve some html pages via HTTPS. But didn&#x27;t really know any simple solution to do this. Here is one. A simple wrapper of the python SimpleHTTPServer with support for SSL.</p>
                    </div>
            </div>
        </div>
            <div class="article-module-read-more hidden-medium">
                <div class="article-module-read-more-fade"></div>
                <a href="/devcorner/blog_posts/a-simple-https-server-for-development-28395">Read more »</a>
            </div>
    </div>
</div>
<div class="row-fluid article-module-slide  article-module-with-text">
        <div class="article-module-image m-span4">
            <a href="/devcorner/blog_posts/social-media-parser-gem-28452" class="material"><img alt="Media-no-image" src="http://d9qz450atvita.cloudfront.net/assets/redesign/components/newsroom/graphics/media-no-image-81e2649f06729d443e75a9ce76cf33ed.gif" /></a>        </div>
    <div class="article-module-text m-span8">
        <div class="article-module-text-inner">
                <div class="article-module-contacts">
                        <a href="/devcorner/contact_people/alexander-rothe-36738" title="Alexander Rothe">
                            <img src="http://a1.mndcdn.com/image/upload/t_next_gen_thumb_mini/pylkopmskijacjvcsmuu.jpg">
                        </a>
                        <a href="/devcorner/contact_people/jonas-brusman-36631" title="Jonas Brusman">
                            <img src="http://a2.mndcdn.com/image/upload/t_next_gen_thumb_mini/xgvnfzyxub1ozc8nealc.jpg">
                        </a>
                </div>
            <h2 class="newsroom-list-header"><a href="/devcorner/blog_posts/social-media-parser-gem-28452">Social Media Parser gem</a></h2>
            <h4 class="meta">
                <span class="hidden-small">
                    <span class="release-type blogpost"><a href="/devcorner/blog_posts">Blog posts</a></span>
                    &nbsp; • &nbsp;
                </span>
                <span class="article-module-published-at">Sep 10, 2014 08:28 GMT</span>
            </h4>
            <div class="hidden-small">
                    <div class="hidden-medium">
                        <div class="markdown"><p>The new Network feature on Mynewsdesk will introduce a lot of new ways you can manage a contact. For instance, adding social media profiles and links to each contact.</p><p>To keep the user input as easy as possible, we wanted people to basically just paste urls and then it would be parsed into social media profile objects it possible (we use some of them to fetch content from their API). Pasting links works well for social media profiles that aren't username heavy, like Facebook, but not for Twitter or Instagram, which is very username heavy, so the logical way to add a new profile for them would be to add a provider and username only.</p><p>We built this logic about a month prior to today, but needed it for two apps in our infrastructure, so we've been converting it and extending it to a gem, which we've published to rubygems today.<br></p><p>Here's how it works.</p><pre>parser = SocialMediaParser.parse "<a href="https://www.facebook.com/teamcoco" rel="nofollow">https://www.facebook.com/teamcoco</a>&quot;
=&gt; #&lt;SocialMediaParser::SocialMedia::Facebook:0x007fe014ef0f78 @url="<a href="https://www.facebook.com/teamcoco&quot;&amp;gt" rel="nofollow">https://www.facebook.com/teamcoco&quot;&amp;gt</a>;

parser.username
=&gt; "teamcoco"

parser.provider
=&gt; "facebook"

parser.url
=&gt; "<a href="https://www.facebook.com/teamcoco" rel="nofollow">https://www.facebook.com/teamcoco</a>&quot;</pre><br><p>If you instead want to construct a profile using provider and username options, you can use this</p><pre>parser = SocialMediaParser.parse provider: "twitter", username: "fallontonight"
=&gt; #&lt;SocialMediaParser::SocialMedia::Twitter:0x007fe40ab08330 @provider="twitter", @username="fallontonight"&gt;

parser.url
=&gt; "<a href="https://www.twitter.com/fallontonight" rel="nofollow">https://www.twitter.com/fallontonight</a>&quot;</pre><p>When there's not enough input provided for SocialMediaParser to extract a valid profile, it will just return a Link object</p><pre>parser = SocialMediaParser.parse url: "<a href="http://www.mynewsdesk.com" rel="nofollow">http://www.mynewsdesk.com</a>&quot;
=&gt; #&lt;SocialMediaParser::Link:0x007fe40ab9b770 @url="<a href="http://www.mynewsdesk.com&quot;&amp;gt" rel="nofollow">http://www.mynewsdesk.com&quot;&amp;gt</a>;

parser.url
=&gt; "<a href="http://www.mynewsdesk.com" rel="nofollow">http://www.mynewsdesk.com</a>&quot;

parser.username
=&gt; nil</pre><p>That's it, really. We hope to find this useful to someone!<br></p>
</div>
                    </div>
                    <div class="visible-medium">
                        <p>Parse social media attributes from url or construct url from attributes</p>
                    </div>
            </div>
        </div>
            <div class="article-module-read-more hidden-medium">
                <div class="article-module-read-more-fade"></div>
                <a href="/devcorner/blog_posts/social-media-parser-gem-28452">Read more »</a>
            </div>
    </div>
</div>
<div class="row-fluid article-module-slide  article-module-with-text">
        <div class="article-module-image m-span4">
            <a href="/devcorner/blog_posts/frontend-testing-27967" class="material"><img alt="Media-no-image" src="http://d9qz450atvita.cloudfront.net/assets/redesign/components/newsroom/graphics/media-no-image-81e2649f06729d443e75a9ce76cf33ed.gif" /></a>        </div>
    <div class="article-module-text m-span8">
        <div class="article-module-text-inner">
                <div class="article-module-contacts">
                        <a href="/devcorner/contact_people/nicolas-medda-developer-45902" title="Nicolas MEDDA">
                            <img src="http://a5.mndcdn.com/image/upload/t_next_gen_thumb_mini/i896f0mowtpmumfjcgxh.jpg">
                        </a>
                </div>
            <h2 class="newsroom-list-header"><a href="/devcorner/blog_posts/frontend-testing-27967">Frontend Testing</a></h2>
            <h4 class="meta">
                <span class="hidden-small">
                    <span class="release-type blogpost"><a href="/devcorner/blog_posts">Blog posts</a></span>
                    &nbsp; • &nbsp;
                </span>
                <span class="article-module-published-at">Sep 01, 2014 07:20 GMT</span>
            </h4>
            <div class="hidden-small">
                    <div class="hidden-medium">
                        <div class="markdown">In this post, we're going to talk about frontend testing. Because we know why we should test, and what,
but not always how.<br><p>This post is here to help you get started.</p>
<p>For this post, we are going to create a Todo Application, using vanilla JS so that we can test everything.<br>The final app demo is here : <a href="http://b2l.github.io/todo-app/html/todo.html" rel="nofollow">http://b2l.github.io/todo-app/html/todo.html</a><br>And the application code is here : <a href="https://github.com/b2l/todo-app" rel="nofollow">https://github.com/b2l/todo-app</a></p>
<p>Before we get started, let's create the project directory and jump into it :</p>
<pre>mkdir todo-app
cd todo-app</pre><h2>The tools</h2>
<p>This project is really basic, so we won’t set up any assets compilation.<br>We will just have an html entry point that will load any file we need.</p>
<p>We will use the following libraries to test the application :</p>
<ul>
<li><a href="http://visionmedia.github.io/mocha/" rel="nofollow">Mocha </a>(test framework)</li>
<li><a href="http://chaijs.com/" rel="nofollow">ChaiJs </a>(assertion library)</li>
<li><a href="http://www.seleniumhq.org/" rel="nofollow">selenium</a> webdriver (from the selenium website: "Selenium automates browsers. That's it!")</li>
</ul>
<p>Let's install them :</p>
<pre>npm install -D mocha chai selenium-webdriver
</pre><p>Mocha provide a Command Line Interface that makes it easier to launch tests, so install it:</p>
<pre>npm install -g mocha
</pre><p>Selenium work by having a java application that control the browser. You, as a client, connect to this web server and send it some command.</p>
<p>To use selenium, we need the selenium java server. 
Download it from here : <a href="http://selenium-release.storage.googleapis.com/2.42/selenium-server-standalone-2.42.2.jar" rel="nofollow">selenium standalone server</a></p>
<p>We will need the path to the jar file you just downloaded.</p>
<h2>Project structure</h2>
<p>The project is a full frontend project, so we will need some JavaScript, CSS and HTML.</p>
<p>Let’s create a structure for this.</p>
<pre>mkdir html
mkdir css
mkdir js
mkdir tests
</pre><h2>Unit testing</h2>
<p>Let's create our first test.</p>
<p>Our todo application will manage a list of todos. So we want to be able to :</p>
<ul>
<li>create a todo</li>
<li>get a todo</li>
<li>get all todos</li>
<li>update a todo</li>
<li>remove a todo</li>
<li>mark a todo as done</li>
<li>mark a todo as not done</li>
</ul>
<p>Here is a part of our test file :</p>
<p><a href="https://gist.github.com/b2l/9b391b0e048f529fbfba" rel="nofollow">tests/todo-model.js gist</a></p>
<p>Before looking at the implementation, let's run the test :</p>
<pre>mocha tests
</pre><p>Ok mocha complains that the file ../js/Todos.js doesn't exist.
Let's create it now :</p>
<p><a href="https://gist.github.com/b2l/1555f4d01f8246130e90" rel="nofollow">js/Todos.js gist</a></p>
<p>Run tests again :</p>
<pre>mocha tests
</pre><p>And we are done !</p>
<h2>Interface test</h2>
<p>The test workflow with selenium is as follow :</p>
<ul>
<li>Run the selenium server </li>
<li>Create a client with options</li>
<li>Execute command</li>
</ul>
<p>Everything is a command, or an action, from asking selenium for a node matching a selector to clicking somewhere or closing the browser.</p>
<p>The first point can be achieved in different ways, either by a script which manages the server, or we can start / stop it from the test.</p>
<p>We will use the second option, here is the file to initialize the server :</p>
<p><a href="https://gist.github.com/b2l/20085aac7a019131968c" rel="nofollow">selenium-server.js gist</a></p>
<p>I won't go through the todo-application implementation because it's not the point of this article.</p>
<p>If you want to follow this step by step, just copy the css, html and js directories.
Run our application :</p>
<pre>python -m SimpleHTTPServer
</pre><p>You can test your application here : <a href="http://localhost:8000/html/todo.html" rel="nofollow"></a><a href="http://localhost:8000/html/todo.html" rel="nofollow">http://localhost:8000/html/todo.html</a></p>
<p>Here is the interface test :</p>
<p><a href="https://gist.github.com/b2l/48eb382ba86d2dac2232" rel="nofollow">tests/todo-interface.js gist</a></p>
<p>To run the interface test, we can use the same command as before :</p><p><b>Before we run the test: </b>if you are a user of tmux (screen should have the same issue), please note that you will have to attach the selenium server to the user space as describe here : <a href="http://borkweb.com/story/chromedriver-doesnt-run-in-tmux" rel="nofollow">http://borkweb.com/story/chromedriver-doesnt-run-in-tmux</a><br></p>
<pre>mocha tests/todo-interface.js
</pre><p>You can see a chrome browser starting in background and interacting with our application. Awesome !</p>
<h2>Conclusion</h2>
<p>There you are !
We have extracted and tested the domain part of the application (the Todos model) and we have test that the interface work properly too.
You now have a small setup for testing your frontend application.</p>
</div>
                    </div>
                    <div class="visible-medium">
                        <p></p>
                    </div>
            </div>
        </div>
            <div class="article-module-read-more hidden-medium">
                <div class="article-module-read-more-fade"></div>
                <a href="/devcorner/blog_posts/frontend-testing-27967">Read more »</a>
            </div>
    </div>
</div>
<div class="row-fluid article-module-slide  article-module-with-text">
        <div class="article-module-image m-span4">
            <a href="/devcorner/blog_posts/the-unknown-inverse_of-20822" class="material"><img alt="Media-no-image" src="http://d9qz450atvita.cloudfront.net/assets/redesign/components/newsroom/graphics/media-no-image-81e2649f06729d443e75a9ce76cf33ed.gif" /></a>        </div>
    <div class="article-module-text m-span8">
        <div class="article-module-text-inner">
                <div class="article-module-contacts">
                        <a href="/devcorner/contact_people/markus-nordin-36640" title="Markus Nordin">
                            <img src="http://a5.mndcdn.com/image/upload/t_next_gen_thumb_mini/bmkkk2lmjnqydpoevjra.jpg">
                        </a>
                </div>
            <h2 class="newsroom-list-header"><a href="/devcorner/blog_posts/the-unknown-inverse_of-20822">The (unknown?) inverse_of</a></h2>
            <h4 class="meta">
                <span class="hidden-small">
                    <span class="release-type blogpost"><a href="/devcorner/blog_posts">Blog posts</a></span>
                    &nbsp; • &nbsp;
                </span>
                <span class="article-module-published-at">Jun 13, 2013 12:33 GMT</span>
            </h4>
            <div class="hidden-small">
                    <div class="hidden-medium">
                        <div class="markdown"><br><p>Sometimes when working with Rails objects with relationships in memory, strange things can happen. You can edit the attribute of some object and when accessing it using a relationship, the changes will be gone. It has to do with in-memory objects and how ActiveRecord handles them. But there is a way to make sure you always work with the same object. </p>

<p><code>inverse_of</code> is a Rails relationship option that will optimize object loading and can be really helpful when you're working with object in memory a lot. <a href="http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Bi-directional+associations" rel="nofollow">It's not very well documented</a>, so I thought I'd write a small blog post about it.</p>

<p>The setup:</p>

<a href="https://gist.github.com/mnordin/07f8eb0ebb591335d9d8" rel="nofollow">Setup gist</a>





<p>If I were to open up a console and add a Post with two Comments, I could then do this:</p><p><a href="https://gist.github.com/mnordin/80ce6ccf20cc3bccaef0" rel="nofollow">Console gist</a><br></p>



<p>The last few lines does seem weird, doesn't it? I was banging my head quite a bit after discovering this. But here's <code>inverse_of</code> to the rescue! Please note the pluralization of <code>comments</code>, it maps to how the inversed relationship will be used.</p><p><a href="https://gist.github.com/mnordin/3bd6b70e1fbb8fb874a7" rel="nofollow">Gist</a><br></p>



<p>Using <code>inverse_of</code> will trigger ActiveRecord to optimize object handling. In other words, it will use the same in-memory object when it's the same object and accessing it the way the inverse_of relationship has been configued.</p><p><a href="https://gist.github.com/mnordin/b91386acd5c4959caa0b" rel="nofollow">Inverse of gist</a><br></p>



<p>It has a few limitations and you can <a href="http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Bi-directional+associations" rel="nofollow">read some more about it</a> in the Ruby on Rails documentation.</p>

</div>
                    </div>
                    <div class="visible-medium">
                        <p></p>
                    </div>
            </div>
        </div>
            <div class="article-module-read-more hidden-medium">
                <div class="article-module-read-more-fade"></div>
                <a href="/devcorner/blog_posts/the-unknown-inverse_of-20822">Read more »</a>
            </div>
    </div>
</div>
<div class="row-fluid article-module-slide  article-module-with-text">
        <div class="article-module-image m-span4">
            <a href="/devcorner/blog_posts/introducing-chefup-20821" class="material"><img alt="Media-no-image" src="http://d9qz450atvita.cloudfront.net/assets/redesign/components/newsroom/graphics/media-no-image-81e2649f06729d443e75a9ce76cf33ed.gif" /></a>        </div>
    <div class="article-module-text m-span8">
        <div class="article-module-text-inner">
                <div class="article-module-contacts">
                        <a href="/devcorner/contact_people/jan-andersson-36635" title="Jan Andersson">
                            <img src="http://a1.mndcdn.com/image/upload/t_next_gen_thumb_mini/ond9sfg50kbtosb2ow3e.jpg">
                        </a>
                </div>
            <h2 class="newsroom-list-header"><a href="/devcorner/blog_posts/introducing-chefup-20821">Introducing Chefup</a></h2>
            <h4 class="meta">
                <span class="hidden-small">
                    <span class="release-type blogpost"><a href="/devcorner/blog_posts">Blog posts</a></span>
                    &nbsp; • &nbsp;
                </span>
                <span class="article-module-published-at">Mar 04, 2013 15:31 GMT</span>
            </h4>
            <div class="hidden-small">
                    <div class="hidden-medium">
                        <div class="markdown"><p>A few weeks ago <a href="https://github.com" rel="nofollow">Github</a> released <a href="https://github.com/blog/1345-introducing-boxen" rel="nofollow">Boxen</a>, a “tool for automating and managing Macs at GitHub”. At Mynewsdesk, with more than ten developers and a handful of projects, we can see the need for this kind of software. When summed up, many days have been spent trying to get developer laptops back in a working state for one reason or the other. We also had a lot of smart configurations, custom hacks, different versions of databases, sometimes shared with some collegues but without a central repository of collaboration for this kind of configurations.</p>

<p>At Mynewsdesk we’re using <a href="http://www.opscode.com/chef/" rel="nofollow">Chef</a> for setting up and configuring our server environment. Boxen didn’t feel like a perfect fit for us, since it’s based on <a href="https://puppetlabs.com/" rel="nofollow">Puppet</a>. Puppet and Chef are the two main competitors in this area of operating system configuration management.</p>

<p>To solve this we’re now presenting Chefup. The pipe dream of Chefup (and Boxen) is to be able to install a full developer machine with a single command. But more than that it also provides a way of keeping the machine in a working state, with all key components fully documented. As a bonus this can all be done without running sudo and wreak havoc with your system. Some cookbooks may themselves run <code>sudo</code> though, such as <code>homebrew</code> and <code>pow</code>.
<br></p><h2>Initial Setup</h2>
<br><em>Firstly, this is still beta software! Please make a backup of your machine before running it and be prepared for massive losses of data, corrupted files and possibly the plague. Report any bugs to <a href="https://github.com/mynewsdesk/chefup/issues" rel="nofollow">The Chefup Issue Tracker</a>.</em>
<br><ol>
<br>	<li>To begin with, clone our open source project from Github;
<br><pre>git clone git://github.com/mynewsdesk/chefup.git</pre>
<br>If you still don’t have git installed you may want to <code>curl</code> it instead;
<br><pre>curl -L <a href="https://github.com/mynewsdesk/chefup/tarball|tar" rel="nofollow">https://github.com/mynewsdesk/chefup/tarball|tar</a> xz</pre>
<br>That will get you a version without the <code>.git</code> directory but you can make a proper clone later on, when you have access to git.</li>
<br>	<li>To be able to compile you also need to install XCode from App Store.You’ll need to agree to the license by running;
<br><pre>xcodebuild -license	</pre>
<br></li>
<br>	<li>Now create a <code>Cheffile</code>. That’s a list of external Chef cookbooks to be installed.
<br><pre>cp Cheffile.example Cheffile</pre>
<br>If you work at Mynewsdesk and have access to our private repos you may uncomment the <code>chef-mynewsdesk</code> repo to setup our apps.</li>
<br>	<li>After this you want to decide exactly what Chefup will install for you. This is done in the <code>node.json</code>file. An example is provided for you so you want to begin with copying it.
<br><pre>cp node.json.example node.json</pre>
<br>Now have a look at that file. In the header you enter your personal data in form of name and email. Then you choose where you want to keep your code, where the default is <code>~/dev</code>.<p></p>

<p>After that have a look at the run list. That’s a list of packages, or cookbooks in Chef terminology.</p></li>
<br>	<li>Now, logged in as your normal user, run;
<br><pre>bin/chefup	</pre>
<br>This will install the <code>bundler</code> and <code>librarian-chef</code> gems, the <code>homebrew</code> and <code>dmg</code> cookbooks and any cookbooks listed in the run list in <code>node.json</code>. If you have <code>chefup-bin</code> in your run list you will have chefup in your $PATH after the first run, so it will be enough to just run <code>chefup</code>.<p></p>

<p>Any backups of overwritten files are kept in <code>tmp/backup</code>. Any installed apps (with an .app suffix) will be installed in <code>~/Applications</code> to avoid needing root permissions.</p></li>
<br></ol>
<br><h2>Living with Chefup</h2>
<br>After the installation it is safe and even encouraged to run <code>chefup</code> as often as you want. It will then overwrite any changes you made to the Chefup controlled files. Therefore, if you install for example the bash cookbook you will not want to edit <code>~/.bashrc</code> manually any more. Custom changes will instead be put in <code>~/.rc.d/</code>. More information may be found in the <code>README.md</code> of the respective cookbooks under <code>site-cookbooks</code>, such as <code>chefup/site-cookbooks/bash/README.md</code>.<p></p>

<p>If you miss something, feel free to add a cookbook. Either as a new git repo and adding it to <code>Cheffile</code>. It will then be installed to <code>cookbooks</code> in the next run. Or by cloning the chefup-repo, adding cookbooks to <code>site-cookbooks</code>. Then please feel free to send a pull request to have it added to the official repo, if it could be of use to others.</p>
</div>
                    </div>
                    <div class="visible-medium">
                        <p></p>
                    </div>
            </div>
        </div>
            <div class="article-module-read-more hidden-medium">
                <div class="article-module-read-more-fade"></div>
                <a href="/devcorner/blog_posts/introducing-chefup-20821">Read more »</a>
            </div>
    </div>
</div>

                    </div>
                </div>
                <div class="span4 article-latest">
                    <div class="article-module-navigation"></div>
                </div>
            </div>
        </div>


    

            <div class="newsroom-section">
            <div class="row-fluid">
                <div class="span12">
                    <h2 class="newsroom-section-header">
                        <i class="icon-camera"></i>
                        Images &amp; Videos
                        <small>
                            <a href="/devcorner/images">9 images</a>
                            
                        </small>
                    </h2>
                </div>
            </div>

            <div class="row-fluid">
                <div class="span12">
                    <div id="media-carousel" class="carousel slide" data-interval="false">
                        <div class="carousel-inner">
                                    <div class="item row-fluid active">
                                            <div class="span2 m-span4">
    <div class="photo-holder">
        <div class="media-wrapper">
                <a href="/devcorner/images/components-at-twitter-349722" class="material" title="Components at twitter">
                  <img alt="Components at twitter" class="lazy-loading" data-is-loaded="false" data-original-url="http://a2.mndcdn.com/image/upload/t_next_gen_carousel_padding_4_3/dqcnwbjidfaabqazg6cb.jpg" src="http://d9qz450atvita.cloudfront.net/assets/bg/general/140x105-t-c65320e394dd90a482d65661438fa871.gif" />
                </a>
        </div>
    </div>
</div>

                                            <div class="span2 m-span4">
    <div class="photo-holder">
        <div class="media-wrapper">
                <a href="/devcorner/images/raise-your-prices-for-internet-explorer-8-349723" class="material" title="Raise your prices for Internet Explorer 8">
                  <img alt="Raise your prices for Internet Explorer 8" class="lazy-loading" data-is-loaded="false" data-original-url="http://a1.mndcdn.com/image/upload/t_next_gen_carousel_padding_4_3/y8web7np7dkitdcu6s8d.jpg" src="http://d9qz450atvita.cloudfront.net/assets/bg/general/140x105-t-c65320e394dd90a482d65661438fa871.gif" />
                </a>
        </div>
    </div>
</div>

                                            <div class="span2 m-span4">
    <div class="photo-holder">
        <div class="media-wrapper">
                <a href="/devcorner/images/people-at-the-fronteers-2014-conference-day-2-349724" class="material" title="People at the Fronteers 2014 conference day 2">
                  <img alt="People at the Fronteers 2014 conference day 2" class="lazy-loading" data-is-loaded="false" data-original-url="http://a5.mndcdn.com/image/upload/t_next_gen_carousel_padding_4_3/fz0tj5q4umkpen4q4hs2.jpg" src="http://d9qz450atvita.cloudfront.net/assets/bg/general/140x105-t-c65320e394dd90a482d65661438fa871.gif" />
                </a>
        </div>
    </div>
</div>

                                            <div class="span2 m-span4">
    <div class="photo-holder">
        <div class="media-wrapper">
                <a href="/devcorner/images/1-8mb-is-the-average-weight-of-the-web-page-today-349725" class="material" title="1.8MB is the average weight of the web page today">
                  <img alt="1.8MB is the average weight of the web page today" class="lazy-loading" data-is-loaded="false" data-original-url="http://a5.mndcdn.com/image/upload/t_next_gen_carousel_padding_4_3/xzytfeevyhci0l2wwq9n.jpg" src="http://d9qz450atvita.cloudfront.net/assets/bg/general/140x105-t-c65320e394dd90a482d65661438fa871.gif" />
                </a>
        </div>
    </div>
</div>

                                            <div class="span2 m-span4">
    <div class="photo-holder">
        <div class="media-wrapper">
                <a href="/devcorner/images/why-make-accessibility-an-optional-added-extra-349727" class="material" title="Why make accessibility an optional, added extra?">
                  <img alt="Why make accessibility an optional, added extra?" class="lazy-loading" data-is-loaded="false" data-original-url="http://a1.mndcdn.com/image/upload/t_next_gen_carousel_padding_4_3/cvk1yktxtjt67scrcyje.jpg" src="http://d9qz450atvita.cloudfront.net/assets/bg/general/140x105-t-c65320e394dd90a482d65661438fa871.gif" />
                </a>
        </div>
    </div>
</div>

                                            <div class="span2 m-span4">
    <div class="photo-holder">
        <div class="media-wrapper">
                <a href="/devcorner/images/build-for-a-mobile-web-348980" class="material" title="Build for a mobile web">
                  <img alt="Build for a mobile web" class="lazy-loading" data-is-loaded="false" data-original-url="http://a5.mndcdn.com/image/upload/c_crop,h_1152,w_1536,x_0,y_764/t_next_gen_carousel_fill_4_3/k8zlkexo0i4ktttucoz7.jpg" src="http://d9qz450atvita.cloudfront.net/assets/bg/general/140x105-t-c65320e394dd90a482d65661438fa871.gif" />
                </a>
        </div>
    </div>
</div>

                                    </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>


    

            <div class="newsroom-section">
            <div class="row-fluid">
                <div class="span12">
                    <h2 class="newsroom-section-header">
                        <i class="icon-user"></i>
                        Contacts <small><a href="/devcorner/contact_people">14 contacts</a></small>
                    </h2>
                </div>
            </div>
                <div class="row-fluid row-contacts with-articles">
                        <div class="article vcard m-clearfix even">
        <div class="span2 m-span4">
        <div class="media-wrapper">
            <a href="/devcorner/contact_people/kristian-hellquist-36637" class="material">
                    <img alt="Kristian Hellquist" src="http://a3.mndcdn.com/image/upload/t_next_gen_span3_fill_faces_4_3/yffhzjbgtbk8knvbkmqs.jpg" />            </a>
        </div>
    </div>
        <div class="span4 m-span8">
        <div class="header">
                <h2 class="newsroom-list-header"><a href="/devcorner/contact_people/kristian-hellquist-36637" title="Kristian Hellquist"><span class="fn">Kristian Hellquist</span></a></h2>
        </div>
        <p>
                <ul class="unstyled">
    <li><span class="release-type press-contact">Press Contact</span></li>
    <li><span class="role">Head of Development</span></li>
    
    <li><i class='icon-envelope'></i> <span class="obfuscated-email" data-encrypted="GMR+ktRcmrbJxBIHv+szFbqCH6wc9bIVbfXG/QC/npkpT4n85v4AKQ==
" data-url="/decrypt?site="><span>kr</span><span class="hide">hj</span><span class="hide">jg</span><span>is</span><span>ti</span><span>an</span><span>.h</span><span class="hide">xa</span><span class="hide">zg</span><span class="hide">jm</span><span>el</span><span class="hide">ud</span><span class="hide">hz</span><span>lq</span><span>ui</span><span>st</span><span>@m</span><span class="hide">ky</span><span class="hide">xy</span><span class="hide">cb</span><span>yn</span><span>ew</span><span>sd</span><span class="hide">wj</span><span>es</span><span>k.</span><span class="hide">lx</span><span>co</span><span class="hide">xu</span><span>m</span></span></li>
    <li class="tel"><i class='icon-phone'></i> <abbr class="type" title="work"><span class="value">+46704585735</span></abbr></li>
    
        <li>
            <ul class="unstyled">
                
                <li><i class='icon-twitter-sign'></i> <a href="https://twitter.com/meeiw" class="url" rel="me" title="Micro blog">https://twitter.com/meeiw</a></li>
                <li><i class='icon-linkedin-sign'></i> <a href="http://se.linkedin.com/in/kristianhellquist" class="url" rel="me" title="Social Network">http://se.linkedin.com/in/kristianhel...</a></li>
                <li><i class='icon-phone-sign'></i> <a href="skype:kristian.hellquist?call" class="url" title="Skype">kristian.hellquist</a></li>
                
            </ul>
        </li>
</ul>

            <div class="hidden-small">
                Ten+ years of web development experience. I've been working in different setups: own web-shop, failing startups and... <a href="/devcorner/contact_people/kristian-hellquist-36637">Show more</a>
            </div>
        </p>
    </div>
</div>

                </div>
        </div>


    <div class="newsroom-section">
    <h2 class="newsroom-section-header">About Mynewsdesk Devcorner</h2>
    <div class="row-fluid newsroom-summary">
        <div class="span2">
            <div class="newsroom-logo">
                
            </div>
        </div>
        <div class="span4 clearfix">
                <h3 class="newsroom-list-header">Mynewsdesk Devcorner</h3>
            <div id="newsroom-summary-box">
                                    <p>Get to know whats happening in the development team of Mynewsdesk</p>            </div>
            <div class="follow-us">
                        
    <a href="/media/follow_toggle/57022" class="event-tracking ajax-tracking internal-follow-button follow-trigger" data-event-action="follow-newsroom" data-event-category="new-follow-signup" data-event-label="follow-footer" data-url="/devcorner/follow_overlay">
        <span class="button">
            <span class="follow-icon"><img alt="Mnd-retina" src="http://d9qz450atvita.cloudfront.net/assets/components/follow-button/mnd-retina-0690847fb0ac018d1288365d203a03bb.png" /></span>
            <span class="content">Follow Mynewsdesk Devcorner</span>
        </span>
        <span class="count">
            <i></i>
            <u></u>
            <span class="number">
                13
            </span>
        </span>
</a>
            </div>
            <div class="social">
    <div
        class="sharrre small"
        data-twitter-account="mynewsdesk"
        data-test-url="http://www.mynewsdesk.com/devcorner"
        
    >
    </div>
    <div class="custom-buttons">
        <a href="#" class="btn btn-small open-share-email" data-id="57022" data-type-of-media="Pressroom" data-url="http://www.mynewsdesk.com/devcorner" title="Send as e-mail"><i class='icon-envelope'></i> Send as e-mail</a>
        <a class="addthis_button_more btn btn-small" title="Share this">
            <i class='icon-share-alt'></i> Share this
        </a>
    </div>
</div>


        </div>
        <div class="span3">

        </div>
        <div class="span3">
                <h3 class="newsroom-list-header"><i class="icon-bookmark"></i> Subscribe <small>RSS</small></h3>
                <ul class="links">
                        <li>
                            <a href="http://www.mynewsdesk.com/rss/current_news/57022" rel="nofollow">Current News</a>
                        </li>
                        <li>
                            <a href="http://www.mynewsdesk.com/rss/source/51495/blog_post" class="sp-i sp-rss-subscribe16x16" rel="nofollow">Blog posts</a>
                        </li>
                        <li>
                            <a href="http://www.mynewsdesk.com/rss/source/51495/event" class="sp-i sp-rss-subscribe16x16" rel="nofollow">Events</a>
                        </li>
                        <li>
                            <a href="http://www.mynewsdesk.com/rss/source/51495/image" class="sp-i sp-rss-subscribe16x16" rel="nofollow">Images</a>
                        </li>
                        <li>
                            <a href="http://www.mynewsdesk.com/rss/source/51495/contact_person" class="sp-i sp-rss-subscribe16x16" rel="nofollow">Contacts</a>
                        </li>
                </ul>
        </div>
    </div>
</div>


    
            <div class="newsroom-section">
                <div class="concern row1">
                    <div class="row-fluid">
                        <div class="span12">
                            <h2 class="newsroom-section-header">
                                Enterprise
                            </h2>
                        </div>
                    </div>
                    <div class="row-fluid">
                        <div class="span12">
                                <div class="row-fluid">
                                        <div class="span3">
                                            <div class="concern-item ">
    <a href="http://www.mynewsdesk.com/se/pressroom/mynewsdesk" class="logo"><img alt="Go to Mynewsdesk&#x27;s Newsroom" src="http://a1.mndcdn.com/image/upload/t_logotype_v3/n9oohfaxudaztvesagea.png" /></a>
</div>

                                        </div>
                                </div>
                        </div>
                    </div>
                </div>
            </div>



            
        </div>
    </div>





        </div>

        <footer id="main-footer">
    <div class="row">
        <div class="col-xs-12 col-md-4">
            <section class="market">
                <div class="dropup">
                    <button class="btn" type="button" id="market-dropdown" data-toggle="dropdown">
                        <i class="fa fa-globe icon icon-globe"></i>
                        International
                        <i class="fa fa-chevron-down icon icon-chevron-down"></i>
                    </button>
                    <ul class="dropdown-menu" role="menu" labeledBy="market-dropdown">
                            <li>
                                <a href="http://www.mynewsdesk.com/?switch=true">
                                    International
</a>                            </li>
                            <li>
                                <a href="http://www.mynewsdesk.com/de/">
                                    Germany
</a>                            </li>
                            <li>
                                <a href="http://www.mynewsdesk.com/dk/">
                                    Denmark
</a>                            </li>
                            <li>
                                <a href="http://www.mynewsdesk.com/fi/">
                                    Finland
</a>                            </li>
                            <li>
                                <a href="http://www.mynewsdesk.com/no/">
                                    Norway
</a>                            </li>
                            <li>
                                <a href="http://www.mynewsdesk.com/se/">
                                    Sweden
</a>                            </li>
                            <li>
                                <a href="http://www.mynewsdesk.com/uk/">
                                    United Kingdom
</a>                            </li>
                            <li>
                                <a href="http://www.mynewsdesk.com/us/">
                                    United States
</a>                            </li>
                    </ul>
                </div>
            </section>
        </div>

        <div class="col-xs-12 col-md-4">
            <section class="social">
                <header>
                </header>
                <ul>
                    <li><a href="#"><i class="icon-twitter-sign"></i></a></li>
                    <li><a href="#"><i class="icon-facebook-sign"></i></a></li>
                    <li><a href="#"><i class="icon-flickr"></i></a></li>
                    <li><a href="#"><i class="icon-google-plus-sign"></i></a></li>
                </ul>
            </section>
            <section class="legal">
                <ul>
                    <li>
                        <a href="http://www.mynewsdesk.com/about/terms-and-conditions?locale=en">Terms &amp; conditions</a>
                    </li>
                </ul>
            </section>
        </div>

        <div class="col-xs-12 col-md-4">
            <section class="copyright">
                Copyright © 2014 Mynewsdesk. All rights reserved.
            </section>
        </div>
    </div>
</footer>

            <div id="hosted-newsroom-overlay-notification" class="overlay-notification error hosted-newsroom hide">
        <h2>You haven&#x27;t completed the steps for your Hosted Newsroom</h2>
        <p>You haven't entered a correct link to your helper.html file for your Hosted Newsroom. Go to <a href='http://publish.mynewsdesk.com/com/hosted_newsroom/settings'>Publish</a> and complete the steps.</p>
    </div>
    <div id="signup-overlay-box" class="modal hide overlay-box" tabindex="-1" role="dialog" aria-hidden="true"></div>


    </div>
    <div class="sb-slidebar sb-right">
    <div class="header">
        <div class="logo">
    <a href="http://www.mynewsdesk.com/">
        <img alt="Logo" class="newsroom" src="http://a1.mndcdn.com/image/upload/s--mxEQ7ro4--/c_scale,w_300/v1402392456/Homepage/logo.png" />
</a></div>

        <div class="toggle-drawer pull-right">
            <button type="button" class="slidebars-toggle">&times;</button>
        </div>
    </div>
    <nav>
        <ul class="main section">
                <li><a href="http://www.mynewsdesk.com/signup/premium">Sign up</a></li>
                <li><a href="http://www.mynewsdesk.com/user/signin">Log in</a></li>
                <li><a href="http://get.mynewsdesk.com/">Take the tour</a></li>
                <li><a href="http://get.mynewsdesk.com/demo">Request a demo</a></li>
                <li><a href="http://get.mynewsdesk.com/plans">Plans &amp; Pricing</a></li>

        </ul>
            <ul class='section'>
                    <li><a href="http://www.mynewsdesk.com/agency">For agencies</a></li>
                <li><a href="http://www.mynewsdesk.com/stories">Search stories</a></li>
            </ul>
        <ul class="section">
            <li><a href="http://www.mynewsdesk.com/support">Help &amp; support</a></li>
        </ul>
        <ul class="section">
            <li><a href="http://www.mynewsdesk.com/uk/mynewsdesk">Our newsroom</a></li>
            <li><a href="http://www.mynewsdesk.com/uk/mynewsdesk/blog_posts">Our blog</a></li>
            <li><a href="http://www.mynewsdesk.com/uk/mynewsdesk/events">Our events</a></li>
        </ul>
        <ul class="section">
            <li><a href="http://www.mynewsdesk.com/about">About us</a></li>
            <li><a href="http://www.mynewsdesk.com/contact">Contact us</a></li>
            <li><a href="http://www.mynewsdesk.com/uk/mynewsdesk/contact_people">Meet the team</a></li>
            <li><a href="http://people.mynewsdesk.com/jobs">Career</a></li>
        </ul>
    </nav>
</div>


        <div id="email-friend-container" class="modal hide">
    <div class="modal-header">
        <a href="#" class="close" data-dismiss="modal">×</a>
        <h3>Send as e-mail</h3>
    </div>
    <div id="sent-mail" class="hide">
        <div class="modal-body">
            <div class="alert alert-success">
                <p>
                    E-mail has been sent
                </p>
            </div>
        </div>
    </div>
    <form class="normal Bizible-Exclude" method="post" action="/send_email_to_a_friend" id="email-friend-form">
        <div class="modal-body" id="email-friend">
            <div class="control-group">
                <label class="required" for="from">Your name:<strong>*</strong></label>
                <input class="span6" id="from" name="from" type="text" />
            </div>
            <div id="invalid-name" class="alert alert-error hide">
                Name can&#x27;t be left blank
            </div>

            <div class="control-group">
                <label class="required" for="to">Recipient&#x27;s  e-mail :<strong>*</strong></label>
                <input class="span6" id="to" name="to" type="text" />
            </div>
            <div id="invalid-email" class="alert alert-error hide">
                E-mail address is invalid
            </div>
            <div id="share-url" class="hide">
                <p>
                You will share this url: <span class="small"></span>
                </p>
            </div>
            <div class="control-group">
                <label for="message">Message:</label>
                <textarea class="span6" id="message" name="message" rows="7">
</textarea>
                <input class="h_SPD" id="my_email" name="my_email" type="text" />
            </div>
            <input id="id" name="id" type="hidden" />
            <input id="type_of_media" name="type_of_media" type="hidden" />
            <input id="url" name="url" type="hidden" />
        </div>
        <div class="form-actions modal-footer">
            <span id="email-friend-spinner" class="loading-status hide">
                <img alt="Loading" src="http://d9qz450atvita.cloudfront.net/assets/icons/16x16/loading-5b3097b3d32bc7c6d4c3c30311f8a6f0.gif" />
                &nbsp;Sending e-mail...
            </span>
            <input class="btn btn-primary" id="email-friend-submit" name="commit" type="submit" value="Send" />
        </div>
    </form>
</div>


        <script type="text/javascript" src="//s7.addthis.com/js/250/addthis_widget.js"></script>
    <div class="hide modal" id="overlay">
    <div class="modal-body">
        <h4>Loading page</h4>
    </div>
</div>


    <script type="text/javascript">
        
        /** CONFIGURATION START **/
var _sf_async_config={uid:14183,domain:"mynewsdesk.com"};

_sf_async_config.sections = 'pressroom_57022';

_sf_async_config.path = '/devcorner';
_sf_async_config.useCanonical = true;
/** CONFIGURATION END **/

(function(){
  function loadChartbeat() {
    window._sf_endpt=(new Date()).getTime();
    var e = document.createElement('script');
    e.setAttribute('language', 'javascript');
    e.setAttribute('type', 'text/javascript');
    e.setAttribute('src', '//static.chartbeat.com/js/chartbeat.js');
    document.body.appendChild(e);
  }
  var oldonload = window.onload;
  window.onload = (typeof window.onload != 'function') ?
    loadChartbeat : function() { oldonload(); loadChartbeat(); };
})();

        (function() {
    var didInit = false;
    function initMunchkin() {
        if (didInit === false) {
            didInit = true;
            Munchkin.init('763-HDU-978');
            
        }
    }
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.async = true;
    s.src = document.location.protocol + '//munchkin.marketo.net/munchkin.js';
    s.onreadystatechange = function() {
        if (this.readyState == 'complete' || this.readyState == 'loaded') {
            initMunchkin();
        }
    };
    s.onload = initMunchkin;
    document.getElementsByTagName('head')[0].appendChild(s);
})();

    </script>
    
    
    
        <style>
        #cookie-consent {
            background: #393939;
            color: #fff;
            position: fixed;
            top: 48px;
            z-index: 9999;
            width: 100%;
            transition: opacity .3s ease;
            opacity: 1;
        }
        .home.index #cookie-consent {
            top: inherit;
            bottom: 0;
        }
        .sb-active #cookie-consent {
            opacity: 0;
        }
        .cookies-unaccepted #main .more,
        .cookies-unaccepted #main-footer {
            padding-bottom: 40px;
        }
        .app-publish.cookies-unaccepted,
        .app-public.cookies-unaccepted {
            padding-top: 38px;
        }
        .app-publish.cookies-unaccepted #cookie-consent,
        .app-media.cookies-unaccepted #cookie-consent {
            top: 0;
            position: absolute;
        }
    </style>
   <div id="cookie-consent" class="text-center">
      <div style="padding: 10px 40px;">
      We use cookies to deliver our services and to ensure that we give you the best experience on our website. For details see our  <strong><a href="http://www.mynewsdesk.com/en/about/terms-and-conditions/cookies">cookie policy</a></strong>.
      <button type="button" id="cookie-consent-close" class="btn btn-link" title="Close" style="position:absolute; right:6px; top:2px; font-size:16px; padding:5px 10px; background:none;"><span class="accept" style="color:#fff;">&times;</span></button>
    </div>
   </div>
   <script>
   jQuery(function() {
      var $cookieInfo = jQuery('#cookie-consent');
      jQuery('body').addClass('cookies-unaccepted').prepend($cookieInfo.show());
      jQuery('#cookie-consent-close').on('click', function() {
         Mynewsdesk.cookies.create('cookies_accepted');
         $cookieInfo.remove();
         jQuery('.cookies-unaccepted').removeClass('cookies-unaccepted');
      });
   });
   </script>

</body>
<!-- HOSTNAME: c98723ae-d9ad-4a4d-826f-06114b1377a0 -->
</html>
