Skip navigation

Syndicate Your Site

Dynamically Create RSS Syndication Feeds

asp:feature

LANGUAGES: C#

ASP.NET VERSIONS: 1.0 | 1.1 | 2.0

 

Syndicate Your Site

Dynamically Create RSS Syndication Feeds

 

By Scott Mitchell

 

If you visit many weblogs, such as those at http://blogs.msdn.com or http://weblogs.asp.net, you may have noticed that many blogs contain a little orange button with the text XML or RSS (see Figure 1). Clicking on that button takes you to a page that dumps out a bunch of XML content. This XML content, called an RSS syndication feed, contains information about the blog's latest posts, such as the title of a post, when it was made, a link to the complete post, and a synopsis of the post. RSS is a standard that specifies an XML format for syndicating metadata about Web site content in a machine-readable format.

 


Figure 1: Sites that provide an RSS feed typically use a little orange button that links to the site's RSS feed.

 

Syndicating content through RSS isn't limited to blogs; a bevy of Web sites syndicate information about their content using RSS, including CNet's News.com, Yahoo! News, eWeek.com, and Microsoft's MSDN site. You may be wondering why any Web site would want to syndicate metadata about its content. There are two main reasons:

 

One. Other Web sites can read the syndicated information, and display this on their own Web site. This gives the syndicated content more exposure since it can be easily delivered to multiple Web sites.

 

For example, at the official ASP.NET Web site (http://www.asp.net), there's an RSS feed listing the latest ASP.NET-related articles on the Web. On the Web site I run, 4GuysFromRolla.com, I list these recent articles on the homepage (http://aspnet.4GuysFromRolla.com), so a visitor to my site can see the titles and descriptions of the latest ASP.NET articles gathered by http://www.asp.net. Clicking on one of these titles will take the user to the particular article.

 

Two. Many people are starting to use RSS aggregators as a means for keeping up-to-date with online information. An RSS aggregator is a desktop or Web application that periodically checks the RSS feeds from a specified list of sites. If there are any new content items, the RSS aggregator alerts the user so that they can view information about the new content through their aggregator program, without having to fire up a browser and visit the site. Web sites that want to attract those who are using RSS aggregators need to provide information about their latest content using RSS.

 

In Displaying Syndicated Content, which examined how to consume an RSS feed and display it in an ASP.NET Web page. In this article, we'll look at how to syndicate content using RSS. The lessons learned and code presented in this article will be especially beneficial to those who maintain a Web site that provides regularly updated content and who are interested in extending their content's reach through syndication.

 

The History of RSS

By 1999, Netscape was creating its my.netscape.com Web site, which, like My Yahoo! and other personalized portal sites, allowed users to customize the information displayed on the personalized portal's home page. Netscape needed a standardized way to consume and display different content on a user's personalized homepage. To surmount this problem, they introduced a standardized way by which a Web site could syndicate information about its content. This standard was called RDF Site Summary (RSS) 0.9, as it required conformance to a previous W3C standard called RDF. (RDF is a standard for providing information in a machine-readable, XML format. See http://www.w3.org/RDF/ for more information.) Eventually RSS 0.9 became RSS 1.0.

 

As the RSS 1.0 specification was being formed, Netscape introduced RSS 0.91, which dropped the adherence to the RDF specification. Dave Winer then independently extended RSS 0.91 to RSS 0.92, adding functionality to the RSS spec. The latest work on RSS done by Dave Winer is RSS 2.0. With this latest version, Dave has changed the meaning of the RSS acronym from RDF Site Summary to Really Simple Syndication.

 

The important thing to understand is that there is a bit of a difference between the various RSS versions, most noticeably between RSS 1.0 (which maintains adherence to the RDF standard), and RSS 0.91, RSS 0.92, and RSS 2.0 (which does not). When deciding to syndicate your Web site's content, you'll need to choose which standard to use to syndicate your site's content. There's really no wrong choice; virtually all RSS aggregator applications can consume both valid feeds from any RSS version. However, I would encourage you to use the latest version, RSS 2.0, as it is the standard version we'll be syndicating for in this article. Therefore, from this point forward, when I use the term RSS I am referring to RSS 2.0.

 

Know the RSS 2.0 Specification

RSS is designed to syndicate information about Web site content. For example, the Web site I maintain, 4GuysFromRolla.com, offers an RSS feed (http://aspnet.4GuysFromRolla.com/rss/rss.aspx) that provides the following information about the 10 most recent articles:

  • The title of the article.
  • The URL of the article.
  • The date and time the article was published.
  • A short synopsis of the article.

 

The RSS specification provides pre-defined XML elements to express this and other information about a Web site's content items. Additionally, RSS provides XML elements to furnish information about the syndication channel. In RSS, a channel provides specific syndicated content. Each RSS feed contains a single channel. A Web site can contain an arbitrary number of RSS feeds, and can therefore contain an arbitrary number of channels. A Web site might opt to use multiple RSS feeds, having each feed focus on a specific type of content. Yahoo! News, for example, provides 16 separate RSS feeds at http://news.yahoo.com/rss - one for top stories, one for U.S. news, one for world news, one for business news, and so on. RSS channels are akin to television channels in that each TV channel provides a specific type of content, e.g. MTV provides music videos while CNN provides news.

 

The basic form of an RSS 2.0 document contains an element as the document root. The element contains a single child, . In the element are elements providing information about the RSS channel itself, as well as an element for information about each syndicated content item (see Figure 2). The official RSS 2.0 specification is available online at http://blogs.law.harvard.edu/tech/rss.

 

  

    4GuysFromRolla.com Headlines

    http://www.4GuysFromRolla.com/

    The latest headlines from

                         4GuysFromRolla.com

    Copyright 2004 Jupitermedia

              Corporation All Rights Reserved.

    180

    en-US

    [email protected]

    

      Protecting Files with ASP.NET

      http://4guysfromrolla.com/020404-1.aspx

      

        This article looks at using HTTP handlers to

        prevent HTTP access to certain types of files.

      

      [email protected]

      Wed, 08 Feb 2004 03:12:00 GMT

    

    

      Using Menus in ASP.NET

      http://4guysfromrolla.com/012804-1.aspx

      

        This article examines skmMenu, an open-source

        custom ASP.NET menu control.

      

      [email protected]

      Wed, 28 Jan 2004 06:51:00 GMT

    

    

      Understanding Web Services

      http://4guysfromrolla.com/010704-1.aspx

      

        This article, by Jisun Lee, examines how to create

        and consume .NET Web services.

      

      [email protected]

      Wed, 07 Jan 2004 12:09:00 GMT

    

  

Figure 2: An RSS 2.0 syndication feed contains an element for each of the site's recent content items. The elements preceding the elements provide information about the Web site.

 

As Figure 2 illustrates, the RSS feed contains a single element. The is described with elements such as , <link>, <description>, <copyright>, etc. The RSS 2.0 specification defines a number of elements that can be used to describe the RSS channel. Some of these are shown in Figure 3. The <title>, <link>, and <description> elements are required; all other elements are optional. There are additional channel-level elements available as well; consult the RSS 2.0 specification for more information.</p> <p>   </p> <table border="1" cellspacing="0" cellpadding="0"><tr><td width="111" valign="top"> <p> <b>Element</b></p> </td> <td width="240" valign="top"> <p> <b>Description</b></p> </td> </tr><tr><td width="111" valign="top"> <p> <title></p> </td> <td width="240" valign="top"> <p> Provides the title of the channel.</p> </td> </tr><tr><td width="111" valign="top"> <p> <link></p> </td> <td width="240" valign="top"> <p> Provides a URL to the channel.</p> </td> </tr><tr><td width="111" valign="top"> <p> <description></p> </td> <td width="240" valign="top"> <p> Provides a brief description of the channel.</p> </td> </tr><tr><td width="111" valign="top"> <p> <language></p> </td> <td width="240" valign="top"> <p> Language in which the channel is written. Must be one of the language values defined by the W3C (see RFC #1766).</p> </td> </tr><tr><td width="111" valign="top"> <p> <copyright></p> </td> <td width="240" valign="top"> <p> Copyright notice.</p> </td> </tr><tr><td width="111" valign="top"> <p> <managingEditor></p> </td> <td width="240" valign="top"> <p> E-mail address of the person responsible for editorial content.</p> </td> </tr><tr><td width="111" valign="top"> <p> <webmaster></p> </td> <td width="240" valign="top"> <p> E-mail address of the person responsible for the technical issues of the channel.</p> </td> </tr><tr><td width="111" valign="top"> <p> <ttl></p> </td> <td width="240" valign="top"> <p> Time to live. Indicates how long, in minutes, an RSS aggregator should wait before rechecking the feed to see if there is new content.</p> </td> </tr><tr><td width="111" valign="top"> <p> <image></p> </td> <td width="240" valign="top"> <p> URL to an image file for the channel.</p> </td> </tr></table><p><b>Figure 3:</b> Selected RSS 2.0 specification elements. </p> <p>   </p> <p> After the elements that describe the <channel>, an <item> element exists for each syndicated content item. Inside the <item> element are additional elements that provide information about the content. The RSS 2.0 specification lists 10 <item>-level elements (see Figure 4). Of these, only <title> or <description> must be present. Often however, you'll find at minimum the <title>, <link>, <description>, and <pubDate> elements.</p> <p>   </p> <table border="1" cellspacing="0" cellpadding="0"><tr><td width="87" valign="top"> <p> <b>Element</b></p> </td> <td width="264" valign="top"> <p> <b>Description</b></p> </td> </tr><tr><td width="87" valign="top"> <p> <title></p> </td> <td width="264" valign="top"> <p> Title of the content item.</p> </td> </tr><tr><td width="87" valign="top"> <p> <link></p> </td> <td width="264" valign="top"> <p> URL of the content item.</p> </td> </tr><tr><td width="87" valign="top"> <p> <description></p> </td> <td width="264" valign="top"> <p> Synopsis of the content item.</p> </td> </tr><tr><td width="87" valign="top"> <p> <author></p> </td> <td width="264" valign="top"> <p> E-mail address of the content item's author.</p> </td> </tr><tr><td width="87" valign="top"> <p> <category></p> </td> <td width="264" valign="top"> <p> String value indicating to which category the content item belongs.</p> </td> </tr><tr><td width="87" valign="top"> <p> <comments></p> </td> <td width="264" valign="top"> <p> URL to a Web page that has user comments or an online discussion about the content item.</p> </td> </tr><tr><td width="87" valign="top"> <p> <enclosure></p> </td> <td width="264" valign="top"> <p> Describes a media object that is attached to the content item. For example, if there is a movie associated with the content item, the <enclosure> element would contain a link to the movie and indicate its MIME type and file size.</p> </td> </tr><tr><td width="87" valign="top"> <p> <guid></p> </td> <td width="264" valign="top"> <p> Globally unique identifier for the content item.</p> </td> </tr><tr><td width="87" valign="top"> <p> <pubDate></p> </td> <td width="264" valign="top"> <p> Date/time the content item was published. This date/time must conform to the date/time format specified in RFC #822.</p> </td> </tr><tr><td width="87" valign="top"> <p> <source></p> </td> <td width="264" valign="top"> <p> RSS channel from which that the item came.</p> </td> </tr></table><p><b>Figure 4:</b> RSS 2.0 specification <item>-level elements.</p> <p>   </p> <p>Syndicate Your Content with RSS</p> <p> There are two approaches for syndicating content with RSS: create a static RSS feed XML file on the Web server, or have the RSS feed be an ASP.NET Web page that, when requested, dynamically generates the appropriate XML.</p> <p>   </p> <p> The benefit of using a static XML file is performance. No matter how you look at it, serving a static page from a Web server will never be less efficient that generating the same response using a dynamic, server-side technology, like ASP.NET. The downside of using a static file is that this file has to be updated in some manner. Typically updating a static file can be done in one of two ways:</p> <ol><li>Periodic Polling. A program is written that periodically checks the database for new content and updates the RSS feed if needed. This program would need to be installed on the Web server and configured to run at certain intervals. </li> <li>On-Demand Updates. If you use a content management system (CMS) - either a commercial product or a home-grown one - that you can tap into, you could have the RSS feed's XML file updated only when it needs to be, i.e. when new content is added. </li> </ol><p>   </p> <p> Using a static XML file as an RSS feed typically requires a certain level of access to the Web server or the content creation process. That is, you'll need to be able to schedule a program to run periodically that will update the XML file, or you'll need to be able to integrate such a program into the content management system. If you don't have this level of access, or don't want to write a program that can update the RSS feed's XML file, you can create an ASP.NET Web page that will dynamically generate the RSS feed's XML content. The chief concern of using a dynamic server-side technology like ASP.NET - performance - can be allayed by employing caching.</p> <p>   </p> <p> The .NET Framework contains a bevy of classes designed to work with XML data. These classes, in the <b>System.Xml</b> namespace, include classes to create XML documents, modify XML documents, read XML documents, and parse through XML documents. To syndicate Web site content, we simply need to create an XML document - the preferred (and most efficient) means of generating XML in .NET is to use the <b>XmlTextWriter</b> class. (For a discussion on the best practices for working with XML in .NET, be sure to read Aaron Skonnard's article ".NET XML Best Practices" at <a href="http://support.softartisans.com/kbview.aspx?ID=673">http://support.softartisans.com/kbview.aspx?ID=673</a>.)</p> <p>   </p> <p> The <b>XmlTextWriter</b> class provides methods to write XML elements, attributes, and text values to some backing store. For example, the <b>XmlTextWriter</b> can write XML content to a file or to any general Stream. It can also write to a TextWriter. The Stream or TextWriter the <b>XmlTextWriter</b> should write to is passed into the <b>XmlTextWriter</b>'s constructor.</p> <p>   </p> <p> Figure 5 shows the complete source code for an ASP.NET Web page that syndicates content to an RSS 2.0 syndication feed. To implement the code, create a new ASP.NET Web page. In the HTML portion, clear out all HTML markup, leaving just the @Page directive. In the code-behind class, add the code in Figure 5 to the Page_Load event handler. (The complete code in a Visual Studio.NET project is available for download; see end of article for details.)</p> <p>   </p> <p>// Set the content-type. </p> <p>Response.ContentType = "text/xml";</p> <p>Response.ContentEncoding = Encoding.UTF8;</p> <p>// Check to see if a cached version exists. </p> <p>if (Cache["RssFeed"] == null)</p> <p>{</p> <p>  // Build up the cache dynamically. </p> <p>  DataTable articleData = CreateDataSource();</p> <p>  // Use an XmlTextWriter to write XML data to a string. </p> <p>  StringWriter sw = new StringWriter();</p> <p>  XmlTextWriter writer = new XmlTextWriter(sw);</p> <p>  // Write out <rss version="2.0">. </p> <p>  writer.WriteStartElement("rss");</p> <p>  writer.WriteAttributeString("version", "2.0");</p> <p>  // Write out <channel>. </p> <p>  writer.WriteStartElement("channel");</p> <p>  // Write out <channel>-level elements. </p> <p>  writer.WriteElementString(</p> <p>    "title", "Example RSS Feed Title");</p> <p>  writer.WriteElementString(</p> <p>    "link", "http://myWebSite.com/");</p> <p>  writer.WriteElementString("description",</p> <p>    "This is a demonstration of creating an RSS feed.");</p> <p>  writer.WriteElementString("ttl", "60");</p> <p>  // Write out an <item> element for the first X articles. </p> <p>  const int RSS_ITEMS = 10;</p> <p>   for (int i = 0; i < RSS_ITEMS; i++)</p> <p>  {</p> <p>    // Write out <item>. </p> <p>    writer.WriteStartElement("item");</p> <p>    // Write out <item>-level information. </p> <p>    writer.WriteElementString("title",</p> <p>      articleData.Rows[i]["title"].ToString());</p> <p>    writer.WriteElementString("link", String.Format(</p> <p>      "http://myWebSite.com/article.aspx?id={0}",</p> <p>      articleData.Rows[i]["articleID"]));</p> <p>    writer.WriteElementString("description",</p> <p>      articleData.Rows[i]["synopsis"].ToString());</p> <p>    writer.WriteElementString("author",</p> <p>      articleData.Rows[i]["author"].ToString());</p> <p>    // Use DateTimeFormatInfo "r" to use RFC #1123 date</p> <p>    // formatting (same as RFC #822). </p> <p>    writer.WriteElementString("pubDate", ((DateTime)</p> <p>      articleData.Rows[i]["dateAdded"]).ToString("r"));</p> <p>    // Write out </item>. </p> <p>    writer.WriteEndElement();</p> <p>  }</p> <p>  // Write out </channel>. </p> <p>  writer.WriteEndElement();</p> <p>  // Write out </rss>. </p> <p>  writer.WriteEndElement();</p> <p>  // Save the string in the cache (cache for 1.5 hours). </p> <p>  Cache.Insert("RssFeed", sw.ToString(), null,</p> <p>    DateTime.Now.AddHours(1.5), TimeSpan.Zero);</p> <p>  writer.Close();</p> <p>} </p> <p>// Write out the cached value. </p> <p>Response.Write(Cache["RssFeed"].ToString());</p> <p><b>Figure 5:</b> An <b>XmlTextWriter</b> is used to syndicate content to a string. This string, which is cached, is then returned to the requesting client.</p> <p>   </p> <p> The code in Figure 5 starts by indicating that the returned content type is text/xml, and that it is encoded using 8-bit Unicode (UTF8). Next, a check is performed to see if there is an item named RssFeed in the cache. The RssFeed cache item contains the RSS feed's XML. If the XML is not in the cache, it needs to be regenerated. This begins by getting information about the Web site content and storing it in a DataTable. (The <b>CreateDataSource</b> method in Figure 5 simply returns a pre-populated DataTable; in your ASP.NET Web page you'd want to actually query the data store in which your content resides.)</p> <p>   </p> <p> Next, a <b>StringWriter</b> is created and used as the backing store for the <b>XmlTextWriter</b> instance created on the next line. Following that, the <rss>, <channel>, and <channel>-level description elements are written out using the appropriate <b>XmlTextWriter</b> methods. In the <b>for</b> loop, the first 10 content items are iterated through, adding an <item> element for each content item as well as appropriate information, such as the title, a URL to the article, the author, a synopsis, and the published date.</p> <p>   </p> <p> After the <b>for</b> loop the <channel> and <rss> elements are closed, and the XML string is stored in the data cache, set to expire in 1.5 hours. Finally, the RSS feed XML is returned to the requesting client with a <b>Response.Write</b> emitting the RssFeed cache item.</p> <p>   </p> <p> If you visit the ASP.NET Web page through a browser you should see an XML document that corresponds to the RSS 2.0 specification (see Figure 6).</p> <p>   </p> <p><img width="333" height="340" src="/content/legacy/images/asp200408sm_f_image004.jpg" class="old-inline-image"><br><b>Figure 6:</b> Visit an ASP.NET Web page through a browser to see an XML document that corresponds to the RSS 2.0 specification.</p> <p>   </p> <p>Be Aware of Performance</p> <p> In Figure 5, the RSS feed's XML is cached using the data cache. I chose to use the data cache because the cached value can be shared across pages in an ASP.NET Web application, so if the RSS needs to be parsed in some other page, it is accessible without having to recreate the XML from scratch. Furthermore, items in the data cache can be given cache dependencies on external files. So, if you have a file that is automatically updated when your system updates its content, this file can be used as a cache dependency so that the emitted RSS is always up-to-date with the current content.</p> <p>   </p> <p> An alternative approach to caching with the data cache would be to use output caching. Employing output caching to the code in Figure 5 would simplify the code a little bit, removing the need for:</p> <ul><li>inserting the XML into the cache; </li> <li>checking to see if the RssFeed cache item exists; and </li> <li>using a <b>StringWriter</b> (instead the <b>XmlTextWriter</b> could use the <b>Response.OutputStream</b> as the backing store). </li> </ul><p>   </p> <p> For a more in-depth discussion on the different caching options available in ASP.NET be sure to read Scott McFarland's article "Caching with ASP.NET" at <a href="http://aspnet.4guysfromrolla.com/articles/022802-1.aspx">http://aspnet.4guysfromrolla.com/articles/022802-1.aspx</a>.</p> <p>   </p> <p> If a significant number of visitors subscribe to your site's RSS feed, you'll quickly find that the ASP.NET Web page that generates the RSS feed will become one of the most requested Web pages. This is because RSS aggregators typically request the file once every hour, or once every few hours, depending on the RSS aggregator being used and your syndication feed's <ttl> setting.</p> <p>   </p> <p> To reduce the impact of the increase in requests you will hopefully receive, consider employing both caching and HTTP compression techniques. The caching can be accomplished using either output caching or the data cache, as described before. HTTP compression improves the outgoing bandwidth by first compressing the Web server's output stream and sending this compressed version to the client. The client, then, can decompress the received content. HTTP compression will typically be able to reduce the size of an RSS file anywhere between 20% to 40%. HTTP compression can be enabled natively in some versions of IIS, or can be provided through a third-party component, like Pipeboost, httpZip, and XCompress. (A thorough discussion of implementing HTTP compression is beyond the scope of this article.)</p> <p>   </p> <p> Once you have created and validated an RSS feed, you're ready to share it with the world. Grab one of those little orange icons (see Figure 1), slap it up on your homepage, and link it to your RSS feed.</p> <p>   </p> <p> Happy Programming!</p> <p>   </p> <p> <i>The sample code in this article is available for <a href="/content/legacy/downloads/asp200408sm_f.zip">download</a>. </i></p> <p>   </p> <p>Speaker, author, and teacher, <b>Scott Mitchell</b> is the editor and founder of 4GuysFromRolla.com, one of the largest ASP resource sites on the Web. He has been avidly using and writing about Active Server Pages since January 1998. He's authored several hundred ASP-related articles on 4Guys along with numerous beginner- and advanced-level books on Active Server Pages and ASP.NET. Scott can be reached at <a href="mailto:mitchell@4guysfromrolla.com">mailto:mitchell@4guysfromrolla.com</a>. You can find his weblog at <a href="http://scottonwriting.net/">http://ScottOnWriting.NET</a>.</p> <p>   </p> <p>What's the other Guy up To? </p> <p> Interested in which version of RSS other Web sites are syndicating their content? Syndic8.com, which provides syndication feeds for thousands of news services, offers a statistical breakdown of RSS versions used at <a href="mailto:www.syndic8.com/stats.php?section=rss">mailto:www.syndic8.com/stats.php?Section=rss</a>. The results? About two-thirds of the sites use RSS 0.91, RSS 0.92, or RSS 2.0 (the versions that don't adhere to the RDF standard), while the remaining third uses RSS 1.0.</p> <p>   </p> <p>Trust but Verify</p> <p> Before publishing your RSS feed on your Web site, be sure to take a moment to verify that you're syndicating your content using valid RSS. There are online validators, such as The Feed Validator: <a href="http://feedvalidator.org/">http://feedvalidator.org</a>, which can help to ensure your RSS feed is valid.</p> <p>   </p> <p>   </p> <p>   </p> </div> <div class="comments-wrapper" id="comments-4365"> <div class="comments"> <a href="javascript:void(0)" class="comments--show hidden">0 comments</a> </div> <div class="comments-container"> <div class="fill-comments"> <div class="comments-header"><span class="comments--hide">Hide comments</span></div> <form class="comment-form" action="/comment/reply/4365" method="post" id="comment-form" accept-charset="UTF-8"><div><div class="user-comment-body"> <div class="user-comment-field"> <div class="user-photo"> <img class="user-thumb-img" src="https://www.itprotoday.com/sites/all/themes/penton_core_theme/images/account-default-image.png" alt="" /> </div> <div class="user-content"> <div class="user-name"> <a href="/" class="js-penton-user-url-profile"></a> </div> <div class="user-comment"> <div class="field-type-text-long field-name-comment-body field-widget-text-textarea form-wrapper" id="comment_body"><div id="comment-body-add-more-wrapper"><div class="text-format-wrapper"><div class="form-item form-type-textarea form-item-comment-body-und-0-value"> <label class="element-invisible" for="edit-comment-body-4365">Comment <span class="form-required" title="This field is required.">*</span></label> <div class="form-textarea-wrapper resizable"><textarea class="text-full ckeditor-mod form-textarea required" placeholder="Be the first to comment..." id="edit-comment-body-4365" name="comment_body[und][0][value]" cols="60" rows="5"></textarea></div> </div> <a class="ckeditor_links" style="display:none" href="javascript:void(0);" onclick="javascript:Drupal.ckeditorToggle(['edit-comment-body-4365'],'Switch to plain text editor','Switch to rich text editor');" id="switch_edit-comment-body-4365">Switch to plain text editor</a><fieldset class="filter-wrapper element-invisible form-wrapper" id="edit-comment-body-und-0-format"><div class="fieldset-wrapper"><div class="filter-help form-wrapper" id="edit-comment-body-und-0-format-help"><p><a href="/filter/tips" target="_blank">More information about text formats</a></p></div><div class="form-item form-type-select form-item-comment-body-und-0-format"> <label for="edit-comment-body-und-0-format--2">Text format </label> <select class="filter-list form-select" id="edit-comment-body-und-0-format--2" name="comment_body[und][0][format]"><option value="comments" selected="selected">Comments</option><option value="plain_text">Plain text</option></select> </div> <div class="filter-guidelines form-wrapper" id="edit-comment-body-und-0-format-guidelines"><div class="filter-guidelines-item filter-guidelines-comments"><h3>Comments</h3><ul class="tips"><li>Allowed HTML tags: <em> <strong> <blockquote> <br> <p></li></ul></div><div class="filter-guidelines-item filter-guidelines-plain_text"><h3>Plain text</h3><ul class="tips"><li>No HTML tags allowed.</li><li>Web page addresses and e-mail addresses turn into links automatically.</li><li>Lines and paragraphs break automatically.</li></ul></div></div></div></fieldset> </div> <a href="#" class="publish js-publish user-comment__publishbtn">Publish</a><span class='comment-error'><a href="/penton_modal/nojs/login" class="ctools-use-modal ctools-modal-modal-popup-login" rel="nofollow">Log in or register to comment</a></span></div></div> </div> </div> </div> </div> <input type="hidden" name="cid" value="" /> <input type="hidden" name="pid" value="" /> <input type="hidden" name="form_build_id" value="form-NLkh9uDIMRBReBqjbsRKSdnfMLxMjbsKuAOEe_AqfGg" /> <input type="hidden" name="form_id" value="comment_node_article_form" /> <input type="hidden" name="captcha_sid" value="215442704" /> <input type="hidden" name="captcha_token" value="d2f9c4b4b60bd0ebbf3f1d604fc7a37b" /> <div class="element-invisible"><div class="form-actions form-wrapper" id="edit-actions"><button id="edit-submit-4365" name="op" value="Save" class="form-submit">Save</button> </div></div><div class="url-textfield"><div class="form-item form-type-textfield form-item-url"> <label for="edit-url">Leave this field blank </label> <input autocomplete="off" type="text" id="edit-url" name="url" value="" size="20" maxlength="128" class="form-text" /> </div> </div></div></form> <div class="comments-inner-container"> </div> </div> </div> </div> </div> <div class="row related-articles-row"> <div class="related-articles-heading">Recommended Reading</div><div class="related-articles-wrapper"><a href="/development-techniques-and-management/unified-acceleration-foundation-goes-beyond-oneapi" class="small-article-link"><article class="small-article"><div class="img-crop"><img loading="lazy" class="js-imgpxr" data-x2src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_retina/public/software-developer-writing-code_0.jpg?itok=0h0j6C9w" src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_standard/public/software-developer-writing-code_0.jpg?itok=6gSqQxR7" width="90" height="83" alt="software developer writing code" /></div><div class="small-article__inner"><div class="small-article__inner-title">Unified Acceleration Foundation Goes Beyond oneAPI to Revolutionize Accelerated Computing</div><span>Sep 20, 2023</span></div></article></a><a href="/development-techniques-and-management/code-review-bottlenecks-best-practices-speed-process" class="small-article-link"><article class="small-article"><div class="img-crop"><img loading="lazy" class="js-imgpxr" data-x2src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_retina/public/code-review.jpg?itok=ENcic9ZD" src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_standard/public/code-review.jpg?itok=E4anEO4g" width="90" height="83" alt="magnifying glass hovering over code" /></div><div class="small-article__inner"><div class="small-article__inner-title">Code Review Bottlenecks: Best Practices to Speed the Process</div><span>Sep 11, 2023</span></div></article></a><article class="dfp-ad-hideempty hidden n_hidden small-article" data-dfp-position="native_related"></article><a href="/development-techniques-and-management/ai-powered-apps-bring-new-level-observability-challenges" class="small-article-link"><article class="small-article"><div class="img-crop"><img loading="lazy" class="js-imgpxr" data-x2src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_retina/public/AI-with-magnifying-glass.jpg?itok=EmNGL34I" src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_standard/public/AI-with-magnifying-glass.jpg?itok=1OelI6KL" width="90" height="83" alt="magnifying glass hovering over the letters "AI"" /></div><div class="small-article__inner"><div class="small-article__inner-title">AI-Powered Apps Bring a New Level of Observability Challenges</div><span>Aug 25, 2023</span></div></article></a><a href="/artificial-intelligence/ai-code-generation-models-big-list" class="small-article-link"><article class="small-article"><div class="img-crop"><img loading="lazy" class="js-imgpxr" data-x2src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_retina/public/artificial%20intelligence%20design%20on%20grid_0.jpg?itok=LcWQQ61s" src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_standard/public/artificial%20intelligence%20design%20on%20grid_0.jpg?itok=Lt8Y3FnG" width="90" height="83" alt="artificial intelligence design on grid" /></div><div class="small-article__inner"><div class="small-article__inner-title">AI Code Generation Models: The Big List</div><span>Aug 02, 2023</span></div></article></a></div> </div> <div class="item-list"><ul class="lazy-pagination"><li class="read-more pagination-read-more next first last"><a href="/development-techniques-and-management/unified-acceleration-foundation-goes-beyond-oneapi?parent=4365&infscr=1" rel="nofollow">Load More</a></li> </ul></div> </article> </section> </div> </div> </div> </div> <div class="banner-bottom-wrapper"> <div id="banner-bottom" class="dfp-ad-hideempty hidden"> <div data-dfp-position="bottom_banner"></div> </div> </div> <!-- /Main Content Area --> <!-- Footer --> <footer class="corporate l-footer l-footer-min"> <div class="l-footer-inner"> <div class="l-footer-info"> <div class="footer-logo-min"> <a href="/"><img class="footer-logo-min__site_logo" loading="lazy" src="/sites/all/themes/penton_subtheme_itprotoday/images/logos/footer.png" alt="Logo" /></a> <div class="small-12 medium-5 columns"> <div class="footer-links"> </div> </div> </div> <div class="footer-content"> <ul class="footer-min-col"> <li class="footer-min-col__item"> <a href="/about-us" class="footer-min-col-link">About</a> </li> <li class="footer-min-col__item"> <a href="https://www.itprotoday.com/advertise-itprotodaycom" class="footer-min-col-link">Advertise</a> </li> <li class="footer-min-col__item"> <a href="/contact-us" class="footer-min-col-link">Contact Us</a> </li> <li class="footer-min-col__item"> <a href="/sitemap" class="footer-min-col-link">Sitemap</a> </li> <li class="footer-min-col__item"> <a href="http://www.penton.com/privacy-policy#ThirdPartyAdvertisingTech" class="footer-min-col-link">Ad Choices</a> </li> </ul> <ul class="footer-min-col no-margin"> <li class="footer-min-col__item"> <a href="https://privacyportal-eu-cdn.onetrust.com/dsarwebform/c1f53e84-9f05-4169-a854-85052b63c50b/5f26b553-52cc-4973-a761-295d5634a6b6.html" class="footer-min-col-link">CCPA: Do not sell my personal info</a> </li> <li class="footer-min-col__item"> <a href="https://informa.com/privacy-policy" class="footer-min-col-link">Privacy Policy</a> </li> <li class="footer-min-col__item"> <a href="https://engage.informa.com/terms-of-service" class="footer-min-col-link">Terms of Service</a> </li> <li class="footer-min-col__item"> <a href="https://info.wrightsmedia.com/informa-licensing-reprints-request" class="footer-min-col-link">Content Licensing/Reprints</a> </li> <li class="footer-min-col__item"> <a href="https://engage.informa.com/cp/cookie-policy/" class="footer-min-col-link">Cookie Policy</a> </li> </ul> <div class="social-min-col"> <p class="social-min-col__label">Follow us:</p> <div class="social-icons"><a href="https://www.facebook.com/ITProToday/" title="" class="social-icons__link"><i aria-label="facebook" class="social-icons__icon fa fa-facebook"></i></a><a href="https://twitter.com/ITProToday" title="" class="social-icons__link"><i aria-label="twitter" class="social-icons__icon fa fa-twitter"></i></a><a href="https://www.linkedin.com/company/itpro-today/" title="" class="social-icons__link"><i aria-label="linkedin" class="social-icons__icon fa fa-linkedin"></i></a><a href="https://www.youtube.com/channel/UCedUgT8R7qC3vsOSxXS5-ZA" title="" class="social-icons__link"><i aria-label="youtube" class="social-icons__icon fa fa-youtube"></i></a><a href="https://www.itprotoday.com/rss.xml" title="" class="social-icons__link"><i aria-label="rss" class="social-icons__icon fa fa-rss"></i></a></div></div> </div> </div> </div> <div class="l-corporate-footer"> <div class="l-corporate-footer-logo-copyrights-wrapper"> <div class="l-corporate-footer-logo-copyrights"> <div class="l-corporate-footer-logo"> <a href="https://tech.informa.com/"><img loading="lazy" src="/sites/all/themes/informa_midtheme_tech/images/corporate_footer_logo.png" alt="Informa Tech" /></a> </div> <div class="l-coporate-footer-copyright"> © 2023 Informa USA, Inc., All rights reserved </div> </div> </div> <div class="l-corporate-footer-links-wrapper"> <div class="l-coporate-footer-links"> <ul class="links"><li class="menu-1804 first"><a href="https://informa.com/privacy-policy/" title="">Privacy Policy</a></li> <li class="menu-1805"><a href="https://engage.informa.com/cp/cookie-policy/">Cookie Policy</a></li> <li class="menu-1806 last"><a href="http://engage.informa.com/terms-of-service" title="">Terms of Use</a></li> </ul> </div> </div> </div> </footer> <!-- /Footer --> </div> </div> </div> </main> <!-- /Page --> <div id="hidden-dfp" class="dfp-ad-hideempty hidden"> <div data-dfp-position="hidden" class="hidden-for-ads"></div> </div> <!--[if lte IE 9]> <script type="text/javascript" src="/sites/itprotoday.com/files/advagg_js/js__o462xIvJcTydPQBQSqIGbKyyOKoMc_3r_T97VJ_RROY__JRUPJgstYYy6ZBdjWHZ2Oe9kekM7QWkvt7HMcvaB7_k__dx85Ttf_A0Sq8VDZcItaBSSxlnEE8sGTynBc9WZgKg0.js#ie9-" onload="if(jQuery.isFunction(jQuery.holdReady)){jQuery.holdReady(true);jQuery.holdReady(true)} function advagg_mod_1(){advagg_mod_1.count=++advagg_mod_1.count||1;try{if(advagg_mod_1.count<=40){init_drupal_core_settings();advagg_mod_1.count=100}}catch(e){if(advagg_mod_1.count>=40){throw e}else window.setTimeout(advagg_mod_1,1)}} function advagg_mod_1_check(){if(window.init_drupal_core_settings&&window.jQuery&&window.Drupal){advagg_mod_1()}else window.setTimeout(advagg_mod_1_check,1)};advagg_mod_1_check();"></script> <![endif]--> <!--[if gt IE 9]> <script type="text/javascript" src="/sites/itprotoday.com/files/advagg_js/js__o462xIvJcTydPQBQSqIGbKyyOKoMc_3r_T97VJ_RROY__JRUPJgstYYy6ZBdjWHZ2Oe9kekM7QWkvt7HMcvaB7_k__dx85Ttf_A0Sq8VDZcItaBSSxlnEE8sGTynBc9WZgKg0.js#ie10+" defer="defer" onload="if(jQuery.isFunction(jQuery.holdReady)){jQuery.holdReady(true);jQuery.holdReady(true)} function advagg_mod_1(){advagg_mod_1.count=++advagg_mod_1.count||1;try{if(advagg_mod_1.count<=40){init_drupal_core_settings();advagg_mod_1.count=100}}catch(e){if(advagg_mod_1.count>=40){throw e}else window.setTimeout(advagg_mod_1,1)}} function advagg_mod_1_check(){if(window.init_drupal_core_settings&&window.jQuery&&window.Drupal){advagg_mod_1()}else window.setTimeout(advagg_mod_1_check,1)};advagg_mod_1_check();"></script> <![endif]--> <!--[if !IE]><!--> <script type="text/javascript" src="/sites/itprotoday.com/files/advagg_js/js__o462xIvJcTydPQBQSqIGbKyyOKoMc_3r_T97VJ_RROY__JRUPJgstYYy6ZBdjWHZ2Oe9kekM7QWkvt7HMcvaB7_k__dx85Ttf_A0Sq8VDZcItaBSSxlnEE8sGTynBc9WZgKg0.js" defer="defer" onload="if(jQuery.isFunction(jQuery.holdReady)){jQuery.holdReady(true);jQuery.holdReady(true)} function advagg_mod_1(){advagg_mod_1.count=++advagg_mod_1.count||1;try{if(advagg_mod_1.count<=40){init_drupal_core_settings();advagg_mod_1.count=100}}catch(e){if(advagg_mod_1.count>=40){throw e}else window.setTimeout(advagg_mod_1,1)}} function advagg_mod_1_check(){if(window.init_drupal_core_settings&&window.jQuery&&window.Drupal){advagg_mod_1()}else window.setTimeout(advagg_mod_1_check,1)};advagg_mod_1_check();"></script> <!--<![endif]--> <script type="text/javascript"> <!--//--><![CDATA[//><!-- (function(w){"use strict";if(!w.loadCSS)w.loadCSS=function(){};var rp=loadCSS.relpreload={};rp.support=(function(){var ret;try{ret=w.document.createElement("link").relList.supports("preload")}catch(e){ret=false};return function(){return ret}})();rp.bindMediaToggle=function(link){var finalMedia=link.media||"all" function enableStylesheet(){if(link.addEventListener){link.removeEventListener("load",enableStylesheet)}else if(link.attachEvent)link.detachEvent("onload",enableStylesheet);link.setAttribute("onload",null);link.media=finalMedia};if(link.addEventListener){link.addEventListener("load",enableStylesheet)}else if(link.attachEvent)link.attachEvent("onload",enableStylesheet);setTimeout(function(){link.rel="stylesheet";link.media="only x"});setTimeout(enableStylesheet,3e3)};rp.poly=function(){if(rp.support())return;var links=w.document.getElementsByTagName("link");for(var i=0;i<links.length;i++){var link=links[i];if(link.rel==="preload"&&link.getAttribute("as")==="style"&&!link.getAttribute("data-loadcss")){link.setAttribute("data-loadcss",true);rp.bindMediaToggle(link)}}};if(!rp.support()){rp.poly();var run=w.setInterval(rp.poly,500);if(w.addEventListener){w.addEventListener("load",function(){rp.poly();w.clearInterval(run)})}else if(w.attachEvent)w.attachEvent("onload",function(){rp.poly();w.clearInterval(run)})};if(typeof exports!=="undefined"){exports.loadCSS=loadCSS}else w.loadCSS=loadCSS}(typeof global!=="undefined"?global:this)); //--><!]]> </script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- function init_drupal_core_settings() {jQuery.extend(Drupal.settings, {"basePath":"\/","pathPrefix":"","setHasJsCookie":0,"ajaxPageState":{"theme":"penton_subtheme_itprotoday","theme_token":"qbkHmCndjqvYWoBdN0PmB9GoKfF2Yww1RpItiiqx6RY","jquery_version":"1.10","css":{"modules\/system\/system.base.css":1,"modules\/system\/system.menus.css":1,"modules\/system\/system.messages.css":1,"modules\/system\/system.theme.css":1,"misc\/ui\/jquery.ui.core.css":1,"misc\/ui\/jquery.ui.theme.css":1,"modules\/book\/book.css":1,"modules\/comment\/comment.css":1,"sites\/all\/modules\/contrib\/date\/date_api\/date.css":1,"sites\/all\/modules\/contrib\/date\/date_popup\/themes\/datepicker.1.7.css":1,"modules\/field\/theme\/field.css":1,"sites\/all\/modules\/contrib\/logintoboggan\/logintoboggan.css":1,"modules\/node\/node.css":1,"modules\/search\/search.css":1,"sites\/all\/modules\/contrib\/ubercart\/uc_file\/uc_file.css":1,"sites\/all\/modules\/contrib\/ubercart\/uc_order\/uc_order.css":1,"sites\/all\/modules\/contrib\/ubercart\/uc_product\/uc_product.css":1,"sites\/all\/modules\/contrib\/ubercart\/uc_store\/uc_store.css":1,"modules\/user\/user.css":1,"sites\/all\/modules\/contrib\/views\/css\/views.css":1,"sites\/all\/modules\/contrib\/ckeditor\/css\/ckeditor.css":1,"sites\/all\/modules\/features\/penton_people_search\/penton_people_search.css":1,"sites\/all\/modules\/contrib\/ctools\/css\/ctools.css":1,"sites\/all\/modules\/custom\/magic_autocomplete_widget\/css\/select2.min.css":1,"sites\/all\/modules\/custom\/magic_autocomplete_widget\/css\/magic-autocomplete.css":1,"sites\/all\/modules\/contrib\/ctools\/css\/modal.css":1,"sites\/all\/modules\/contrib\/forward\/forward.css":1,"sites\/all\/modules\/contrib\/print\/print_ui\/css\/print_ui.theme.css":1,"sites\/all\/modules\/contrib\/ckeditor\/css\/ckeditor.editor.css":1,"modules\/filter\/filter.css":1,"public:\/\/honeypot\/honeypot.css":1,"sites\/all\/themes\/penton_subtheme_itprotoday\/public\/style.css":1,"sites\/all\/themes\/penton_core_theme\/public\/vendor.css":1,"sites\/all\/themes\/penton_core_theme\/public\/override\/system.messages.css":1,"sites\/all\/themes\/penton_core_theme\/public\/override\/system.base.css":1,"sites\/all\/themes\/penton_core_theme\/public\/override\/system.menus.css":1,"sites\/all\/themes\/penton_core_theme\/public\/override\/user.css":1,"sites\/all\/themes\/penton_core_theme\/public\/style.ie9.css":1},"js":{"sites\/all\/modules\/contrib\/jquery_update\/replace\/jquery\/1.10\/jquery.min.js":1,"misc\/jquery.once.js":1,"misc\/drupal.js":1,"misc\/ajax.js":1}},"authcache":{"q":"node\/4365","cp":{"path":"\/","domain":".www.itprotoday.com","secure":true},"cl":23.14814814814815},"typekitId":"njq2hxj","adunit":"\/3834\/itprotoday.home","is_new_welcome_ad":1,"penton_custom_dfp":{"dfp_tags":{"everywhere":[],"article":{"native_leftrail_1":[{"disabled":false,"api_version":1,"machinename":"article_native_leftrail_1","slot":"[article] Native Left Rail 1","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":"fluid","block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"native_leftrail_1","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"nativekey_1_lft"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"nativekey_1_lft"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"native_leftrail_2":[{"disabled":false,"api_version":1,"machinename":"article_native_leftrail_2","slot":"[article] Native Left Rail 2","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":"fluid","block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"native_leftrail_2","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"nativekey_2_lft"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"nativekey_2_lft"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"native_related":[{"disabled":false,"api_version":1,"machinename":"article_native_related","slot":"[article] Native Related","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":"fluid","block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"native_related","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"nativekey_12_1"},{"target":"article_number","value":"1"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"nativekey_12_1"},{"target":"article_number","value":"1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"native_inline":[{"disabled":false,"api_version":1,"machinename":"article_native_inline","slot":"[article] Native Inline","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":"fluid","block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"native_inline","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"nativekey_13_1"},{"target":"article_number","value":"1"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"nativekey_13_1"},{"target":"article_number","value":"1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"right_rail_rect":[{"disabled":false,"api_version":1,"machinename":"_article_right_rail_rect","slot":"[article] [article] Right rail rect","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[300,250],[300,600]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"right_rail_rect","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"300_1_rht"}],"breakpoints":[{"browser_size":"0x0","ad_sizes":"300x250"},{"browser_size":"779x0","ad_sizes":"300x250,300x600"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[300,250],"browser_size":[0,0]},{"ad_sizes":[[300,250],[300,600]],"browser_size":[779,0]}],"targeting":[{"target":"pos","value":"300_1_rht"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"native_umpu":[{"disabled":false,"api_version":1,"machinename":"article_native_umpu","slot":"[article] Native Umpu","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":"fluid","block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"native_umpu","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"nativekey_3"},{"target":"article_number","value":"1"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"nativekey_3"},{"target":"article_number","value":"1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"inarticle1":[{"disabled":false,"api_version":1,"machinename":"article_300_1_rht_infinite","slot":"[article] Rectangle Inline 1","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[300,250],[300,600]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"inarticle1","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"300_1_rht"},{"target":"article_number","value":"1"}],"breakpoints":[{"browser_size":"0x0","ad_sizes":"300x250"},{"browser_size":"779x0","ad_sizes":"300x250,300x600"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[300,250],"browser_size":[0,0]},{"ad_sizes":[[300,250],[300,600]],"browser_size":[779,0]}],"targeting":[{"target":"pos","value":"300_1_rht"},{"target":"article_number","value":"1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"inarticle2":[{"disabled":false,"api_version":1,"machinename":"article_300_2_rht_infinite","slot":"[article] Rectangle Inline 2","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[300,250],[300,600]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"inarticle2","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"300_2_rht"},{"target":"article_number","value":"1"}],"breakpoints":[{"browser_size":"0x0","ad_sizes":"300x250"},{"browser_size":"779x0","ad_sizes":"300x250,300x600"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[300,250],"browser_size":[0,0]},{"ad_sizes":[[300,250],[300,600]],"browser_size":[779,0]}],"targeting":[{"target":"pos","value":"300_2_rht"},{"target":"article_number","value":"1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"inarticle3":[{"disabled":false,"api_version":1,"machinename":"article_300_3_rht_infinite","slot":"[article] Rectangle Inline 3","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[300,250],[300,600]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"inarticle3","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"300_3_rht"},{"target":"article_number","value":"1"}],"breakpoints":[{"browser_size":"0x0","ad_sizes":"300x250"},{"browser_size":"779x0","ad_sizes":"300x250,300x600"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[300,250],"browser_size":[0,0]},{"ad_sizes":[[300,250],[300,600]],"browser_size":[779,0]}],"targeting":[{"target":"pos","value":"300_3_rht"},{"target":"article_number","value":"1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"inarticle4":[{"disabled":false,"api_version":1,"machinename":"article_300_4_rht_infinite","slot":"[article] Rectangle Inline 4","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[300,250],[300,600]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"inarticle4","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"300_4_rht"},{"target":"article_number","value":"1"}],"breakpoints":[{"browser_size":"0x0","ad_sizes":"300x250"},{"browser_size":"779x0","ad_sizes":"300x250,300x600"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[300,250],"browser_size":[0,0]},{"ad_sizes":[[300,250],[300,600]],"browser_size":[779,0]}],"targeting":[{"target":"pos","value":"300_4_rht"},{"target":"article_number","value":"1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"left_rail_rect":[{"disabled":false,"api_version":1,"machinename":"article_300_x_lft","slot":"[article] Left rail 300_x_lft","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[300,250],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"left_rail_rect","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"300_1_lft"}],"breakpoints":[{"browser_size":"779x0","ad_sizes":"300x250"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[300,250],"browser_size":[779,0]}],"targeting":[{"target":"pos","value":"300_1_lft"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"jumbotron":[{"disabled":false,"api_version":1,"machinename":"article_300_x_rht","slot":"[article] Rectangle Inline and Jumbotron","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[300,250],[300,600]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"jumbotron","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"300_1_rht"}],"breakpoints":[{"browser_size":"0x0","ad_sizes":"300x250"},{"browser_size":"779x0","ad_sizes":"300x250,300x600"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[300,250],"browser_size":[0,0]},{"ad_sizes":[[300,250],[300,600]],"browser_size":[779,0]}],"targeting":[{"target":"pos","value":"300_1_rht"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"top_banner":[{"disabled":false,"api_version":1,"machinename":"article_728_1_a","slot":"[article] Leaderboard 728_1_a","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[728,90],[970,90],[320,50],[970,250]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"top_banner","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"728_1_a"},{"target":"program","value":"[node:program_without_space_specialchars]"},{"target":"ptype","value":"[node:field_penton_article_type]"},{"target":"nid","value":"[node:nid]"},{"target":"pterm","value":"[node:pterm_without_space_specialchars]"},{"target":"sterm","value":"[node:sterm_without_space_specialchars]"},{"target":"author","value":"[node:author_without_space_specialchars]"},{"target":"combo","value":"wrap"},{"target":"content","value":"[node:program_without_space_specialchars]"}],"breakpoints":[{"browser_size":"1119x0","ad_sizes":"970x90,970x250,728x90"},{"browser_size":"728x0","ad_sizes":"728x90"},{"browser_size":"0x0","ad_sizes":"320x50"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[[970,90],[970,250],[728,90]],"browser_size":[1119,0]},{"ad_sizes":[728,90],"browser_size":[728,0]},{"ad_sizes":[320,50],"browser_size":[0,0]}],"targeting":[{"target":"pos","value":"728_1_a"},{"target":"combo","value":"wrap"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"bottom_banner":[{"disabled":false,"api_version":1,"machinename":"article_728_footer","slot":"[article] Leaderboard 728_10_a","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[728,90],[320,50]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"bottom_banner","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"728_10_a"}],"breakpoints":[{"browser_size":"1119x0","ad_sizes":"728x90"},{"browser_size":"728x0","ad_sizes":"728x90"},{"browser_size":"0x0","ad_sizes":"320x50"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[728,90],"browser_size":[1119,0]},{"ad_sizes":[728,90],"browser_size":[728,0]},{"ad_sizes":[320,50],"browser_size":[0,0]}],"targeting":[{"target":"pos","value":"728_10_a"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"hidden":[{"disabled":false,"api_version":1,"machinename":"article_canopy","slot":"[article] Canopy","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[1,1],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"hidden","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"adhesion"},{"target":"gdpr_banner","value":"off"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"adhesion"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]},{"disabled":false,"api_version":1,"machinename":"article_footnote_floor","slot":"[article] Footnote_Floor","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[1,1],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"hidden","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"footnote"},{"target":"gdpr_banner","value":"off"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"footnote"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]},{"disabled":false,"api_version":1,"machinename":"article_oop","slot":"[article] Out of Page","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[0,0],"block":0,"settings":{"out_of_page":1,"slug":"","short_tag":0,"location":"article","position":"hidden","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"oop_a"},{"target":"gdpr_banner","value":"off"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"oop_a"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]},{"disabled":false,"api_version":1,"machinename":"article_pagewrap","slot":"[article] PageWrap","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[1,1],"block":0,"settings":{"out_of_page":1,"slug":"","short_tag":0,"location":"article","position":"hidden","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"wrap"},{"target":"combo","value":"wrap"}],"breakpoints":[{"browser_size":"1500x0","ad_sizes":"1x1"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[1,1],"browser_size":[1500,0]}],"targeting":[{"target":"pos","value":"wrap"},{"target":"combo","value":"wrap"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"custom_content_channel_sponsored_header":[{"disabled":false,"api_version":1,"machinename":"article_ccc_header","slot":"[article] Article CCC header","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[160,65],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"custom_content_channel_sponsored_header","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"customsponsoredlogo1"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"customsponsoredlogo1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"custom_content_channel_sponsored_resources":[{"disabled":false,"api_version":1,"machinename":"article_ccc_resources","slot":"[article] Article CCC resources","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[160,65],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"custom_content_channel_sponsored_resources","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"customsponsoredlogo2"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"customsponsoredlogo2"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"inarticlevid":[{"disabled":false,"api_version":1,"machinename":"article_in_article_video_ad","slot":"[article] In-Article Video Ad","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[1,1],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"inarticlevid","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"inarticlevideo_1_a"},{"target":"article_number","value":"1"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"inarticlevideo_1_a"},{"target":"article_number","value":"1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"reveal":[{"disabled":false,"api_version":1,"machinename":"article_reveal","slot":"[article] Reveal Ad","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[1,1],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"reveal","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"reveal_1"},{"target":"article_number","value":"1"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"reveal_1"},{"target":"article_number","value":"1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"infinitescroll":[{"disabled":false,"api_version":1,"machinename":"article_interscroller_728_x_a","slot":"[article] Interscroller\/Leaderboard 2","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[728,90],[320,50]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"infinitescroll","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"728_2_a"}],"breakpoints":[{"browser_size":"1119x0","ad_sizes":"728x90"},{"browser_size":"728x0","ad_sizes":"728x90"},{"browser_size":"0x0","ad_sizes":"320x50"}]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[{"ad_sizes":[728,90],"browser_size":[1119,0]},{"ad_sizes":[728,90],"browser_size":[728,0]},{"ad_sizes":[320,50],"browser_size":[0,0]}],"targeting":[{"target":"pos","value":"728_2_a"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"sponsored_logo":[{"disabled":false,"api_version":1,"machinename":"article_sponsored_logo","slot":"[article] Sponsored Logo","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[160,65],[125,125],[90,90]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"sponsored_logo","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"sponsoredlogo"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"sponsoredlogo"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}],"sponsored_logo_weather":[{"disabled":false,"api_version":1,"machinename":"article_sponsored_logo_weather","slot":"[article] Sponsored Logo Weather","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":[[160,65],[125,125],[90,90]],"block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"article","position":"sponsored_logo_weather","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"sponsoredlogo_weather"},{"target":"article_number","value":"1"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"sponsoredlogo_weather"},{"target":"article_number","value":"1"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}]},"taxonomy":{"native_article_4":[{"disabled":false,"api_version":1,"machinename":"term_native_article_4","slot":"[taxonomy] Native Article 4","adunit":"\/3834\/itprotoday.home\/article\/software_development\/development_techniques_and_management","size":"fluid","block":0,"settings":{"out_of_page":0,"slug":"","short_tag":0,"location":"taxonomy","position":"native_article_4","adsense_ad_types":"","adsense_channel_ids":"","adsense_colors":{"background":"","border":"","link":"","text":"","url":""},"targeting":[{"target":"pos","value":"nativekey_10"}],"breakpoints":[]},"export_module":"penton_dfp","type":"Default","export_type":2,"in_code_only":true,"table":"dfp_tags","breakpoints":[],"targeting":[{"target":"pos","value":"nativekey_10"},{"target":"ptype","value":"Article"},{"target":"nid","value":"4365"},{"target":"pterm","value":"development_techniques_and_management"},{"target":"author","value":"scott_mitchell"},{"target":"reg","value":"anonymous"}]}]}},"current_type":"article","default_adunit":"\/3834\/itprotoday.home","brand_adunit":"","async_rendering":1,"single_request":0,"collapse_empty_divs":"1","viewport":1,"lifetime_banner":"2000","do_byline":0,"enable_sticky":1,"enable_cb_refresh":0,"cb_refresh_interval":"15","is_blocked_ip":false,"uip":"3.235.188.113"},"is_new_article_view":0,"penton_eloqua_api":{"eloqua_site_id":"1885539667","eloqua_subdomain":"trk.itprotoday.com","tracking_enabled":1,"fields":["nl","utm_rid"]},"CToolsModal":{"loadingText":"Loading...","closeText":"Close Window","closeImage":"\u003Cimg src=\u0022https:\/\/www.itprotoday.com\/sites\/all\/modules\/contrib\/ctools\/images\/icon-close-window.png\u0022 alt=\u0022Close window\u0022 title=\u0022Close window\u0022 \/\u003E","throbber":"\u003Cimg src=\u0022https:\/\/www.itprotoday.com\/sites\/all\/modules\/contrib\/ctools\/images\/throbber.gif\u0022 alt=\u0022Loading\u0022 title=\u0022Loading...\u0022 \/\u003E"},"modal-popup-small":{"modalSize":{"type":"fixed","width":300,"height":300},"modalOptions":{"opacity":0.5,"background":"#000"},"animation":"fadeIn","modalTheme":"PentonModalPopup"},"modal-popup-medium":{"modalSize":{"type":"fixed","width":550,"height":450},"modalOptions":{"opacity":0.5,"background":"#000"},"animation":"fadeIn","modalTheme":"PentonModalPopup"},"modal-popup-large":{"modalSize":{"type":"scale","width":0.8,"height":0.8},"modalOptions":{"opacity":0.5,"background":"#000"},"animation":"fadeIn","modalTheme":"PentonModalPopup"},"modal-popup-x-large":{"modalSize":{"type":"scale","width":1100,"height":850},"modalOptions":{"opacity":0.5,"background":"#000"},"animation":"fadeIn","modalTheme":"PentonModalPopupXLarge"},"modal-popup-basic":{"modalSize":{"type":"fixed","width":550,"height":450},"modalOptions":{"opacity":0.5,"background":"#000"},"animation":"fadeIn","modalTheme":"PentonModalPopupBasic"},"modal-popup-basic-email":{"modalSize":{"type":"fixed","width":550,"height":450},"modalOptions":{"opacity":0.5,"background":"#000"},"animation":"fadeIn","modalTheme":"PentonModalPopupBasicEmail"},"modal-popup-advanced":{"modalSize":{"type":"fixed","width":550,"height":450},"modalOptions":{"opacity":0.5,"background":"#000"},"animation":"fadeIn","modalTheme":"PentonModalPopupAdvanced"},"modal-popup-login":{"modalSize":{"type":"fixed","width":545,"height":485},"modalOptions":{"opacity":0.5,"background":"#000"},"animation":"fadeIn","modalTheme":"PentonModalPopupLogin"},"modal-popup-legal-comm":{"modalSize":{"type":"fixed","width":300,"height":300},"modalOptions":{"opacity":0.5,"background":"#000"},"animation":"fadeIn","closeText":"Close","modalTheme":"PentonModalPopupLegalComm"},"modal-popup-validation-prompt":{"modalSize":{"type":"fixed","width":300,"height":300},"modalOptions":{"opacity":0.5,"background":"#000"},"animation":"fadeIn","closeText":"Close","modalTheme":"PentonModalPopupValidationPrompt"},"gdpr_countries":[],"prevent_js_alerts":{"module_path":"sites\/all\/modules\/contrib\/prevent_js_alerts"},"ws_pb":{"countlayout":"horizontal"},"informa_gtm":{"user":{"profile":{"profileInfo":{"profileID":null,"userName":null,"email":null}},"segment":{"loginStatus":"unreg","permission":"anonymous"}},"page":{"pageInfo":{"pageName":"Syndicate Your Site","destinationURL":"https:\/\/www.itprotoday.com\/web-application-management\/syndicate-your-site","pageID":"9bf530b3-79bf-42b4-ab7b-e7214798a8c1","author":"Scott Mitchell","issueDate":"Oct 30, 2009"},"attributes":{"destinationPath":"\/web-application-management\/syndicate-your-site","taxonomy":"Development Techniques and Management","buyerJourney":null,"permission":"public","subType1":"Article","subType2":null,"visibility":"visible","programs":null,"scrollCount":"10","scrollPosition":"1_of_10","contentSponsor":null,"byline":"Scott Mitchell","contentLabel":null},"category":{"pageType":"article","primaryCategory":"Software Development \u003E Development Techniques and Management"}}},"informa_gtm_events":[],"penton_gdpr":{"banner":"\u003Cdiv\u003E\n \u003Cdiv class=\u0022gdpr-popup-border\u0022\u003E\n \u003Cdiv class=\u0022gdrp-popup-content\u0022\u003E\n \u003Cdiv id=\u0022popup-text\u0022\u003E\n This website uses cookies, including third party ones, to allow for analysis of how people use our website in order to improve your experience and our services. By continuing to use our website, you agree to the use of such cookies. Click here for more information on our \u003Ca href=\u0022http:\/\/corporate.knect365.com\/privacy-centre\/our-cookie-policy\/\u0022 target=\u0022_blank\u0022\u003ECookie Policy\u003C\/a\u003E and \u003Ca href=\u0022https:\/\/knect365.com\/privacy-policy\u0022 target=\u0022_blank\u0022\u003EPrivacy Policy\u003C\/a\u003E.\u200b \u003C\/div\u003E\n \u003Cdiv id=\u0022popup-buttons\u0022\u003E\n \u003Cspan class=\u0022close-button\u0022\u003E\u0026times;\u003C\/span\u003E\n \u003C\/div\u003E\n \u003C\/div\u003E\n \u003C\/div\u003E\n\u003C\/div\u003E\n"},"advagg_font":{"proxima-nova":"proxima-nova","jaf-bernino-sans-condensed":"jaf-bernino-sans-condensed","merriweather-light":"Merriweather-Light","merriweather-bold":"Merriweather-Bold","merriweather":"Merriweather","helvetica-neue":"Helvetica Neue","consolas":"Consolas"},"advagg_font_storage":1,"advagg_font_cookie":1,"advagg_font_no_fout":0,"ckeditor":{"input_formats":{"comments":{"customConfig":"\/sites\/all\/modules\/contrib\/ckeditor\/ckeditor.config.js?s1tnud","defaultLanguage":"en","toolbar":"[\n [\u0027Bold\u0027,\u0027Italic\u0027,\u0027Blockquote\u0027]\n]","enterMode":2,"shiftEnterMode":3,"toolbarStartupExpanded":true,"width":"100%","skin":"moono-lisa","format_tags":"p;div;pre;address;h1;h2;h3;h4;h5;h6","show_toggle":"t","default":"t","ss":2,"loadPlugins":{"drupalbreaks":{"name":"drupalbreaks","desc":"Plugin for inserting Drupal teaser and page breaks.","path":"\/sites\/all\/modules\/contrib\/ckeditor\/plugins\/drupalbreaks\/","buttons":{"DrupalBreak":{"label":"DrupalBreak","icon":"images\/drupalbreak.png"}},"default":"t"}},"entities":false,"entities_greek":false,"entities_latin":false,"scayt_autoStartup":false,"js_conf":{"fillEmptyBlocks":false},"stylesCombo_stylesSet":"drupal:\/sites\/all\/modules\/contrib\/ckeditor\/ckeditor.styles.js?s1tnud","contentsCss":["\/sites\/all\/modules\/contrib\/ckeditor\/css\/ckeditor.css?s1tnud","\/sites\/all\/modules\/contrib\/ckeditor\/ckeditor\/contents.css?s1tnud"]}},"plugins":[],"textarea_default_format":{"edit-comment-body-4365":"comments"},"timestamp":"s1tnud","module_path":"\/sites\/all\/modules\/contrib\/ckeditor","editor_path":"\/sites\/all\/modules\/contrib\/ckeditor\/ckeditor\/","ajaxToken":"_aIUqQ06kHaRBgBzorltf_zZ4oWi6MGIVX9cxK06Hcw","xss_url":"\/ckeditor\/xss","theme":"penton_subtheme_itprotoday","elements":{"edit-comment-body-4365":"comments"},"autostart":{"edit-comment-body-4365":true}},"ajax":{"edit-submit-4365":{"callback":"penton_comment_comment_add","event":"mousedown","keypress":true,"prevent":"click","url":"\/system\/ajax","submit":{"_triggering_element_name":"op","_triggering_element_value":"Save"}}},"urlIsAjaxTrusted":{"\/system\/ajax":true,"\/comment\/reply\/4365":true}}); if(jQuery.isFunction(jQuery.holdReady)){jQuery.holdReady(false);}} if(window.jQuery && window.Drupal){init_drupal_core_settings();} //--><!]]> </script> <script type="text/javascript" src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script> <script type="text/javascript" src="/sites/itprotoday.com/files/advagg_js/js__SI_3Jf1LswSYIPT2nOt89AVh__7kVYL_o5gkJN-XCW0__HlD2qoOEx_TcmqkvBYdBmKiy_MjdqNZuD8zu4HgaztA__dx85Ttf_A0Sq8VDZcItaBSSxlnEE8sGTynBc9WZgKg0.js" defer="defer"></script> <script type="text/javascript" src="/sites/itprotoday.com/files/advagg_js/js__LOTzmTjOEyBYTRa73tu6Fj3qY7yfNxJxX3y1JUwojnc__40YrL2aSiZmfap0peqfapAZpogiJynGBflb-zJ7vQQo__dx85Ttf_A0Sq8VDZcItaBSSxlnEE8sGTynBc9WZgKg0.js" defer="defer" async="async"></script> <script type="text/javascript" src="/sites/itprotoday.com/files/advagg_js/js__tySr6wQRZH62UkgX3pOEVXIqzqYYtt8E471UGbxtwtI__CniMD_nkKQm5ariPumO1PywAbwuzc4GGXZckzoPbdts__dx85Ttf_A0Sq8VDZcItaBSSxlnEE8sGTynBc9WZgKg0.js" defer="defer"></script> <script type="text/javascript" src="/sites/itprotoday.com/files/advagg_js/js__E3u8USQplSZ5KJ7H1a04va3fLnxx2SBJ-VuwgI4-0Sk__AdhAFZ5QAk_VrKkFUOCnxJb9ANrhuWlKf15A7QHm14M__dx85Ttf_A0Sq8VDZcItaBSSxlnEE8sGTynBc9WZgKg0.js" defer="defer" async="async"></script> <script type="text/javascript" src="/sites/itprotoday.com/files/advagg_js/js__6yeE2nNBsFfdTwfOlbg9lyoa1PlwfaWwa57z5jXs10g__PLqUnXnqW__lvq3GmEjtfvfm7L8M93Eybu50Ce0lUpQ__dx85Ttf_A0Sq8VDZcItaBSSxlnEE8sGTynBc9WZgKg0.js" defer="defer"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- function advagg_mod_2(){advagg_mod_2.count=++advagg_mod_2.count||1;try{if(advagg_mod_2.count<=40){window.CKEDITOR_BASEPATH="/sites/all/modules/contrib/ckeditor/ckeditor/";advagg_mod_2.count=100}}catch(e){if(advagg_mod_2.count>=40){throw e}else window.setTimeout(advagg_mod_2,250)}} function advagg_mod_2_check(){if(window.jQuery&&window.Drupal&&window.Drupal.settings){advagg_mod_2()}else window.setTimeout(advagg_mod_2_check,250)};advagg_mod_2_check(); //--><!]]> </script> <script type="text/javascript" src="/sites/itprotoday.com/files/advagg_js/js__ax5VN18vQmrA6FY5TS3SYpdt18hbOFOcJ4xQWmOYupM__vTGsRDf8SvZDf2DwcETxDlJ9nNJrfUleoEr9tPtoUiQ__dx85Ttf_A0Sq8VDZcItaBSSxlnEE8sGTynBc9WZgKg0.js" defer="defer"></script> </div> </body> </html> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>