Dr. Dobb's is part of the Informa Tech Division of Informa PLC

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.


Channels ▼
RSS

Letters


</head> <P> <body BGCOLOR="#ffffff" LINK="#0000ff" VLINK="#330066" ALINK="#ff0000" TEXT="#000000"> <!--Copyright © Dr. Dobb's Journal--> <P> <P> <P> <b>I/O Multiplexing </b></p> <P> <P> Dear <i>DDJ</i>,</p> <P> <P> I found Ian Barile's article "I/O Multiplexing & Scalable Sockets" (<i>DDJ</i>, February 2004) of grand proportions to be quite enlightening. I would, however, like to comment a bit on his mention of existing implementations. Ian posits that there are few I/O multiplexing implementations out there (which is true). However, I must point out that FreeBSD has an (quite powerful) alternative to traditional <i>select/poll—kevent/kqueue</i>. Besides being far more efficient than <i>select/poll</i>, it also acts upon a larger set of system objects than just file descriptors. For example, predefined system filters make it possible to monitor for: <i>vnode</i> events (UFS filesystems only), socket/file/pipe/BPF descriptor events, network device events, timer events, asynchronous I/O (AIO) events, and process events. The API provides not only an adequate interface for the scalable I/O multiplexing that Ian seeks, but it also provides a means for monitoring for events generically.</p> <P> <P> Anthony Schneider</p> <P> <P> anthony@x-anthony.com</p> <P> <P> <b>Who's On First Redux</b></p> <P> <P> Dear <i>DDJ</i>,</p> <P> <P> In regards, to Ron Wolf's "Letter" and Ed Nisley's response concerning the Atanasoff versus Univac debate (<i>DDJ</i>, March 2004), a new book entitled <i>Who Invented the Computer?: The Legal Battle That Changed Computing History,</i> by Alice R. Burks (Prometheus Books, 2003) adds more weight on Atanasoff's side. A grain of salt: Consider that Eckert and Mauchly stood to lose large amounts of money if their claims were invalidated.</p> <P> <P> Also in the March issue, the title of the article "Fostering Little Languages" by John Clements et al., rang a bell. "Little Languages" is a chapter heading in the book <i>The AWK Programming Language</i>, by Aho, Weinberger, and Kernighan. Their examples include designs for translators for <i>really</i> little languages. Examples include an assembler and interpreter, a graphing language, a language to describe sort commands in English, RP and infix calculators, and simple parsers. The assembler example has been adapted to real-world code generation for special-purpose processors built in programmable-logic arrays.</p> <P> <P> Bill Hickok </p> <P> <P> hickok@eznet.net</p> <P> <P> <b>Doubling Down On Double Dispatch </b></p> <P> <P> Dear <i>DDJ</i>,</p> <P> <P> In his letter, "Double Dispatch Again Revisited" (<i>DDJ</i>, March 2004), Wolfgang Stephan comes full circle in the quest for an elegant solution to the double dispatch problem, which would allow for inheritance. Wolfgang's proposed solution appears identical to Scott Meyers's second attempt, quickly discarded, to address this problem in Item 31 of <i>More Effective C++: 35 New Ways to Improve Your Programs and Designs </i>(Addison-Wesley, 1996). The "fatal flaw" with this approach, according to Meyers, is that every existing <i>GameObject</i>-derived class must be modified whenever a new <i>GameObject</i>-derived class is added to the class hierarchy. His goal was to make the solution extensible without requiring changing, much less recompiling every existing class when a new derived class is added. Meyers's finally arrived at a solution both elegant and flawed. His idea was to create a map that associates pairs of class names with function pointers. The elegance of this approach was that it made use of Run-Time Type Identification (RTTI) to create the key strings, eliminating the need to add any extra members to the classes in the hierarchy in order to manage them. The flaw, of course is that type names in the map had to match the class names exactly, short circuiting inheritance. </p> <P> <P> Nat Goodspeed attempted in "Double Dispatch Revisited" (<i>DDJ</i>, January 2004) to address this new problem by replacing the <i>std::pair<std::string,std::string></i> object that Meyers used as the key in his map with a functor class. I'm not going to completely summarize the article here, since clearly Wolfgang has taken the time to read it. But perhaps Wolfgang should (re)read the original item in Meyers's book, which inspired Nat's article.</p> <P> <P> David M. Miller </p> <P> <P> dmmiller@acm.org</p> <P> <P> <b>Java 2D & Web Pages</b></p> <P> <P> Dear <i>DDJ</i>,</p> <P> <P> Late last year, I was contacted by Dav Coleman asking if I could help him with some code that appeared in my article "Java 2D & Web Pages" (<i>DDJ</i>, October 2003). The next time I heard from him, he had built an XMLRPC based on my code, turned it into a web service, and was using it on his site. Later on, somebody told me that I showed up on SourceForge. Turns out, Dav turned the whole thing into an open-source project. If readers want a peek at what he did, they can go to http://akuaku.org/archives/001138.shtml.</p> <P> <P> Paul Tremblett </p> <P> <P> ptremblett@audioaudit.com</p> <P> <P> <b></p> <P> <P> Tech Support</b></p> <P> <P> Dear <i>DDJ</i>,</p> <P> <P> In his editorial "Small Is Beautiful" (<i>DDJ</i>, March 2004), Jonathan Erickson writes "Getting up early is a small price to pay to talk to a qualified engineer." I disagree. Dell (and other companies) owe their customers a qualified support technician no matter what time they call, and no matter where the call is routed. If they can't do that, the customers can, should, and eventually will find another company with which to do business.</p> <P> <P> Steve Greenland</p> <P> <P> steveg@moregruel.net</p> <P> <P> <b>Porting Small-C</b></p> <P> <P> Dear <i>DDJ</i>,</p> <P> <P> Kudos to Pete Gray for his article "Porting Small-C" (<i>DDJ</i>, March 2004). Reference is made to "versions for the original 8086," but in fact the original <i>Small-C Handbook,</i> by James E Hendrix, which I have now on my desk, was written using the 8-bit 8080 processor. The software ran under the CP/M operating system. Reference is made to "the 8086 is an 8-bit microprocessor." The 8086 was a 16-bit microprocessor. Instructions, registers, and data transfer were all 16 bits. Perhaps part of the confusion arises from the fact that the particular variant used in the original IBM PC—the 8088—had an 8-bit data path. This did not affect the program, however, only slowing data fetch (two fetches for 16 bits instead of one) and was invisible to programmers who wrote for 16-bit computers. Finally, in regards to Pete's complaint that "documentation for the assembly language and 8086 processor is difficult to come by": The original reference manuals were available on the Intel web site until recently, and many books were written on the assembly language, some still current; for instance, <i>Assembly Language for Intel-Based Computers, </i>by Kip Irvine (Prentice Hall, 2002).</p> <P> <P> Harvey Nice</p> <P> <P> harvey@cti.depaul.edu</p> <P> <P> <P> <b>DDJ</b></p> <P> <hr> <P> </body> </html> <P> <!-- send Article author Details--> </article> </div> <!-- test --> <br> <div class="nav1"> <center> </center> </div> <style type="text/css"> <!-- .nav1 { clear: both; text-align: center; } .topcommenttools .tools { display: table; font-size: .7em; font-weight: bold; padding-bottom: 10px; width: 100%; } .topcommenttools .tools .reply { float: left; } .topcommenttools .tools .share-email-report { float: right; } .topcommenttools .tools .share-email-report span { margin-left: 10px; } .topcommenttools .tools .reply a { background: transparent url('https://i.cmpnet.com/ddj/v2/images/reply.gif') no-repeat 0px 3px; padding-left: 10px; padding-right: 10px; } .topcommenttools .tools .share { background: transparent url('https://i.cmpnet.com/ddj/v2/images/share_icon.gif') no-repeat bottom left; padding-left: 23px; } .topcommenttools .tools .email { background: transparent url('https://i.cmpnet.com/ddj/v2/images/mail_icon.gif') no-repeat bottom left; padding-left: 22px; } .topcommenttools .tools .report { background: transparent url('https://i.cmpnet.com/ddj/v2/images/report_icon.gif') no-repeat bottom left; padding-left: 16px; } --> </style> </div> <!-- Related Reading Box --> <!-- 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> <h3 class="resources">Related Reading</h3> <div class="related-resources first tabs" style="margin-bottom:10px;"> <ul class="toc clearfix"> <li class="first"><a href="#toc-news" title="News">News</a></li> <li><a href="#toc-commentary" title="Commentary">Commentary</a></li> </ul> <div class="tab-content clearfix"> <h3 class="tab"><a name="toc-news">News</a></h3> <!--not from cache.cache key--> <ul class="events"> <li><a class="contentgating_article" href="/cpp/biicode-20-is-buzzing/240169447?cid=SBX_ddj_related_news_default_letters&itc=SBX_ddj_related_news_default_letters" title="biicode 2.0 Is Buzzing">biicode 2.0 Is Buzzing</a></li><li><a class="contentgating_article" href="/tools/xmind-6-public-beta-now-available/240169385?cid=SBX_ddj_related_news_default_letters&itc=SBX_ddj_related_news_default_letters" title="XMind 6 Public Beta Now Available">XMind 6 Public Beta Now Available</a></li><li><a class="contentgating_article" href="/open-source/docker-clocks-in-on-azure/240169384?cid=SBX_ddj_related_news_default_letters&itc=SBX_ddj_related_news_default_letters" title="Docker Clocks In On Azure">Docker Clocks In On Azure</a></li><li><a class="contentgating_article" href="/web-development/boostorg-committee-battles-library-log-j/240169383?cid=SBX_ddj_related_news_default_letters&itc=SBX_ddj_related_news_default_letters" title="Boost.org Committee Battles Library Log-Jam">Boost.org Committee Battles Library Log-Jam</a></li><a class="continue" href="/news?cid=SBX_ddj_related_news_default_letters&itc=SBX_ddj_related_news_default_letters" title="More News">More News<span>»</span></a> </ul> </div> <div class="tab-content clearfix"> <h3 class="tab"><a name="toc-commentary">Commentary</a></h3> <!--not from cache.cache key--> <ul class="events"> <li><a class="contentgating_article" href="/cloud/tools-to-build-payment-enabled-mobile-ap/240169446?cid=SBX_ddj_related_commentary_default_letters&itc=SBX_ddj_related_commentary_default_letters" title="Tools To Build Payment-Enabled Mobile Apps">Tools To Build Payment-Enabled Mobile Apps</a></li><li><a class="contentgating_article" href="/architecture-and-design/farewell-dr-dobbs/240169421?cid=SBX_ddj_related_commentary_default_letters&itc=SBX_ddj_related_commentary_default_letters" title="Farewell, <em>Dr. Dobb's</em>">Farewell, <em>Dr. Dobb's</em></a></li><li><a class="contentgating_article" href="/cpp/abstractions-for-binary-search-part-9-wh/240169416?cid=SBX_ddj_related_commentary_default_letters&itc=SBX_ddj_related_commentary_default_letters" title="Abstractions For Binary Search, Part 9: What Do We Need to Test?">Abstractions For Binary Search, Part 9: What Do We Need to Test?</a></li><li><a class="contentgating_article" href="/tools/devart-dbforge-studio-for-mysql-with-phr/240169414?cid=SBX_ddj_related_commentary_default_letters&itc=SBX_ddj_related_commentary_default_letters" title="Devart dbForge Studio For MySQL With Phrase Completion">Devart dbForge Studio For MySQL With Phrase Completion</a></li><a class="continue" href="/articles?cid=SBX_ddj_related_commentary_default_letters&itc=SBX_ddj_related_commentary_default_letters" title="More Commentary">More Commentary<span>»</span></a> </ul> </div> </div> <div class="related-resources tabs" style="margin-bottom:10px;"> <ul class="toc clearfix"> <li class="first"><a href="#toc-slideshow" title="Slideshow">Slideshow</a></li> <li><a href="#toc-video" title="Video">Video</a></li> </ul> <div class="tab-content clearfix"> <h3 class="tab"><a name="toc-slideshow">Slideshow</a></h3> <!--not from cache.cache key--> <ul class="events"> <li><a class="contentgating_article" href="/joltawards/jolt-awards-2014-the-best-programmer-lib/240167150?cid=SBX_ddj_related_slideshow_default_letters&itc=SBX_ddj_related_slideshow_default_letters" title="Jolt Awards 2014: The Best Programmer Libraries">Jolt Awards 2014: The Best Programmer Libraries</a></li><li><a class="contentgating_article" href="/tools/developer-reading-list/240164389?cid=SBX_ddj_related_slideshow_default_letters&itc=SBX_ddj_related_slideshow_default_letters" title="Developer Reading List">Developer Reading List</a></li><li><a class="contentgating_article" href="/architecture-and-design/2013-developer-salary-survey/240163580?cid=SBX_ddj_related_slideshow_default_letters&itc=SBX_ddj_related_slideshow_default_letters" title="2013 Developer Salary Survey">2013 Developer Salary Survey</a></li><li><a class="contentgating_article" href="/joltawards/jolt-awards-2013-the-best-programmer-lib/240151743?cid=SBX_ddj_related_slideshow_default_letters&itc=SBX_ddj_related_slideshow_default_letters" title="Jolt Awards 2013: The Best Programmer Libraries">Jolt Awards 2013: The Best Programmer Libraries</a></li><a class="continue" href="/slideshows?cid=SBX_ddj_related_slideshow_default_letters&itc=SBX_ddj_related_slideshow_default_letters" title="More Slideshows">More Slideshows<span>»</span></a> </ul> </div> <div class="tab-content clearfix"> <h3 class="tab"><a name="toc-video">Video</a></h3> <!--not from cache.cache key--> <ul class="events"> <li><a class="contentgating_article" href="/cloud/watson-discovery-advisor-cloud-service/240169017?cid=SBX_ddj_related_video_default_letters&itc=SBX_ddj_related_video_default_letters" title="Watson Discovery Advisor Cloud Service">Watson Discovery Advisor Cloud Service</a></li><li><a class="contentgating_article" href="/mobile/intel-at-mobile-world-congress/240166304?cid=SBX_ddj_related_video_default_letters&itc=SBX_ddj_related_video_default_letters" title="Intel at Mobile World Congress">Intel at Mobile World Congress</a></li><li><a class="contentgating_article" href="/architecture-and-design/ptech-educating-for-innovation/240163352?cid=SBX_ddj_related_video_default_letters&itc=SBX_ddj_related_video_default_letters" title="PTECH: Educating for Innovation">PTECH: Educating for Innovation</a></li><li><a class="contentgating_article" href="/architecture-and-design/teen-computer-scientist-wins-big-at-isef/240155247?cid=SBX_ddj_related_video_default_letters&itc=SBX_ddj_related_video_default_letters" title="Teen Computer Scientist Wins Big at ISEF">Teen Computer Scientist Wins Big at ISEF</a></li><a class="continue" href="/video/archives?cid=SBX_ddj_related_video_default_letters&itc=SBX_ddj_related_video_default_letters" title="More Videos">More Videos<span>»</span></a> </ul> </div> </div> <div class="related-resources tabs" style="margin-bottom:10px;"> <ul class="toc clearfix"> <li class="first"><a href="#toc-most-popular" title="Most Popular">Most Popular</a></li> </ul> <div class="tab-content clearfix"> <h3 class="tab"><a name="toc-most-popular">Most Popular</a></h3> <!--not from cache.cache key--> <ul class="events"> <li><a class="contentgating_article" href="/jvm/lambda-expressions-in-java-8/240166764?cid=SBX_ddj_related_mostpopular_default_letters&itc=SBX_ddj_related_mostpopular_default_letters" title="Lambda Expressions in Java 8">Lambda Expressions in Java 8</a></li><li><a class="contentgating_article" href="/tools/developer-reading-list-the-must-have-boo/240148421?cid=SBX_ddj_related_mostpopular_default_letters&itc=SBX_ddj_related_mostpopular_default_letters" title="Developer Reading List: The Must-Have Books for JavaScript">Developer Reading List: The Must-Have Books for JavaScript</a></li><li><a class="contentgating_article" href="/jvm/an-algorithm-for-compressing-space-and-t/184406478?cid=SBX_ddj_related_mostpopular_default_letters&itc=SBX_ddj_related_mostpopular_default_letters" title="An Algorithm for Compressing Space and Time">An Algorithm for Compressing Space and Time</a></li><li><a class="contentgating_article" href="/jvm/why-build-your-java-projects-with-gradle/240168608?cid=SBX_ddj_related_mostpopular_default_letters&itc=SBX_ddj_related_mostpopular_default_letters" title="Why Build Your Java Projects with Gradle Rather than Ant or Maven?">Why Build Your Java Projects with Gradle Rather than Ant or Maven?</a></li><a class="continue" href="/?cid=SBX_ddj_related_mostpopular_default_letters&itc=SBX_ddj_related_mostpopular_default_letters" title="More Popular">More Popular<span>»</span></a> </ul> </div> </div> <hr style="margin-bottom:10px;"/> <h3 class="resources">More Insights</h3> <div class="related-resources first" style="margin-bottom:10px;"> <!-- Taxonomy ID: --><!--not from cache.cache key--><h3>White Papers</h3> <!-- 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_well_wp_default_letters&itc=SBX_ddj_well_wp_default_letters"> Maximize the Human Potential of Your SOC </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/security/5-reasons-to-move-your-pki-deployment-to-the-cloud/436303?cid=SBX_ddj_well_wp_default_letters&itc=SBX_ddj_well_wp_default_letters"> 5 Reasons To Move your PKI Deployment to the Cloud </a> </li> </ul> <a title='More White Papers' href='/whitepaper/all/more.html?cid=SBX_ddj_well_wp_default_letters&itc=SBX_ddj_well_wp_default_letters' class='continue'>More <span>>></span></a> </div> <div class="related-resources" style="margin-bottom:10px;"> <!-- Taxonomy ID: --><!--not from cache.cache key--><h3>Reports</h3> <!-- Taxonomy ID: --> <ul class="archive"> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/risk-management-security/cve-weaponization-report/429173?cid=SBX_ddj_well_Analytics_default_letters&itc=SBX_ddj_well_Analytics_default_letters"> CVE Weaponization 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_well_Analytics_default_letters&itc=SBX_ddj_well_Analytics_default_letters"> SANS 2021 Cloud Security Survey </a> </li> </ul> <a title='More Reports' href='/analytics/all/more.html?cid=SBX_ddj_well_Analytics_default_letters&itc=SBX_ddj_well_Analytics_default_letters' class='continue'>More <span>>></span></a> </div> <div class="related-resources" style="margin-bottom:10px;"> <!-- Taxonomy ID: --><!--not from cache.cache key--><h3>Webcasts</h3> <!-- Taxonomy ID: --> <ul class="archive"> <li><!--Rule 10 --> <a target="_new" href="https://networkcomputing.tradepub.com/c/pubRD.mpl?secure=1&sr=pp&_t=pp:&qf=w_defa4224&ch=sbx&cid=SBX_ddj_well_Webcast_default_letters&itc=SBX_ddj_well_Webcast_default_letters&K=SBX_DDJ_WL"> Does Your Network - NOT WORK? </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://webinar.darkreading.com/1314863?keycode=sbx&cid=SBX_ddj_well_Webcast_default_letters&itc=SBX_ddj_well_Webcast_default_letters&K=SBX_DDJ_WL"> Streamlining Your Patch Management Processes </a> </li> </ul> <a title='More Webcast' href='/webcast/all/more.html?cid=SBX_ddj_well_Webcast_default_letters&itc=SBX_ddj_well_Webcast_default_letters' class='continue'>More <span>>></span></a> </div> <hr /><!-- / Related Reading Box --> <div class="dcolmask doublepage"> <div class="dcolleft"> <div class="dcol1"> <!-- Column 1 start --> <div id="left-col" style="width:160px;"> <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> <div class="dcol2" style="left:71%;width:70%;float:left;"> <!-- Commenting --> <div id="dobbs_disqus"> <div id="disqus-hints-box"> <script type="text/javascript" src="https://twimgs.com/brainyard/js/colorbox/jquery.colorbox-min.js"></script> <script type="text/javascript"> var brainyardDomain = 'www.drdobbs.com'; </script> <script type="text/javascript" src="https://twimgs.com/brainyard/js/disqusHints.js"></script> <!-- This section is for calling the commenting policy pop-up --> <script> $(document).ready(function(){ $(".commentingPolicy").colorbox({width:"420px",height:"300px",inline:true,href:"#inlineCommenting"});//end .htmlTags });//end doc ready </script> <link rel="stylesheet" href="https://twimgs.com/brainyard/css/colorbox.css" type="text/css" /> <link rel="stylesheet" href="https://twimgs.com/brainyard/css/disqusHints.css" type="text/css" /> <div style='display:none'> <div id='inlineModal' style='padding:10px;'> <div class="newsletterHeader"> <img src="https://twimgs.com/ddj/images/dobbs_disqus_logo.gif" /> </div> <br /><br /> <div class="markdown"> <h3>Currently we allow the following HTML tags in comments:</h3> <h3>Single tags</h3> <p><i>These tags can be used alone and don't need an ending tag. </i></p> <p><code><br></code> Defines a single line break <br /><br /> <code><hr></code> Defines a horizontal line</p> <h3>Matching tags</h3> <p><i>These require an ending tag - e.g. <code><i>italic text</i></code> </i></p> <p><code><a></code> Defines an anchor<br /><br /> <code><b></code> Defines bold text<br /><br /> <code><big></code> Defines big text<br /><br /> <code><blockquote></code> Defines a long quotation<br /><br /> <code><caption></code> Defines a table caption<br /><br /> <code><cite></code> Defines a citation<br /><br /> <code><code></code> Defines computer code text<br /><br /> <code><em></code> Defines emphasized text<br /><br /> <code><fieldset></code> Defines a border around elements in a form<br /><br /> <code><h1></code> This is heading 1<br /><br /> <code><h2></code> This is heading 2<br /><br /> <code><h3></code> This is heading 3<br /><br /> <code><h4></code> This is heading 4<br /><br /> <code><h5></code> This is heading 5<br /><br /> <code><h6></code> This is heading 6<br /><br /> <code><i></code> Defines italic text<br /><br /> <code><p></code> Defines a paragraph<br /><br /> <code><pre></code> Defines preformatted text<br /><br /> <code><q></code> Defines a short quotation<br /><br /> <code><samp></code> Defines sample computer code text<br /><br /> <code><small></code> Defines small text<br /><br /> <code><span></code> Defines a section in a document<br /><br /> <code><s></code> Defines strikethrough text<br /><br /> <code><strike></code> Defines strikethrough text <br /><br /> <code><strong></code> Defines strong text <br /><br /> <code><sub></code> Defines subscripted text <br /><br /> <code><sup></code> Defines superscripted text <br /><br /> <code><u></code> Defines underlined text<br /><br /></p> </div> </div><!-- /end inline_mailinglist--> <div id='inlineCommenting' style='padding:10px;' class="markdown"> <p><i>Dr. Dobb's</i> encourages readers to engage in spirited, healthy debate, including taking us to task. However, <i>Dr. Dobb's</i> moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. <i>Dr. Dobb's</i> further reserves the right to disable the profile of any commenter participating in said activities.</p> </div> </div> <table cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#f3f3f3"> <tr> <td colspan="2"> </td> </tr> <tr> <td width="34"><img src="https://twimgs.com/informationweek/Disqus_art/hintbox_info.jpg" alt="Disqus Tips" border="0" align="left" height="34"></td> <td><font style="font-family: Arial, Helvetica, Geneva, SunSans-Regular, sans-serif; color: #000000; font-size: 11px;"> <strong>To upload an avatar photo,</strong> first <a href="https://disqus.com/dashboard/" style="font-family: Arial,Helvetica,Geneva,SunSans-Regular,sans-serif; color: #003bb0; font-size: 11px;" target="_blank">complete your Disqus profile.</a> | <a href="#" class="htmlTags" style="font-family: Arial,Helvetica,Geneva,SunSans-Regular,sans-serif; color: #003bb0; font-size: 11px;">View the list</a> of <strong>supported HTML tags</strong> you can use to style comments. | Please read our <a href="#" class="commentingPolicy" style="font-family: Arial,Helvetica,Geneva,SunSans-Regular,sans-serif; color: #003bb0; font-size: 11px;"><strong>commenting policy.</strong></a> </font> </td> </tr> <tr> <td colspan="2"> </td> </tr> </table> </div> <div id="mythread"> </div> <script language='JavaScript' type='text/javascript'> <!-- var jmessage = ''; var jtimestamp = ''; var jhmac = ''; var jmessage = ''; var isLoggedIn = ''; $.ajax({ type: "GET", url: "/disqussetting", data: "referer="+encodeURIComponent(window.location.href), success: function(data){ if (data != null) { jmessage = data.jmessage; jtimestamp = data.jtimestamp; jhmac = data.jhmac; isLoggedIn = data.isLoggedIn; if(!isLoggedIn) // do only if he is not logged in { $('#mythread').load('/disqus/showcomments/format/html', {'success':encodeURIComponent(window.location.href), 'articleId': '184405669', 'assetId': '156622', 'actionType' : '' }); } } }, dataType: "json", async: false, cache: false } ); if(jhmac == null || jhmac == ''){ var headID = document.getElementsByTagName("head")[0]; var cssNode = document.createElement('link'); cssNode.type = 'text/css'; cssNode.rel = 'stylesheet'; cssNode.href = 'https://i.techweb.com/brainyard/css/disqusLoggedOff.css'; cssNode.media = 'screen'; headID.appendChild(cssNode); } else { document.write("<style type=\"text/css\">#techwebCommentLogin{display:none;}</style>"); } --> </script> <script type="text/javascript"> if (jmessage == null) $("div#disqus-hints-box").hide(); </script> <script type="text/javascript"> var disqus_config = function () { var hmac1 = jhmac; var htimestamp = jtimestamp; var hmessage = jmessage; if(hmac1 != null){ this.page.remote_auth_s3 = hmessage + ' ' + hmac1 + ' ' + htimestamp; this.page.api_key = "Qq6ImCn7MIzMK699FJY4iuhauNLipx3XghP08sjP0Wz9Ipk81mTrcqxz85A8OOqv"; } this.sso = { name: "UBM TechWeb", button: "http://i.techweb.com/informationweek/images/ubm-techweb-logo.gif", icon: "http://i.cmpnet.com/brainyard/images/favicon.ico", url: "javascript:NextGen.disqusCommentForm('http://www.drdobbs.com/login?assetId=156622&k=2LGCMTDD&successfulLoginRedirect=http%3A%2F%2Fwww.drdobbs.com%2Fletters%2F184405669%3FqueryText%3Dnisley');", logout: "http://www.drdobbs.com/logout?redirect=http%3A%2F%2Fwww.drdobbs.com%2Fletters%2F184405669%3FqueryText%3Dnisley", width: "800", height: "400" }; this.callbacks.onNewComment = [function() {trackComment();}]; }; </script> <style type="text/css"> .dsq-post-tools .dsq-post-as .dsq-button{ background: url(none); background-color:#c90000; } .dsq-post-tools .dsq-post-as .dsq-button:active{ background: url(none); background-color:#ed0404; } .dsq-post-tools .dsq-post-as .dsq-button:hover{ background: url(none); background-color:#e00000; } .dsq-post-tools .dsq-post-as .dsq-button{ text-shadow:none; color:white; } .dsq-comment-text blockquote{ border-left:1px solid #555555; padding-left:15px; padding-top:5px; padding-bottom:5px; font-style:italic; font-size:15px; margin:15px; color:#999999; margin-bottom:10px; padding-right:15px; font-weight:bold; } #dsq-content .dsq-comment-meta li, #dsq-content .dsq-comment-actions li { float: left; font-size: 65%; margin: 0 10px 0 0; } #dsq-content #dsq-footer li { float: left; font-size: 0.75em; margin: 0 10px 0 0; } #dsq-content .dsq-comment-text { display: inline; /* font-size: .80em; */ } </style> <a name="comments"></a> <div id="disqus_thread"> </div> <script type="text/javascript"> if(isLoggedIn) { var disqus_developer = 1; var disqus_shortname = 'drdobbs'; var disqus_domain = 'disqus.com'; var disqus_identifier = 'article_184405669'; var disqus_url = 'http://www.drdobbs.com/letters/184405669?queryText=nisley'; var disqus_title = '"Letters"'; if(disqus_identifier !== null && disqus_identifier != '') { /* * * DON'T EDIT BELOW THIS LINE * * */ (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = 'https://' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })(); } } </script> </div> <!-- / Commenting --> </div> </div> </div> <!-- Finally, to actually run the highlighter, you need to include this JS on your page --> <script type="text/javascript"> SyntaxHighlighter.all(); </script> </div> <script>var ngGatedContentPage = '1';</script> <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 class="subsection sponsored-content"> --> <!-- ?php echo $this->render('/shared/right/articlepremiumcontent.phtml')? --> <!-- </div> --> <div class="recent-articles non-mobile-unit"> <h2> Recent Articles</h2> <ul> <li><a href="/architecture-and-design/dr-dobbs-archive/240169474" class="contentgating_article">Dr. Dobb's Archive</a></li> <li><a href="/architecture-and-design/farewell-dr-dobbs/240169421" class="contentgating_article">Farewell, <em>Dr. Dobb's</em></a></li> <li><a href="/joltawards/jolt-awards-2015-coding-tools/240169420" class="contentgating_article">Jolt Awards 2015: Coding Tools</a></li> <li><a href="/architecture-and-design/thriving-among-the-apis/240169441" class="contentgating_article">Thriving Among the APIs</a></li> <li><a href="/web-development/the-long-death-of-project-hosting-sites/240169394" class="contentgating_article">The Long Death of Project Hosting Sites</a></li> </ul> </div> <span class="non-mobile-unit"> <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"> <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> </span> <!-- 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://ve.informaengage.com/virtual-events/itpro-build-a-stronger-cybersecurity-defense/?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_letters&itc=SBX_ddj_fture_Webcast_default_letters&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/1314784?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_letters&itc=SBX_ddj_fture_Webcast_default_letters&K=SBX_DDJ_FT">Rethinking Asset Management to Improve Enterprise Security</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_letters&itc=SBX_ddj_fture_Webcast_default_letters&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/1296100?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_letters&itc=SBX_ddj_fture_Webcast_default_letters&K=SBX_DDJ_FT">Understanding DNS Threats - And How to Use DNS to Expand your Cybersecurity Arsenal</a> </li> <li><!--Rule 10 --><a target="_new" href="https://webinar.darkreading.com/1314863?keycode=sbx&cid=SBX_ddj_fture_Webcast_default_letters&itc=SBX_ddj_fture_Webcast_default_letters&K=SBX_DDJ_FT">Streamlining Your Patch Management Processes</a> </li> <br> <br> <div class="sbarchive_bottomleft"><a href="/webcast/all/more.html?cid=SBX_ddj_fture_Webcast_default_letters?itc=SBX_ddj_fture_Webcast_default_letters" 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><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cloud-security/cybersecurity/zero-trust-and-the-power-of-isolation-for-threat-prevention/429403?cid=SBX_ddj_fture_Analytics_default_letters&itc=SBX_ddj_fture_Analytics_default_letters"> Zero Trust and the Power of Isolation for Threat Prevention </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/security-monitoring/cloud-security/privileged-access-management-checklist/429733?cid=SBX_ddj_fture_Analytics_default_letters&itc=SBX_ddj_fture_Analytics_default_letters"> Privileged Access Management Checklist </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/risk-management-security/increased-cooperation-between-access-brokers,-ransomware-operators-reviewed/429153?cid=SBX_ddj_fture_Analytics_default_letters&itc=SBX_ddj_fture_Analytics_default_letters"> Increased Cooperation Between Access Brokers, Ransomware Operators Reviewed </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://informationweek.com/whitepaper/cloud-security/security-management-and-analytics/sans-institute-survey-the-state-of-cloud-security/427033?cid=SBX_ddj_fture_Analytics_default_letters&itc=SBX_ddj_fture_Analytics_default_letters"> SANS Institute Survey: The State of Cloud Security </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/network-and-perimeter-security/cloud-infrastructure/the-infoblox-q1-2021-cyberthreat-intelligence-report/429503?cid=SBX_ddj_fture_Analytics_default_letters&itc=SBX_ddj_fture_Analytics_default_letters"> The Infoblox Q1 2021 Cyberthreat Intelligence 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_letters?itc=SBX_ddj_fture_Analytics_default_letters">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/cybersecurity/security/the-burnout-breach-how-employee-burnout-is-emerging-as-the-next-frontier-in-cybersecurity/437063?cid=SBX_ddj_fture_wp_default_letters&itc=SBX_ddj_fture_wp_default_letters"> The Burnout Breach: How employee burnout is emerging as the next frontier in cybersecurity </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_letters&itc=SBX_ddj_fture_wp_default_letters"> 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_letters&itc=SBX_ddj_fture_wp_default_letters"> 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/2021-banking-and-financial-services-industry-cyber-threat-landscape-report/436543?cid=SBX_ddj_fture_wp_default_letters&itc=SBX_ddj_fture_wp_default_letters"> 2021 Banking and Financial Services Industry Cyber Threat Landscape Report </a> </li> <li><!--Rule 10 --> <a target="_new" href="https://www.informationweek.com/whitepaper/cybersecurity/risk-management-security/supply-chain-cyber-risk-management-whitepaper/436193?cid=SBX_ddj_fture_wp_default_letters&itc=SBX_ddj_fture_wp_default_letters"> Supply Chain Cyber Risk Management Whitepaper </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_letters?itc=SBX_ddj_fture_wp_default_letters">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 non-mobile-unit"> <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 id="bottom" align="center" style="clear: both;"> <div id='div-gpt-ad-942957474691236830-29'> <script type='text/javascript'> googletag.cmd.push(function(){ googletag.display('div-gpt-ad-942957474691236830-29'); }); </script> </div> <!-- 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> <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> <!-- 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/letters/184405669?queryText=nisley"; s.pageName=""; s.referrer=referer; s.server=""; s.channel="drdobbs.com.com/letters"; s.pageType=""; s.prop1="nisley"; s.prop2="184405669"; s.prop3="Dr. Dobb's Journal | 184405669 | Letters"; s.prop4="Letters"; s.prop5="letters"; s.prop6=""; s.prop7=" "; s.prop8=userAgent; s.prop9=""; s.prop10="complete"; s.prop11="Feature"; s.prop12=""; s.prop14=""; s.prop15=""; s.prop16=""; s.prop19="False"; s.prop20="20040501"; 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="Related Reading|Insights|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 --><!-- 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>