Build Your Own Blog: Part III

The Externals — Feedback System, Security, Archives, RSS

CodeTalk

LANGUAGES: VB.NET

ASP.NET VERSIONS: 2.0

 

Build Your Own Blog: Part III

The Externals Feedback System, Security, Archives, RSS

 

By Bipin Joshi

 

In Part II of this series we covered the master page creation for the blog, administrative pages, and displaying of blog posts. But any blog is incomplete without the ability to post comments. In this final installment, we ll add the facility to view and post comments. We ll also add the ability to view archives. Finally, we ll prepare the blog for syndication by exposing RSS feeds. The administrative pages are secured using forms authentication so that nobody can use them without signing in.

 

Viewing and Submitting Comments

When a user selects a specific post from Default.aspx, they ll come to ShowPost.aspx, wherein the post is displayed (along with previously submitted user comments). The user can also submit their own comment from this page.

 

Add a new Web form named ShowPost.aspx and set its master page to MasterPage.master. Drag and drop onto it a DataList and a SqlDataSource control. In terms of layout, the DataList is going to be the same as the GridView that we developed for default.aspx. The only reason we use DataList instead of GridView is that we don t need paging capability on ShowPost.aspx.

 

Remember that when we navigate to ShowPost.aspx from the default page, we pass the post ID in the query string. Configure the SqlDataSource control to select the record from the Posts table that matches the ID passed in the query string. We achieve this by adding a QueryStringParameter named PostId in the SqlDataSource control. Figure 1 shows the Command and Parameter Editor dialog box; Figure 2 shows the markup for the SqlDataSource control.

 


Figure 1: The Command and Parameter Editor dialog box.

 

ConnectionString="<%$ConnectionStrings:ConnectionString %>"

SelectCommand="SELECT * FROM [Posts] WHERE ([Id] = @Id)">

Type="Int32" />

Figure 2: Markup of SqlDataSource control for displaying the selected post.

 

Next, we display all the comments for that post in another DataList. So, drag and drop another DataList and a SqlDataSource control. The feedback consists of Title, Name of the poster, URL, and the comment. Figure 3 shows the markup of the DataList that displays these details. As you can see, we used the Eval method to bind various Label controls to the underlying data.

 

DataSourceID="SqlDataSource2"

ForeColor="#333333" Width="100%">

ForeColor="White" />

ForeColor="#333333" />

width="100%">

Font-Bold="true" Text='<%# ctype(Eval("PostDate"),datetime)

.ToLongDateString() %>'>

Text='<%#Eval("title")%>'>

Text='<%# Eval("message") %>'>

Text='<%# Eval("postedby") %>'

NavigateUrl='<%# Eval("Url") %>'>

Text='<%# Eval("PostDate", "{0:g}") %>'>

ForeColor="#284775" />

ForeColor="White" />

Figure 3: Markup of DataList showing selected post.

 

The SqlDataSource that supplies data to the feedback DataList fetches all the records from the Comments table matching the given post ID. Figure 4 shows the markup for this SqlDataSource. Again, we use QueryStringParameter to pass PostId to the SELECT query.

 

ConnectionString="<%$ConnectionStrings:ConnectionString %>"

SelectCommand="SELECT * FROM [Comments] WHERE

([PostId] = @PostId)">

Type="Int32" />

Figure 4: Markup of SqlDataSource control supplying data to the feedback DataList.

 

To add a new comment, provide a small form consisting of TextBoxes and a Submit button. Also, add validations to the TextBoxes. Figure 5 shows the markup for this comment submission form. Figure 6 shows the same form in VS.NET designer.

 

runat="server" ControlToValidate="TextBox1"

ErrorMessage="Please enter title">

runat="server" ControlToValidate="TextBox2"

ErrorMessage="Please enter your name">

ID="RegularExpressionValidator1" runat="server"

ControlToValidate="TextBox3"

ErrorMessage="Please enter a valid URL"

ValidationExpression="http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?">

TextMode="MultiLine" Columns="40">

 runat="server" ControlToValidate="TextBox4"

ErrorMessage="Please enter message">

Figure 5: Markup of the comment submission form.

 


Figure 6: The comment submission form in VS.NET designer.

 

Now add a third SqlDataSource control. This SqlDataSource control will be used to insert a new comment into the database. It will have five parameters: four ControlParameters and one QueryStringParameter. The ControlParameters will take their values from the four TextBoxes; the QueryStringParameter will get its value from the PostId query string parameter. Figure 7 shows the Command and Parameter Editor dialog box for this SqlDataSource control. Figure 8 shows the markup for this SqlDataSource control.

 


Figure 7: The Command and Parameter Editor dialog box.

 

ConnectionString="<%$ConnectionStrings:ConnectionString %>"

InsertCommand="INSERT INTO [Comments] ([PostId], Build Your Own Blog: Part III,

[Message], [PostedBy], [Url]) VALUES (@PostId, @Title,

@Message, @PostedBy, @Url)"

>

QueryStringField="id" Type="Int32" />

PropertyName="Text" Type="String" />

PropertyName="Text" Type="String" />

PropertyName="Text" Type="String" />

PropertyName="Text" Type="String" />

Figure 8: Markup of SqlDataSource control inserting the new comment.

 

We are now ready to see the ShowPost.aspx in action. Run the application, select a post from Default.aspx, and you should see something similar to that shown in Figure 9.

 


Figure 9: Sample run of ShowPost.aspx.

 

Displaying Archives

Not all the posts can be displayed on the blog at one time. We ll allow users to view archives of posts via another Web form named Archives.aspx.

 

The Web form basically displays a Calendar control and a GridView. The user can select a single day, a week, or an entire month in the calendar and the posts from the selected date range are displayed in the GridView. Selecting a post from the GridView navigates the user to ShowPost.aspx, where the complete post, along with feedback, is displayed. Figure 10 shows Archives.aspx in design mode.

 


Figure 10: Archives.aspx in VS.NET designer.

 

Add a new Web form named Archives.aspx to your Web site and design it as shown in Figure 10. Make sure to set the SelectionMode property of the Calendar control to DayWeekMonth. This will ensure that the user can select a day, a week, or a month. Drag and drop a GridView control and add one HyperLink field to it. This field will point to ShowPost.aspx and will carry the post ID in the query string. Figure 11 shows the markup of the GridView.

 

AllowPaging="True" AutoGenerateColumns="False"

CellPadding="4" DataSourceID="SqlDataSource1"

ForeColor="#333333" GridLines="None"

Width="100%">

ForeColor="White" />

DataNavigateUrlFormatString="~/showpost.aspx?id={0}"

DataTextField="title"

HeaderText="Archives for selected period" />

ForeColor="#333333" />

HorizontalAlign="Center" />

ForeColor="White" />

ForeColor="#284775" />

Figure 11: Markup of the GridView showing the archives.

 

Drag and drop a SqlDataSource control and configure it to select all the records from the Posts table between the date range specified in the Calendar control. Figure 12 shows the Command and Parameter Editor dialog box of the SqlDataSource control.

 


Figure 12: The Command and Parameter Editor dialog box.

 

Note that we ve added two parameters, @stDt and @EndDt. We populate values of these parameters in the Click event of the Show Archives button. Figure 13 shows the code that goes inside the Click event of the Show Archives button.

 

Protected Sub Button1_Click(ByVal sender As Object,

ByVal e As System.EventArgs) Handles Button1.Click

If Calendar1.SelectedDates.Count > 0 Then

SqlDataSource1.SelectParameters("stdt").DefaultValue =

Calendar1.SelectedDates(0)

SqlDataSource1.SelectParameters("enddt").DefaultValue = Calendar1.SelectedDates(Calendar1.SelectedDates.Count - 1)

Else

SqlDataSource1.SelectParameters("stdt").DefaultValue =

Calendar1.SelectedDate

SqlDataSource1.SelectParameters("enddt").DefaultValue =

Calendar1.SelectedDate

End If

GridView1.DataBind()

End Sub

Figure 13: The Click event of the Show Archives button.

 

Here, we first check whether the user has selected a single date or a date range (week or month) by observing the SelectedDates collection. If the SelectedDates collection contains more than one item, we grab the first and last date and assign it to the StDt and EndDt parameters, respectively, of the SelectParameters collection. If the user has selected only a single date, both of these parameters will take the value of the selected date. After we set the parameter values, we call the DataBind method of the GridView so the matching records will be displayed. Figure 14 shows a sample run of Archives.aspx.

 


Figure 14: Sample run of Archives.aspx.

 

Securing Administrative Pages

We have all the administrative pages in a folder called AdminPages. However, that folder is not yet secured. To secure these pages, we implement forms-based security. Open the web.config file from the root of your Web site and add the following markup:

 

     

 

Here, we set the authentication mode to Forms and allow access to all the users. Now, add a new web.config file to the AdminPages folder and add the following markup:

 

       

 

Here, we deny access to anonymous users by adding the tag. This will ensure that only authenticated users are accessing the pages in the AdminPages folder.

 

Next, add a new Web form called Login.aspx. ASP.NET will automatically navigate the user to this Web form if they try to access any page from the AdminPages folder without signing in to the system.

 

Drag and drop a Login control and a Create User Wizard control. The Login control will allow you to sign in to the system. The Create User Wizard control allows you to create new user accounts. Note that this control is required only for creating the administrative account. You should remove this control before deploying the application on the Web server so that other users cannot create any accounts. Figure 15 shows Login.aspx in design mode.

 


Figure 15: Login.aspx in VS.NET designer.

 

Generating RSS Feeds

RSS is a standard way to share your Web site content with others. RSS stands for Really Simple Syndication. RSS is nothing but a standardized XML markup that describes the content you want to share. Because RSS is a widely accepted format, your content immediately becomes ready to be consumed by others. Figure 16 shows a sample RSS markup.

 

 

 DotNetBips.com Latest Articles

 www.dotnetbips.com

 DotNetBips.com Latest Articles

 

 Copyright (C) DotNetBips.com. All rights reserved.

 

 www.dotnetbips.com RSS Generator

 

 Using WebRequest and WebResponse

 http://www.dotnetbips.com/displayarticle.aspx?id=239

 Description here

 Sun, 25 Jan 2004 12:00:00 AM GMT

 

 

Figure 16: Sample RSS markup.

 

Let s look at each markup tag closely:

  • . This tag forms the root tag and has a version attribute (the latest version is 2.0).
  • . The rss root node can further contain tags. This tag further contains tags, such as ,<link>, and <item> nodes. </li> <li><title>. This tag represents the title of this RSS feed. </li> <li><link>. This tag represents the URL of the Web site providing the RSS feed. </li> <li><description>. This tag details more information about this feed. </li> <li><copyright>. This tag specifies copyright information. </li> <li><generator>. This tag specifies the application that generated this feed. </li> </ul><p>  </p> <p> In addition to the above tags, there can be one or more <item> tags. An <item> tag represents the actual item you want to share, e.g., article, Web log entry, etc. Each <item> tag further contains the following sub-nodes: </p> <ul><li><title>. This tag represents the title of this item, e.g., article title. </li> <li><link>. This tag represents the URL of this item, e.g., article URL. </li> <li><description>. This tag contains a description of the item, e.g., summary of article. </li> <li><pubDate>. This tag contains the publication date of the item. A typical date format is Sun, 28 Dec 2003 12:00:00 AM GMT. </li> </ul><p>  </p> <p> Normally, all the RSS consumers (RSS readers or custom applications) expect a URL where an RSS feed can be found. Requesting this URL returns the XML data in the format shown above. </p> <p>  </p> <p> Let s create a Web form that generates such RSS markup for our blog entries. Add to the Web site a new Web form named RssFeed.aspx. This Web form will not have any user interface elements. Add the code shown in Figure 17 in the Page_Load event of the form. </p> <p>  </p> <p>Protected Sub Page_Load(ByVal sender As Object, </p> <p>ByVal e As System.EventArgs) Handles Me.Load</p> <p>Response.ContentEncoding = System.Text.Encoding.UTF8</p> <p>Response.ContentType = "text/xml" </p> <p>Dim ds As DataSet = SqlHelper.ExecuteDataSet("select top 10 </p> <p>* from posts order by postdate desc") </p> <p>Dim writer As New XmlTextWriter(Response.OutputStream, </p> <p>System.Text.Encoding.ASCII) </p> <p>writer.WriteStartElement("rss") </p> <p>writer.WriteAttributeString("version", "2.0") </p> <p>writer.WriteStartElement("channel") </p> <p>writer.WriteElementString("title", "My Blog") </p> <p>writer.WriteElementString("link", </p> <p>"http://www.somedomain.com") </p> <p>writer.WriteElementString("description", </p> <p>"My Blog Description") </p> <p>writer.WriteElementString("copyright", </p> <p>"Copyright (C) your name here") </p> <p>writer.WriteElementString("generator",</p> <p>"My Blog RSS Generator") </p> <p>For Each row As DataRow In ds.Tables(0).Rows</p> <p>writer.WriteStartElement("item") </p> <p>writer.WriteElementString("title", row("title")) </p> <p>writer.WriteElementString("link", </p> <p>"http://www.yourdomain.com/showpost.aspx?id=" & row("id")) </p> <p>writer.WriteElementString("description", row("message")) </p> <p>writer.WriteElementString("pubDate", CType(row("postdate"),</p> <p>DateTime).ToString("dd MMM yyyy 12:00:00 G\MT")) </p> <p>writer.WriteEndElement()</p> <p>Next</p> <p>writer.WriteEndElement()</p> <p>writer.WriteEndElement()</p> <p>writer.Flush()</p> <p>Response.End()</p> <p>End Sub</p> <p><b>Figure 17:</b> Generating RSS markup. </p> <p>  </p> <p> Here, we set the content encoding and content type of response to UTF8 and text/xml, respectively. Then we retrieve the last 10 entries from the Posts table in a DataSet using the SqlHelper class. We then create an instance of the XmlTextWrite class, which provides a fast and forward-only way of generating streams or files containing XML data. We use various methods of the XmlTextWriter class to emit the XML data, such as WriteStartElement, WriteEndElement, and WriteElementString. Following is a list of these methods: </p> <ul><li>WriteStartElement. This method writes an open tag for the specified tag. </li> <li>WriteAttributeString. This method writes an attribute for the currently open tag. </li> <li>WriteElementString. This method writes the start tag followed by the text value inside it and the closing tag. </li> <li>WriteEndElement. This method writes the end tag of the recently opened tag. You need not specify a tag name here as it internally assumes that, as per nesting. </li> <li>Flush. This method flushes all the buffered output to the destination. </li> </ul><p>  </p> <p> Make sure to change the domain name used in the above markup to match your own. Finally, we end the response stream by calling the End method of the Response object. Figure 18 shows a sample run of RssFeed.aspx. </p> <p>  </p> <p><img width="333" height="289" src="/content/legacy/images/asp200606bj_f_image018.jpg" class="old-inline-image"><br><b>Figure 18:</b> Sample run of RssFeed.aspx. </p> <p>  </p> <h3>Conclusion</h3> <p> In this concluding article of our three-part series, we finished developing a functional blog that you can customize as per your requirements. We added the ability to view and post comments and read archives. We also secured the administrative pages using forms authentication. Thanks to the new Login and CreateUserWizard controls, we were able to develop a code-free membership system. To make your blog popular you must have some mechanism of syndication. We built our own RSS feed with the help of XmlTextWriter that other Web sites and RSS readers can consume.</p> <p>  </p> <p> <i>The sample code for this series is available for <a href="/content/legacy/downloads/asp200606bj_f.zip">download</a>. </i></p> <p>  </p> <p><b>Bipin Joshi</b> is the founder and owner of BinaryIntellect Consulting (<a href="http://www.binaryintellect.com/">http://www.binaryintellect.com</a>), where he conducts professional training programs on .NET technologies. He is the author of Developer s Guide to ASP.NET 2.0 (<a href="http://www.binaryintellect.com/books">http://www.binaryintellect.com/books</a>) and co-author of three WROX books on .NET 1.x. He writes regularly for <a href="http://www.dotnetbips.com/">http://www.DotNetBips.com</a>, a community Web site he founded in the early days of .NET. He is a Microsoft MVP, MCAD, MCT, and member of ASPInsiders. He jots down his thoughts about .NET, life, and Yoga at <a href="http://www.bipinjoshi.com/">http://www.bipinjoshi.com</a>. He also conducts workshops on Yoga and Meditation, where he helps IT professionals develop a positive personality. You can contact him at <a href="mailto:webmaster@bipinjoshi.com">mailto:webmaster@bipinjoshi.com</a>.</p> <p>  </p> <p><a name="SidebarOne"></a>Suggestions for Extending or Enhancing the Blog Application</p> <ul><li>Use Microsoft Data Access Application Block (MSDAAB) or BinaryIntellect DatabaseHelper open source component as a data access layer. </li> <li>Apply all the look and feel attributes, such as color, fonts, and borders in Themes. </li> <li>Extend this application for supporting multiple bloggers. This will call for a change in database schema. </li> <li>Generate the RSS feed as per the latest specifications to include more details, such as track backs. </li> <li>Make the comment submission moderated, so as to remove any junk comments. </li> </ul><p>  </p> <p>Reference Links</p> <ul><li>Creating RSS feeds for your Web site (<a href="http://www.dotnetbips.com/Articles/displayarticle.aspx?id=242">http://www.dotnetbips.com/Articles/displayarticle.aspx?id=242</a>) </li> <li>BinaryIntellect DatabaseHelper open source component (<a href="http://www.binaryintellect.com/products/default.aspx">http://www.binaryintellect.com/products/default.aspx</a>) </li> <li>Microsoft Data Access Application Block for .NET v2 (<a href="http://www.microsoft.com/downloads/details.aspx?familyid=F63D1F0A-9877-4A7B-88EC-0426B48DF275&displaylang=en">http://www.microsoft.com/downloads/details.aspx?familyid=F63D1F0A-9877-4A7B-88EC-0426B48DF275&displaylang=en</a>) </li> </ul><p>  </p> <p>  </p> <p>  </p> </div> <div class="secondary-tags"> TAGS: <a href="/software-development" class="secondary-tag">Software Development</a> </div> <div class="comments-wrapper" id="comments-2033"> <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/2033" 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-2033">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-2033" name="comment_body[und][0][value]" cols="60" rows="5"></textarea></div> </div> <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="element-invisible 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-9lBCf9rq-spGd_eC7ga0OWhF-6LE963eWfX4gCnlYhw" /> <input type="hidden" name="form_id" value="comment_node_article_form" /> <input type="hidden" name="honeypot_time" value="1539987354|0HiX40uacnzsydaT9mGwwRoelchGLslq3fKD1zDqEdQ" /> <input type="hidden" name="captcha_sid" value="48314583" /> <input type="hidden" name="captcha_token" value="632bf379bd7a5de21b02047aea57ea6a" /> <div class="element-invisible"><div class="form-actions form-wrapper" id="edit-actions"><button id="edit-submit-2033" 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">Related</div><div class="related-articles-wrapper"><a href="/web-development/san-francisco-new-york-lead-us-wage-growth-thanks-big-tech" class="small-article-link"><article class="small-article"><div class="img-crop"><img class="js-imgpxr" data-x2src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_retina/public/GettyImages-922779642.jpg?itok=g5CpwfEi" src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_standard/public/GettyImages-922779642.jpg?itok=3tOAsBP_" width="90" height="83" alt="San Francisco" /></div><div class="small-article__inner"><div class="small-article__inner-title">San Francisco, New York Lead U.S. Wage Growth Thanks to Big Tech</div><span>Oct 02, 2018</span></div></article></a><a href="/web-development/devoptics-enables-companies-track-progress-toward-devops-model" class="small-article-link"><article class="small-article"><div class="img-crop"><img class="js-imgpxr" data-x2src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_retina/public/Screen%20Shot%202018-07-23%20at%207.42.33%20PM_2.png?itok=DPlRcI8Z" src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_standard/public/Screen%20Shot%202018-07-23%20at%207.42.33%20PM_2.png?itok=xX0ghDSH" width="90" height="83" alt="Gears" /></div><div class="small-article__inner"><div class="small-article__inner-title">DevOptics Enables Companies to Track Progress Toward DevOps Model</div><span>Jul 24, 2018</span></div></article></a><article class="dfp-ad-hideempty hidden n_hidden small-article" data-dfp-position="native_related"></article><a href="/web-development/open-source-licensing-why-gpls-heyday-over" class="small-article-link"><article class="small-article"><div class="img-crop"><img class="js-imgpxr" data-x2src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_retina/public/Screen%20Shot%202018-07-22%20at%208.37.04%20PM_0.png?itok=Haxkpklg" src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_standard/public/Screen%20Shot%202018-07-22%20at%208.37.04%20PM_0.png?itok=O_HZkx1D" width="90" height="83" alt="code" /></div><div class="small-article__inner"><div class="small-article__inner-title">Open Source Licensing: Why the GPL's Heyday Is Over</div><span>Jul 23, 2018</span></div></article></a><a href="/web-development/twitter-beats-back-group-bias-lawsuit-female-engineer" class="small-article-link"><article class="small-article"><div class="img-crop"><img class="js-imgpxr" data-x2src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_retina/public/twitter.jpg?itok=aeLuPtlp" src="https://www.itprotoday.com/sites/itprotoday.com/files/styles/article_related_thumb_standard/public/twitter.jpg?itok=C8FRdHdV" width="90" height="83" alt="twitter" /></div><div class="small-article__inner"><div class="small-article__inner-title">Twitter Beats Back Group-Bias Lawsuit by Female Engineer</div><span>Jul 04, 2018</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="/linux/canonical-eyes-fintech-ubuntu-server-1810?parent=2033&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 --> <!-- Check to see if we are in the store --> <footer class="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" src="https://www.itprotoday.com/sites/all/themes/penton_subtheme_itprotoday/images/logos/footer.png" alt="Logo" /></a> <div class="small-12 medium-5 columns"> <div class="footer-links"> <a href="https://informa.com/"><img src="/sites/all/themes/penton_core_theme/images/powered_by_informa_businessline.png" alt="Powered by Informa" /></a> </div> </div> </div> <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> </ul> <ul class="footer-min-col no-margin"> <li class="footer-min-col__item"> <a href="http://www.penton.com/privacy-policy#ThirdPartyAdvertisingTech" class="footer-min-col-link">Ad Choices</a> </li> <li class="footer-min-col__item"> <a href="http://engage.informa.com/privacy-statement" class="footer-min-col-link">Privacy Policy</a> </li> <li class="footer-min-col__item"> <a href="http://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://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 class="social-icons__icon fa fa-facebook"></i></a><a href="https://twitter.com/ITProToday" title="" class="social-icons__link"><i class="social-icons__icon fa fa-twitter"></i></a><a href="https://plus.google.com/115563256559407060026 " title="" class="social-icons__link"><i class="social-icons__icon fa fa-google-plus"></i></a><a href="https://www.linkedin.com/groups/1163947" title="" class="social-icons__link"><i class="social-icons__icon fa fa-linkedin"></i></a></div></div> </div> <div class="l-footer-rights"> <span class="copyrights"> © 2018 Informa USA, Inc., All Rights Reserved </span> </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> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_KUtWmy_QP6atnDjXwpDAH183eelDuv-2PY5ksEFKvNQ.js"></script> <script type="text/javascript" src="https://www.googletagservices.com/tag/js/gpt.js"></script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_s3L_uC35AiN5EGYY533su-jccnLRp2aKpOnjgPLbo34.js"></script> <script type="text/javascript" src="//assets.adobedtm.com/2ebe67d2ca0193084439038012c34f9112a85c00/satelliteLib-48191dfa1509ee2d203e3f6eb4bc8a3de3320ce9.js"></script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_eOe-hGqK6-bRjj7DQYO_Y-oCu3MIoF2vYxLUbQbtu4I.js"></script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_2h17_kRDS97bAi9pF-W7es7DLWc108u3KeFxWQr035M.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- window.CKEDITOR_BASEPATH = "/sites/all/modules/contrib/ckeditor/ckeditor/" //--><!]]> </script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_FloLC-L2hL--gn7qKaXXBNWxL6qI_-SL4q2_WBFL5X4.js"></script> <script type="text/javascript" src="//video.limelight.com/player/embed.js"></script> <script type="text/javascript" src="https://embed.calculoid.com/scripts/combined.min.js"></script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_uk9tggR7LUt24uKijCBrSJ5qhPl8YykfBihM_uf9QrE.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- Drupal.settings.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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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"}],"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":"ptype","value":"Article"},{"target":"nid","value":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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"}],"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":"ptype","value":"Article"},{"target":"nid","value":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","size":[[728,90],[970,90],[320,50]],"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,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],[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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"target":"reg","value":"anonymous"}]}],"hidden":[{"disabled":false,"api_version":1,"machinename":"article_canopy","slot":"[article] Canopy","adunit":"\/3834\/itprotoday.home\/article\/software_development\/web_development","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"}],"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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"target":"reg","value":"anonymous"}]},{"disabled":false,"api_version":1,"machinename":"article_footnote_floor","slot":"[article] Footnote_Floor","adunit":"\/3834\/itprotoday.home\/article\/software_development\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"target":"reg","value":"anonymous"}]},{"disabled":false,"api_version":1,"machinename":"article_oop","slot":"[article] Out of Page","adunit":"\/3834\/itprotoday.home\/article\/software_development\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"target":"reg","value":"anonymous"}]},{"disabled":false,"api_version":1,"machinename":"article_pagewrap","slot":"[article] PageWrap","adunit":"\/3834\/itprotoday.home\/article\/software_development\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"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\/web_development","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":"2033"},{"target":"pterm","value":"web_development"},{"target":"sterm","value":"software_development"},{"target":"author","value":"bipin_joshi"},{"target":"reg","value":"anonymous"}]}]}},"current_type":"article","default_adunit":"\/3834\/itprotoday.home","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":"54.80.188.87"}; //--><!]]> </script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_m0Qm7ZLBa0Us5bK_pvZ1T3hMtRZOtWiklopETCWH6Qk.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- Drupal.settings.penton_eloqua_api = {"fields":["nl","utm_rid"]}; //--><!]]> </script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_2QLg0QavkHsRBi6FWUcTxM-mYPG7L5TNgt9uS3ypY4Q.js"></script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_C3Oq_2WmTdDwWwi0aeViDSNHfrYR_mwn7Gj89E6Ojx0.js"></script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_KIwLxGMqoJtHLuCU1tBsjwRtZcXqJAAPjkc5R7V3izE.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- jQuery.extend(Drupal.settings, {"basePath":"\/","pathPrefix":"","ajaxPageState":{"theme":"penton_subtheme_itprotoday","theme_token":"j_lstFWsKS6TYgs16aYHuHQbKj1EsS6ax2jAExjkcCw","jquery_version":"1.10","js":{"sites\/all\/modules\/custom\/penton_gdpr\/js\/penton_gdpr.js":1,"sites\/all\/modules\/contrib\/ckeditor\/includes\/ckeditor.utils.js":1,"sites\/all\/modules\/contrib\/ckeditor\/ckeditor\/ckeditor.js":1,"sites\/all\/modules\/custom\/penton_adobe_dtm\/js\/penton_adobe_dtm.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/jquery\/1.10\/jquery.min.js":1,"misc\/jquery.once.js":1,"https:\/\/www.googletagservices.com\/tag\/js\/gpt.js":1,"misc\/drupal.js":1,"\/\/assets.adobedtm.com\/2ebe67d2ca0193084439038012c34f9112a85c00\/satelliteLib-48191dfa1509ee2d203e3f6eb4bc8a3de3320ce9.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.core.min.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/external\/jquery.cookie.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/jquery.form\/4\/jquery.form.min.js":1,"misc\/form.js":1,"misc\/ajax.js":1,"sites\/all\/modules\/contrib\/jquery_update\/js\/jquery_update.js":1,"sites\/all\/modules\/custom\/penton_modal\/js\/penton_modal_user_registration.js":1,"sites\/all\/modules\/custom\/penton_user_register\/js\/penton_user_register.js":1,"sites\/all\/modules\/contrib\/ubercart\/uc_file\/uc_file.js":1,"0":1,"sites\/all\/modules\/custom\/penton_modal\/js\/penton_modal_popup.js":1,"\/\/video.limelight.com\/player\/embed.js":1,"https:\/\/embed.calculoid.com\/scripts\/combined.min.js":1,"sites\/all\/modules\/contrib\/authcache\/authcache.js":1,"sites\/all\/modules\/custom\/penton_custom_dfp\/js\/data-render.js":1,"sites\/all\/modules\/custom\/penton_custom_dfp\/js\/viewport.js":1,"sites\/all\/modules\/custom\/penton_custom_dfp\/js\/dfp.dom.js":1,"sites\/all\/modules\/custom\/penton_custom_dfp\/js\/dfp.iframe.js":1,"1":1,"sites\/all\/modules\/custom\/penton_custom_dfp\/js\/dfp.sticky.js":1,"sites\/all\/modules\/custom\/penton_eloqua_api\/js\/eloqua_tracking.js":1,"2":1,"sites\/all\/modules\/custom\/penton_eloqua_api\/js\/cookies.helper.js":1,"misc\/progress.js":1,"sites\/all\/modules\/contrib\/ctools\/js\/modal.js":1,"sites\/all\/modules\/custom\/penton_social\/js\/penton_social.js":1,"sites\/all\/modules\/contrib\/prevent_js_alerts\/prevent_js_alerts.js":1,"sites\/all\/modules\/contrib\/captcha\/captcha.js":1,"sites\/all\/modules\/custom\/penton_comment\/scripts\/comments.js":1,"sites\/all\/modules\/contrib\/service_links\/js\/pinterest_button.js":1,"misc\/textarea.js":1,"modules\/filter\/filter.js":1,"sites\/all\/themes\/penton_core_theme\/public\/scripts.js":1,"sites\/all\/themes\/penton_core_theme\/public\/vendor.js":1,"sites\/all\/modules\/custom\/penton_legal_comm\/js\/client.js":1,"sites\/all\/modules\/custom\/penton_legal_comm\/js\/alert.js":1},"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,"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\/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,"sites\/itprotoday.com\/files\/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,"https:\/\/embed.calculoid.com\/styles\/main.css":1}},"authcache":{"q":"node\/2033","cp":{"path":"\/","domain":".www.itprotoday.com","secure":true},"cl":390},"typekitId":"njq2hxj","adunit":"\/3834\/itprotoday.home","polar_property_id":"NA-ITPRCOM-11238907","is_new_welcome_ad":1,"is_new_article_view":false,"penton_eloqua_api":{"eloqua_site_id":null,"tracking_enabled":null},"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"},"penton_adobe_dtm":{"user":{"profile":{"profileInfo":{"profileID":"null"}},"segment":{"loginStatus":"unreg","permission":"anonymous"}},"page":{"pageInfo":{"pageName":"Build Your Own Blog: Part III","pageID":"e07f0773-6753-45cc-ae10-4c478e9b8b21","author":"Bipin Joshi","issueDate":"Oct 30, 2009"},"destinationURL":"https:\/\/www.itprotoday.com\/web-development\/build-your-own-blog-part-iii","category":{"pageType":"article","primaryCategory":"Software Development \u003E Web Development"},"attributes":{"taxonomy":"Web Development|Software Development","permission":"public","subType1":"Article","subType2":"","visibility":"visible","programs":"","scrollCount":"10","scrollPosition":"1_of_10","countsTowardGoal":""}}},"penton_adobe_dtm_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"},"ckeditor":{"input_formats":{"comments":{"customConfig":"\/sites\/all\/modules\/contrib\/ckeditor\/ckeditor.config.js?","defaultLanguage":"en","toolbar":"[\n [\u0027Bold\u0027,\u0027Italic\u0027,\u0027Blockquote\u0027]\n]","enterMode":1,"shiftEnterMode":2,"toolbarStartupExpanded":true,"width":"100%","skin":"bootstrapck","format_tags":"p;div;pre;address;h1;h2;h3;h4;h5;h6","show_toggle":"f","default":"f","ss":2,"loadPlugins":[],"entities":false,"entities_greek":false,"entities_latin":false,"scayt_autoStartup":false,"language":"en","scayt_sLang":"en_US","js_conf":{"extraPlugins":"\u0027autogrow\u0027","autoGrow_minHeight":"100","autoGrow_maxHeight":"600","fullPage":true},"stylesCombo_stylesSet":"drupal:\/sites\/all\/modules\/contrib\/ckeditor\/ckeditor.styles.js","contentsCss":["\/sites\/all\/themes\/penton_subtheme_itprotoday\/public\/style.css?pfzava","\/sites\/all\/themes\/penton_core_theme\/public\/vendor.css?pfzava","\/sites\/all\/themes\/penton_core_theme\/public\/override\/system.messages.css?pfzava","\/sites\/all\/themes\/penton_core_theme\/public\/override\/system.base.css?pfzava","\/sites\/all\/themes\/penton_core_theme\/public\/override\/system.menus.css?pfzava","\/sites\/all\/themes\/penton_core_theme\/public\/override\/user.css?pfzava","\/sites\/all\/modules\/contrib\/ckeditor\/css\/ckeditor.css?pfzava","\/sites\/all\/modules\/contrib\/ckeditor\/css\/ckeditor.css?pfzava"]}},"plugins":[],"textarea_default_format":{"edit-comment-body-2033":"comments"},"module_path":"\/sites\/all\/modules\/contrib\/ckeditor","editor_path":"\/sites\/all\/modules\/contrib\/ckeditor\/ckeditor\/","ajaxToken":"j0aXdUVaVuLzrseBLO0vTXiQuyWD3YtslUhsPb1MoUM","xss_url":"\/ckeditor\/xss","theme":"penton_subtheme_itprotoday","elements":{"edit-comment-body-2033":"comments"},"scayt_language":"en_US"},"ajax":{"edit-submit-2033":{"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\/2033":true}}); //--><!]]> </script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_39wR4vuLCUZcIK_NsEhVLhl6834Dd3heLLFQ5DLVNsc.js"></script> <script type="text/javascript" src="https://www.itprotoday.com/sites/all/modules/contrib/ckeditor/ckeditor/ckeditor.js?pfzava"></script> <script type="text/javascript" src="https://www.itprotoday.com/sites/itprotoday.com/files/js/js_hTvEvnr-CSP0ayePYXq_lDVR4Xlir2rUBDh7jP_21fI.js"></script> </div> </body> </html>