<?xml version="1.0" encoding="utf-8"?>
			
			<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

			<channel>
			<title>Vince Bonfanti&apos;s Weblog - General Software &amp;amp; Computing</title>
			<link>http://blog.newatlanta.com/index.cfm</link>
			<description></description>
			<language>en-us</language>
			<pubDate>Thu, 09 Sep 2010 00:06:25 -0400</pubDate>
			<lastBuildDate>Tue, 12 Dec 2006 18:56:00 -0400</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>vince@newatlanta.com</managingEditor>
			<webMaster>vince@newatlanta.com</webMaster>
			<itunes:subtitle></itunes:subtitle>
			<itunes:summary></itunes:summary>
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords></itunes:keywords>
			<itunes:author></itunes:author>
			<itunes:owner>
				<itunes:email>vince@newatlanta.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			<itunes:image href="" />
			<image>
				<url></url>
				<title>Vince Bonfanti&apos;s Weblog</title>
				<link>http://blog.newatlanta.com/index.cfm</link>
			</image>
			<itunes:explicit>no</itunes:explicit>
			
			
			
			
			
			<item>
				<title>Comparing CFML Server Performance (a response to Mark Drew)</title>
				<link>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=97A790C6-13C3-71E3-27BA15D212DA96A1</link>
				<description>
				
				A few weeks ago &lt;a href=&apos;http://www.markdrew.co.uk/blog/index.cfm/2006/11/23/Structures-vs-Components-an-unfair-challenge&apos; target=&apos;_blank&apos;&gt;Mark Drew wrote a series of blog entries&lt;/a&gt; on the topic of performance. In fairness to Mark, he does state more than once that his primary goal was to compare the relative performance of creating structs versus CFCs versus Java objects. However, it&apos;s the comparison of various CFML server engines in two of his blog entries that caught many people&apos;s eyes, including mine, and that&apos;s what I&apos;d like to comment on here.

As &lt;a href=&apos;http://www.markdrew.co.uk/blog/index.cfm/2006/11/27/Comparing-Component-speed-on-different-CFML-engines&apos; target=&apos;_blank&apos;&gt;I commented on one of Mark&apos;s blog entries&lt;/a&gt;, the type of &quot;loop 10,000 times&quot; style of micro-benchmarks he used in his testing are seriously flawed. It&apos;s very difficult to draw any broad conclusions or make meaningful generalizations from the results of such tests. Among the problems with these types of tests are:

&lt;ul&gt;
&lt;li&gt;Micro-benchmarks can make differences that are small and insignificant seem large and important, to an arbitrary degree. Let&apos;s assume the difference between two operations is one-tenth of a millisecond; with 10 iterations the difference is one millisecond--insignificant; with 100 iterations the difference is 10 milliseconds--still no big deal; but with 10,000 iterations the difference is 1,000 milliseconds--whoa, that&apos;s a big difference! Want to make the difference seem even larger? Just run more iterations. The question is: how many of these operations do you realistically expect to perform during execution of a single request?

&lt;p&gt;&lt;li&gt;Micro-benchmarks don&apos;t reflect real-world applications. They artificially isolate individual operations and don&apos;t give you any context about the relative importance of these operations versus what else might be happening when you execute a request. For example, accessing an external resource--such as a database, or web service, or LDAP server, or mail server, etc.--is going to hundreds or thousands of times slower (or more!) than executing any tag or function that doesn&apos;t access an external resource.

&lt;p&gt;&lt;li&gt;Micro-benchmarks don&apos;t reflect the real-world execution environment. Most developers use single-processor computers (though this has been changing recently), and the micro-benchmarks are usually executed within a single request. In the real-world, most web servers are multi-processor machines, and the most important question is: how does it behave under load? That is, what does the performance look like when executing multiple requests simultaneously?
&lt;/ul&gt;

The bottom line is that micro-benchmarks can cause you to focus on trivial or insignificant items, and can produce misleading results that don&apos;t translate into the real-world. Micro-benchmarks are like parking your car in the driveway and revving the engine while it&apos;s in neutral to see how fast it&apos;ll go. Sure, you can measure the maximum RPMs, which will give some indication of how fast the car might go, but it doesn&apos;t tell you what&apos;s really going to happen when you put it into gear and head out onto the highway.

In order to illustrate these points, we created some tests that we think are more meaningful (but which still have some serious limitations, as I&apos;ll discuss below), to see what results we&apos;d get. Basically what we did was modify one of Mark&apos;s original tests to remove the nested loops and instead execute the CreateObject function a fixed number of times within a loop:

&lt;blockquote&gt;&lt;pre&gt;&amp;lt;cfset x=&quot;100&quot;&gt;     
&amp;lt;cfloop from=&quot;1&quot; to=&quot;#x#&quot; index=&quot;i&quot;&gt;
    &amp;lt;cfset oItem = CreateObject(&apos;component&apos;, &apos;Person&apos;)&gt;
    &amp;lt;cfset oItem.setname(&quot;Bob&quot; &amp;amp; i )&gt;
    &amp;lt;cfset oItem.setage(20)&gt;
&amp;lt;/cfloop&gt;
done!
&lt;/pre&gt;&lt;/blockquote&gt;

For completeness, here&apos;s what Person.cfc looks like:

&lt;blockquote&gt;&lt;pre&gt;&amp;lt;cfcomponent&gt;
    &amp;lt;cfset this.name = &quot;&quot;&gt;
    &amp;lt;cfset this.age = 0&gt;
	
    &amp;lt;cffunction name=&quot;setName&quot;&gt;
        &amp;lt;cfargument name=&quot;name&quot;&gt;
        &amp;lt;cfset this.name = arguments.name&gt;
    &amp;lt;/cffunction&gt;

    &amp;lt;cffunction name=&quot;setAge&quot;&gt;
        &amp;lt;cfargument name=&quot;age&quot;&gt;
        &amp;lt;cfset this.age = arguments.age&gt;
    &amp;lt;/cffunction&gt;
&amp;lt;/cfcomponent&gt;
&lt;/pre&gt;&lt;/blockquote&gt;

Then we used a commercial load testing tool (Microsoft Application Center Test) configured to run three simultaneous clients with no wait time between requests so there were always three requests executing simultaneously. We ran successive test sessions at increments of 100--first 100 CreateObject calls, then 200, then 300, etc., up to 1000--and measured the average response times for one-minute test durations.

The test server has dual-CPU 3.0GHz Intel Xeon processors with hyperthreading, 1.0GB of RAM, and is running Windows Server 2003 and IIS 6.0 (that is, it&apos;s a pretty typical modern web server). We ran the tests with CFMX 7.0.2, BlueDragon Server JX 6.2.1 and 7.0 beta2, BlueDragon.NET 6.2.1 and 7.0 beta2, and just for fun, last night&apos;s developer build of BD JX and BD.NET 7.0 (we&apos;ve done some performance enhancements in the the month or so since BD 7.0 beta2 was built and I was curious to see how it did).

Here are the results, which are quite different from Mark&apos;s micro-benchmarks (click to get a larger image):

&lt;center&gt;&lt;a href=&apos;http://blog.newatlanta.com/images/createObject.jpg&apos; target=&apos;_blank&apos;&gt;&lt;img src=&apos;http://blog.newatlanta.com/images/createObject.jpg&apos; width=&apos;384&apos; height=&apos;280&apos;&gt;&lt;/a&gt;&lt;/center&gt;

What can we conclude from these results? For one thing, if you relied on Mark&apos;s micro-benchmarks to conclude that BlueDragon is slower than CFMX for CreateObject calls, you&apos;d be wrong. However, I&apos;d caution against generalizing too broadly from these results, because these tests contain some (but not all) of the same flaws as the micro-benchmarks.

For example, while you may have an application that creates 100, or 500, or even 1000 CFCs via CreateObject, are they really going to be all of the same type? Probably not. And the Person.cfc from Mark&apos;s tests is pretty simple--what happens if you&apos;re creating CFCs that contains dozens of functions that contain lengthy or complex logic of their own instead of just two simple setters? How will that affect performance?

Further, I only had three simultaneous clients running (though with no wait times, this is a higher load that you might think at first). What happens if this is higher? or lower? or if we add wait times?

My main point is that the only meaningful performance testing is testing of your application in your production environment under traffic conditions that you reasonably expect to see in the real world. Be skeptical of any artificial performance benchmarks--especially micro-benchmarks--and always look at them with a critical eye with the questions: &quot;How generalizable are these results?&quot; and &quot;How do these results relate to the real world?&quot;.

There&apos;s only one way for you to know which CFML server is the fastest for you and your application: test them yourself.

One final point. We do all of our performance testing of BlueDragon on multi-CPU servers using external load testers to generate various levels of traffic. Any claims we make regarding BlueDragon performance are based on these types of tests, and testing of real-world customer applications, and not on micro-benchmarks nor any testing that relies on the server measuring itself (as is typically done with micro-benchmarks).
				
				</description>
						
				
				<category>CFML</category>				
				
				<category>General Software &amp;amp; Computing</category>				
				
				<pubDate>Tue, 12 Dec 2006 18:56:00 -0400</pubDate>
				<guid>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=97A790C6-13C3-71E3-27BA15D212DA96A1</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Joel on &quot;Language Wars&quot;</title>
				<link>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=11690CC5-9B4C-1449-6D7AD77414225B7E</link>
				<description>
				
				Joel Spolsky just posted an interesting article on &lt;a href=&apos;http://www.joelonsoftware.com/items/2006/09/01.html&apos; target=&apos;_blank&apos;&gt;Language Wars&lt;/a&gt;. I tend to agree with his conclusion:

&lt;blockquote&gt;&quot;...the bottom line is that there are three and a half platforms (C#, Java, PHP, and a half Python) that are all equally likely to make you successful, an infinity of platforms where you&apos;re pretty much guaranteed to fail spectacularly when it&apos;s too late to change anything (Lisp, ISAPI DLLs written in C, Perl), and a handful of platforms where The Jury Is Not In, So Why Take The Risk When Your Job Is On The Line? (Ruby on Rails).&quot;
&lt;/blockquote&gt;

Of course, I&apos;d want to add CFML to the list of programming languages that &quot;are all equally likely to make you successful.&quot; But, he&apos;s talking about &quot;platforms&quot;, not &quot;programming languages&quot; (though he does seem to confuse the two somewhat), and the two leading CFML programming language implementations are on two of the three-and-a-half platforms he mentions--Java (Adobe CFMX and BlueDragon) and .NET (BlueDragon). Choosing CFML allows you to also choose either Java or .NET as your platform.

This comment about why you shouldn&apos;t use Ruby also caught my eye: &quot;...it&apos;s known to be slow, so if you become The Next MySpace, you&apos;ll be buying 5 times as many boxes as the .NET guy down the hall.&quot; Ironically, that&apos;s almost exactly what really happened to MySpace, who started with ColdFusion and then quickly switched to .NET and BlueDragon to improve performance and reduce the number of servers they&apos;d have to buy.
				
				</description>
						
				
				<category>CFML</category>				
				
				<category>General Software &amp;amp; Computing</category>				
				
				<pubDate>Fri, 01 Sep 2006 15:17:00 -0400</pubDate>
				<guid>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=11690CC5-9B4C-1449-6D7AD77414225B7E</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Java/J2EE Succumbing to .NET</title>
				<link>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=DD4B6697-9CB9-1291-A6311033383E0A70</link>
				<description>
				
				There&apos;s a very interesting article on TheServerSide.com (&quot;Your Enterprise Java Community&quot;) about the reasons why &lt;a href=&apos;http://www.theserverside.com/news/thread.tss?thread_id=40611&apos; target=&apos;_blank&apos;&gt;Java is succumbing to .NET within one organization&lt;/a&gt; (&quot;a federal government contractor outside Washington, DC&quot;). For someone who has &quot;been certified in and built a career on Java&quot;, the author lays out a pretty good case for .NET versus Java/J2EE. Of course, since this is a Java/J2EE-based community web site, there are plenty of counter-arguments presented in the comments, as well as people who are supportive of the author&apos;s position. A good read.
				
				</description>
						
				
				<category>BlueDragon.NET</category>				
				
				<category>General Software &amp;amp; Computing</category>				
				
				<pubDate>Wed, 24 May 2006 11:37:00 -0400</pubDate>
				<guid>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=DD4B6697-9CB9-1291-A6311033383E0A70</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Windows passes UNIX as top selling server OS</title>
				<link>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=83183D5C-BCAE-9AEA-EFCD8BC468900A2E</link>
				<description>
				
				As &lt;a href=&apos;http://news.com.com/Windows+bumps+Unix+as+top+server+OS/2100-1016_3-6041804.html&apos; target=&apos;_blank&apos;&gt;reported by CNET&lt;/a&gt;, in 2005 sales of Windows-based servers surpassed UNIX to take over as the sales leader for the first time. Some highlights from the article:

&lt;blockquote&gt;Computer makers sold $17.7 billion worth of Windows servers worldwide in 2005 compared with $17.5 billion in Unix servers.
&lt;/blockquote&gt;

&lt;blockquote&gt;Linux took third place, with $5.3 billion worth of servers sold in 2005.
&lt;/blockquote&gt;

Note that these revenue numbers are for hardware sales of servers running a particular operating systems, and not software sales for the operating systems themselves.
				
				</description>
						
				
				<category>General Software &amp;amp; Computing</category>				
				
				<pubDate>Mon, 27 Feb 2006 11:17:00 -0400</pubDate>
				<guid>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=83183D5C-BCAE-9AEA-EFCD8BC468900A2E</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Java? It&apos;s So Nineties</title>
				<link>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=14A242FF-A3C0-E62D-EE5DC5DB99CFF62F</link>
				<description>
				
				Here&apos;s an interesting &lt;a href=&apos;http://www.businessweek.com/technology/content/dec2005/tc20051213_042973.htm&apos; target=&apos;_blank&apos;&gt;BusinessWeek article&lt;/a&gt; about the relative decline of Java, and rise of Microsoft .NET and LAMP (Linux, Apache, MySQL, PHP). While the headline is a little sensational (which is why I borrowed it), because it&apos;s unlikely that Java is going away any time soon, it does highlight the fact that there&apos;s not one technology that&apos;s going to dominate -- we&apos;re living in a world where there are three major software technology &quot;stacks&quot;, particularly for web development. Here are some statistics from the article:
&lt;ul&gt;&lt;li&gt;In North America, the percentage of developers who use Java as one of their principal programming languages declined to 47.9 in Evans&apos; fall survey, vs. 51.4% in the fall of 2002. The same surveys show that while Java use is climbing in Asia, it&apos;s on the decline in Europe.

&lt;li&gt;Microsoft .NET usage increased to 54.1% from 40.3% in the same period in North America, and exceeded Java use in Europe and Asia.

&lt;li&gt;The use of PHP in North America grew to 36.1% this fall, from 26% in the fall of 2003. It grew almost as quickly in Europe and Asia.
&lt;/ul&gt;

I found this quote from John Loiacono, executive vice-president of Sun&apos;s software division, particularly interesting, since it&apos;s effectively an admission that .NET has caught up with Java:

&lt;blockquote&gt;Sun acknowledges that .NET is picking up steam in corporations. &quot;There will be more than one language out there,&quot; says John Loiacono. &quot;Plus, it&apos;s Microsoft. They&apos;ll be a player.&quot; Still, he believes Java and .NET are essentially in a dead heat and denies that .NET has pulled out into the lead.&lt;/blockquote&gt;

In a world where there are three major software technology stacks, why would you take the risk of limiting yourself to using only one of those three stacks? If you only use CFMX for your CFML-based web application development, you&apos;re stuck with only using Java. If the above statistics are true, then at some point in your career (probably soon) you&apos;re going to run into a client, or customer, or employer, who&apos;s committed to one of the other three stacks--or who&apos;s using more that one stack, which is quite common in large corporations.

By using BlueDragon for your CFML-based web application development, you have the choice of either Java or Microsoft .NET (sorry, we can&apos;t help you with PHP, but we do offer a free version of BlueDragon that runs on the Linux, Apache, MySQL stack). In fact, BlueDragon is the *only* technology that allows you to build a single web application--in CFML--and then deploy that application natively on either Java or Microsoft .NET (or both!).

It&apos;s almost 2006 -- don&apos;t stay stuck in the 90&apos;s.
				
				</description>
						
				
				<category>BlueDragon.NET</category>				
				
				<category>General Software &amp;amp; Computing</category>				
				
				<pubDate>Wed, 14 Dec 2005 08:55:00 -0400</pubDate>
				<guid>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=14A242FF-A3C0-E62D-EE5DC5DB99CFF62F</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Comparing Java and .NET Security: Lessons Learned and Missed</title>
				<link>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=BE0353F3-F30B-144C-7A2E999B12F00600</link>
				<description>
				
				The Department of Computer Science at the University of Virginia has &lt;a href=&apos;http://www.cs.virginia.edu/~nrp3d/papers/computers_and_security-net-java.pdf&apos; target=&apos;_blank&apos;&gt;published a study comparing Java and .NET security&lt;/a&gt;.

From their conclusion: &quot;Where Java evolved from an initial platform with limited security capabilities, .NET incorporated more security capability into its original design. With age and new features, much of the legacy code of Java still remains for backwards compatibility including the possibility of a null SecurityManager, and the absolute trust of classes on the bootclasspath. Hence, in several areas .NET has security advantages over Java because of its simpler and cleaner design.&quot;

There&apos;s a &lt;a href=&apos;http://developers.slashdot.org/developers/05/08/27/0633233.shtml?tid=108&amp;tid=172&amp;tid=8&apos; target=&apos;_blank&apos;&gt;Slashdot discussion&lt;/a&gt; on this study, and also one on &lt;a href=&apos;http://blogs.msdn.com/devmktg/archive/2005/08/25/456561.aspx&apos; target=&apos;_blank&apos;&gt;MSDN blogs&lt;/a&gt;.
				
				</description>
						
				
				<category>General Software &amp;amp; Computing</category>				
				
				<pubDate>Sat, 27 Aug 2005 10:20:00 -0400</pubDate>
				<guid>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=BE0353F3-F30B-144C-7A2E999B12F00600</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>CFUNITED-05 and Microsoft: why Joel just doesn&apos;t get it</title>
				<link>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=125CB6FA-B20E-9689-79DAFF5272E0E1A3</link>
				<description>
				
				There was a bit of a tempest in a teapot this past week over &lt;a href=&apos;http://www.fusionauthority.com/Community/Article.cfm/ArticleID:4483&apos; target=&apos;_blank&apos;&gt;comments by Joel Spolsky&lt;/a&gt; regarding Microsoft&apos;s sponsorship of CFUNITED-05. There are two things that Joel doesn&apos;t understand:

1. Almost everyone attending CFUNITED is already a Microsoft customer. That is, the vast majority of ColdFusion deployments are on Windows, IIS, and SQL Server. Microsoft gave an outstanding keynote presentation--that Joel apparently missed--on the new features of IIS 7.0 in Longhorn (Windows Vista) and the relevance of those features to ColdFusion developers. One of the main demos during their keynote was the integration of IIS 7.0 security with CFML pages running on CFMX. There was little or no mention of ASP.NET during the keynote (and--for the conspiracy theorists out there--no mention of BlueDragon).

2. With the release of BlueDragon.NET, CFML and ASP.NET are complementary, not competing technologies. Just as CFMX (and BlueDragon) promote the integration of CFML with Java/J2EE, so does BlueDragon.NET promote the integration of CFML with ASP.NET. I doubt that anyone would have complained if IBM or BEA had shown up to promote the deployment of CFML applications on top of WebSphere or WebLogic (indeed, we hope to sign one or both as sponsors for next year).

I&apos;m glad Joel attended CFUNITED--his presence certainly contributed to making it a great event. I hope he he found the conference worthwhile and that he&apos;ll come back next year. But I wish he wouldn&apos;t be so flip in denigrating the conference organizers and one of the keys sponsors--Microsoft--without whose financial support the conference might not have been possible.
				
				</description>
						
				
				<category>General Software &amp;amp; Computing</category>				
				
				<pubDate>Sun, 07 Aug 2005 16:03:00 -0400</pubDate>
				<guid>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=125CB6FA-B20E-9689-79DAFF5272E0E1A3</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>ASP.NET and IIS Serve Most Fortune 1000 Web Sites</title>
				<link>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=7BD91030-143E-CAFB-70188C3E6ADD3677</link>
				<description>
				
				From the &lt;a href=&quot;http://www.port80software.com/surveys/&quot; target=&quot;_blank&quot;&gt;May 2005 survey&lt;/a&gt; of the public facing web sites of the Fortune 1000, here&apos;s which server-side scripting technology they&apos;re using:

&lt;pre&gt;  ASP.NET/ASP:  43.6%
  Java/JSP:     12.2%
  PHP:           5.2%
  ColdFusion:    2.7%
  Perl:          2.3%
  Python:        0.1%
&lt;/pre&gt;

If you look just at web servers, IIS is even higher than ASP.NET/ASP, which means some IIS sites (about 10%) are running some other scripting technology (such as Java/JSP or ColdFusion):

&lt;pre&gt;  Microsoft IIS:     53.7%
  Apache:            22.7%
  Other:             12.8%
  Netscape/iPlanet:  10.8%
&lt;/pre&gt;

Within the IIS category, 12.8% are running IIS 6.0 on Windows 2003 Server.
				
				</description>
						
				
				<category>General Software &amp;amp; Computing</category>				
				
				<pubDate>Thu, 02 Jun 2005 08:50:00 -0400</pubDate>
				<guid>http://blog.newatlanta.com/index.cfm?mode=entry&amp;entry=7BD91030-143E-CAFB-70188C3E6ADD3677</guid>
				
			</item>
			
		 	
			</channel></rss>