CINXE.COM
Dr. Dobb's | Good stuff for serious developers: Programming Tools, Code, C++, Java, HTML5, Cloud, Mobile, Testing
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=EDGE"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script type="text/javascript" src="https://twimgs.com/ddj/detect.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <title>Dr. Dobb's | Good stuff for serious developers: Programming Tools, Code, C++, Java, HTML5, Cloud, Mobile, Testing</title><meta property="og:title" content="Dr. Dobb's | Good stuff for serious developers: Programming Tools, Code, C++, Java, HTML5, Cloud, Mobile, Testing" /> <meta property="og:type" content="website" /> <meta property="og:url" content="http://www.drdobbs.com//" /> <meta property="og:image" content="http://i.cmpnet.com/ddj/digital/ddj.gif" /> <meta property="og:site_name" content="Dr. Dobb's" /> <meta property="og:description" content="Software tools and techniques for global software development. Dr. Dobb's features articles, source code, blogs,forums,video tutorials, and audio podcasts, as well as articles from Dr. Dobb's Journal, BYTE.com, C/C++ Users Journal, and Software Development magazine." /> <meta property="fb:admins" content="550301723,1033888255" /> <meta property="fb:page_id" content="17631669579" /> <meta property="twitter:card" content="summary" /> <meta property="twitter:site" content="@dr_dobbs" /> <meta property="twitter:title" content="Dr. Dobb's" /> <meta property="twitter:description" content="Software tools and techniques for global software development. Dr. Dobb's features articles, source code, blogs,forums,video tutorials, and audio podcasts, as well as articles from Dr. Dobb's Journal, BYTE.com, C/C++ Users Journal, and Software Development magazine." /> <meta property="twitter:creator" content="@dr_dobbs" /> <meta property="twitter:url" content="http://www.drdobbs.com//" /> <meta property="twitter:image:src" content="http://i.cmpnet.com/ddj/digital/ddj.gif" /> <meta property="twitter:domain" content="http://www.drdobbs.com" /> <meta name="description" content="Software tools and techniques for global software development. Dr. Dobb's features articles, source code, blogs,forums,video tutorials, and audio podcasts, as well as articles from Dr. Dobb's Journal, BYTE.com, C/C++ Users Journal, and Software Development magazine." /> <meta name="headline" content="Good stuff for serious developers: Programming Tools, Code, C++, Java, HTML5, Cloud, Mobile, Testing" /> <meta name="news_keywords" content="software development, source code, Architecture & Design, Eclipse & Open Source, Windows/.NET, Database, Testing & Debugging, SOA, Web Services & XML, Mobility" /> <meta name="created" content="" /> <meta name="google-site-verification" content="HqG7-1r7RoBTg-CKrClDy746Njj0o8y-9CgeYSK4CyM" /> <link rel="image_src" href="https://twimgs.com/ddj/v2/images/fb_thumbnail.jpg" /> <link rel="stylesheet" href="https://twimgs.com/ddj/v2/css/thickbox.css" /> <link rel="stylesheet" href="https://twimgs.com/ddj/v2/css/style.css" /> <link rel="SHORTCUT ICON" href="https://twimgs.com/ddj/v2/images/favicon.ico"/> <!-- <script language="JavaScript" type="text/javascript" src="https://twimgs.com/nc/mt/js/jquery-1.2.6.min.js"></script>--> <script type="text/javascript" src="https://twimgs.com/custom/library.gtecevent.com/assets/VisitorAPI.js?ormzkk" ></script> <script type="text/javascript" src="https://twimgs.com/custom/library.gtecevent.com/assets/at.js?ormzkk"></script> <script type="text/javascript" src="https://img.drdobbs.com/v2/js/jquery-ui-1.8rc3.custom.min.js"></script> <script language="JavaScript" type="text/javascript" src="https://twimgs.com/nc/mt/js/sidebar.js"></script> <script language="JavaScript" type="text/javascript" src="https://twimgs.com/nc/mt/js/thickbox.js"></script> <script language="JavaScript" type="text/javascript" src="https://twimgs.com/nc/mt/js/togglediv.js"></script> <script type="text/javascript" src="https://s7.addthis.com/js/250/addthis_widget.js#pub=xa-4af4a81901b903fa"></script> <script language="JavaScript" type="text/javascript" src="https://twimgs.com/ddj/v2/scripts/scripts.js"></script> <script language="JavaScript" type="text/javascript" src="https://twimgs.com/ddj/js/popwindow.js"></script> <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script> <link rel="stylesheet" type="text/css" href="https://twimgs.com/ddj/v2/css/h-nav.css" /> <link rel="stylesheet" href="https://twimgs.com/ddj/v2/css/devtest_style.css" /> <style> #container #header #nav { font-size: .9em; margin-top: 0px; margin-left: 5px; width: 999px; position: relative; top: 4px; } /* Absolutely positioned #nav is lower on homepage, see home.css */ @media screen and (max-width : 320px) { #techwebCommentLogin { border-radius: 10px 10px 10px 10px; width: 275px !important; } .subsection.best { float: none !important; } .doublepage .dcol2 { width: auto !important; } } </style> <link href="/articles/rss" rel="alternate" type="application/rss+xml" title="Dr. Dobb's articles" /> <link href="https://i.cmpnet.com/informationweek/whitepaper/v3/common/css/twlightbox.css" media="screen" rel="stylesheet" type="text/css" /><script type="text/javascript"> //<![CDATA[ $.ajax({ type: "GET", url: "/checkauth", data: {"referer": encodeURIComponent(document.referrer), "redirectTo": encodeURIComponent(window.location.href)}, success: function(data){ if (data != null) { window.location = data.redirectTo; } }, dataType: "json", async: false, cache: false }); //]]> </script> <script type="text/javascript" src="https://i.cmpnet.com/informationweek/whitepaper/v3/common/js/jquery.url.js"></script> <script type="text/javascript" src="https://i.cmpnet.com/informationweek/whitepaper/v3/common/js/md5_hash.js"></script> <script type="text/javascript" src="https://i.cmpnet.com/informationweek/whitepaper/v3/common/js/twlightbox.js"></script> <script type="text/javascript" src="https://twimgs.com/nojitter/ddj/nextgen.js"></script> <script type="text/javascript"> //<![CDATA[ $(document).ready(function() { $.ajax({ url: "/index/welcome", type: 'POST', data: {"redirectTo": encodeURIComponent(window.location.href) }, success: function(data) { $('.welcome').html(data); $('.welcome').nextGenInit({ width: 780, siteUrlPrefix:'', siteRedirectPrefix: '' }); } }); }); //]]> </script><script type="text/javascript" src="https://twimgs.com/informationweek/js/omniture/custom_tracking.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#nav2 a,.main-menu a,#h-nav_main a,#h-nav a,#tw_superfooter_936 a,.articles.archive a,.subsection.mostpopular a,.articles.no-border a,.article-resources.wrap a,.recent-articles a,.related-resources.first.tabs a,.related-resources.tabs a,.related-resources.first a,.related-resources a,#footergrey a').click (function(event){ itc_tracking($(this),event); }); }); </script><script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-33304291-1']); _gaq.push(['_setDomainName', 'drdobbs.com']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <!-- Start: GPT Sync --> <script> var googletag = googletag || {}; googletag.cmd = googletag.cmd || []; googletag.slots = googletag.slots || {}; var gptadslots=[]; </script> <script src="//www.googletagservices.com/tag/js/gpt.js"></script> <script type="text/javascript"> googletag.pubads().setTargeting('page',['landing']); if (document.documentElement.clientWidth > 767){ gptadslots[1]=googletag.defineSlot('/3834/drdobbs.home/',[[2,2]],'div-gpt-ad-942957474691236830-1') .addService(googletag.pubads()) .setTargeting('pos',['welcome']); } else { gptadslots[30]=googletag.defineSlot('/3834/drdobbs.home/',[[7,7]],'div-gpt-ad-942957474691236830-30') .addService(googletag.pubads()) .setTargeting('pos',['mi']); } if (document.documentElement.clientWidth > 1027){ gptadslots[2]=googletag.defineSlot('/3834/drdobbs.home/',[[1,2]],'div-gpt-ad-942957474691236830-2') .addService(googletag.pubads()) .setTargeting('pos',['wallpaper']); } if (document.documentElement.clientWidth > 767){ gptadslots[3]=googletag.defineSlot('/3834/drdobbs.home/',[[728,90],[970,250]],'div-gpt-ad-942957474691236830-3') .addService(googletag.pubads()) .setTargeting('pos',['top']); } gptadslots[4]=googletag.defineSlot('/3834/drdobbs.home/',[[300,250],[300,600],[336,280],[336,850]],'div-gpt-ad-942957474691236830-4') .addService(googletag.pubads()) .setTargeting('pos',['rec1']); gptadslots[5]=googletag.defineSlot('/3834/drdobbs.home/',[[300,250],[300,600],[336,280],[336,850]],'div-gpt-ad-942957474691236830-5') .addService(googletag.pubads()) .setTargeting('pos',['rec2']); gptadslots[28]=googletag.defineSlot('/3834/drdobbs.home/',[[160,600]],'div-gpt-ad-942957474691236830-28') .addService(googletag.pubads()) .setTargeting('pos',['sky']); gptadslots[24]=googletag.defineSlot('/3834/drdobbs.home/',[[1,1]],'div-gpt-ad-942957474691236830-24') .addService(googletag.pubads()) .setTargeting('pos',['infolink1']); gptadslots[25]=googletag.defineSlot('/3834/drdobbs.home/',[[1,1]],'div-gpt-ad-942957474691236830-25') .addService(googletag.pubads()) .setTargeting('pos',['infolink2']); gptadslots[26]=googletag.defineSlot('/3834/drdobbs.home/',[[1,1]],'div-gpt-ad-942957474691236830-26') .addService(googletag.pubads()) .setTargeting('pos',['infolink3']); gptadslots[27]=googletag.defineSlot('/3834/drdobbs.home/',[[1,1]],'div-gpt-ad-942957474691236830-27') .addService(googletag.pubads()) .setTargeting('pos',['infolink4']); googletag.pubads().enableSingleRequest(); googletag.pubads().enableAsyncRendering(); googletag.enableServices(); </script> <meta name="pagecaching" content="79"/><meta name="node" content="97"/> <link rel="stylesheet" href="https://twimgs.com/ddj/v2/css/devtest_home.css" /> <link rel="stylesheet" href="https://twimgs.com/informationweek/whitepaper/v3/common/css/mobile.css" /> <script type='text/javascript'> var _vwo_code=(function(){ var account_id=32069, settings_tolerance=2000, library_tolerance=1500, use_existing_jquery=false, // DO NOT EDIT BELOW THIS LINE f=false,d=document;return{use_existing_jquery:function(){return use_existing_jquery;},library_tolerance:function(){return library_tolerance;},finish:function(){if(!f){f=true;var a=d.getElementById('_vis_opt_path_hides');if(a)a.parentNode.removeChild(a);}},finished:function(){return f;},load:function(a){var b=d.createElement('script');b.src=a;b.type='text/javascript';b.innerText;b.onerror=function(){_vwo_code.finish();};d.getElementsByTagName('head')[0].appendChild(b);},init:function(){settings_timer=setTimeout('_vwo_code.finish()',settings_tolerance);this.load('//dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&r='+Math.random());var a=d.createElement('style'),b='body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}',h=d.getElementsByTagName('head')[0];a.setAttribute('id','_vis_opt_path_hides');a.setAttribute('type','text/css');if(a.styleSheet)a.styleSheet.cssText=b;else a.appendChild(d.createTextNode(b));h.appendChild(a);return settings_timer;}};}());_vwo_settings_timer=_vwo_code.init(); </script> <!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '832000476880185'); fbq('track', 'PageView'); </script> <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=832000476880185&ev=PageView&noscript=1" /></noscript> <!-- End Facebook Pixel Code --> <link rel="stylesheet" type="text/css" href="https://twimgs.com/nojitter/gama/css/informa-iribbon.css" /> <script type="text/javascript" src="https://twimgs.com/nojitter/gama/js/informa-iribbon.js"></script> <script type="text/javascript" src="https://img.deusm.com//darkreading/cookie_banner.js"></script> <link rel="stylesheet" href="https://img.deusm.com//darkreading/cookie_banner_css.css" /></head> <body> <!-- Cookie policy banner --> <script type="text/javascript"> document.gdpr_banner = '<div>' + '<div id = "cookie">' + '<div class="gdpr-popup-border">' + '<div class="gdrp-popup-content">' + '<div id="popup-text">This site uses cookies to provide you with the best user experience possible. By using Dr. Dobb\'s, you accept <a href="https://tech.informa.com/cookie-policy" target="_blank">our use of cookies.</a></div>' + '<div id="popup-buttons"><span class="close-button" >×</span></div>' + '</div>' + '</div>' + '</div>' + '</div>' ; </script> <!-- Informa Branding code goes here--> <div id="iribbon-container" style="margin:-8px !important; padding-top:0px !important;"> <button id="iribbon-title" title="show/hide" class="inactive">Informa</button> <div id="iribbon-detail" class="ribbon-hide" style=""> <div id="iribbon-left"> <p>Dr. Dobb's is part of the Informa Tech Division of Informa PLC</p> <ul> <li class="iribbon-mainlink"><a href="https://informa.com/" tabindex="-1" class='iribbon-opacity-out'>Informa PLC</a></li> <li><a href="https://informa.com/About-Us/" tabindex="-1" class='iribbon-opacity-out'>About us</a></li> <li><a href="https://informa.com/Investors/" tabindex="-1" class='iribbon-opacity-out'>Investor relations</a></li> <li><a href="https://informa.com/Talent/" tabindex="-1" class='iribbon-opacity-out'>Talent</a></li> </ul> </div> <div id="iribbon-right"> <p>This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.</p> </div> </div> </div> <br> <!-- Informa Branding code goes here--> <div id='div-gpt-ad-942957474691236830-1'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-1'); }); </script> </div> <div id='div-gpt-ad-942957474691236830-30'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-30'); }); </script> </div> <div id="topAdContainer"> <div id='div-gpt-ad-942957474691236830-2'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-2'); }); </script> </div> </div> <div id="container"> <div id="leaderboard1"> <div id='div-gpt-ad-942957474691236830-3'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-3'); }); </script> </div> </div> <style> #login, #login a, #login strong { color: white; font-weight: bold; font-size:12px;} </style> <div id="login" class="welcome" style="padding-left: 12px;"> <!-- load dynamically --> </div> <div id="header"> <!-- h-nav --> <header> <div id="h-nav"> <nav> <ul> <li><a href="/subscribe/">Subscribe</a></li> <li><a href="https://www.informationweek.com/profile.asp?update_newsletter=t">Newsletters</a></li> <li><a href="https://www.informationweek.com/whitepaper/topic/developer">Digital Library</a></li> <li><a href="/rss/">RSS</a></li> </ul> </nav> </div> <!-- / h-nav --> <div id="search"> <script language="JavaScript" type="text/javascript"> <!-- $( function() { $('input.search') .click( function() { queryText = $('input#queryText').val(); queryText = queryText.replace(/^\s*/, '').replace(/\s*$/, ''); if (!queryText) { return false; } } ) .attr('disabled', false); } ); //--> </script> <form method="get" action="/sitesearch"> <input type="hidden" name="sort" value="publishDate desc"/> <ul> <li><input type="text" value="" size="40" id="queryText" name="queryText" maxlength="100" class="text"></li> <li><input type="submit" value=" " class="search" disabled="true"></li> </ul> Search: <input type="radio" name="type" value="site" checked /> Site <input type="radio" name="type" value="sourcecode" /> Source Code </form> </div> </br></br> <div id="h-nav_main"> <div id="h-nav_mainSection"> <!-- main section indicator --> <nav> <ul class="navigation"> <li class="h-58"><a name=ddj-header-navbar-home href="/" class="h-58" style="float:left">Home</a></li><li class="h-68"><a name=ddj-header-navbar-articles href="/articles" class="h-68" style="float:left">Articles</a></li><li class="h-58"><a name=ddj-header-navbar-news href="/news" class="h-58" style="float:left">News</a></li><li class="h-58"><a name=ddj-header-navbar-blogs href="/blogs" class="h-58" style="float:left">Blogs</a></li><li class="h-108"><a name=ddj-header-navbar-sourcecode href="/sourcecode" class="h-108" style="float:left">Source Code</a></li><li class="h-148"><a name=ddj-header-navbar-webinars href="http://www.informationweek.com/events/d/d-id/898857" class="h-148" style="float:left">Webinars & Events</a></li> </ul> </nav> </div><div id="clearLeft"></div> <!-- / main section indicator --> <!-- header social icons --> <div id="h-nav_social"> <ul> <li ><a href="https://www.facebook.com/pages/Dr-Dobbs/17631669579" style="float:left"><img src="https://twimgs.com/ddj/v2/images/h-facebook_sm.png" alt="Facebook" border="0" /></a></li> <li ><a href="https://twitter.com/dr_dobbs" style="float:left"><img src="https://twimgs.com/ddj/v2/images/h-twitter_sm.png" alt="Twitter" border="0"></a></li> </ul> </div> <!-- / header social icons --> <!-- go parallel indicator --> <!-- <div id="h-nav_goParallel"> <ul> <li class="h-88"> <a title="Go Parallel" class="gp" href="/go-parallel/" name="ddj-header-navbar-goparallel" style="float:right">Go Parallel</a> </li> </ul> </div> --> <!-- / go parallel indicator --> <div id="h-nav_mainSection-mobile" class="mobile-unit"> <a>Sections<i> ▼</i></a> <ul class='unstyled'> <li class="h-58"><a name=ddj-header-navbar-home href="/" class="h-58">Home</a></li><li class="h-68"><a name=ddj-header-navbar-articles href="/articles" class="h-68">Articles</a></li><li class="h-58"><a name=ddj-header-navbar-news href="/news" class="h-58">News</a></li><li class="h-58"><a name=ddj-header-navbar-blogs href="/blogs" class="h-58">Blogs</a></li><li class="h-108"><a name=ddj-header-navbar-sourcecode href="/sourcecode" class="h-108">Source Code</a></li><li class="h-148"><a name=ddj-header-navbar-webinars href="http://www.informationweek.com/events/d/d-id/898857" class="h-148">Webinars & Events</a></li> </ul> </div> </div><!-- / h-nav_main --> <script type="application/javascript"> //events listing in universal header $("div#h-nav_mainSection-mobile").hover(function() { $("div#h-nav_mainSection-mobile").children('ul').slideDown(200); }, function() { $("div#h-nav_mainSection-mobile").children('ul').fadeOut(100); }); </script> <script type="text/javascript"> var eventKey = "tw_dev2013"; var eventValue = "01"; document.write('<scr'+'ipt language="javascript1.1" src="https://adserver.adtechus.com/bind?ckey1='+eventKey+';cvalue1='+escape(eventValue.toLowerCase())+'; expiresDays=9125;adct=text/html;misc=123"></scri'+'pt>'); </script> </header> <br> </div> <div id="subnav"> <div id="nav2"> <nav> <ul class="navigation"> <li ><a href="/cloud" style="float:left;" name=ddj-channel-navbar-cloud>Cloud</a></li><li ><a href="/mobile" style="float:left;" name=ddj-channel-navbar-mobile>Mobile</a></li><li ><a href="/parallel" style="float:left;" name=ddj-channel-navbar-parallel>Parallel</a></li><li ><a href="/windows" style="float:left;" name=ddj-channel-navbar-windows>.NET</a></li><li ><a href="/jvm" style="float:left;" name=ddj-channel-navbar-jvm>JVM Languages</a></li><li ><a href="/cpp" style="float:left;" name=ddj-channel-navbar-cpp>C/C++</a></li><li ><a href="/tools" style="float:left;" name=ddj-channel-navbar-tools>Tools</a></li><li ><a href="/architecture-and-design" style="float:left;" name=ddj-channel-navbar-architecture-and-design>Design</a></li><li ><a href="/testing" style="float:left;" name=ddj-channel-navbar-testing>Testing</a></li><li ><a href="/web-development" style="float:left;" name=ddj-channel-navbar-web-development>Web Dev</a></li><li class="lastitem"><a href="/joltawards" style="float:left;" name=ddj-channel-navbar-joltawards>Jolt Awards</a></li> </ul> </nav> </div> <!-- End: nav2 --> </div><!-- End: subnav --> <div id="h-nav2_mainSection-mobile" class="mobile-unit"> <a>Channels<i> ▼</i></a> <ul class='unstyled'> <li ><a href="/cloud" name=ddj-channel-navbar-cloud>Cloud</a></li><li ><a href="/mobile" name=ddj-channel-navbar-mobile>Mobile</a></li><li ><a href="/parallel" name=ddj-channel-navbar-parallel>Parallel</a></li><li ><a href="/windows" name=ddj-channel-navbar-windows>.NET</a></li><li ><a href="/jvm" name=ddj-channel-navbar-jvm>JVM Languages</a></li><li ><a href="/cpp" name=ddj-channel-navbar-cpp>C/C++</a></li><li ><a href="/tools" name=ddj-channel-navbar-tools>Tools</a></li><li ><a href="/architecture-and-design" name=ddj-channel-navbar-architecture-and-design>Design</a></li><li ><a href="/testing" name=ddj-channel-navbar-testing>Testing</a></li><li ><a href="/web-development" name=ddj-channel-navbar-web-development>Web Dev</a></li><li class="lastitem"><a href="/joltawards" name=ddj-channel-navbar-joltawards>Jolt Awards</a></li> </ul> </div> <script type="application/javascript"> //events listing in universal header $("div#h-nav2_mainSection-mobile").hover(function() { $("div#h-nav2_mainSection-mobile").children('ul').slideDown(200); }, function() { $("div#h-nav2_mainSection-mobile").children('ul').fadeOut(100); }); </script> <div id="columns"> <div id="left-col"> <div class="guru-blogs last"> <h2>Blogs <!-- <a onclick="showhide('whats-a-guru'); return(false);" href="#"> <span style="color: rgb(255, 255, 153);">What's a Guru?</span></a> --></h2> <!-- <div style="display: none;" id="whats-a-guru"> <div class="header"> <div class="close"><a onclick="showhide('whats-a-guru'); return(false);" href="#">Close</a></div> <div style="color: yellow;" class="title">What's a Guru?</div> </div> <div class="content"> <a href="/blogs/authors">Dr. Dobb's Gurus</a> are experts and authorities on the state of programming, each of whom contributes their own unique perspective on the Dr. Dobb's universe. </div> </div> --> <img alt="" src="http://twimgs.com/ddj/v2/images/headshots/Al_Williams77x95.jpg"> <!-- div class="title">[?= $article->Section; ?]</div --> <div class="name"> <a href="/author/Al-Williams">Al Williams</a> </div> <div style="font-size: 0.6em; color: rgb(153, 153, 153);" class="date"> December 24, 2014 </div> <div class="comments"><a href="https://www.drdobbs.com/embedded-systems/things-that-go-boom/240169445#disqus_thread" class="commentLink" data-disqus-identifier="article_240169445"></a> </div> <h3><a href="/embedded-systems/things-that-go-boom/240169445" class="contentgating_article">Things That Go Boom</a></h3> <p> It is easier to make a safe light bulb than to make a safe explosive. </p> <div class="more"> <a href="/embedded-systems/things-that-go-boom/240169445">Read More »</a> <!-- <br><br> <a href="/blogs/archives">See all blogs >></a> --> </div> <img alt="" src="http://twimgs.com/ddj/v2/images/headshots/Andrew_Koenig77x95.jpg"> <!-- div class="title">[?= $article->Section; ?]</div --> <div class="name"> <a href="/author/Andrew-Koenig">Andrew Koenig</a> </div> <div style="font-size: 0.6em; color: rgb(153, 153, 153);" class="date"> December 22, 2014 </div> <div class="comments"><a href="https://www.drdobbs.com/cpp/abstractions-for-binary-search-part-10-p/240169437#disqus_thread" class="commentLink" data-disqus-identifier="article_240169437"></a> </div> <h3><a href="/cpp/abstractions-for-binary-search-part-10-p/240169437" class="contentgating_article">Abstractions For Binary Search, Part 10: Putting It All Together</a></h3> <p> After the discussions of the last few weeks, we are finally ready to build our test cases. </p> <div class="more"> <a href="/cpp/abstractions-for-binary-search-part-10-p/240169437">Read More »</a> <!-- <br><br> <a href="/blogs/archives">See all blogs >></a> --> </div> <img alt="" src="http://twimgs.com/ddj/v2/images/headshots/Al_Williams77x95.jpg"> <!-- div class="title">[?= $article->Section; ?]</div --> <div class="name"> <a href="/author/Al-Williams">Al Williams</a> </div> <div style="font-size: 0.6em; color: rgb(153, 153, 153);" class="date"> December 19, 2014 </div> <div class="comments"><a href="https://www.drdobbs.com/embedded-systems/the-touch-of-a-button/240169431#disqus_thread" class="commentLink" data-disqus-identifier="article_240169431"></a> </div> <h3><a href="/embedded-systems/the-touch-of-a-button/240169431" class="contentgating_article">The Touch of a Button</a></h3> <p> Of course, I wasn't satisfied with the simple approach, so I added a bit of code to sense swipes much as you would find on a touchscreen phone. </p> <div class="more"> <a href="/embedded-systems/the-touch-of-a-button/240169431">Read More »</a> <!-- <br><br> <a href="/blogs/archives">See all blogs >></a> --> </div> </div> <div class="more"><a href="/blogs/">See all blogs »</a></div> <br /> <div class="infolink"> <span style="font-size: 0.7em; font-weight: bold;">INFO-LINK</span> <ul style="color: rgb(33, 82, 190); font-size: 0.7em; list-style: none outside none; margin-top: 0px; padding: 8px 0px 0px;"> <li style="padding-left: 15px; background: url("https://i.cmpnet.com/nc/mt/bg_left-nav.png") no-repeat scroll 5px 7px transparent; color: rgb(0, 59, 176); margin: 0px 0pt;"> <div id='div-gpt-ad-942957474691236830-24'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-24'); }); </script> </div> </li> <li style="padding-left: 15px; background: url("https://i.cmpnet.com/nc/mt/bg_left-nav.png") no-repeat scroll 5px 7px transparent; color: rgb(0, 59, 176); margin: 0px 0pt;"> <div id='div-gpt-ad-942957474691236830-25'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-25'); }); </script> </div> </li> <li style="padding-left: 15px; background: url("https://i.cmpnet.com/nc/mt/bg_left-nav.png") no-repeat scroll 5px 7px transparent; color: rgb(0, 59, 176); margin: 0px 0pt;"> <div id='div-gpt-ad-942957474691236830-26'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-26'); }); </script> </div> </li> <li style="padding-left: 15px; background: url("https://i.cmpnet.com/nc/mt/bg_left-nav.png") no-repeat scroll 5px 7px transparent; color: rgb(0, 59, 176); margin: 0px 0pt;"> <div id='div-gpt-ad-942957474691236830-27'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-27'); }); </script> </div> </li> </ul> </div> <br/> <br/> <div id='div-gpt-ad-942957474691236830-28'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-28'); }); </script> </div> </div> <div id="content"> <div class="lead-article brandividual"> <h1><a href="/" class="contentgating_article"></a></h1> <div class="comments"> </div> <!-- div class="date"></div --> <p> - <a class="channel-name" href="//"></a></p> </div> <style> <!-- .trending_now h1{ color : green; padding-bottom: 5px; } --> </style> <div class="trending_now"> <h1>TRENDING NOW</h1> <div class="article_trending"> <h1> <a class="contentgating_article" href="https://www.drdobbs.com/web-development/restful-web-services-a-tutorial/240169069">RESTful Web Services: A Tutorial</a> </h1> <p>As REST has become the default for most Web and mobile apps, it's imperative to have the basics at your fingertips.</p> </div> <div class="article_trending"> <h1> <a class="contentgating_article" href="https://www.drdobbs.com/jvm/why-build-your-java-projects-with-gradle/240168608">Why Build Your Java Projects with Gradle Rather than Ant or Maven?</a> </h1> <p>The default build tool for Android (and the new star of build tools on the JVM) is designed to ease scripting of complex, multi-language builds. Should you change to it, though, if you're using Ant or Maven?</p> </div> <div class="article_trending"> <h1> <a class="contentgating_article" href="https://www.drdobbs.com/cpp/developer-reading-list-the-must-have-boo/240148421">Developer Reading List: The Must-Have Books for JavaScript</a> </h1> <p>The best books for learning the basics, becoming expert, and and writing complete apps in JavaScript</p> </div> </div> <div class="articles"> <h2> Articles <a href="/articles/rss"> <img align="right" style="padding: 0 0em" alt="RSS" src="https://i.cmpnet.com/ddj/v2/images/rss.gif"> </a> </h2> <h1><a href="/architecture-and-design/farewell-dr-dobbs/240169421" class="contentgating_article">Farewell, <em>Dr. Dobb's</em></a></h1> <div class="comments"><a href="https://www.drdobbs.com/architecture-and-design/farewell-dr-dobbs/240169421#disqus_thread" class="commentLink" data-disqus-identifier="article_240169421"></a> </div> <!-- div class="date">December 16, 2014</div --> <p>After 38 years of glory, the long run of <em>Dr. Dobb's</em> has come to an end. - <a class="channel-name" href="/architecture-and-design">Design</a> </p> <!-- Mobile IMU Script Here --> <script type='text/javascript'> if (document.documentElement.clientWidth <= 767){ document.write('<div id="div-gpt-ad-942957474691236830-4" class="responsive_imu"><center>'); googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-4'); }); document.write('</center></div>'); } </script> <!-- End: Mobile IMU Script Here --> <style> @media only screen and (min-width: 63.75em) { .responsive_imu{ display: none; } } </style> <h1><a href="/joltawards/jolt-awards-2015-coding-tools/240169420" class="contentgating_article">Jolt Awards 2015: Coding Tools</a></h1> <div class="comments"><a href="https://www.drdobbs.com/joltawards/jolt-awards-2015-coding-tools/240169420#disqus_thread" class="commentLink" data-disqus-identifier="article_240169420"></a> </div> <!-- div class="date">December 16, 2014</div --> <p>The best tools available for creating, testing, and debugging code. - <a class="channel-name" href="/joltawards">Jolt Awards</a> </p> <h1><a href="/architecture-and-design/thriving-among-the-apis/240169441" class="contentgating_article">Thriving Among the APIs</a></h1> <div class="comments"><a href="https://www.drdobbs.com/architecture-and-design/thriving-among-the-apis/240169441#disqus_thread" class="commentLink" data-disqus-identifier="article_240169441"></a> </div> <!-- div class="date">December 15, 2014</div --> <p>You're about to start work on designing and publishing your product's API. Now what? - <a class="channel-name" href="/architecture-and-design">Design</a> </p> <h1><a href="/web-development/the-long-death-of-project-hosting-sites/240169394" class="contentgating_article">The Long Death of Project Hosting Sites</a></h1> <div class="comments"><a href="https://www.drdobbs.com/web-development/the-long-death-of-project-hosting-sites/240169394#disqus_thread" class="commentLink" data-disqus-identifier="article_240169394"></a> </div> <!-- div class="date">December 09, 2014</div --> <p>Last month, Microsoft and Google bypassed their own code hosts to post major code projects on GitHub. The once-favored hosts have begun a long, familiar decline. - <a class="channel-name" href="/web-development">Web Development</a> </p> <h1><a href="/testing/testing-for-failures-with-python/240169387" class="contentgating_article">Testing for Failures with Python</a></h1> <div class="comments"><a href="https://www.drdobbs.com/testing/testing-for-failures-with-python/240169387#disqus_thread" class="commentLink" data-disqus-identifier="article_240169387"></a> </div> <!-- div class="date">December 09, 2014</div --> <p>Writing solid code means knowing that when programs fail, they do so gracefully and predictably. Unit testing verifies this. - <a class="channel-name" href="/testing">Testing</a> </p> <h1><a href="/architecture-and-design/we-need-more-agile-it-now/240169361" class="contentgating_article">We Need More Agile IT Now!</a></h1> <div class="comments"><a href="https://www.drdobbs.com/architecture-and-design/we-need-more-agile-it-now/240169361#disqus_thread" class="commentLink" data-disqus-identifier="article_240169361"></a> </div> <!-- div class="date">December 02, 2014</div --> <p>While IT is becoming more Agile, the rate of change in business requires even faster adoption of Agility. - <a class="channel-name" href="/architecture-and-design">Design</a> </p> <h1><a href="/architecture-and-design/clarity-of-goals-the-most-important-elem/240169360" class="contentgating_article">Clarity of Goals: The Most Important Element of Product Success</a></h1> <div class="comments"><a href="https://www.drdobbs.com/architecture-and-design/clarity-of-goals-the-most-important-elem/240169360#disqus_thread" class="commentLink" data-disqus-identifier="article_240169360"></a> </div> <!-- div class="date">December 02, 2014</div --> <p>Complete clarity and constant communication of goals are as important to a product's success as execution, perhaps more so. - <a class="channel-name" href="/architecture-and-design">Design</a> </p> <h1><a href="/tools/building-nodejs-projects-in-visual-studi/240169356" class="contentgating_article">Building Node.js Projects in Visual Studio</a></h1> <div class="comments"><a href="https://www.drdobbs.com/tools/building-nodejs-projects-in-visual-studi/240169356#disqus_thread" class="commentLink" data-disqus-identifier="article_240169356"></a> </div> <!-- div class="date">December 02, 2014</div --> <p>Developing server-side apps with the popular Node.js framework can now be done with the full support of Visual Studio IntelliSense, debugging, and project management. - <a class="channel-name" href="/tools">Tools</a> </p> <div class="more"> <a href="/articles/archives?startAt=8">All Articles »</a> </div> </div> <div class="events"> <h1>Events of Interest</h1> <p>December 11-12. Washington, D.C. <a href="https://mdc.gomodev.com/">ModevCon</a></p> <p>March 2-6, 2015 London, UK. <a href="https://qconlondon.com/">QCon London</a></p> <p>March 5-8, 2015. Recife, Brazil. <a href="https://tropicalrb.com/">Tropical Ruby</a></p> <p>March 17-19, 2015. Boston, MA. <a href="https://softwarearchitecturecon.com/sa2015">O'Reilly Software Architecture Conference</a></p> <p>March 23-24, 2015. Palo Alto, CA. <a href="https://evansdata.com/drc/2015/register.php">Evans Data's 11th Annual Developer Relations Conference</a></p> <p>April 8-16, 2015. Montreal, Canada. <a href="https://us.pycon.org/2015/">PyCon 2015</a></p> <p>April 27-30, 2015. Baltimore, MD. <a href="https://www.sei.cmu.edu/saturn/2015/">11th Software Engineering Institute (SEI) Architecture Technology User Network (SATURN) Conference</a></p> <p>May 4-8, 2015. Chicago, IL. <a href="https://ignite.microsoft.com/"> Microsoft Ignite Conference</a> <p>May 12-14, 2015. Zaragoza, Spain.<a href="https://www.protocolsplugfest.com/europe/">Protocols Plugfest Europe 2015</a></p> <br> <p><h1>Videos of Past Events</h1></p> <p>September 2014. <a href="https://summit.atlassian.com/archives/2014/keynotes/summit-2014-keynote">Atlassian Summit 2014</a></p> <p>September 2013. <a href="https://www.oracle.com/javaone/sessions/index.html">JavaOne</a></p> <p>June 2013. <a href="https://marakana.com/s/post/1467/jaxconf_2013_video">JAXConf 2013</a></p> <p>May 2013. <a href="https://developers.google.com/events/io/sessions ">Google I/O</a></p> <p>October 2012. <a href="https://www.youtube.com/user/JAXLondonConference">JAXLondon 2012</a></p> <p>September 2012. <a href="https://github.com/strangeloop/strangeloop2012/tree/master/slides/sessions">Strangeloop</a></p> <p>July 2012. <a href="https://www.oracle.com/technetwork/java/javase/community/jvmls2012-1840099.html">Java Language Summit</a></p> <p>June 2012. <a href="https://www.drdobbs.com/web-development/google-io-2012-keynote/240003560?queryText=Google">Google I/O 2012</a></p> <p>May 2012. <a href="https://www.drdobbs.com/tools/atlassian-summit/240003558">Atlassian Summit</a></p> <p>May 2012 (paid). <a href="https://shop.oreilly.com/product/0636920026846.do">Fluent Conference</a></p> <p>March 2012. <a href="https://vimeo.com/album/2007822">Multicore World</a></p> <p>July 2011. <a href="https://www.drdobbs.com/jvm/jvm-language-summit---getting-started-gu/231600443">JVM Language Summit</a></p> </div> </div> <div id="right-col"> <!-- div class="subsection " --> <!-- /div --> <script type='text/javascript'> if (document.documentElement.clientWidth > 767){ document.write('<div id="div-gpt-ad-942957474691236830-4">'); googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-4'); }); document.write('</div>'); } </script> <!-- <br/> <br/> --> <div id="newsheadlines"> <h1>News Headlines</h1> <ul> <li><strong><a href="/cpp/biicode-20-is-buzzing/240169447" class="contentgating_article">biicode 2.0 Is Buzzing</a></strong></li> <li><a href="/cloud/tools-to-build-payment-enabled-mobile-ap/240169446" class="contentgating_article">Tools To Build Payment-Enabled Mobile Apps</a></li> <li><a href="/tools/application-intelligence-for-advanced-du/240169443" class="contentgating_article">Application Intelligence For Advanced Dummies</a></li> <li><a href="/jvm/java-plumbr-unlocks-threads/240169442" class="contentgating_article">Java Plumbr Unlocks Threads</a></li> <li><a href="/mobile/parallels-supports-docker-apps/240169438" class="contentgating_article">Parallels Supports Docker Apps</a></li> <li><a href="/mobile/appgyver-apparchitect-20-appears/240169436" class="contentgating_article">AppGyver AppArchitect 2.0 Appears</a></li> <li><a href="/cloud/googles-data-processing-model-hardens-up/240169435" class="contentgating_article">Google's Data Processing Model Hardens Up</a></li> <li><a href="/web-development/did-barcode-reading-just-get-interesting/240169433" class="contentgating_article">Did Barcode Reading Just Get Interesting?</a></li> <li><a href="/testing/20x-faster-test-scripting-seriously/240169432" class="contentgating_article">20x Faster Test Scripting, Seriously</a></li> <li><a href="/web-development/smartbear-supports-selenium-webdriver/240169426" class="contentgating_article">SmartBear Supports Selenium WebDriver</a></li> <li><a href="/windows/xamarin-editions-of-ipworks-integrator/240169417" class="contentgating_article">Xamarin Editions of IP*Works! & Integrator</a></li> <li><a href="/jvm/jetbrains-upsource-10-final-release/240169415" class="contentgating_article">JetBrains Upsource 1.0 Final Release</a></li> </ul> <div class="more"> <a href="/news">More »</a> </div> </div> <div class="subsection mostpopular"> <h2>Most Popular</h2> <div class="tab_controls"> <a id="articles" class="current" href="#">Stories</a> <a id="blogs" href="#">Blogs</a> </div> <div id="mostpopular" class="box_wrap"> <ul> <li> <a name="dobbs-callout-mostpop" href="/web-development/restful-web-services-a-tutorial/240169069" class="contentgating_article">RESTful Web Services: A Tutorial</a> </li> <li> <a name="dobbs-callout-mostpop" href="/jvm/lambda-expressions-in-java-8/240166764" class="contentgating_article">Lambda Expressions in Java 8</a> </li> <li> <a name="dobbs-callout-mostpop" href="/tools/developer-reading-list-the-must-have-boo/240148421" class="contentgating_article">Developer Reading List: The Must-Have Books for JavaScript</a> </li> <li> <a name="dobbs-callout-mostpop" href="/jvm/an-algorithm-for-compressing-space-and-t/184406478" class="contentgating_article">An Algorithm for Compressing Space and Time</a> </li> <li> <a name="dobbs-callout-mostpop" href="/jvm/why-build-your-java-projects-with-gradle/240168608" class="contentgating_article">Why Build Your Java Projects with Gradle Rather than Ant or Maven?</a> </li> <li> <a name="dobbs-callout-mostpop" href="/" class="contentgating_article"></a> </li> <li> <a name="dobbs-callout-mostpop" href="/" class="contentgating_article"></a> </li> </ul></div> <div id="mostpopular" class="box_wrap" style="display: none;"> <ul> <li> <a name="dobbs-callout-mostpop-blog" href="/jvm/readwrite-properties-files-in-java/231000005" class="contentgating_article">Read/Write Properties Files in Java</a> </li> <li> <a name="dobbs-callout-mostpop-blog" href="/jvm/coding-the-javafx-tableview/240001874" class="contentgating_article">Coding the JavaFX TableView</a> </li> <li> <a name="dobbs-callout-mostpop-blog" href="/jvm/easy-dom-parsing-in-java/231002580" class="contentgating_article">Easy DOM Parsing in Java</a> </li> <li> <a name="dobbs-callout-mostpop-blog" href="/cpp/c11-uniqueptr/240002708" class="contentgating_article">C++11: unique_ptr</a> </li> <li> <a name="dobbs-callout-mostpop-blog" href="/jvm/making-http-requests-from-java/240160966" class="contentgating_article">Making HTTP Requests From Java</a> </li> <li> <a name="dobbs-callout-mostpop-blog" href="/" class="contentgating_article"></a> </li> <li> <a name="dobbs-callout-mostpop-blog" href="/" class="contentgating_article"></a> </li> </ul></div> </div> <div class="box video"> </div> <div class="subsection sponsored-content"> <!-- reverted digital-edition changes for dfp deployment --> <style> #right-col .subsection .sponsored{ font-size: 0.7em !important; } </style> <h2>This month's Dr. Dobb's Journal</h2> <div class="sponsored"> <div class="whitepaper"> <div align="center"> <a href="/digital/20141022?k=ddjtm&cid=onedit_ds_ddjtm"> <img height="115" width="190" border="0" alt="Dr. Dobb's Digital Digest - October 2014" src="http://thewallstreetwiki.com/_art/DrDobbs_10_22_Cover.jpg"> </a> </div> <p> <a href="/digital/20141022?k=ddjtm&cid=onedit_ds_ddjtm"><b>This month</b></a>, Dr. Dobb's Journal is devoted to mobile programming. We introduce you to Apple's new Swift programming language, discuss the perils of being the third-most-popular mobile platform, revisit SQLite on Android , <b><a href="/digital/20141022?k=ddjtm&cid=onedit_ds_ddjtm">and much more!</a></b><br><br> <a href="/digital/20141022?k=ddjtm&cid=onedit_ds_ddjtm">Download the latest issue today. >></a> </p> </div> </div> </div> <div id='div-gpt-ad-942957474691236830-5'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-5'); }); </script> </div> <br/> <br/> <!-- Upcoming Events --> <style> #upcoming_tabs .tab-content { border: 1px solid #5F953C; border-top: none; margin-top: -10px; width: 323px; font-size: 12px; padding: 20px 5px 10px; } #upcoming_tabs .tab-content li { margin: 0 15px; list-style: none; } #upcoming_tabs .tab-content p { margin: 0 10px; } #upcoming_tabs .tab-content p img { max-width: 100px; margin-bottom: 5px; } #upcoming_tabs .tab-content a { font-size: 12px; font-weight: normal; } </style> <div class="subsection"> <h2>Upcoming Events</h2> <div id="upcoming_tabs"> <div class="tab_controls"> <a title="Live Events" href="#tab_live-events">Live Events</a> <a title="WebCasts" href="#tab_webcasts">WebCasts</a> </div> <div class="tab-content" style="display: block;" id="tab_live-events"> <!-- Taxonomy ID: --><!--not from cache.cache key-->No records found </div> <div class="tab-content" style="display: none;" id="tab_webcasts"> <!-- Taxonomy ID: --><!--not from cache.cache key--> <!-- Taxonomy ID: --> <li><!--Rule 10 --><a target="_new" href="https://www.interop.com/may24-event?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_home&itc=SBX_ddj_fture_Webcast_default_home&K=SBX_DDJ_FT">Security for Hybrid Workforce Deployments </a> </li> <li><!--Rule 10 --><a target="_new" href="https://ve.informaengage.com/virtual-events/itpro-build-a-stronger-cybersecurity-defense/?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_home&itc=SBX_ddj_fture_Webcast_default_home&K=SBX_DDJ_FT">Build a Stronger Cybersecurity Defense Virtual Event 5/4</a> </li> <li><!--Rule 10 --><a target="_new" href="https://webinar.darkreading.com/1341358?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_home&itc=SBX_ddj_fture_Webcast_default_home&K=SBX_DDJ_FT">How To Get Ahead Of The Security Data Curve -- And Stay There</a> </li> <li><!--Rule 10 --><a target="_new" href="https://event.on24.com/wcc/r/3656589/D5BEC18F1C422962B1243FCED88437E1?partnerref=darkreading&cid=SBX_ddj_fture_Webcast_default_home&itc=SBX_ddj_fture_Webcast_default_home&K=SBX_DDJ_FT">A Black Hat Webinar: Inside the Cyber Safety Review Board: A Fireside Chat with Jeff Moss, Chair Rob Silvers and Deputy Chair Heather Adkins</a> </li> <li><!--Rule 10 --><a target="_new" href="https://webinar.darkreading.com/1294365?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_home&itc=SBX_ddj_fture_Webcast_default_home&K=SBX_DDJ_FT">Rethinking Endpoint Security</a> </li> <br> <br> <div class="sbarchive_bottomleft"><a href="/webcast/all/more.html?cid=SBX_ddj_fture_Webcast_default_home?itc=SBX_ddj_fture_Webcast_default_home" class="continue">More Webcasts<span>>></span></a></div> <!-- Render Assets of CurationType 'Webcast' --> </div> </div><!--/upcoming_border--> </div><!--/upcoming--> <script type="text/javascript"> $(document).ready(function(){ $('#upcoming_tabs .tab-content').hide(); $('#upcoming_tabs .tab-content:first').show(); $('#upcoming_tabs .tab_controls a:first').addClass('current'); $('#upcoming_tabs .tab_controls a').click(function(){ $('#upcoming_tabs .tab_controls a').removeClass('current'); $(this).addClass('current'); var currentTab = $(this).attr('href'); $('#upcoming_tabs .tab-content').hide(); $(currentTab).show(); return false; }); }); </script> <div class="recent-articles"> <div id="smartbox"> <h2>Featured Reports</h2> <div class="bar" style="padding-top:8px;padding-bottom:8px;"> <div class="left"> </div> <div class="right"><a title="UBM Smart boxes auto deliver premium content that is contextually relevant to the article or site section where it is located" href="#">What's this?</a></div> </div> <div class="resources clearfix"> <!-- Taxonomy ID: --><!--not from cache.cache key--> <!-- Taxonomy ID: --> <ul class="archive"> <li><!--brand --> <a target="_new" href="https://iw-resources.informationweek.com/c/pubRD.mpl?secure=1&sr=pp&_t=pp:&qf=w_ingg253&ch=sbx&cid=SBX_ddj_fture_Analytics_default_home&itc=SBX_ddj_fture_Analytics_default_home"> 2024 InformationWeek US IT Salary Report </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/security-monitoring/incident-readiness-and-building-response-playbook/429723?cid=SBX_ddj_fture_Analytics_default_home&itc=SBX_ddj_fture_Analytics_default_home"> Incident Readiness and Building Response Playbook </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/risk-management-security/intel-471-breach-report/429143?cid=SBX_ddj_fture_Analytics_default_home&itc=SBX_ddj_fture_Analytics_default_home"> Intel 471 Breach Report </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/cloud-security/sans-2021-cloud-security-survey/429583?cid=SBX_ddj_fture_Analytics_default_home&itc=SBX_ddj_fture_Analytics_default_home"> SANS 2021 Cloud Security Survey </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/cloud-security/cloud-and-hybrid-security-tooling-report/429603?cid=SBX_ddj_fture_Analytics_default_home&itc=SBX_ddj_fture_Analytics_default_home"> Cloud & Hybrid Security Tooling Report </a> </li> </ul> <div class="left" style="margin-left: 28px !important;font-family: verdana;font-size: 10px;"><a href="/analytics/all/more.html?cid=SBX_ddj_fture_Analytics_default_home?itc=SBX_ddj_fture_Analytics_default_home">More >></a></div> <div class="right"><img src="https://twimgs.com/informationweek/smartbox/images/smartbox.PNG"></div> </div> </div> <br> <div id="smartbox"> <h2>Featured Whitepapers</h2> <div class="bar" style="padding-top:8px;padding-bottom:8px;"> <div class="left"> </div> <div class="right"><a title="UBM Smart boxes auto deliver premium content that is contextually relevant to the article or site section where it is located" href="#">What's this?</a></div> </div> <div class="resources clearfix"> <!-- Taxonomy ID: --><!--not from cache.cache key--> <!-- Taxonomy ID: --> <ul class="archive"> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/security-management-and-analytics/cybersecurity/maximize-the-human-potential-of-your-soc/439363?cid=SBX_ddj_fture_wp_default_home&itc=SBX_ddj_fture_wp_default_home"> Maximize the Human Potential of Your SOC </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/security/selling-breaches-the-transfer-of-enterprise-network-access-on-criminal-forums/436623?cid=SBX_ddj_fture_wp_default_home&itc=SBX_ddj_fture_wp_default_home"> Selling Breaches: The Transfer of Enterprise Network Access on Criminal Forums </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/security/protecting-critical-infrastructure-the-2021-energy,-utilities,-and-industrials-cyber-threat-landscape-report/436563?cid=SBX_ddj_fture_wp_default_home&itc=SBX_ddj_fture_wp_default_home"> Protecting Critical Infrastructure: The 2021 Energy, Utilities, and Industrials Cyber Threat Landscape Report </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/security-platforms/the-impact-of-xdr-in-the-modern-soc/436353?cid=SBX_ddj_fture_wp_default_home&itc=SBX_ddj_fture_wp_default_home"> The Impact of XDR in the Modern SOC </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/security-platforms/the-rise-of-extended-detection-and-response/436343?cid=SBX_ddj_fture_wp_default_home&itc=SBX_ddj_fture_wp_default_home"> The Rise of Extended Detection & Response </a> </li> </ul> <div class="left" style="margin-left: 28px !important;font-family: verdana;font-size: 10px;"><a href="/whitepaper/all/more.html?cid=SBX_ddj_fture_wp_default_home?itc=SBX_ddj_fture_wp_default_home">More >></a></div> <div class="right"><img src="https://twimgs.com/informationweek/smartbox/images/smartbox.PNG"></div> </div> </div> <br> </div> <div class="subsection mostrecent"> <h2>Most Recent Premium Content</h2> <div class="tab_controls"> <a class="current" href="/digitaledition/">Digital Issues</a> </div> <div class="box_wrap"> <ul> <b>2014</b><br /> <b>Dr. Dobb's Journal</b> <li><a href="https://www.drdobbs.com/digital/20141022">November - <strong>Mobile Development</strong></a></li> <li><a href="https://dc.ubm-us.com/i/350594">August - <strong>Web Development</strong></a></li> <li><a href="https://dc.ubm-us.com/i/300036/">May - <strong>Testing</strong></a></li> <li><a href="https://dc.ubm-us.com/i/245989">February - <strong>Languages</strong></a></li> <br /> <b>Dr. Dobb's Tech Digest</b><br> <li><a href="https://www.drdobbs.com/digital/20140813">DevOps</a></li> <li><a href="https://www.drdobbs.com/digital/20140626">Open Source</a></li> <li><a href="https://www.drdobbs.com/digital/20140514/">Windows and .NET programming</a></li> <li><a href="https://www.drdobbs.com/digital/012914/">The Design of Messaging Middleware and 10 Tips from Tech Writers</a></li> <li><a href="https://www.drdobbs.com/digital/022614">Parallel Array Operations in Java 8 and Android on x86: Java Native Interface and the Android Native Development Kit</a></li> <br /> <b>2013</b> <li><a href="https://www.drdobbs.com/digital/121712/?cid=ddj_premium_January2013">January - <strong>Mobile Development</strong></a></li> <li><a href="https://www.drdobbs.com/digital/012213/?cid=ddj_premium_February2013">February - <strong>Parallel Programming</strong></a></li> <li><a href="https://www.drdobbs.com/digital/022513/?cid=ddj_premium_March2013">March - <strong>Windows Programming</strong></a></li> <li><a href="https://www.drdobbs.com/digital/032513/?cid=ddj_premium_April2013">April - <strong>Programming Languages</strong></a></li> <li><a href="https://www.drdobbs.com/digital/042213/?cid=ddj_premium_May2013">May - <strong>Web Development</strong></a></li> <li><a href="https://www.drdobbs.com/digital/052013/?cid=ddj_premium_June2013">June - <strong>Database Development</strong></a></li> <li><a href="https://www.drdobbs.com/digital/062413/?cid=ddj_premium_July2013">July - <strong>Testing</strong></a></li> <li><a href="https://www.drdobbs.com/digital/072213/?cid=ddj_premium_August2013">August - <strong>Debugging and Defect Management</strong></a></li> <li><a href="https://www.drdobbs.com/digital/082613">September - <strong>Version Control</strong></a></li> <li><a href="https://www.drdobbs.com/digital/092313/">October - <strong>DevOps</strong></a></li> <li><a href="https://www.drdobbs.com/digital/102113">November- <strong>Really Big Data</strong></a></li> <li><a href="https://www.drdobbs.com/digital/111113?k=ddjtm&cid=onedit_ds_ddjtm">December - <strong>Design</strong></a></li> <br> <b>2012</b> <li><a href="https://www.drdobbs.com/digital/121911/?cid=ddj_premium_January2012">January - <strong>C & C++</strong></a></li> <li><a href="https://www.drdobbs.com/digital/011912/?cid=ddj_premium_February2012">February - <strong>Parallel Programming</strong></a></li> <li><a href="https://www.drdobbs.com/digital/021912/?cid=ddj_premium_March2012">March - <strong>Microsoft Technologies</strong></a></li> <li><a href="https://www.drdobbs.com/digital/031912/?cid=ddj_premium_April2012">April - <strong>Mobile Development</strong></a></li> <li><a href="https://www.drdobbs.com/digital/042312/?cid=ddj_premium_May2012">May - <strong>Database Programming</strong></a></li> <li><a href="https://www.drdobbs.com/digital/052112/?cid=ddj_premium_June2012">June - <strong>Web Development</strong></a></li> <li><a href="https://www.drdobbs.com/digital/061812/?cid=ddj_premium_July2012">July - <strong>Security</strong></a></li> <li><a href="https://www.drdobbs.com/digital/072312/?cid=ddj_premium_August2012">August - <strong>ALM & Development Tools</strong></a></li> <li><a href="https://www.drdobbs.com/digital/082012/?cid=ddj_premium_September2012">September - <strong>Cloud & Web Development</strong></a></li> <li><a href="https://www.drdobbs.com/digital/092412/?cid=ddj_premium_October2012">October - <strong>JVM Languages</strong></a></li> <li><a href="https://www.drdobbs.com/digital/102212/?cid=ddj_premium_November2012">November - <strong>Testing</strong></a></li> <li><a href="https://www.drdobbs.com/digital/111912/?cid=ddj_premium_December2012">December - <strong>DevOps</strong></a></li> <br /> </ul> </div></div> </div> <script src="https://content.dl-rms.com/rms/19467/nodetag.js"></script> <div style="clear: both;"> <!-- Google Tag Manager --> <script>(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= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MMJM4JC');</script> <!-- End Google Tag Manager --> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MMJM4JC" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://twimgs.com/nojitter/css/common-footer.css?v2" /> <style type="text/css"> @media (min-width: 992px){ .col-md-5.brand-name { width:27%; } } </style> <script type="text/javascript"> var _elqQ = _elqQ || []; _elqQ.push(['elqSetSiteId', '2150']); _elqQ.push(['elqUseFirstPartyCookie', 'trk.drdobbs.com']); _elqQ.push(['elqTrackPageView']); (function() { function async_load() { var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = '//img.en25.com/i/elqCfg.min.js'; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); } if(window.addEventListener) window.addEventListener('DOMContentLoaded', async_load, false); else if (window.attachEvent) window.attachEvent('onload', async_load); })(); </script> <footer style="position: absolute; width: 100%; left: 0;"> <div class="divisional-footer"> <div class="divisional-footer-container"> <!--divisional plus marketing --> <div class="alternate"> <div class="footer-row" style="border-bottom: 1px solid #fff;"> <div class="col-md-5 discover"> <div class="heading">Discover more from Informa Tech</div> <ul class="list-inline"> <li><a href="https://www.informationweek.com/" title="InformationWeek">InformationWeek</a></li> <li><a href="https://www.interop.com/" title="Interop">Interop</a></li> <li><a href="https://www.darkreading.com/" title="Dark Reading">Dark Reading</a></li> <li><a href="https://www.datacenterknowledge.com/" title="Data Center Knowledge">Data Center Knowledge</a></li> <li><a href="https://www.networkcomputing.com/" title="Network Computing">Network Computing</a></li> <li><a href="https://www.itprotoday.com/" title="IT Pro Today">IT Pro Today</a></li> </ul> </div> <div class="col-md-2 working"> <div class="heading">Working With Us</div> <ul class="list-inline"> <li style="width:96%"><a href="https://informationweek.com/about-us/d/d-id/705542">Contact Us</a></li> <li style="width:96%"><a href="https://informationweek.com/document.asp?doc_id=705542">About Us</a></li> <li style="width:96%"><a href="https://informationweek.com/document.asp?doc_id=1334603">Advertise</a></li> <li style="width:96%"><a target="_blank" href="https://info.wrightsmedia.com/informa-licensing-reprints-request">Reprints</a></li> </ul> </div> <div class="col-md-5 brand-name"> <div class="heading">Follow Dr. Dobb's on Social </div> <ul class="list-inline social-icon"> <li> <a href="https://www.facebook.com/informationweek"> <i class="facebook-white trigger-sc-event" data-goal-id="715A59A2-A9FC-44E0-B4AF-8A960F2A5116"></i> </a> </li> <li> <a href="https://twitter.com/InformationWeek"> <i class="twitter-white trigger-sc-event" data-goal-id="715A59A2-A9FC-44E0-B4AF-8A960F2A5116"></i> </a> </li> <li> <a href="https://www.linkedin.com/company/3930/admin/"> <i class="linkedin-white trigger-sc-event" data-goal-id="715A59A2-A9FC-44E0-B4AF-8A960F2A5116"></i> </a> </li> <li> <a href="https://www.drdobbs.com/rss/"> <i class="rss-feed-white trigger-sc-event" data-goal-id="715A59A2-A9FC-44E0-B4AF-8A960F2A5116"></i> </a> </li> </ul> </div> </div> </div> <!--DIV--> </div> </div> <div class="divisional-footer"> <div class="divisional-footer-container"> <div class="footer-row footer-icons"> <div class="col-md-5 logo"> <img src="https://twimgs.com/nojitter/img/Whitelogo.png" alt="alt text of the logo"> </div> <div class="col-md-7" style="padding:0;margin:0;"> <ul class="list-inline"> <li><a target="_blank" href="https://tech.informa.com/">Home</a></li> <li><a target="_blank" href="https://tech.informa.com/cookie-policy">Cookie Policy</a></li> <li><a target="_blank" href="https://privacyportal-eu-cdn.onetrust.com/dsarwebform/c1f53e84-9f05-4169-a854-85052b63c50b/5f26b553-52cc-4973-a761-295d5634a6b6.html">CCPA: Do not sell my personal info</a></li> <li><a target="_blank" href="https://tech.informa.com/privacy-policy">Privacy</a></li> <li><a target="_blank" href="https://tech.informa.com/terms-and-conditions">Terms</a></li> </ul> </div> </div> <div class="footer-row privacy-policy"> <div class="col-md-12"> <p class="copyright" style="margin-left: -20px;">Copyright 漏 2024 Informa PLC. Informa PLC is registered in England and Wales with company number 8860726 whose registered and head office is 5 Howick Place, London, SW1P 1WG. </p> </div> </div> </div> </div> </footer> </div> </div> </div> <!-- SiteCatalyst code version: H.16. Copyright 1997-2008 Omniture, Inc. More info available at https://www.omniture.com --> <script type="text/javascript" src="https://twimgs.com/custom/library.gtecevent.com/assets/ubm-tech-global-app-measurement.js?ormzkk" ></script> <script language='JavaScript' type='text/javascript'> var referer = ''; var eVar23 = ''; var slr=""; var host=""; var userAgent = ''; $.ajax({ type: "GET", url: host+"/omniture", data: "referer="+slr+encodeURIComponent(document.referrer), success: function(data){ if (data != null) { referer = data.referer; eVar23 = data.eVar23; userAgent = data.userAgent; } }, dataType: "json", async: false, cache: false } ); </script> <script language='JavaScript' type='text/javascript'> <!-- s.pageURL="http://www.drdobbs.com//"; s.pageName=""; s.referrer=referer; s.server=""; s.channel="drdobbs.com.com/"; s.pageType=""; s.prop1=""; s.prop2=""; s.prop3=""; s.prop4=""; s.prop5="home page"; s.prop6=""; s.prop7=""; s.prop8=userAgent; s.prop9=""; s.prop10=""; s.prop11=""; s.prop12=""; s.prop14=""; s.prop15=""; s.prop16=""; s.prop19="False"; s.prop20=""; s.prop21=""; /* Conversion Variables */ s.campaign=""; s.state=""; s.zip=""; s.events=""; s.products=""; s.purchaseID=""; s.eVar1=""; s.eVar2=""; s.eVar3=""; s.eVar4=""; s.eVar5=""; s.eVar6=""; s.eVar8=""; s.eVar21=""; s.eVar22=""; s.eVar23=eVar23; s.eVar31="events|Reports|Whitepapers"; /************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/ var s_code=s.t();if(s_code)document.write(s_code)//--> </script> <noscript><a href="https://www.omniture.com" title="Web Analytics"><img src="https://cmpglobalvista.112.2O7.net/b/ss/cmpglobalvista/1/H.16--NS/0" height="1" width="1" border="0" alt="" /></a></noscript><!--/DO NOT REMOVE/--> <script language="JavaScript" type="text/javascript"> function trackComment(){ var s=s_gi('cmpglobalvista'); s.evar24=s.prop7 +" | "+ s.prop4; s.events='event8'; s.tl(this,'o','Article Comment Posted'); } </script> <!-- End SiteCatalyst code version: H.16 --><script type="text/javascript"> var disqus_shortname = 'drdobbs'; var disqus_developer = 1; /* * * DON'T EDIT BELOW THIS LINE * * */ (function () { var s = document.createElement('script'); s.async = true; s.type = 'text/javascript'; s.src = 'https://' + disqus_shortname + '.disqus.com/count.js'; (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s); }()); </script> <!-- Google Code for Remarketing Tag --> <!-------------------------------------------------- Remarketing tags may not be associated with personally identifiable information or placed on pages related to sensitive categories. See more information and instructions on how to setup the tag on: http://google.com/ads/remarketingsetup ---------------------------------------------------> <script type="text/javascript"> /* <![CDATA[ */ var google_conversion_id = 1007530244; var google_custom_params = window.google_tag_params; var google_remarketing_only = true; /* ]]> */ </script> <script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js"> </script> <noscript> <div style="display:inline;"> <img height="1" width="1" style="border-style:none;" alt="" src="//googleads.g.doubleclick.net/pagead/viewthroughconversion/1007530244/?guid=ON&script=0"/> </div> </noscript></body> </html>