<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0"><channel><title>Corey Goldberg</title><link>http://coreygoldberg.blogspot.com/</link><description>Blog - Technology, Software, Performance</description><language>en</language><managingEditor>corey@goldb.org (Corey Goldberg)</managingEditor><lastBuildDate>Wed, 08 Jul 2009 06:24:43 PDT</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">89</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><geo:lat>42.349622</geo:lat><geo:long>-71.073722</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/goldblog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>OpenSTA - SCL Code Boilerplate for HTTP Load Tests</title><link>http://coreygoldberg.blogspot.com/2009/07/opensta-scl-code-boilerplate-for-http.html</link><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Tue, 07 Jul 2009 09:27:48 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-2896910862111264839</guid><description>&lt;p&gt;
&lt;i&gt;(small code dump...)&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.opensta.org/"&gt;OpenSTA&lt;/a&gt; (Open Systems Testing Architecture) is a popular open source web performance test tool.  It uses a scripting language named SCL (Script Control Language), which seems to be heavily influenced by Fortran.  It's a little bit dated and clumsy to program with, but suffices for writing scripts modeling complex web transactions.
&lt;/p&gt;

&lt;p&gt;
Here is the basic structure I start with when modeling tests in OpenSTA:
&lt;/p&gt;


&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;
!Browser:IE5


Environment
    Description "TEST SCRIPT"
    Mode HTTP
    WAIT UNIT MILLISECONDS


Definitions
    Include         "RESPONSE_CODES.INC"
    Include         "GLOBAL_VARIABLES.INC"
    CONSTANT        DEFAULT_HEADERS = "Host: www.goldb.org^J" &amp;
                        "User-Agent: OpenSTAzilla/4.0"
    Integer         USE_PAGE_TIMERS
    Timer           T_Response
    CHARACTER*32768 logStuff, Local
    CHARACTER*512   USER_AGENT
    CHARACTER*256   MESSAGE


Code
    Entry[USER_AGENT,USE_PAGE_TIMERS]

    Start Timer T_Response

    PRIMARY GET URI "http://www.goldb.org/index.html HTTP/1.0" ON 1 &amp;
        HEADER DEFAULT_HEADERS &amp;
        ,WITH {"Accept: */*", "Accept-Language: en-us"}

    SYNCHRONIZE REQUESTS
    
    DISCONNECT FROM 1
    
    End Timer T_Response
  
Exit


ERR_LABEL:
    If (MESSAGE &lt;&gt; "") Then
        Report MESSAGE
    Endif

Exit
&lt;/pre&gt;

&lt;p&gt;
Nothing much to see here.  If you use the OpenSTA recorder and record a simple HTTP GET request, it would generate a similar script for you.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-2896910862111264839?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-07T12:27:48.676-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Web Performance Tool Evaluation - lower end proprietary tools</title><link>http://coreygoldberg.blogspot.com/2009/07/web-performance-tool-evaluation-lower.html</link><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Tue, 07 Jul 2009 11:42:11 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-3507223106666858974</guid><description>&lt;p&gt;
I am in the middle of a Performance and Load tools selection process and wanted to get some feedback here.
&lt;/p&gt;

&lt;p&gt;
I currently work in a shop that uses a mix of proprietary and open source tools for web performance &amp; load testing. The bulk of our workload and analysis is currently done using SilkPerformer. As you all probably know, there is a class of tools that is *very* expensive (including SilkPerformer). Installations and maintenance can run into 7 figures ($$$) with yearly maintenance contracts upwards of 6 figures. Since SilkPerformer is in place and we are happy with it (besides price/maintenance), there is no point in moving to a similarly priced tool. Therefore I have ruled out the class of "high end" tools from my selection:
&lt;/p&gt;

&lt;pre&gt;
High-end tools
------------------------
Borland/Segue - SilkPerformer
HP/Mercury - LoadRunner
IBM/Rational - IBM Rational Performance Tester
Microfocus/Compuware - QALoad
Oracle/Empirix - Oracle Load Testing For Web Applications (e-Load)
&lt;/pre&gt;

&lt;p&gt;
The tool I select will be used across several web applications.. pretty straight forward HTML/AJAX/JavaScript Web UI. Here is a basic list of requirements:
&lt;/p&gt;

&lt;pre&gt;
Requirements
------------------------
Protocols:
- HTTP
- ODBC (SQL)

Features:
- distributed load generation
- reporting/analytics
- data driven testing
- 5000+ VU
&lt;/pre&gt;

&lt;p&gt;
I work on a very skilled team that is *very* proficient with programming, tools, and web technologies. Adapting to a new tool or programming language is not much of an issue.
&lt;/p&gt;

&lt;p&gt;
I've searched the Open Source landscape pretty good. There are some fantastic tools (OpenSTA, JMeter, Pylot) to augment our testing, but no open source load generation tool completely meets our criteria.
&lt;/p&gt;

&lt;pre&gt;
Open Source tools
------------------------
OpenSTA
JMeter
Pylot
&lt;/pre&gt;

&lt;p&gt;
Now finally to the question/point....
&lt;/p&gt;

&lt;p&gt;
I am looking at a class of tools that I will call "low-end performance tools". This includes all proprietary tools that are not listed above as "high-end tools". They tend be cheaper and more limited in functionality than the big guns, but are substantially cheaper and sometimes sufficient for complex web performance testing. This is where my interest lies. I have scoured the web and came up with a list of tools to evaluate.
&lt;/p&gt;

&lt;pre&gt;
Low-end tools
------------------------
Microsoft - VSTS
Radview - WebLOAD
SoftLogica - WAPT
Facilita - Forecast
Zoho - QEngine
Neotys - NeoLoad
&lt;/pre&gt;

&lt;p&gt;
Does anyone have any feedback or experience reports using any of the "low-end" tools listed above? Are there other tools I am overlooking that I should definitely look into?
&lt;/p&gt;

&lt;p&gt;
any comments/suggestions are appreciated.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-3507223106666858974?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-07T14:42:11.041-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total></item><item><title>XML-RPC Clients In Python and Perl</title><link>http://coreygoldberg.blogspot.com/2009/06/xml-rpc-clients-in-python-and-perl.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Thu, 25 Jun 2009 10:00:28 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-4001458835853898023</guid><description>&lt;p&gt;
I was just writing some XML-RPC code and wanted to post some simple examples of how to talk to an XML-RPC server with some simple client-side code.  Here are examples in both Python and Perl.
&lt;/p&gt;

&lt;p&gt;
The examples below show how to connect to an XML-RPC server and call the service's start() method.
&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;
a simple XML-RPC client in Python:
&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;#!/usr/bin/env python

import xmlrpclib

host = 'http://localhost'
port = '8888'

server = xmlrpclib.Server('%s:%s' % (host, port))
response = server.start()
print response
&lt;/pre&gt;

&lt;p&gt;
a simple XML-RPC client in Perl (using the Frontier-RPC module):
&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;#!/usr/bin/perl -w

use strict;
use Frontier::Client;

my $host = 'http://localhost';
my $port = '8888';

my $server = Frontier::Client-&gt;new('url' =&gt; "$host:$port");
my $response = $server-&gt;call('start');
print $response;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-4001458835853898023?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-25T13:00:28.844-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>Google Calls for a Joint Effort to Speed Up the Internet</title><link>http://coreygoldberg.blogspot.com/2009/06/google-calls-for-joint-effort-to-speed.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Wed, 24 Jun 2009 06:29:53 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-7471074606151029246</guid><description>&lt;p&gt;
check out: &lt;br /&gt;
&lt;a href="http://code.google.com/speed/"&gt;http://code.google.com/speed/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
writeup here:&lt;br /&gt;
&lt;a href="http://www.infoq.com/news/2009/06/Google-Speed-Up-the-Internet"&gt;http://www.infoq.com/news/2009/06/Google-Speed-Up-the-Internet&lt;/a&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;em&gt;
"Google has &lt;a href="http://code.google.com/speed/"&gt;launched a web site&lt;/a&gt; in an attempt to find ways and push the speed up process of the entire Internet. Google shares research data, web site speed optimization tutorials, recorded presentations on performance, links to lots of performance optimization tools, and a discussion group inviting everyone to share ideas on how to make the web faster."
&lt;/em&gt;
&lt;/blockquote&gt;

&lt;p&gt;
&lt;a href="http://www.pylot.org"&gt;Pylot&lt;/a&gt; is listed in the &lt;a href="http://code.google.com/speed/downloads.html"&gt;downloads section&lt;/a&gt;!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-7471074606151029246?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-24T09:29:53.314-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Mini Web Load Tester with Python and Pylot Core</title><link>http://coreygoldberg.blogspot.com/2009/05/mini-web-load-tester-with-python-and.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Thu, 14 May 2009 09:19:37 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-9110793701346927753</guid><description>&lt;p&gt;
&lt;a href="http://www.pylot.org/"&gt;Pylot&lt;/a&gt; is a performance tool for benchmarking web services/applications.  I am working on exposing some of Pylot's internals so you can use it as a Python Module/API for generating concurrent HTTP load.  
&lt;/p&gt;

&lt;p&gt;
Below is a simple function that runs a mini [multi-threaded] load test against a single URL.  It will return a dictionary containing runtime statistics.  Results and timing information from each request is also logged to a file.
&lt;/p&gt;

&lt;p&gt;
I use something like this to run performance unit tests rapidly (10-30 secs usually).  I can bang on the URL for my application and quickly see how it performs and scales.
&lt;/p&gt;

&lt;p&gt;
Here is a small Python script that uses Pylot as a module:
&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;#!/usr/bin/env python

import pylot.core.engine as pylot_engine
import os
import sys
import time
        

pylot_engine.GENERATE_RESULTS = False

url = 'http://www.pylot.org'
num_agents = 5
duration = 10
runtime_stats = {}

original_stdout = sys.stdout
sys.stdout = open(os.devnull, 'w')

req = pylot_engine.Request(url)
lm = pylot_engine.LoadManager(num_agents, 0, 0, False, runtime_stats, [])
lm.add_req(req)

lm.start()
time.sleep(duration)
lm.stop()

sys.stdout = original_stdout

for agent_num, stats in runtime_stats.iteritems():
    print 'agent %i : %i reqs : avg %.3f secs' % \
        (agent_num + 1, stats.count, stats.avg_latency)
&lt;/pre&gt;        

&lt;p&gt;
Output:
&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;agent 1 : 46 reqs : avg 0.220 secs
agent 2 : 46 reqs : avg 0.218 secs
agent 3 : 46 reqs : avg 0.220 secs
agent 4 : 46 reqs : avg 0.221 secs
agent 5 : 46 reqs : avg 0.221 secs
&lt;/pre&gt;

&lt;p&gt;
Here is a slightly larger example with some more structure and features.  This creates a small command line interface for running a mini load test.
&lt;/p&gt;
   
&lt;p&gt;
Code:
&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;#!/usr/bin/env python
# Corey Goldberg 2009

import pylot.core.engine as pylot_engine
import os
import sys
import time



def main():
    """
    Usage: &gt;python pylot_mini_loadtest.py &lt;url&gt; &lt;number of threads/agents&gt; &lt;duration&gt;
    """
    url = sys.argv[1]
    num_agents = int(sys.argv[2])
    duration = int(sys.argv[3])
    pylot_engine.GENERATE_RESULTS = False
    print '\nmini web load test \n---------------------------------'
    agent_stats = run_loadtest(url, num_agents, duration)
    throughput = sum([stat.count for stat in agent_stats.values()]) / float(duration)
    print '%.2f reqs/sec' % throughput
    for agent_num, stats in agent_stats.iteritems():
        print 'agent %i : %i reqs : avg %.3f secs' % \
            (agent_num + 1, stats.count, stats.avg_latency)
        


def run_loadtest(url, num_agents, duration):
    """
    Runs a load test and returns a dictionary of statistics from agents.
    """
    original_stdout = sys.stdout
    sys.stdout = open(os.devnull, 'w')
    
    runtime_stats = {}
    req = pylot_engine.Request(url)
    lm = pylot_engine.LoadManager(num_agents, 0, 0, False, runtime_stats, [])
    lm.add_req(req)
    
    lm.start()
    time.sleep(duration)
    lm.stop()
    
    sys.stdout = original_stdout
    
    return runtime_stats



if __name__ == '__main__':
    main()
&lt;/pre&gt;    

&lt;p&gt;
Usage/Output:
&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;C:\test&gt;python pylot_mini_loadtest.py http://www.goldb.org 8 10

mini web load test
---------------------------------
19.20 reqs/sec
agent 1 : 24 reqs : avg 0.416 secs
agent 2 : 24 reqs : avg 0.418 secs
agent 3 : 24 reqs : avg 0.417 secs
agent 4 : 24 reqs : avg 0.418 secs
agent 5 : 24 reqs : avg 0.415 secs
agent 6 : 24 reqs : avg 0.419 secs
agent 7 : 24 reqs : avg 0.419 secs
agent 8 : 24 reqs : avg 0.419 secs
&lt;/pre&gt;    

&lt;p&gt;
Of course, for more complex scenarios, you can use the full blown tool, available at: &lt;a href="http://www.pylot.org/download.html"&gt;www.pylot.org/download.html&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Questions?  Hit me up.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-9110793701346927753?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-14T12:19:37.202-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Pylot - Total Downloads So Far</title><link>http://coreygoldberg.blogspot.com/2009/05/pylot-total-downloads-so-far.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Mon, 11 May 2009 11:37:29 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-7438369284070020892</guid><description>&lt;p&gt;
Here is a graph showing total downloads of &lt;a href="http://www.pylot.org/"&gt;Pylot&lt;/a&gt; since its first release:
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_k7-jvtv2cLo/Sghvsx7qvFI/AAAAAAAAAYA/hBe232f_yK4/s1600-h/pylot_downloads_05112009.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://4.bp.blogspot.com/_k7-jvtv2cLo/Sghvsx7qvFI/AAAAAAAAAYA/hBe232f_yK4/s400/pylot_downloads_05112009.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5334636573728881746" /&gt;&lt;/a&gt;

&lt;p&gt;
Decent uptake so far.  Keep the &lt;a href="http://www.pylot.org/download.html"&gt;downloads&lt;/a&gt; coming!
&lt;/p&gt;

&lt;p&gt;
Pylot is a web performance testing tool.  It is Free Open Source Software.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-7438369284070020892?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-11T14:37:29.242-04:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_k7-jvtv2cLo/Sghvsx7qvFI/AAAAAAAAAYA/hBe232f_yK4/s72-c/pylot_downloads_05112009.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Python - Redirect or Turn Off STDOUT and STDERR</title><link>http://coreygoldberg.blogspot.com/2009/05/python-redirect-or-turn-off-stdout-and.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Mon, 11 May 2009 08:18:32 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-3434479000407736934</guid><description>&lt;p&gt;
Here is an easy way to temporarily turn off STDOUT or STDERR in your Python program.
&lt;/p&gt;

&lt;p&gt;
First you create a class to replace STDOUT.  This is just minimal class with a 'write()' method. 
&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;class NullDevice():
    def write(self, s):
        pass
&lt;/pre&gt;        

&lt;p&gt;
Notice its 'write()' method does nothing.  Therefore, when you write to the NullDevice, output goes nowhere and is dropped.  All you need to do is assign sys.stdout to this class.
&lt;/p&gt;

&lt;p&gt;Here is an example of turning STDOUT off and back on:&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;#!/usr/bin/env python

import sys


class NullDevice():
    def write(self, s):
        pass


print "1 - this will print to STDOUT"

original_stdout = sys.stdout  # keep a reference to STDOUT

sys.stdout = NullDevice()  # redirect the real STDOUT

print "2 - this won't print"

sys.stdout = original_stdout  # turn STDOUT back on

print "3 - this will print to SDTDOUT"
&lt;/pre&gt;

&lt;p&gt;
You can also do the same thing with sys.stderr to turn off STDERR.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-3434479000407736934?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-11T11:18:32.098-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></item><item><title>C# - Export Windows Event Logs</title><link>http://coreygoldberg.blogspot.com/2009/05/c-export-windows-event-logs.html</link><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Fri, 08 May 2009 08:19:47 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-2721799987442937098</guid><description>&lt;p&gt;
Here is a little C# program to export Windows Event Logs.  It reads an Event Log and prints entries to STDOUT so you can pipe the output to a file or other application.
&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;
using System;
using System.Diagnostics;


class EventLogExporter
{
    static void Main(string[] args)
    {
        EventLog evtLog = new EventLog("Application");  // Event Log type
        evtLog.MachineName = ".";  // dot is local machine
        
        foreach (EventLogEntry evtEntry in evtLog.Entries)
        {
            Console.WriteLine(evtEntry.Message);
        }
        
        evtLog.Close();
    }
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-2721799987442937098?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-08T11:19:47.097-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>Dell Mini 10 Netbook with Linux == Graphics FAIL</title><link>http://coreygoldberg.blogspot.com/2009/05/dell-mini-10-netbook-with-linux.html</link><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Wed, 06 May 2009 09:48:23 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-6215031317099541785</guid><description>&lt;p&gt;
If you are planning on buying a Dell Mini 10 (or Mini 12) to run Linux, read this... 
&lt;/p&gt;

&lt;p&gt;
I used to have the Dell Mini 9 that came with Linux (Ubuntu 8.04).  As soon as I got it, I paved it and installed Ubuntu Intrepid instead.  It worked like a charm.  Then I decided to sell my Mini 9 and upgrade to the Mini 10.  The Mini 10 is a better machine in terms of hardware, and is MUCH better in terms of screen resolution and keyboard size (best keyboard on any netbook).
&lt;/p&gt;

&lt;p&gt;
So, the Mini 10 ships with Windows installed.  Since I had such good luck with the Mini 9, I figured a Linux install would be a breeze.  So with my shiny new Mini 10 netbook, I tried an install Ubuntu Intrepid.  It worked great but no compatible graphics driver.  OK, so I waited for the Ubuntu Jaunty release and then promptly installed that.  Same prob.
&lt;/p&gt;

&lt;p&gt;
Here is the deal:
&lt;b&gt;There is no Linux driver for the graphics card it uses (Intel GMA 500).&lt;/b&gt;  So.. if you want to run Linux on it, your only choice is to run in a non-native resolution using the default driver.  This totally sucks.
&lt;/p&gt;

&lt;p&gt;
There appears to be a native Linux driver somewhere (Poulsbo), &lt;a href="http://www.happyassassin.net/2009/01/30/intel-gma-500-poulsbo-graphics-on-linux-a-precise-and-comprehensive-summary-as-to-why-youre-screwed/"&gt;but it doesn't work right now&lt;/a&gt; and is not packaged.
&lt;/p&gt;

&lt;p&gt;
I am just running Windows for now and waiting for a real native driver to be released.  Shame on Intel for not providing one.
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_k7-jvtv2cLo/SgG_P3dppcI/AAAAAAAAAX4/Cxyjvaxs3LE/s1600-h/dell-mini-10-notebook.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 309px;" src="http://4.bp.blogspot.com/_k7-jvtv2cLo/SgG_P3dppcI/AAAAAAAAAX4/Cxyjvaxs3LE/s400/dell-mini-10-notebook.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5332753713090635202" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-6215031317099541785?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-06T12:48:23.847-04:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_k7-jvtv2cLo/SgG_P3dppcI/AAAAAAAAAX4/Cxyjvaxs3LE/s72-c/dell-mini-10-notebook.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total></item><item><title>Scripted Testing Isn't  Just Following Scripts</title><link>http://coreygoldberg.blogspot.com/2009/05/scripted-testing-isnt-just-following.html</link><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Wed, 06 May 2009 07:28:10 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-3399857439272632274</guid><description>&lt;p&gt;
There is an ongoing (or dead horse, depending on your perspective) about "scripted" vs. "exploratory" testing.
&lt;/p&gt;
&lt;p&gt;
I happen to refer to "scripted testing" as programmatic testing. You use programs, scripts, and tools to augment/enable your testing.  You can explore a system with your toolset if you want.  That is an example of doing exploratory testing with scripts/programs/tools.
&lt;/p&gt;
&lt;p&gt;
The debate seems to overlook that definition and defines "scripted" as just following a number of predefined steps.  I think this is the wrong definition and the wrong argument.. or maybe I just don't get it... or maybe I'm confused by the ambiguous definitions of scripting.
&lt;/p&gt;
&lt;p&gt;
I don't see it as a boolean. I think of it terms of a spectrum and somewhere along that programmatic/manual continuum is where you work.  Exploratory testing can fall in many areas of the spectrum and you can do it manually or programmatically.
&lt;/p&gt;
&lt;p&gt;
That is where the argument breaks down (IMHO).
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-3399857439272632274?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-06T10:28:10.829-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total></item><item><title>Ordered a New Laptop - Dell Studio 17 - Running Ubuntu</title><link>http://coreygoldberg.blogspot.com/2009/03/ordered-new-laptop-dell-studio-17.html</link><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Mon, 30 Mar 2009 11:03:51 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-752723696981499436</guid><description>&lt;p&gt;
I just ordered a new laptop for home.  This will be used as my workstation/desktop replacement.
&lt;/p&gt;

&lt;p&gt;
Ubuntu Jaunty Jackalope comes out April 23, and this machine will get a fresh copy.  I'm hoping all my hardware works good with it.
&lt;/p&gt;

&lt;p&gt;Specs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dell Studio 17&lt;/li&gt;
&lt;li&gt;64 bit&lt;/li&gt;
&lt;li&gt;Intel Core 2 Duo T6400 (2.00GHz/800Mhz FSB/2MB cache)&lt;/li&gt;
&lt;li&gt;4GB Shared Dual Channel DDR2 at 800MHz&lt;/li&gt;
&lt;li&gt;256MB ATI Mobility Radeon HD 3650&lt;/li&gt;
&lt;li&gt;250GB SATA Hard Drive (7200RPM)&lt;/li&gt;
&lt;li&gt;Glossy widescreen 17.0 inch display (1920x1200)&lt;/li&gt;
&lt;li&gt;8X CD/DVD Burner&lt;/li&gt;
&lt;li&gt;Intel WiFi Link 5100 802.11agn Half Mini-Card&lt;/li&gt;
&lt;li&gt;Back-lit Keyboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
I will post again to tell how the hardware compatibility with Ubuntu and Linux is.
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_k7-jvtv2cLo/SdDihal1P3I/AAAAAAAAAXQ/kKTWB9ZfyZA/s1600-h/studio_17_orange_314.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 314px; height: 314px;" src="http://1.bp.blogspot.com/_k7-jvtv2cLo/SdDihal1P3I/AAAAAAAAAXQ/kKTWB9ZfyZA/s400/studio_17_orange_314.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5319000223626116978" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-752723696981499436?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T14:03:51.819-04:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_k7-jvtv2cLo/SdDihal1P3I/AAAAAAAAAXQ/kKTWB9ZfyZA/s72-c/studio_17_orange_314.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>Did You Know?</title><link>http://coreygoldberg.blogspot.com/2009/03/did-you-know.html</link><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Wed, 25 Mar 2009 08:09:21 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-7252379959926485463</guid><description>&lt;blockquote&gt;
&lt;em&gt;
"We are currently preparing students for jobs that don’t yet exist, using technologies that haven’t yet been invented, in order to solve problems we don’t even know are problems yet."
&lt;/em&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://infosthetics.com/archives/2009/03/did_you_know_30_video.html#extended"&gt;Did You Know 3.0 (video)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;... just something to ponder.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-7252379959926485463?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T11:09:21.115-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Pylot Version 1.22 Released - Open Source Web Performance Tool</title><link>http://coreygoldberg.blogspot.com/2009/03/pylot-version-122-released-open-source.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Mon, 23 Mar 2009 08:16:16 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-42741271973953958</guid><description>&lt;p&gt;
I just did a release of Pylot, the open source web/http performance tool. You can download it here:&lt;br /&gt;
&lt;a href="http://www.pylot.org/download.html"&gt;http://www.pylot.org/download.html&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
New features in Pylot 1.22:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;restructured code base&lt;/li&gt;
&lt;li&gt;custom timer groups&lt;/li&gt;
&lt;li&gt;socket timeout setting&lt;/li&gt;
&lt;li&gt;misc bug fixes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Thanks to everyone who contributed to this release!
&lt;/p&gt;

&lt;p&gt;
If you have any problems to report, please post to the discussion forum at:
&lt;a href="http://clearspace.openqa.org/community/pylot "&gt;http://clearspace.openqa.org/community/pylot &lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-42741271973953958?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-23T11:16:16.550-04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Finally Got Me A Hackergotchi</title><link>http://coreygoldberg.blogspot.com/2009/03/finally-got-me-hackergotchi.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Sat, 21 Mar 2009 14:21:05 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-8639868735991673445</guid><description>&lt;p&gt;My Designer friend whipped up my hackergotchi in about 10 mins.  Always wanted one of these things:&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_k7-jvtv2cLo/ScVaMSh3OfI/AAAAAAAAAXI/_ryWPb1AKVs/s1600-h/foo.jg.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 131px; height: 131px;" src="http://4.bp.blogspot.com/_k7-jvtv2cLo/ScVaMSh3OfI/AAAAAAAAAXI/_ryWPb1AKVs/s400/foo.jg.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5315754102359538162" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-8639868735991673445?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-21T17:21:05.716-04:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_k7-jvtv2cLo/ScVaMSh3OfI/AAAAAAAAAXI/_ryWPb1AKVs/s72-c/foo.jg.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Zazzle - Business Cards Are Fun To Design</title><link>http://coreygoldberg.blogspot.com/2009/03/zazzle-business-cards-are-fun-to-design.html</link><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Sat, 21 Mar 2009 14:06:01 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-7896183208143911669</guid><description>I was bored and played with &lt;a href="http://www.zazzle.com"&gt;Zazzle&lt;/a&gt; for a little while today.  Here is the business card design I came up with:


&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_k7-jvtv2cLo/ScVV4aE7pbI/AAAAAAAAAWY/cS7D37W6Lxg/s1600-h/bizcard.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 396px; height: 240px;" src="http://4.bp.blogspot.com/_k7-jvtv2cLo/ScVV4aE7pbI/AAAAAAAAAWY/cS7D37W6Lxg/s400/bizcard.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5315749362741781938" /&gt;&lt;/a&gt;

&lt;br /&gt;
... not gonna order any, but it was fun to design.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-7896183208143911669?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-21T17:06:01.307-04:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_k7-jvtv2cLo/ScVV4aE7pbI/AAAAAAAAAWY/cS7D37W6Lxg/s72-c/bizcard.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total></item><item><title>Pylot - It Had To Start Somewhere</title><link>http://coreygoldberg.blogspot.com/2009/03/pylot-it-had-to-start-somewhere.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Wed, 18 Mar 2009 13:46:29 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-7542438393033388678</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_k7-jvtv2cLo/ScFcwIFaKRI/AAAAAAAAAUw/y0jIXZyyqIE/s1600-h/pylot_00_code.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_k7-jvtv2cLo/ScFcwIFaKRI/AAAAAAAAAUw/y0jIXZyyqIE/s400/pylot_00_code.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5314631017147541778" /&gt;&lt;/a&gt;

&lt;p&gt;
I just found a scrap of paper on my desk.  It is the original version 0.0 of Pylot from May 2007 (notice it all fits on 1 printed page).  I'm just posting this to look back on someday.
&lt;/p&gt;

&lt;p&gt;
&lt;a href="www.pylot.org"&gt;www.pylot.org&lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-7542438393033388678?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-18T16:46:29.456-04:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_k7-jvtv2cLo/ScFcwIFaKRI/AAAAAAAAAUw/y0jIXZyyqIE/s72-c/pylot_00_code.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Pylot Version 1.21 Released - Open Source Web Performance Tool</title><link>http://coreygoldberg.blogspot.com/2009/03/pylot-version-121-released-open-source.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Fri, 06 Mar 2009 09:49:29 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-2527755565405250129</guid><description>&lt;p&gt;
I just did a release of &lt;a href="http://www.pylot.org"&gt;Pylot&lt;/a&gt;, the open source web/http performance tool.  You can download it here:&lt;br /&gt;
&lt;a href="http://www.pylot.org/download.html"&gt;http://www.pylot.org/download.html&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
New features in Pylot 1.21:
&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;new HTTP transport layer, using urllib2&lt;/li&gt;
    &lt;li&gt;new blocking mode (stdout blocked until test finishes, results are returned as XML)&lt;/li&gt;
    &lt;li&gt;added redirect following&lt;/li&gt;
    &lt;li&gt;re-implemented cookie handling&lt;/li&gt;
    &lt;li&gt;compatible with Python 2.6 for Windows&lt;/li&gt;
    &lt;li&gt;new HTTP debugging mode&lt;/li&gt;
    &lt;li&gt;new global config file&lt;/li&gt;
    &lt;li&gt;better message logging&lt;/li&gt;
    &lt;li&gt;misc bug fixes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Thanks to everyone who contributed to this release!  Special thanks to:
&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Vasil Vangelovski&lt;/li&gt;
    &lt;li&gt;Adam Smith&lt;/li&gt;
    &lt;li&gt;Mark Ransom&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Most testing was done on Windows XP and Ubuntu Linux 8.10.
&lt;/p&gt;

&lt;p&gt;
If you have any problems to report, please post to the discussion forum at:&lt;br /&gt;
&lt;a href="http://clearspace.openqa.org/community/pylot"&gt;http://clearspace.openqa.org/community/pylot&lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-2527755565405250129?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-06T12:49:29.602-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>Open Source Enterprise Monitoring Systems</title><link>http://coreygoldberg.blogspot.com/2009/02/open-source-enterprise-monitoring.html</link><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Tue, 24 Feb 2009 09:53:35 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-1548919793648572882</guid><description>&lt;p&gt;
I used Nagios for health/performance monitoring of devices/servers for years at a previous job.  It has been a while, and I'm starting to look into this space again.  There are a lot more options out there for remote monitoring these days.
&lt;/p&gt;

&lt;p&gt;
Here is what I have found that look good:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.groundworkopensource.com/"&gt;GroundWork&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hyperic.com/products/open-source-systems-monitoring.html"&gt;Hyperic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://munin.projects.linpro.no/"&gt;Munin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nagios.org/"&gt;Nagios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.zabbix.com/"&gt;Zabbix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.zenoss.com/"&gt;Zenoss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Do you know of any others I am missing?  I'll update this list if I get replies.  The requirement is that there must be an Open Source version of the tool.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-1548919793648572882?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-24T12:53:35.305-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total></item><item><title>Amazon - Best in the Cloud?</title><link>http://coreygoldberg.blogspot.com/2009/02/amazon-best-in-cloud.html</link><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Tue, 24 Feb 2009 06:55:32 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-3597762344226069531</guid><description>&lt;p&gt;
Dana Blankenhorn (from "Ubuntu allies with Amazon and Dell"):
&lt;/p&gt;

&lt;blockquote&gt;
&lt;em&gt;
"the fact is Amazon’s EC2 cloud is currently dominating the space.
&lt;br /&gt;&lt;br /&gt;
It’s open for business, it’s ready for your apps, today. It’s not like Google’s cloud, devoted solely to Google applications, and it’s not like Microsoft’s cloud, devoted to Windows, and it’s not like IBM’s clouds, custom-built like a new global subdivision.
&lt;br /&gt;&lt;br /&gt;
Amazon’s cloud is a service businesses use to host serious applications, many of which make money. Standing at the side of such a cloud vendor is good business."
&lt;/em&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-3597762344226069531?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-24T09:55:32.665-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Pylot - Web Load Testing from Amazon Elastic Compute Cloud (EC2)</title><link>http://coreygoldberg.blogspot.com/2009/02/pylot-web-load-testing-from-amazon.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Mon, 23 Feb 2009 08:02:57 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-6613183103779309822</guid><description>&lt;p&gt;
I have been playing around with Amazon's &lt;a href="http://aws.amazon.com/ec2/"&gt;Elastic Compute Cloud (EC2)&lt;/a&gt;.  It allows you to provision virtual machines on-demand and configure and control your own compute clusters.  To do external (over a WAN) performance\load testing against your web application or services, you can put together a cloud based test harnesses using some simple tools.  My open source tool &lt;a href="http://www.pylot.org"&gt;Pylot&lt;/a&gt; does the job well for simple web performance and load tests.  Pylot generates concurrent load (HTTP Requests), verifies server responses, and produces reports with metrics. Tests suites are executed and monitored from a GUI or shell/console.  You define your test cases in an XML file. This is where you specify the requests (url, method, body/payload, etc) and verifications. 
&lt;/p&gt;

&lt;p&gt;
It is incredibly easy to provision an instance and launch a virtual machine using the EC2 console.  Once you have it up and running, you can just connect to your new virtual machine (via RDP or SSH) and get started.
&lt;/p&gt;

&lt;p&gt;
Here is a screenshot of my terminal session using Pylot (click to enlarge):
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_k7-jvtv2cLo/SaLIUu3BcHI/AAAAAAAAAUY/Zmra0Kd4Or0/s1600-h/pylot_ec2_ssh_screenshot.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 327px;" src="http://4.bp.blogspot.com/_k7-jvtv2cLo/SaLIUu3BcHI/AAAAAAAAAUY/Zmra0Kd4Or0/s400/pylot_ec2_ssh_screenshot.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5306023569497616498" /&gt;&lt;/a&gt;

&lt;p&gt;
You can see I took the following steps:
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;remotely login to the EC2 instance using SSH and my private key&lt;/li&gt;
&lt;li&gt;download Pylot using wget&lt;/li&gt;
&lt;li&gt;unzip the distribution&lt;/li&gt;
&lt;li&gt;change to the Pylot directory&lt;/li&gt;
&lt;li&gt;launch the default test with 1 agent (virtual user)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Thats it!  I ran a test today doing 1500 Virtual Users from one instance of 64-bit Fedora Linux, and it took me about 5 minutes to get it setup and running.  Python 2.5 is already installed on the image, and no further configuration is needed to run a basic test.  To run the Pylot GUI and generate results graphs, you need to install wxPython and Matplotlib.
&lt;/p&gt;

&lt;p&gt;
You can upload your own test case files and run any load test scenario you want.  Don't forget, you can create and save your own machine images and launch as many as you want to run a large distributed test.
&lt;/p&gt;

&lt;p&gt;
I'd like to build some tools to make this easier and to create preconfigured machine images for other people to start with.  It needs common results collection and remote control of user agents.  I'm thinking of a cluster of virtual machines all running Pylot, each running thousands of virtual user agents.  EC2 provides the ability to place instances in multiple locations, so this could be used to create a massive geo-distributed test bed with capacity on-demand.  
&lt;/p&gt;

&lt;p&gt;
More soon...
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-6613183103779309822?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-23T11:02:57.792-05:00</app:edited><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_k7-jvtv2cLo/SaLIUu3BcHI/AAAAAAAAAUY/Zmra0Kd4Or0/s72-c/pylot_ec2_ssh_screenshot.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></item><item><title>Pylot Version 1.20 Released - Open Source Web Performance Tool</title><link>http://coreygoldberg.blogspot.com/2009/02/pylot-version-120-released-open-source.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Sun, 15 Feb 2009 17:28:34 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-2486431296374056910</guid><description>&lt;p&gt;
&lt;b&gt;
The 1.20 release of &lt;a href="http://www.pylot.org"&gt;Pylot&lt;/a&gt; is out!
&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
Go grab a copy at: 
&lt;a href="http://www.pylot.org/download.html"&gt;http://www.pylot.org/download.html&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;
"Pylot is a free open source tool for testing performance and scalability of web services. It runs HTTP load tests, which are useful for capacity planning, benchmarking, analysis, and system tuning.
Pylot generates concurrent load (HTTP Requests), verifies server responses, and produces reports with metrics. Tests suites are executed and monitored from a GUI or shell/console."
&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
new features include:

&lt;ul&gt;
&lt;li&gt;refactored transaction engine with lower memory footprint and disk i/o&lt;/li&gt;
&lt;li&gt;automatic cookie handling&lt;/li&gt;
&lt;li&gt;better results reports&lt;/li&gt;
&lt;li&gt;test naming&lt;/li&gt;
&lt;li&gt;specify output location&lt;/li&gt;
&lt;li&gt;specify test case file&lt;/li&gt;
&lt;li&gt;bug fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
To get started, visit Getting Started Guide:
&lt;a href="http://www.pylot.org/gettingstarted.html"&gt;http://www.pylot.org/gettingstarted.html&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Post your questions and feedback in the Pylot forum:
&lt;a href="http://clearspace.openqa.org/community/pylot"&gt;http://clearspace.openqa.org/community/pylot&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Mark Rogers and I had a nice little hackathon getting this release put together.  
Special thanks to Mark and the other patch submitters for helping out.
&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
Screenshots:
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.pylot.org/samples/ui/pylot_1.20_gui.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 690px; height: 710px;" src="http://www.pylot.org/samples/ui/pylot_1.20_gui.jpg" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.pylot.org/samples/ui/pylot_1.20_console.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 524px; height: 361px;" src="http://www.pylot.org/samples/ui/pylot_1.20_console.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-2486431296374056910?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-15T20:28:34.751-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Python - Send Email From Windows Using CDO</title><link>http://coreygoldberg.blogspot.com/2009/02/python-send-email-from-windows-using.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Wed, 11 Feb 2009 11:37:22 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-4732805968473222362</guid><description>&lt;p&gt;
Here is quick script showing how to use Python to send email from Windows.
&lt;/p&gt;

&lt;p&gt;
This approach uses the &lt;a href="http://python.net/crew/mhammond/win32/"&gt;Python For Windows Extensions&lt;/a&gt; to access Outlook/Exchange with CDO (Collaboration Data Objects).
&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;
#!/usr/bin/env python
# Corey Goldberg

from win32com.client import Dispatch

session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\nUserName');
msg = session.Outbox.Messages.Add('Hello', 'This is a test')
msg.Recipients.Add('Corey', 'SMTP:corey@foo.com')
msg.Send()
session.Logoff()

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-4732805968473222362?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-11T14:37:22.559-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Pylot - Help/Discussion Forum Launched</title><link>http://coreygoldberg.blogspot.com/2009/02/pylot-user-helpdiscussion-forum.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Sun, 08 Feb 2009 18:02:12 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-325113144180775625</guid><description>&lt;p&gt;
Thanks to &lt;a href="http://openqa.org/"&gt;OpenQA&lt;/a&gt;, I launched a web forum for help and discussions about Pylot:&lt;br /&gt;
&lt;a href="http://clearspace.openqa.org/community/pylot"&gt;Pylot Forums&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
This forum is a place for Pylot users and developers to share: questions, comments, experiences, enhancement requests, bug reports, etc.  If you need any help, this is the place to post
&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;
&lt;em&gt;What is Pylot?&lt;/em&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;
"Pylot is a free open source tool for testing performance and scalability of web services.  It runs HTTP load tests,  which are useful for capacity planning, benchmarking, analysis, and system tuning.
&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;
Pylot generates concurrent load (HTTP Requests), verifies server responses, and produces reports with metrics.   Tests suites are executed and monitored from a GUI or shell/console."
&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
The official Pylot website is located at:  &lt;a href="http://www.pylot.org"&gt;www.pylot.org&lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-325113144180775625?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-08T21:02:12.817-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Pylot Testimonial - Easy Setup for Web Load Testing</title><link>http://coreygoldberg.blogspot.com/2009/01/pylot-testimonial-easy-setup-for-web.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Thu, 29 Jan 2009 12:15:26 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-5306527510406909351</guid><description>&lt;p&gt;
&lt;em&gt;
(Pylot is a an open source web performance/load testing tool I developed)
&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
I just saw this post from Mark (f4nt) about load/performance testing Confluence (enterprise Wiki software).  He briefly talks about performance tool selection and why he chose &lt;a href="http://www.pylot.org"&gt;Pylot&lt;/a&gt; as his tool.
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.f4ntasmic.com/?p=226"&gt;Load Testing Confluence&lt;/a&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;em&gt;
"A small part of my problem of getting my tests rolling was finding a test suite that suited my needs. There’s a ton of potential options such Grinder, Bench, Browsermob, WebInject, HttPerf, funkload, and so on and so forth. I do want to use BrowserMob, just because it’s incredibly slick, looks easy to use, and looks to be quite reliable. Unfortunately, it’s not free though, and my budget for this testing is currently $0 :). My big problem with a few of the load testing applications is that they were a major pain just to setup, and get rolling. JMeter kept crashing, and was more effort to setup than I wanted to deal with. Grinder, again, didn’t seem to have an easy setup method. Granted, I could have made either of these work, and it wouldn’t have killed me. The fact of the matter was though that I just don’t have time to deal with these items. While I am doing these tests for work, I’m mainly doing them off hours because that’s when I have time to actually do it. Hence, I wanted something that could give me basic statistics, that I could setup quickly, that was free. Considering my slant towards open source software and python, the application I would use being written in Python and being GPLed were bonuses.&lt;br /&gt;
&lt;br /&gt;
That brings us to Pylot. It’s free, it’s released under the GPL, and it’s written in Python. As a bonus, the tests are simple to setup, the result output is usable, and making modifications to the application was easy as well. This allows me to quickly create test scenarios and pound away at the application I’m testing with little to no fuss whatsoever. Creating tests is just a matter of modifying a simple XML to place the URLs you wish to hit. You can have post requests as well without any major trouble. Whatever it is you want to do, seems to be quite plausible in the grand scheme of things. Then, when you run into something you can’t do, modifying the code itself to make it do what you want isn’t hard at all either."
&lt;/em&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Thanks for using and giving props to Pylot, Mark!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-5306527510406909351?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-29T15:15:26.446-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>Python - Read Outlook Email and Save Embedded Attachments</title><link>http://coreygoldberg.blogspot.com/2009/01/python-read-outlook-email-and-save.html</link><category>python</category><author>corey@goldb.org (Corey Goldberg)</author><pubDate>Wed, 28 Jan 2009 09:45:08 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5236867476487043111.post-6615620604798654462</guid><description>&lt;p&gt;
I was struggling with this for days, so I figured I should post the code so others can see how to do it.
&lt;/p&gt;

&lt;p&gt;
The following script will read the last email in an Outlook mailbox and save the attachments.  It uses the CDO COM Interface to interact with Outlook/Exchange.
&lt;/p&gt;

&lt;pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"&gt;
#!/usr/bin/env python
# Read the last email in an Outlook mailbox and save the attachments.

from win32com.client import Dispatch


def main():   
    session = Dispatch('MAPI.session')
    #session.Logon('Outlook')  # for local mailbox
    session.Logon('','',0,1,0,0,'exchange.foo.com\nusername');
    inbox = session.Inbox
    message = inbox.Messages.GetLast()
    attachments = message.Attachments
    for i in range(attachments.Count):
        attachment = attachments.Item(i + 1) # indexes are 1 based
        filename = 'c:\\tempfile_%i' % i
        attachment.WriteToFile(filename)
    session.Logoff()


if __name__ == '__main__':
    main()
&lt;/pre&gt;

&lt;p&gt;
* Extra Special thanks to Sergey Golovchenko for helping out.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-6615620604798654462?l=coreygoldberg.blogspot.com'/&gt;&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-28T12:45:08.072-05:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item></channel></rss>
