<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Radical Development &#187; Software</title>
	<atom:link href="http://radicaldevelopment.net/tag/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://radicaldevelopment.net</link>
	<description>Technical without the Technicalities</description>
	<lastBuildDate>Sun, 05 Feb 2012 02:36:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Microsoft Enterprise Library: Caching Application Block</title>
		<link>http://radicaldevelopment.net/microsoft-enterprise-library-caching-application-block/</link>
		<comments>http://radicaldevelopment.net/microsoft-enterprise-library-caching-application-block/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 04:29:21 +0000</pubDate>
		<dc:creator>Steven Swafford</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Enterprise Library]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft .NET]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Visual Studio IDE]]></category>

		<guid isPermaLink="false">http://radicaldevelopment.net/?p=11813</guid>
		<description><![CDATA[This is a a second article on the topic of the Microsoft Enterprise Library. If you have not read the previous article titled Microsoft Enterprise Library: Data Access Application Block, I recommend you do so. Introduction to the Caching Application Block The Enterprise Library Caching Application Block lets developers incorporate a local cache in their &#8230; <a href="http://radicaldevelopment.net/microsoft-enterprise-library-caching-application-block/" class="more-link" >read on <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is a a second article on the topic of the Microsoft Enterprise Library. If you have not read the previous article titled Microsoft Enterprise Library: Data Access Application Block, I recommend you do so.</p>
<h2>Introduction to the Caching Application Block</h2>
<p><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/073564523X/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51ueNyTgnFL._SL160_.jpg" class="alignleft" alt="Amazon Image" height="160" width="131"  /></a>The Enterprise Library Caching Application Block lets developers incorporate a local cache in their applications. It supports both an in-memory cache and, optionally, a backing store that can either be the database store or isolated storage. The Caching Application Block can be used without modification; it provides all the functionality needed to retrieve, add, and remove cached data. Configurable expiration and scavenging policies are also part of the block.</p>
<p>If you have been working with caching outside the Enterprise Library, I believe you will find this application block extremely powerful and easy to use. If you have not taken on the subject of caching before, I believe you also will find this easy to pick up and ultimately boost the performance of your applications. The Enterprise Library Caching Application Block includes the following features:</p>
<ul>
<li>You can use the graphical Enterprise Library configuration tools to manage configuration settings.</li>
<li>You can configure a persistent storage location, using either isolated storage or the Enterprise Library Data Access Application Block, whose state is synchronized with the in-memory cache.</li>
<li>Administrators can manage the configuration using Group Policy tools.</li>
<li>You can extend the block by creating custom expiration policies and storage locations.</li>
<li>You are assured that the block performs in a thread-safe manner.</li>
</ul>
<h2>Cache Manager</h2>
<p>The cache manager serves the role of managing the cache store exactly as it sounds. It is entirely possible to have multiple cache managers to suit you business requirements. When configuring the cache manager you also have choices when it comes to the backing stores. For example, if you wish to use a database to persist the cache you can do so, but for the purpose of this article I will demonstrate the out of the box configuration which is the server&#8217;s memory.</p>
<div class="information">
<p>Much like the potential vulnerabilities surrounding the Data Access Block in terms of SQL Injection, the Caching Application Block also has risk that you must understand. For example, do not store sensitive data in the cache and if you must do so, then use encryption.</p>
</div>
<p>Once you have the defined your cache manager settings,  you will see similar code withing your web.config:</p>
<pre class="brush: csharp">&lt;configSections&gt;
	&lt;section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.
		Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching,
		Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
		requirePermission="true" /&gt;
&lt;/configSections&gt;
&lt;cachingConfiguration defaultCacheManager="RadDev Cache Manager"&gt;</pre>
<h2>Design and Implementation</h2>
<p>Turning our attention to the web project, the first step is to add the appropriate references. Add a reference to the Caching Application Block assembly. In Microsoft Visual Studio, right-click your project node in Solution Explorer, and then click Add Reference. Click the Browse tab and find the location of the Microsoft.Practices.EnterpriseLibrary.Caching.dll assembly. Select the assembly, and then click OK to add the reference.</p>
<p>Now that the references are in place, we need the using statements.</p>
<pre class="brush: csharp">//Enterprise Library
using Microsoft.Practices.EnterpriseLibrary.Caching;
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;</pre>
<p>Now the fun begins. We will query the database and after this first round trip we will cache the data. By caching the data the next call to the database essentially does not occur. Back in your webform add a GridView.</p>
<pre class="brush: csharp">&lt;asp:GridView ID="GridViewContactsNoCache" runat="server"&gt;
&lt;/asp:GridView&gt;</pre>
<p>Now that we have the GridView established it is time to wire up the necessary code to communicate with the database and then display this data to the end user.</p>
<p>First step here is to create your reference to the cache manager.</p>
<pre class="brush: csharp">ICacheManager cache = EnterpriseLibraryContainer.Current.GetInstance&lt;ICacheManager&gt;();</pre>
<p>Depending upon your application&#8217;s design you can add a object to cache in the scenario that works best for you. Here I am using a Generic List to create an object type of Contact. I will not go into the details of the List nor the Contact Class, but I will share the code so you can follow the thought process.</p>
<h3>SQL Statement</h3>
<pre class="brush: csharp">private const string sqlOne = "SELECT FirstName," +
	" MiddleName, LastName FROM Person.Contact WHERE  (LastName =" +
	" N'adams') AND (FirstName LIKE N'r%') ORDER BY LastName";</pre>
<h3>Page Load Event</h3>
<p>Inside the page load you will notice an if/else statement. Here is where we check if the Contacts object is in cache and if so, we bypass the database round trip and bind the GridView to this cache object.</p>
<pre class="brush: csharp">protected void Page_Load(object sender, EventArgs e)
{
	if (cache.Contains("ContactsCachKey"))
	{
		GridViewContactsNoCache.DataSource = cache.GetData("ContactsCachKey");
	}
	else
	{
		GridViewContactsNoCache.DataSource = GetContacts();
	}
	GridViewContactsNoCache.DataBind();

	// How many object are in cache?
	LabelCacheObjects.Text = string.Format("The Cache Manager contains {0} objects.",
	cache.Count.ToString());
}</pre>
<h3>Get the Contacts</h3>
<p>In this method you will see the use of the Generic List and immediately before exiting the method I am making another method call to populate the Contacts to cache.</p>
<pre class="brush: csharp">private List&lt;Contact&gt; GetContacts()
{
	using (IDataReader rdr = db.ExecuteReader(CommandType.Text, sqlOne))
	{
		lstContact = new List&lt;Contact&gt;();

		while (rdr.Read())
		{
			contact = new Contact();
			contact.FirstName = rdr.GetString(0);
			contact.MiddleName = rdr.GetString(1);
			contact.LastName = rdr.GetString(2);
			lstContact.Add(contact);
		}
	}

	PopulateCacheManager(lstContact);

	return lstContact;
}

private void PopulateCacheManager(List&lt;Contact&gt; lstContact)
{
	cache.Add("ContactsCachKey", lstContact);
}</pre>
<h2>The Result</h2>
<p><img class="alignnone size-full wp-image-11821" title="Contacts GridView" src="http://radicaldevelopment.net/wp-content/uploads/2012/02/cab_one.png" alt="Contacts GridView" width="265" height="173" /></p>
<h2>What If The Data Changes</h2>
<p>Of course when one displays data, typically the counterpart is to also update the data. You will be pleased to know that in one line of code you can destroy the Contacts cached object and upon the next execution of displaying the data, the process starts all over. Assume for a moment that that Update button click has processed a database transaction.</p>
<pre class="brush: csharp">protected void ButtonUpdate_Click(object sender, EventArgs e)
{
	cache.Remove("ContactsCachKey"); //here we remove the Contacts cache object
}</pre>
<h2>Conclusion</h2>
<p>As you can see, using the Caching Application Block component of the Enterprise Library is not complex. Of course, this article has just begun to scratch the surface in the hopes that your interest is perked.</p>
<h2>Examples Via MSDN</h2>
<p>The following examples are from the Enterprise Library 5.0, <a href="http://msdn.microsoft.com/en-us/library/ff953179(v=pandp.50).aspx">Chapter 5 – A Cache Advance for Your Applications</a>.</p>
<p><strong>Proactive Cache Loading</strong></p>
<p>The example, Load the cache proactively on application startup, provides a simple demonstration of proactive cache loading. In the startup code of your application you add code to load the cache with the items your application will require. The example creates a list of Product items, and then iterates through the list calling the Add method of the cache manager for each one. You would, of course, fetch the items to cache from the location (such as a database) appropriate for your own application. It may be that the items are available as a list, or—for example—by iterating through the rows in a DataSet or a DataReader.</p>
<pre class="brush: csharp">// Create a list of products - may come from a database or other repository
List&lt;Product&gt; products = new List&lt;Product&gt;();
products.Add(new Product(42, "Exciting Thing",
                         "Something that will change your view of life."));
products.Add(new Product(79, "Useful Thing",
                         "Something that is useful for everything."));
products.Add(new Product(412, "Fun Thing",
                         "Something that will keep the grandchildren quiet."));

// Iterate the list loading each one into the cache
for (int i = 0; i &lt; products.Count; i++)
{
  theCache.Add(DemoCacheKeys[i], products[i]);
}</pre>
<p><strong>Reactive Cache Loading</strong></p>
<p>Reactive cache loading simply means that you check if an item is in the cache when you actually need it, and—if not—fetch it and then cache it for future use. You may decide at this point to fetch several items if the one you want is not in the cache. For example, you may decide to load the complete product list the first time that a price lookup determines that the products are not in the cache.</p>
<p>The example, Load the cache reactively on demand, demonstrates the general pattern for reactive cache loading. After displaying the contents of the cache (to show that it is, in fact, empty) the code attempts to retrieve a cached instance of the Product class. Notice that this is a two-step process in that you must check that the returned value is not null. As we explained in the section &#8220;What&#8217;s In My Cache?&#8221; earlier in this chapter, the Contains method may return true if the item has recently expired or been removed.</p>
<p>If the item is in the cache, the code displays the values of its properties. If it is not in the cache, the code executes a routine to load the cache with all of the products. This routine is the same as you saw in the previous example of loading the cache proactively.</p>
<pre class="brush: csharp">Console.WriteLine("Getting an item from the cache...");
Product theItem = (Product)defaultCache.GetData(DemoCacheKeys[1]);

// You could test for the item in the cache using CacheManager.Contains(key)
// method, but you still must check if the retrieved item is null even
// if the Contains method indicates that the item is in the cache:
if (null != theItem)
{
  Console.WriteLine("Cached item values are: ID = {0}, Name = '{1}', "
                    + "Description = {2}", theItem.ID, theItem.Name,
                    theItem.Description);
}
else
{
  Console.WriteLine("The item could not be obtained from the cache.");

  // Item not found, so reactively load the cache
  LoadCacheWithProductList(defaultCache);
  Console.WriteLine("Loaded the cache with the list of products.");
  ShowCacheContents(defaultCache);
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://radicaldevelopment.net/microsoft-enterprise-library-caching-application-block/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Enterprise Library: Data Access Application Block</title>
		<link>http://radicaldevelopment.net/microsoft-enterprise-library-data-access-application-block/</link>
		<comments>http://radicaldevelopment.net/microsoft-enterprise-library-data-access-application-block/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 06:40:21 +0000</pubDate>
		<dc:creator>Steven Swafford</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Enterprise Library]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft .NET]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Visual Studio IDE]]></category>

		<guid isPermaLink="false">http://radicaldevelopment.net/?p=11730</guid>
		<description><![CDATA[For those of you who have been using the Enterprise Library from Microsoft then I tip my hat to you. I admit that I have not used this library for a number of years and in most cases the reason is because I have honestly not been in a position to do so. It is &#8230; <a href="http://radicaldevelopment.net/microsoft-enterprise-library-data-access-application-block/" class="more-link" >read on <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For those of you who have been using the Enterprise Library from Microsoft then I tip my hat to you. I admit that I have not used this library for a number of years and in most cases the reason is because I have honestly not been in a position to do so. It is a long story so don’t ask. There are a number of reason why you should seriously consider the use of the Enterprise Library and I cannot think of any better reason than those provided directly from Microsoft.</p>
<p>The goals of Enterprise Library are the following:</p>
<ul>
<li><strong>Consistency</strong>. All Enterprise Library application blocks feature consistent design patterns and implementation approaches.</li>
<li><strong>Extensibility</strong>. All application blocks include defined extensibility points that allow developers to customize the behavior of the application blocks by adding their own code.</li>
<li><strong>Ease of use</strong>. Enterprise Library offers numerous usability improvements, including a graphical configuration tool, a simpler installation procedure, and clearer and more complete documentation and samples.</li>
<li><strong>Integration</strong>. Enterprise Library application blocks are designed to work well together or individually.</li>
</ul>
<p>Now that the groundwork has been laid let us get started.</p>
<h2>Introduction to the Data Access Library</h2>
<p><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/073564523X/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51ueNyTgnFL._SL160_.jpg" class="alignleft" alt="Amazon Image" height="160" width="131"  /></a>The Data Access Application Block includes a small number of methods that simplify the most common techniques for accessing a database. Each method encapsulates the logic required to retrieve the data and manage the connection to the database. The methods exposed by the block allow you to execute queries, return data in a range of different formats, populate a DataSet, update the database from a DataSet, perform data access asynchronously (against SQL Server databases), and return data as objects in a suitable format for use with client-side query technologies such as LINQ.</p>
<p>As with anything good there is always its counterpart. For example, if you are going to work with data in a a mechanism that is unique to your application or if your are going to work with a particular database that provides unique features then you may not want to use the Data Access Library. It is also important to understand the level of support. For example, if you are targeting an Oracle database you should not use this library since Microsoft has depreciated the Oracle Client. In this case you should turn to Oracle’s ODP.NET which is native to an Oracle Database.</p>
<h2>The Database Connection</h2>
<p>The beauty of the Data Access Library is the simplicity of its use. For example, to establish a connection to a database, SQL Server in this case all it takes is a single line of code. First things first is to add the appropriate references to the Enterprise Library Assemblies.</p>
<pre class="brush: csharp">//Enterprise Library
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Data;</pre>
<p>Then comes the database object creation.</p>
<pre class="brush: csharp">Database db = EnterpriseLibraryContainer.Current.GetInstance&lt;Database&gt;(“MyDatabase”);</pre>
<p>The string value MyDatabase represents the connection to a SQL Server. Yes, it actually is that simple. In fact the instance of database could in fact be defined in a single class so your development team would never have to waste any time in defining a database object again. It is also worth saying that this database object is not yet in an open state. This is good news because so many developers often forget to close out their database connections. Another important benefit is the Data Access Library also will log events to the application event log, but this is a subject that I will go into in a future article.</p>
<h2>Inline SQL Statement Example</h2>
<p>I want to first say that you should exercise extreme caution when using inline SQL because this type of database interaction is vulnerable to SQL Injection. For the purpose of this example, I will utilize inline SQL.</p>
<p>In this example we will employ two SQL statements. One will retrieve the contact details to include first, middle, and last names. The second statement will return the total number of contacts.</p>
<pre class="brush: sql">private const string sqlOne = "SELECT FirstName," +
" MiddleName, LastName FROM Person.Contact WHERE  (LastName = N'adams') AND" +
" (FirstName LIKE N'r%') ORDER BY LastName";

private const string sqlTwo = "SELECT COUNT(*) AS TotalContacts FROM Person.Contact WHERE (LastName = N'adams') AND" +
" (FirstName LIKE N'r%')";</pre>
<h2>Build the WebForm</h2>
<p>Now turning our attention to the web form we will need to server controls. First is a Gridview and second is a Label.</p>
<pre class="brush: xml">&lt;asp:GridView ID="ContactsGridView" runat="server"&gt;&lt;/asp:GridView&gt;
&lt;asp:Label ID="TotalContactsLabel" runat="server" Text=""&gt;&lt;/asp:Label&gt;</pre>
<p>At this point if you have been working with ADO.NET you will find the code behind the webform very familiar. The only thing we are doing different in this example is working with the database object that was covered earlier in this article.</p>
<pre class="brush: csharp">/// &lt;summary&gt;
/// Gets the contacts.
/// &lt;/summary&gt;
/// &lt;returns&gt;DataSet of contacts&lt;/returns&gt;
private DataSet GetContacts()
{
	DataSet dsContacts = db.ExecuteDataSet(CommandType.Text, sqlOne);
	return dsContacts;
}

/// &lt;summary&gt;
/// Gets the total contacts.
/// &lt;/summary&gt;
/// &lt;returns&gt;Total number of contacts&lt;/returns&gt;
private int GetTotalContacts()
{
	//because ExecuteScalar returns an object we must cast to an int
	int totalContacts = (int)db.ExecuteScalar(CommandType.Text, sqlTwo);
	return totalContacts;
}</pre>
<div class="interesting">
<ol>
<li>Internal is for assembly scope (i.e. only accessible from code in the same .exe or .dll)</li>
<li>Private is for class scope (i.e. accessible only from code in the same class)</li>
</ol>
</div>
<p>Now that we have the necessary methods established the next step is to bind the data to the server controls back on the webform. We will do this in the page load event.</p>
<pre class="brush: csharp">/// &lt;summary&gt;
/// Handles the Load event of the Page control.
/// &lt;/summary&gt;
/// &lt;param name="sender"&gt;The source of the event.&lt;/param&gt;
/// &lt;param name="e"&gt;The &lt;see cref="System.EventArgs"/&gt; instance containing the event data.&lt;/param&gt;
protected void Page_Load(object sender, EventArgs e)
{
	ContactsGridView.DataSource = GetContacts();
	ContactsGridView.DataBind();

	TotalContactsLabel.Text = string.Format("There are a total of {0} contacts", GetTotalContacts().ToString());
}</pre>
<p>Now upon execution of the web application you will be presented the following:</p>
<p><img class="alignnone size-full wp-image-11775" title="Contacts Data Displayed" src="http://radicaldevelopment.net/wp-content/uploads/2012/01/dal_example_01302012.png" alt="Contacts Data Displayed" width="419" height="176" /></p>
<h2>Conclusion</h2>
<p>As you can see, using the Data Access Library component of the <a href="http://msdn.microsoft.com/en-us/library/ff632023.aspx">Enterprise Library</a> is not complex. Of course, this article has just begun to scratch the surface in the hopes that your interest is perked.</p>
<h3>Examples Via MSDN</h3>
<p>The following examples are from the Enterprise Library 5.0, <a href="http://msdn.microsoft.com/en-us/library/ff953187(v=pandp.50).aspx">Chapter 2 &#8211; Much ADO about Data Access</a>.</p>
<p><strong>Reading Rows Using a Query with No Parameters</strong></p>
<p>Simple queries consisting of an inline SQL statement or a stored procedure, which take no parameters, can be executed using the ExecuteReader method overload that accepts a CommandType value and a SQL statement or stored procedure name as a string.</p>
<pre class="brush: csharp">// Call the ExecuteReader method by specifying just the stored procedure name.
using (IDataReader reader = namedDB.ExecuteReader("MyStoredProcName"))
{
  // Use the values in the rows as required.
}</pre>
<p><strong>Reading Rows Using an Array of Parameter Values</strong></p>
<p>While you may use simple no-parameter stored procedures and SQL statements in some scenarios, it&#8217;s far more common to use queries that accept input parameters that select rows or specify how the query will execute within the database server. If you use only input parameters, you can wrap the values up as an Object array and pass them to the stored procedure or SQL statement. Note that this means you must add them to the array in the same order as they are expected by the query, because you are not using names for these parameters—you are only supplying the actual values. The following code shows how you can execute a stored procedure that takes a single string parameter.</p>
<pre class="brush: csharp">// Call the ExecuteReader method with the stored procedure
// name and an Object array containing the parameter values.
using (IDataReader reader = defaultDB.ExecuteReader("ListOrdersByState",
                                      new object[] { "Colorado" }))
{
  // Use the values in the rows as required - here we are just displaying them.
  DisplayRowValues(reader);
}</pre>
<p><strong>Retrieving XML Data</strong></p>
<p>The Data Access block provides the ExecuteXmlReader method for querying data as XML. It takes a SQL statement that contains the FOR XML statement and executes it against the database, returning the result as an XmlReader. You can iterate through the resulting XML elements or work with them in any of the ways supported by the XML classes in the .NET Framework. However, as SQLXML is limited to SQL Server (the implementations of this type of query differ in other database systems), it is only available when you specifically use the SqlDatabase class (rather than the Database class).</p>
<p>The following code shows how you can obtain a SqlDatabase instance, specify a suitable SQLXML query, and execute it using the ExecuteXmlReader method.</p>
<pre class="brush: csharp">// Resolve a SqlDatabase object from the container using the default database.
SqlDatabase sqlServerDB
    = EnterpriseLibraryContainer.Current.GetInstance&lt;Database&gt;() as SqlDatabase;

// Specify a SQL query that returns XML data.
string xmlQuery = "SELECT * FROM OrderList WHERE State = @state FOR XML AUTO";

// Create a suitable command type and add the required parameter
// NB: ExecuteXmlReader is only available for SQL Server databases
using (DbCommand xmlCmd = sqlServerDB.GetSqlStringCommand(xmlQuery))
{
  xmlCmd.Parameters.Add(new SqlParameter("state", "Colorado"));
  using (XmlReader reader = sqlServerDB.ExecuteXmlReader(xmlCmd))
  {
    // Iterate through the elements in the XmlReader
    while (!reader.EOF)
    {
      if (reader.IsStartElement())
      {
        Console.WriteLine(reader.ReadOuterXml());
      }
    }
  }
}</pre>
<p><strong>Retrieving Single Scalar Values</strong></p>
<p>A common requirement when working with a database is to extract a single scalar value based on a query that selects either a single row or a single value. This is typically the case when using lookup tables or checking for the presence of a specific entity in the database. The Data Access block provides the ExecuteScalar method to handle this requirement. It executes the query you specify, and then returns the value of the first column of the first row of the result set as an Object type. This means that it provides much better performance than the ExecuteReader method, because there is no need to create a DataReader and stream the results to the client as a row set. To maximize this efficiency, you should aim to use a query that returns a single value or a single row.</p>
<p>The ExecuteScalar method has a set of overloads similar to the ExecuteReader method we used earlier in this chapter. You can specify a CommandType (the default is StoredProcedure) and either a SQL statement or a stored procedure name. You can also pass in an array of Object instances that represent the parameters for the query. Alternatively, you can pass to the method a Command object that contains any parameters you require.</p>
<p>The following code demonstrates passing a Command object to the method to execute both an inline SQL statement and a stored procedure. It obtains a suitable Command instance from the current Database instance using the GetSqlStringCommand and GetStoredProcCommand methods. You can add parameters to the command before calling the ExecuteScalar method if required. However, to demonstrate the way the method works, the code here simply extracts the complete row set. The result is a single Object that you must cast to the appropriate type before displaying or consuming it in your code.</p>
<pre class="brush: csharp">// Create a suitable command type for a SQL statement.
// NB: For efficiency, aim to return only a single value or a single row.
using (DbCommand sqlCmd
       = defaultDB.GetSqlStringCommand("SELECT [Name] FROM States"))
{
    // Call the ExecuteScalar method of the command.
    Console.WriteLine("Result using a SQL statement: {0}",
                       defaultDB.ExecuteScalar(sqlCmd).ToString());
}

// Create a suitable command type for a stored procedure.
// NB: For efficiency, aim to return only a single value or a single row.
using (DbCommand sprocCmd = defaultDB.GetStoredProcCommand("GetStatesList"))
{
    // Call the ExecuteScalar method of the command.
    Console.WriteLine("Result using a stored procedure: {0}",
                       defaultDB.ExecuteScalar(sprocCmd).ToString());
}</pre>
<p><strong>Updating Data</strong></p>
<p>The following code from the example application for this chapter shows how you can use the ExecuteNonQuery method to update a row in a table in the database. It updates the Description column of a single row in the Products table, checks that the update succeeded, and then updates it again to return it to the original value (so that you can run the example again). The first step is to create the command and add the required parameters, as you&#8217;ve seen in earlier examples, and then call the ExecuteNonQuery method with the command as the single parameter. Next, the code changes the value of the command parameter named description to the original value in the database, and then executes the compensating update.</p>
<pre class="brush: csharp">string oldDescription
    = "Carries 4 bikes securely; steel construction, fits 2\" receiver hitch.";
string newDescription = "Bikes tend to fall off after a few miles.";

// Create command to execute the stored procedure and add the parameters.
DbCommand cmd = defaultDB.GetStoredProcCommand("UpdateProductsTable");
defaultDB.AddInParameter(cmd, "productID", DbType.Int32, 84);
defaultDB.AddInParameter(cmd, "description", DbType.String, newDescription);

// Execute the query and check if one row was updated.
if (defaultDB.ExecuteNonQuery(cmd) == 1)
{
  // Update succeeded.
}
else
{
    Console.WriteLine("ERROR: Could not update just one row.");
}

// Change the value of the second parameter
defaultDB.SetParameterValue(cmd, "description", oldDescription);

// Execute query and check if one row was updated
if (defaultDB.ExecuteNonQuery(cmd) == 1)
{
  // Update succeeded.
}
else
{
    Console.WriteLine("ERROR: Could not update just one row.");
}</pre>
<p>Be sure to check out <a href="http://msdn.microsoft.com/en-us/library/ff953187(v=pandp.50).aspx">Chapter 2 &#8211; Much ADO about Data Access</a> for much more details and examples.</p>
]]></content:encoded>
			<wfw:commentRss>http://radicaldevelopment.net/microsoft-enterprise-library-data-access-application-block/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Secure Web Browsing Using Lightweight Portable Security</title>
		<link>http://radicaldevelopment.net/secure-web-browsing-using-lightweight-portable-security/</link>
		<comments>http://radicaldevelopment.net/secure-web-browsing-using-lightweight-portable-security/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 04:18:25 +0000</pubDate>
		<dc:creator>Steven Swafford</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Computer security]]></category>
		<category><![CDATA[Free]]></category>
		<category><![CDATA[Government]]></category>
		<category><![CDATA[Technology/Internet]]></category>

		<guid isPermaLink="false">http://radicaldevelopment.net/?p=11217</guid>
		<description><![CDATA[Stop for a moment and ask yourself just how safe to do feel when logging into your favorite social network site and at some point in time logging into online banking for example. I am not advocating that social networks fall short in the area of security but the reality is the internet is a &#8230; <a href="http://radicaldevelopment.net/secure-web-browsing-using-lightweight-portable-security/" class="more-link" >read on <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Stop for a moment and ask yourself just how safe to do feel when logging into your favorite social network site and at some point in time logging into online banking for example. I am not advocating that social networks fall short in the area of security but the reality is the internet is a dangerous place.</p>
<p>Today&#8217;s threats are increasing with each passing day and I would go so far to say that many individuals do not understand nor take the time to properly address security. In fact the <a href="http://www.cert.org/tech_tips/securing_browser/">Software Engineering Institute</a> at Carnegie Mellon states:</p>
<ol>
<li>Many users have a tendency to click on links without considering the risks of their actions.</li>
<li>Web page addresses can be disguised or take you to an unexpected site.</li>
<li>Many web browsers are configured to provide increased functionality at the cost of decreased security.</li>
<li>New security vulnerabilities may have been discovered since the software was configured and packaged by the manufacturer.</li>
<li>Computer systems and software packages may be bundled with additional software, which increases the number of vulnerabilities that may be attacked.</li>
<li>Third-party software may not have a mechanism for receiving security updates.</li>
<li>Many web sites require that users enable certain features or install more software, putting the computer at additional risk.</li>
<li>Many users do not know how to configure their web browsers securely.</li>
<li>Many users are unwilling to enable or disable functionality as required to secure their web browser.</li>
</ol>
<p>Each of these points demonstrate the need for a mechanism that the average person can utilize to reduce the risk across the internet. Going back to the example of online banking, what would you say if you could simply boot off a DVD into a Linux Operating system and protect you credentials? This is entirely possible with <a href="http://www.spi.dod.mil/lipose.htm">Lightweight Portable Security (LPS)</a> which was developed by the United States Air Force.</p>
<p><img class="alignnone size-full wp-image-11218" title="Lightweight Portable Security" src="http://radicaldevelopment.net/wp-content/uploads/2012/01/LightweightPortableSecurity.jpg" alt="Lightweight Portable Security" width="600" height="338" /></p>
<p>LPS differs from traditional operating systems in that it isn&#8217;t continually patched. LPS is designed to run from read-only media and without any persistent storage. Any malware that might infect a computer can only run within that session.</p>
<p>LPS is updated on a regular basis (at least quarterly patch and maintenance releases). Update to the latest versions to have the latest protection.</p>
<p>For those that are not familiar with Linux there is nothing to fear. Go grab yourself a download of <a href="http://www.spi.dod.mil/lipose.htm">Lightweight Portable Security (LPS)</a> and see for yourself just how easy LPS is and protect yourself at the same time.</p>
<h2>Books and Whitepapers</h2>
<p><a href="http://radicaldevelopment.tradepub.com/free-offer/protecting-users-from-firesheep-and-other-sidejacking-attacks-with-ssl/w_verb35?sr=hicat&amp;_t=hicat:798">Discover how to protect yourself from Firesheep and other Sidejacking attacks!</a> The release of the Firesheep Wi-Fi attack tool has increased awareness among both users and attackers of the inherent insecurity of unprotected HTTP connections. Firesheep allows an attacker connected to the local network to monitor the web sessions of other users on that network. As experts proclaimed in reaction to Firesheep, the best solution to the problem is to use TLS/SSL for all connections to web sites, including the home page. Download &#8221; Protecting Users From Firesheep and other Sidejacking Attacks with SSL&#8221; to learn how to avoid these attacks.</p>
<p><a href="http://radicaldevelopment.tradepub.com/free-offer/the-web-security-challenge-a-competitive-guide-to-selecting-secure-web-gateways/w_aaaa1640?sr=hicat&amp;_t=hicat:798">The Web Security Challenge: A Competitive Guide to Selecting Secure Web Gateways</a>. In the search for reliable, comprehensive Web security, there is a clear leader. Third-party testing confirms that only Websense Web Security Gateway meets or exceeds industry analyst criteria across nine functional areas including malware protection, data loss prevention, and Web 2.0 threat detection accuracy when tested against competitive products.</p>
<p><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/1906124698/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/41-wvUpnEoL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="112"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/0596006691/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51Bg4n21NxL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="124"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/020171955X/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51NE7JDFXCL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="128"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/1581607229/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/41lcQfVZybL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="104"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/0321356411/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51YBDPPR3ML._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="121"  /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://radicaldevelopment.net/secure-web-browsing-using-lightweight-portable-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning BackTrack 5: The Art Of Penetration Testing</title>
		<link>http://radicaldevelopment.net/learning-backtrack-5-the-art-of-penetration-testing/</link>
		<comments>http://radicaldevelopment.net/learning-backtrack-5-the-art-of-penetration-testing/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 00:36:05 +0000</pubDate>
		<dc:creator>Steven Swafford</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Computer security]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[YouTube]]></category>

		<guid isPermaLink="false">http://radicaldevelopment.net/?p=11143</guid>
		<description><![CDATA[BackTrack is an absolutely amazing Linux based penetration testing environment that is entirely dedicated to hacking. I must say that you should use common sense when you begin digging into the security tools provided because the last thing you want to do is break the law and find yourself in trouble. Now to say that &#8230; <a href="http://radicaldevelopment.net/learning-backtrack-5-the-art-of-penetration-testing/" class="more-link" >read on <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>BackTrack is an absolutely amazing <a href="http://www.backtrack-linux.org/">Linux based penetration testing environment</a> that is entirely dedicated to hacking. I must say that you should use common sense when you begin digging into the security tools provided because the last thing you want to do is break the law and find yourself in trouble.</p>
<p>Now to say that there are many security tools available in BackTrack would be an understatement. In fact there is so many available that I would never start to list theme here. If you wish to see for yourself, simply execute the following within your terminal instance:</p>
<p>[code]<br />
dpkg –list<br />
[/code]</p>
<p>To be honest I have just recently begun experimenting with <a class="easyazon-link"  target="_blank" href="http://amazon.com/gp/search?keywords=backtrack&tag=stevenswaffosasp">BackTrack</a> and I have a great deal of learning ahead of me. For that reason I felt compelled to share the following video tutorials, books, and how-to guides that I could locate. Should you have any tips or resources please leave a comment.</p>
<h2>Video Tutorials</h2>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/MUemuXi6po4?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/E9Sc-1PQpUo?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/TNb95ziPXzc?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/yo3EzRc26l8?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/D67KI-yVJe0?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<h2>Guides</h2>
<ul>
<li><a href="http://rightertrack.com/media/pdf/backtrack_tutorial.pdf">BackTrack User Guide</a> from Braton Groupe sarl.</li>
</ul>
<h2>Books</h2>
<p><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/1849515581/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51SjDHOhCsL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="130"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/B006KSVF9Q/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51CLxnRNIAL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="130"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/159327288X/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51P3X7neRbL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="121"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/1849513945/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51DhDYPkEeL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="130"  /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://radicaldevelopment.net/learning-backtrack-5-the-art-of-penetration-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Colorlabs Wardrobe WordPress Theme Giveaway</title>
		<link>http://radicaldevelopment.net/colorlabs-wardrobe-wordpress-theme-giveaway/</link>
		<comments>http://radicaldevelopment.net/colorlabs-wardrobe-wordpress-theme-giveaway/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 01:23:42 +0000</pubDate>
		<dc:creator>Steven Swafford</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Wordpress Themes]]></category>

		<guid isPermaLink="false">http://radicaldevelopment.net/?p=10776</guid>
		<description><![CDATA[Update: If you were not selected as a winner stay tuned in February as I will have another giveaway. On January 1, 2012, I will giving away this theme. Wardrobe provides exceptional control for all aspects of your e-Commerce website. Whether you&#8217;re already running an online fashion store that needs updating, or planning to build &#8230; <a href="http://radicaldevelopment.net/colorlabs-wardrobe-wordpress-theme-giveaway/" class="more-link" >read on <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="information"><strong>Update:</strong> If you were not selected as a winner stay tuned in February as I will have another giveaway.</div>
<p>On January 1, 2012, I will giving away this theme. Wardrobe provides exceptional control for all aspects of your e-Commerce website. Whether you&#8217;re already running an online fashion store that needs updating, or planning to build a new WordPress-powered online store, the Wardrobe theme will be incredibly valuable to you. The pre-made template makes the job of putting up an online store easy without much complication.</p>
<p>Wardrobe has a simplified design with clean graphics and good use of color that shift the visitors&#8217; focus to the products. Uncluttered design that makes great use of white space making it easier for the user to understand how to navigate and use the site.</p>
<img src="http://s.wordpress.com/mshots/v1/http%3A%2F%2Fdemo.colorlabsproject.com%2Fwardrobe-woocommerce%2F?w=600&h=300" alt="Wardrobe Theme Project" class="snap"/>
<blockquote class="twitter-tweet" width="550"><p>Limited offer: Have 23 ColorLabs <a href="https://twitter.com/search/%2523WordPress">#WordPress</a> themes for only $49! <a href="http://t.co/Iz212th5" title="http://colorlabs.co/rtRuTA">colorlabs.co/rtRuTA</a></p>
<p>&mdash; ColorLabs &amp; Company (@ColorLabs) <a href="https://twitter.com/ColorLabs/status/155272529555095552" data-datetime="2012-01-06T13:00:30+00:00">January 6, 2012</a></p></blockquote>
<p><script src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<h2>Features</h2>
<ul>
<li>Automatic thumbnail resizer: Theme is powered with a script that automatically generates thumbnails from your post images. This will save you time and make your web site easy to re-design.</li>
<li>Theme administration panel:Manage important theme elements from a dedicated panel and be free from the hassle of editing codes. Here you can integrate your web site with AdSense, Analytics and Feedburner in a few clicks.</li>
<li>WordPress threaded comments:Optimize user discussion on your web site with WordPress threaded comments. Say &#8216;goodbye&#8217; to hard-to-follow comment posts and &#8216;hello&#8217; to neatly organized comment threads.</li>
<li>Cross-browser compatibility: Coded and designed according to web standards. This ensures complete accessibility and compatibility in modern internet browsers, such as Firefox, Safari, Chrome and many others.</li>
</ul>
<h2>Contest Rules</h2>
<p>Entering the contest is simple. All that is required is to follow @raddevelopment and leave a comment on this blog post that ranges between 100 &#8211; 200 words as to why you’re deserving of the free copy.</p>
<p>At the time of the drawing, January 2, 2012, Radical Development will select one random winners so be sure to follow the rules to win!</p>
<h2>Summary of Rules and Regulations</h2>
<p>To enter to win a single copy of the Colorlabs Wardrobe WordPress Theme, $69.00 retail value of prize, no purchase is necessary. Contest closes at midnight of January 2, 2012. If you’re selected as a winner, you must provide a valid email address.</p>
<h2>Complete Rules and Regulations</h2>
<ol>
<li>This contest is open to residents of the United States of America, except employees of Radical Development who is sponsoring the Promotion and their affiliates.</li>
<li>The chance of being selected will depend on the total number of eligible entries received. If the selected entrant cannot be contacted by the email address provided in the comment within 10 days of being selected, he/she will not be eligible to win the prize and an alternate entrant will be randomly selected.</li>
<li>The prize is not transferable or convertible into cash or otherwise and must be accepted as awarded.</li>
<li>The right is reserved to terminate or withdraw this contest at any time without prior notice.</li>
<li>This contest is subject to all and Federal, State and Municipal laws and regulations. Void where prohibited.</li>
<li>Radical Development and its affiliates accept no liability or responsibility in connection with injuries, loss or damage of any kind arising out of this contest or prize. Entries not meeting the guidelines or irregular in any way will be considered void.</li>
<li>There is no technical support from Radical Development nor Colorlabs and Company.</li>
<li>Good luck.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://radicaldevelopment.net/colorlabs-wardrobe-wordpress-theme-giveaway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free and Commercial Wireframe and Mockup Applications</title>
		<link>http://radicaldevelopment.net/free-and-commercial-wireframe-and-mockup-applications/</link>
		<comments>http://radicaldevelopment.net/free-and-commercial-wireframe-and-mockup-applications/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 03:09:39 +0000</pubDate>
		<dc:creator>Steven Swafford</dc:creator>
				<category><![CDATA[General Tech]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology/Internet]]></category>

		<guid isPermaLink="false">http://radicaldevelopment.net/?p=10559</guid>
		<description><![CDATA[If you work in a small team, you may find it useful to involve the whole team in this process. If you’re designing the app for a client, their inclusion may help to communicate and improve design decisions. A wireframe is a visual illustration of one Web page. It is meant to show all of &#8230; <a href="http://radicaldevelopment.net/free-and-commercial-wireframe-and-mockup-applications/" class="more-link" >read on <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you work in a small team, you may find it useful to involve the whole team in this process. If you’re designing the app for a client, their inclusion may help to communicate and improve design decisions.</p>
<div class="information">
<p>A wireframe is a visual illustration of one Web page. It is meant to show all of the items that are included on a particular page, without defining the look and feel (or graphic design). It’s simply meant to illustrate the features, content and links that need to appear on a page so that your design team can mock up a visual interface and your programmers understand the page features and how they are supposed to work.</p>
</div>
<h2><a href="http://pencil.evolus.vn/en-US/Home.aspx">Pencil Project for Firefox</a></h2>
<p>The popular and fairly powerful Pencil Project is a free and opensource Firefox addon tool for making diagrams and GUI prototyping with a multitude of features. With its built-in stencils for diagramming and prototyping, the option for multi-page documents with background pages, its on-screen text editing with rich-text support and with its new cababiltity of exporting to HTML, PNG or Openoffice formats, makes this addon essential for any developer or designer.</p>
<img src="http://s.wordpress.com/mshots/v1/http%3A%2F%2Fpencil.evolus.vn%2Fen-US%2FHome.aspx?w=600&h=300" alt="Pencil Project" class="snap"/>
<h2><a href="http://gomockingbird.com/mockingbird/">Mockingbird</a></h2>
<p>Mockingbird is an online tool that makes it very easy for you to create, link together, preview, and share mockups of your website or application. With its clean and clear interface, drag and drop functions, snap-to-grid, unlimited page linking and pretty much all the UI elements you could ever need, it all adss up to making Mockingbird our favorite wireframe app on this page.</p>
<img src="http://s.wordpress.com/mshots/v1/https%3A%2F%2Fgomockingbird.com%2Fmockingbird?w=600&h=300" alt="Mockingbird " class="snap"/>
<h2><a href="https://cacoo.com/">Cacoo</a></h2>
<p>Cacoo is a user friendly online drawing tool that allows you to create a variety of diagrams such as site maps, wire frames, UML and network charts. It allows for multiple users to edit the same diagram in a simultaneous collaboration with all the tools and features you would expect from an online wireframe app. Diagrams created with Cacoo can be shared and allows you to paste the code into Web applications such as Wikis and Blogs, and when the original diagram is edited the pasted graphic will be automatically updated, removing the need to upload the diagram each time it is updated.</p>
<img src="http://s.wordpress.com/mshots/v1/https%3A%2F%2Fcacoo.com%2F?w=600&h=300" alt="Cacoo " class="snap"/>
<h2><a href="http://www.balsamiq.com/products/mockups">Balsamiq Mockups</a></h2>
<p>Using Balsamiq Mockups feels like you are drawing, but it’s digital, so you can tweak and rearrange controls easily, and the end result is much cleaner. With 75 pre-built controls to choose from, you can design anything from a super-simple dialog box to a full-fledged application, from a simple website to a Rich Internet Application.</p>
<img src="http://s.wordpress.com/mshots/v1/http%3A%2F%2Fwww.balsamiq.com%2Fproducts%2Fmockups?w=600&h=300" alt="Balsamiq Mockups" class="snap"/>
<h2><a href="http://www.flairbuilder.com/">FlairBuilder</a></h2>
<p>FlairBuilder comes with over 60 different wireframe components. They help you quickly build wireframe designs out of commonly used website elements. It doesn’t matter whether you build simple, text based websites, or rich internet applications. FlairBuilder has all you need to get started and up to speed. FlairBuilder also has mobile applications elements, so you can design the entire experience for your customers. Currently iPhone is supported mostly, but more platforms are easy to build using existing components.</p>
<img src="http://s.wordpress.com/mshots/v1/http%3A%2F%2Fwww.flairbuilder.com%2F?w=600&h=300" alt="FlairBuilder " class="snap"/>
<h2><a href="http://www.protoshare.com/">ProtoShare</a></h2>
<p>ProtoShare is an online, collaborative, website wireframing/website prototyping tool that reduces interactive project rework while increasing profits. Combined with aggressive product pricing, ProtoShare has become the value leader and the fastest growing tool in the industry. Real-time feedback allows your team to share early and share often—a process that brings great ideas to life. ProtoShare&#8217;s easy online collaboration gives key stakeholders project visibility. When you get buy-in early, last-minute surprises, delays, and costly late stage rework are significantly reduced.</p>
<img src="http://s.wordpress.com/mshots/v1/http%3A%2F%2Fwww.protoshare.com%2F?w=600&h=300" alt="ProtoShare " class="snap"/>
]]></content:encoded>
			<wfw:commentRss>http://radicaldevelopment.net/free-and-commercial-wireframe-and-mockup-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Secure Development Series: Input Validation</title>
		<link>http://radicaldevelopment.net/secure-development-series-input-validation/</link>
		<comments>http://radicaldevelopment.net/secure-development-series-input-validation/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 17:42:27 +0000</pubDate>
		<dc:creator>Steven Swafford</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology/Internet]]></category>

		<guid isPermaLink="false">http://radicaldevelopment.net/?p=10388</guid>
		<description><![CDATA[Many websites today collect data from the user community which includes but not limited to an email address, address, or even a phone number. The single golden rule everyone must follow is never trust the data input. In order to mitigate the risk to ensure that the data received and processed by your application is acceptable you must first &#8230; <a href="http://radicaldevelopment.net/secure-development-series-input-validation/" class="more-link" >read on <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Many websites today collect data from the user community which includes but not limited to an email address, address, or even a phone number. The single golden rule everyone must follow is never trust the data input. In order to mitigate the risk to ensure that the data received and processed by your application is acceptable you must first define what data your application should accept, what its syntax should be and the minimum and maximum lengths. This information will allow you to define a set of “acceptable” values for every entry data point that is captured.</p>
<h2>Foundation of Security</h2>
<p><img class="alignnone size-full wp-image-10591" title="Foundation of Security" src="http://radicaldevelopment.net/wp-content/uploads/2011/11/FoundationSecurity.jpg" alt="Foundation of Security" width="600" height="239" /></p>
<ol>
<li>Authentication: Addresses the question: who are you? It is the process of uniquely identifying the clients of your applications and services.</li>
<li>Authorization: Addresses the question: what can you do? It is the process that governs the resources and operations that the authenticated client is permitted to access.</li>
<li>Auditing:Effective auditing and logging is the key to non-repudiation. Non-repudiation guarantees that a user cannot deny performing an operation or initiating a transaction.</li>
<li>Confidentiality: Referred to as privacy, is the process of making sure that data remains private and confidential, and that it cannot be viewed by unauthorized users or eavesdroppers who monitor the flow of traffic across a network.</li>
<li>Integrity: The guarantee that data is protected from accidental or deliberate (malicious) modification. Like privacy, integrity is a key concern.</li>
<li>Availability: From a security perspective, availability means that systems remain available for legitimate users.</li>
</ol>
<p>Two main approaches exist for input validation which are called whitelisting and blacklisting.</p>
<h2>Whitelist</h2>
<blockquote><p>A term used to describe a list or register of entities that, for one reason or another, are being provided a particular privilege, service, mobility, access or recognition. As a verb, to whitelist can mean to authorize access or grant membership. Conversely, blacklist is a term used to describe a list or compilation that identifies entities that are denied, unrecognised, or ostracised.</p></blockquote>
<h2>Blacklist</h2>
<blockquote><p>A list or register of entities who, for one reason or another, are being denied a particular privilege, service, mobility, access or recognition. As a verb, to blacklist can mean to deny someone work in a particular field, or to ostracize a person from a certain social circle. Conversely, a whitelist is a list or compilation identifying entities that are accepted, recognized, or privileged.</p></blockquote>
<p>Both blacklisting and whitelisting are valuable tools when it comes to data validation. Typically the best approach is to adopt whitelisting and define what type of data is acceptable where blacklisting is defining data types that are unacceptable. Think about it, if you&#8217;re collecting an email address does it not make sense to address the acceptable data entry rather than what is unacceptable?</p>
<p>A simple regular expression used for whitelisting an email address:</p>
<pre class="brush: xml">^[w-]+(.[w-]+)*@([a-z0-9-]+(.[a-z0-9-]+)*?.[a-z]{2,6}|(d{1,3}.){3}d{1,3})(:d{4})?$</pre>
<p>Matches a valid email address including ip&#8217;s which are rarely used. Allows for a-z0-9_.- in the username, but not ending in a full stop i.e user.@domain.com is invalid and a-z0-9- as the optional sub domain(s) with domain name and a 2-7 char (a-z) tld allowing for short tld&#8217;s like ca and new ones like museum.</p>
<p>The blacklisting approach is often avoided where possible because it only protects against threats the developer could think of at the time of its creation. This means the blacklist might miss new attack vectors and have higher maintenance costs when compared to a whitelist.</p>
<p>Input Validation best practices:</p>
<ul>
<li>Apply whitelists (known good values) where possible.</li>
<li>Check for content (i.e. 0-9), minimum and maximum lengths and correct syntax of all inputs.</li>
</ul>
<p>Obviously, there is a great deal of different kinds of data types that must be validated. But where does this data get into your program? The answer is from a surprising number of places; in fact, your application may be collecting data from a would be attacker in ways you weren&#8217;t prepared for or maybe have not even considered.</p>
<h2>Related Books</h2>
<p><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/0735617228/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51EnG5Gj6yL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="131"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/0735622140/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/41WUO73r4VL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="131"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/1418065471/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51xL9WiHGDL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="128"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/0071626751/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51WvNxaPLBL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="123"  /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://radicaldevelopment.net/secure-development-series-input-validation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Computer Security: The Rights Of A Computer User</title>
		<link>http://radicaldevelopment.net/computer-security-the-rights-of-a-computer-user/</link>
		<comments>http://radicaldevelopment.net/computer-security-the-rights-of-a-computer-user/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 00:57:33 +0000</pubDate>
		<dc:creator>Steven Swafford</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Computer security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology/Internet]]></category>

		<guid isPermaLink="false">http://radicaldevelopment.net/?p=9760</guid>
		<description><![CDATA[In terms of ownership of your very own computer system, where do you believe the line is to be drawn when it comes to software and services being installed? For example, if you install a product should that vendor have the rights to install and execute third party services either with or without your consent? &#8230; <a href="http://radicaldevelopment.net/computer-security-the-rights-of-a-computer-user/" class="more-link" >read on <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In terms of ownership of your very own computer system, where do you believe the line is to be drawn when it comes to software and services being installed? For example, if you install a product should that vendor have the rights to install and execute third party services either with or without your consent?</p>
<p>The reason I am asking this question is because Scott Hanselman recently wrote about a service he noticed running on his system named &#8220;netsession_win.exe&#8221; and he was not entirely positive where it came from.</p>
<p>I understand why a vendor would use third party products within their own software but the problem in my mind is the end consumer must be able to clearly understand what is occurring on their computer for a number of reasons. First, security has to always be taken into consideration and secondly maybe the consumer simply does not want services similiar to &#8220;netsession_win.exe&#8221; installed and executing at any level. Could this service in question be all bad? To answer that we must first understand what it is.</p>
<p>Upon closer investagion, it becomes apparent that &#8220;netsession_win.exe&#8221; is a product from Akamai which is known for content delivery networks. Here is how Akamai expains this service:</p>
<div class="information">
<p>The Akamai NetSession Interface is distributed networking software which greatly enhances the quality and speed of downloads and video streams you get from websites that support Akamai technology. The Akamai NetSession Interface handles the caching, reflecting and sending of files delivered to you through the Akamai network. The software is safe and secure, and does not contain any adware or spyware and never will. It can also be easily removed if you no longer wish to use it.</p>
</div>
<p>The Akamai NetSession Interface is distributed networking software which greatly enhances the quality and speed of downloads and video streams you get from websites that support Akamai technology. The Akamai NetSession Interface handles the caching, reflecting and sending of files delivered to you through the Akamai network. The software is safe and secure, and does not contain any adware or spyware and never will. It can also be easily removed if you no longer wish to use it.</p>
<p>At this point, we the consumers are placing a great deal of trust into the hands of Akamai and the larger question is should this be the case. In my opinion the answer is no! Think about this for a moment, the Akamai NetSession Interface works as follows:</p>
<ol>
<li>downloading from multiple sources of a file simultaneously</li>
<li>capable of connecting to other end user machines to help speed delivery</li>
<li>continually looking for (and connecting to) faster/nearer sources of a file</li>
<li> intelligently routing your download around network congestion and traffic spikes</li>
</ol>
<p>Does the above sound even remotely familiar? This technology sounds a lot like a BitTorrent. The most alarming aspect of the Akamai NetSession Interface is it is integrated with other applications that you may install and because of this you have no way to disable or uninstall the Akamai NetSession Interface without uninstalling the original software which introduced it in the first place.</p>
<p>In closing, I am not okay with this type of technology being installed and executing on my own computer without my express permission. What say you?</p>
<h2>Related Books</h2>
<p><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/0596006691/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/51yqnguQIaL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="123"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/0136004245/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/41oYTvJO0-L._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="115"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/0201440997/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/519978ZK54L._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="128"  /></a><a class="easyazon-link"  target="_blank" href="http://radicaldevelopment.net/product/us/0471453803/stevenswaffosasp/"><img src="http://ecx.images-amazon.com/images/I/5124APi8XgL._SL160_.jpg" class="alignnone" alt="Amazon Image" height="160" width="106"  /></a></p>
<h3>References</h3>
<ol>
<li><a href="http://www.hanselman.com/blog/CSIMyComputerWhatIsNetsessionwinexeFromAkamaiAndHowDidItGetOnMySystem.aspx">CSI: My Computer &#8211; What is netsession_win.exe from Akamai and how did it get on my system?</a></li>
<li><a href="http://www.akamai.com/html/misc/akamai_client/netsession_interface_faq.html">Akamai NetSession Interface FAQ</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://radicaldevelopment.net/computer-security-the-rights-of-a-computer-user/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud Computing</title>
		<link>http://radicaldevelopment.net/cloud-computing/</link>
		<comments>http://radicaldevelopment.net/cloud-computing/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 05:15:41 +0000</pubDate>
		<dc:creator>Steven Swafford</dc:creator>
				<category><![CDATA[General Tech]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Computer security]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology/Internet]]></category>

		<guid isPermaLink="false">http://radicaldevelopment.net/?p=9436</guid>
		<description><![CDATA[As cloud computing becomes more and more popular than traditional organization owned data centers the complexity of trust and security is paramount to any solution.  To demonstrate the demand of cloud computing there was a study conducted by Forrester Research that indicates this industry will grow to a $12.3 billion by 2014 (Rai, &#38; Chukwuma, &#8230; <a href="http://radicaldevelopment.net/cloud-computing/" class="more-link" >read on <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As cloud computing becomes more and more popular than traditional organization owned data centers the complexity of trust and security is paramount to any solution.  To demonstrate the demand of cloud computing there was a study conducted by Forrester Research that indicates this industry will grow to a $12.3 billion by 2014 (Rai, &amp; Chukwuma, 2009).</p>
<h2>Security Threats</h2>
<p>The single toughest challenge is trust.  Most organizations outsource cloud storage needs to vendors like Amazon and by doing so, it is imperative to understand the roles and responsibilities of this type of relationship.  In fact, organizations begun building upon this trust many turned to third party identity and access management (IAM) services to further strengthen security (Rai, &amp; Chukwuma, 2009).  IAM is essential to control who has access and what system interfaces are established.  With traditional managed servers, the cloud is no different when it comes to threats such as viruses, hackers, and cyber-attacks (Bisong, &amp; Rahman, 2011).  The risk can vary and present new concerns that an organization must consider.  Outside the obvious data leaks, insider threats, and application interfaces comes the unknown of regional distribution.  History has demonstrated down time can cascade to affect a number of organizations, just look at the recent Amazon outage (Bisong, &amp; Rahman, 2011).</p>
<h2>Responsibility</h2>
<p>The topmost level of security starts with the Chief Information Security Officer (CISO) however it does not end there.  This role serves to establish continuity, disaster recovery, policies, and strategies (Dawson, Burrell, Rahim, &amp; Brewster, 2010).  All employees at every level are to be held accountable but this requires that management and leaders must be responsible.  In order to achieve security the responsibility stakeholders must start with defining policy and procedures that drive daily activities and responses in term of protecting data and infrastructure.  The process does not stop once policies and defined, there must be continuing reviews and defined education.</p>
<h2>Cloud Provider Questions</h2>
<p>As cloud computing is being considered there are a number of topics to consider.  To understand the pros and cons as well as the vulnerabilities a number of questions are to be asked, for example:</p>
<ul>
<li>Compliance and Auditing</li>
<li>Portability</li>
<li>Encryption and Key Management</li>
</ul>
<p>At the end of the day, the organization purchasing a cloud computing option is and always will be responsible for data (Everett, 2009).</p>
<h2>Security Provisions</h2>
<p>The business requirements of any organization will drive the components that make up secure computing (see Figure 1).  Taking the service needs in account will assist in performing a risk assessment and how the risk are to be mitigated and controlled.  This conclusion then is incorporated into Service Level Agreements (SLA) whereby expectations are clearly defined (Blandford, 2011).  At this stage, the decision is made what operations are candidates for cloud computing and what are not.  Remember there will always be instances where propriety information must be protect and there may even be conditions where you’re performing work for the Department of Defense (DOD) for example where no level of assurance can be achieved.</p>
<h3>References</h3>
<ol>
<li>Rai, S., &amp; Chukwuma, P. (2009). Security in a Cloud. Internal Auditor, 66(4), 21-23. Retrieved from <a href="http://www.theiia.org">http://www.theiia.org</a></li>
<li>Bisong, A., &amp; Rahman, S. M. (2011). An overview of the security concerns in enterprise cloud computing. International Journal of Network Security &amp; Its Applications, 3(1), 30-45. <a href="http://www.airccse.org/journal/nsa/0111jnsa03.pdf">doi:10.5121/ijnsa.2011.3103</a></li>
<li>Dawson, M., Burrell, D., Rahim, E., &amp; Brewster, S. (2010). Examining the role of the Chief Information Security Officer (CISO) &amp; security plan. Journal of Information Systems Technology &amp; Planning, 3(6), 1-5. Retrieved from <a href="http://www.intellectbase.org">http://www.intellectbase.org</a></li>
<li>Everett, C. (2009). Cloud computing &#8211; A question of trust, Computer Fraud &amp; Security, 2009(6), 5-7. <a href="http://www.sciencedirect.com/science/article/pii/S1361372309700715">doi:10.1016/S1361-3723(09)70071-5</a></li>
<li>Blandford, R. (2011). Information security in the cloud. Network Security, 2011(4), 15-17. <a href="http://www.sciencedirect.com/science/article/pii/S135348581170040X">doi:10.1016/S1353-4858(11)70040-X</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://radicaldevelopment.net/cloud-computing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vulnerability Scanners</title>
		<link>http://radicaldevelopment.net/vulnerability-scanners/</link>
		<comments>http://radicaldevelopment.net/vulnerability-scanners/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 00:39:52 +0000</pubDate>
		<dc:creator>Steven Swafford</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology/Internet]]></category>

		<guid isPermaLink="false">http://radicaldevelopment.net/?p=9411</guid>
		<description><![CDATA[Vulnerability scanners can be used to conduct network reconnaissance, which is typically carried out by a remote attacker attempting to gain information or access to a network on which it is not authorized or allowed. Network reconnaissance is increasingly used to exploit network standards and automated communication methods. The aim is to determine what types &#8230; <a href="http://radicaldevelopment.net/vulnerability-scanners/" class="more-link" >read on <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vulnerability scanners can be used to conduct network reconnaissance, which is typically carried out by a remote attacker attempting to gain information or access to a network on which it is not authorized or allowed. Network reconnaissance is increasingly used to exploit network standards and automated communication methods. The aim is to determine what types of computers are present, along with additional information about those computers—such as the type and version of the operating system. This information can be analyzed for known or recently discovered vulnerabilities that can be exploited to gain access to secure networks and computers. Network reconnaissance is possibly one of the most common applications of passive data analysis. Early generation techniques, such as TCP/IP passive fingerprinting, have accuracy issues that tended to make it ineffective. Today, numerous tools exist to make reconnaissance easier and more effective.</p>
<h2>Tooling</h2>
<p><img class="alignleft size-full wp-image-9413" title="Nessus Logo" src="http://radicaldevelopment.net/wp-content/uploads/2011/08/NessusLogo.png" alt="Nessus Logo" width="160" height="160" />The <a href="http://www.tenable.com/products/nessus">Nessus</a> vulnerability scanner is the world-leader in active scanners with more than five million downloads to date. Nessus features high-speed discovery, configuration auditing, asset profiling, sensitive data discovery and vulnerability analysis of your security posture. Nessus scanners can be distributed throughout an entire enterprise, inside DMZs and across physically separate networks. Commercial organizations that use the Tenable Nessus network vulnerability scanner must purchase a ProfessionalFeed subscription to scan their network, obtain support, updates to their database of vulnerability checks and compliance auditing. Each ProfessionalFeed subscription costs $1,200 per year, per Nessus scanner and may be purchased from Tenable&#8217;s ProfessionalFeed Partners or directly from Tenable&#8217;s online store.</p>
<p><img class="alignleft size-full wp-image-9415" title="Nmap logo" src="http://radicaldevelopment.net/wp-content/uploads/2011/08/nmaplogo.jpg" alt="Nmap logo" width="160" height="160" /><a href="http://nmap.org/">Nmap</a> (&#8220;Network Mapper&#8221;) is a free and open source (license) utility for network exploration or security auditing. Many systems and network administrators also find it useful for tasks such as network inventory, managing service upgrade schedules, and monitoring host or service uptime. Nmap uses raw IP packets in novel ways to determine what hosts are available on the network, what services (application name and version) those hosts are offering, what operating systems (and OS versions) they are running, what type of packet filters/firewalls are in use, and dozens of other characteristics. It was designed to rapidly scan large networks, but works fine against single hosts. Nmap runs on all major computer operating systems, and official binary packages are avalable for Linux, Windows, and Mac OS X. In addition to the classic command-line Nmap executable, the Nmap suite includes an advanced GUI and results viewer (Zenmap), a flexible data transfer, redirection, and debugging tool (Ncat), a utility for comparing scan results (Ndiff), and a packet generation and response analysis tool (Nping).</p>
<p><img class="alignleft size-full wp-image-9417" title="Wireshark Logo" src="http://radicaldevelopment.net/wp-content/uploads/2011/08/wiresharklogo.jpg" alt="Wireshark Logo" width="160" height="160" /><a href="http://www.wireshark.org/">Wireshark</a> is a network packet analyzer. A network packet analyzer will try to capture network packets and tries to display that packet data as detailed as possible. You could think of a network packet analyzer as a measuring device used to examine what&#8217;s going on inside a network cable, just like a voltmeter is used by an electrician to examine what&#8217;s going on inside an electric cable (but at a higher level, of course). In the past, such tools were either very expensive, proprietary, or both. However, with the advent of Wireshark, all that has changed. Wireshark is perhaps one of the best open source packet analyzers available today.</p>
<p><img class="alignleft size-full wp-image-9419" title="Fortify logo" src="http://radicaldevelopment.net/wp-content/uploads/2011/08/fortifylogo.jpg" alt="Fortify logo" width="205" height="93" />Fortify 360 is a suite of tightly integrated solutions for identifying, prioritizing, and fixing security vulnerabilities in software. It automates key processes of developing and deploying secure applications. It helps you resolve software vulnerabilities using the only solution that fully integrates vulnerability analysis across the entire software life cycle—from development to QA testing and even to already deployed applications. Fortify 360 and related Fortify SSA solutions provide you with everything you need to ensure your software is inherently safe and empowers your organization to cost-effectively implement Software Security Assurance (SSA) methods.</p>
]]></content:encoded>
			<wfw:commentRss>http://radicaldevelopment.net/vulnerability-scanners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

