Posted on December 5, 2008 in Uncategorized by adamNo Comments »

Here is the situation. You have a single subversion repository which has all your applications in it, but you now want to start enlisting outside contractors to build out different parts. Just give them their own login and everything will be great! Well, not really. It appears that permissions in svn are repository wide, not limited by branch or directory. And to add another wrinkle into the mix we are using the svn+ssh method of authorization which means we can’t leverage apache in the front-end to handle permissions. The solution then was to break out the single repository into separate repos for each of the applications we are going to let external people at.

# this is where the svn repos are
cd /var/svn/
 
# create the new repo we are going to import things into
sudo svnadmin create /var/svn/new_repo
 
# dump the old repo
sudo svnadmin dump /var/svn/old_repo/ > /tmp/old_repo.dump
 
# pump the dumpfile through the filter tool which will only include the parts of
# the existing repo that has the product you want in the new rep
cat old.dump | svndumpfilter include existing_path/to/new > new.dump
 
# import the now filtered repo contents in to the new location
sudo svnadmin load new_repo < /tmp/new.dump

Now you just have a separate repo where you people who are supposed to see certain code only get that specific code. And once you have confirmed that everything in the new repo is working, remove it from the old one so you don’t cause unnecessary confusion around which code is what.

Posted on December 5, 2008 in Uncategorized by adam1 Comment »

I had lunch with Michael earlier this week and I expressed shock that people do not research the courses they take before handing over their money. I said something like ‘is it just me that looks into these things?’ to which he said ‘Yes.’ This post is how I do that research; and why.

First, the why. In the summer of 1999 I took a pause from my budding testing career to switch tracks to become an Oracle DBA. At that time the DBA certificate a ticket to a decent entry-level position (and databases are cool). I had saved up enough money to be out of work 5 months before things got tight financially and found a local business / tech school which offered a full-time (8-4, Monday – Friday) Oracle DBA course including exam sitting fees. It was not cheap.

The week before the course was scheduled to start I was informed that it would be 6 – 10, Monday through Friday and a couple weeks longer. No problem, though had I known that I wouldn’t have opted out of a contract to be able to attend during the day. Oh well. Then the first night we (all 3 of us in the course) were told that it would be just Monday, Wednesday and Friday nights. And then a couple weeks later the instructor would start to show up late as he was involved with an Oracle Financials installation at work which wasn’t going smoothly. He eventually quit.

Eventually I started to burn through the savings too quickly and realized that this wasn’t going to end with me having a certification. I didn’t even end up writing the final exam, though I do know PL/SQL pretty well. When I asked for a refund since they were not delivering anything close to what I was initially sold they got quite rude, and of course I didn’t see a penny.

Now, I am much more aware of the whole ‘buyer beware’ thing so when I am considering taking a course, listing to a webinar or attending a conference or even attending a session at the conference I do my homework, including…

Organization

  • What is the organization sponsoring the event?
  • What is their track record?
  • Their reputation?

Instructor

  • Who is the person(s) who are delivering the content?
  • Do they have a blog?
  • A book?
  • What credentials do they have to be presenting this material?
  • Do I know them?
  • Do I know someone who knows them?
  • Are they on Linked-in?
  • What is their reputation?
  • Do they provide references to back up their claims of quality?

Material

  • Is the content going to interest me?
  • Does it conflict with my world view of things?
  • Do I get take-home materials?
  • What is the delivery method?

I can run through this list pretty quickly, and I strongly advocate anyone who is paying for education to develop their own checklists as well. Especially in tough economic times when people will be getting (unfortunately) cut from their jobs and looking to upgrade their skills. I can almost guarantee the technical schools are seeing a potential revenue spike and while there are some schools that genuinely care about the education they deliver, others are more concerned with the money they are charging.

Posted on December 4, 2008 in javascript by adamNo Comments »

This is one of those ‘took me awhile to figure out so I’ll post so I don’t have to figure it out again’ posts.

At work we now have a widget which people can embed in their sites (well, soon) which was built by an external company and is pretty slick. The problem is that it wasn’t designed to be skinnable so customizing it for different clients is impossible.

The model for skinning we arrived at was that there would be a ‘clients’ directory which will contain a number of other directories to hold the client specific stuff and to have it dynamically load things for the clients correctly. And because it is javascript which is sent to the client in a readable format, here is the code I wrote to do it (sorry to the RSS only people; this syntax plugin doesn’t do RSS properly it seems)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$.ajax({url: options.widget_url+"clients/"+options.clientid+"/javascripts/config.js", 
        type:"HEAD",
        cache: true,                
        beforeSend: function() {
          if(typeof(options.clientid) == "undefined") {
              options.clientid = 'zerofootprint';
          }  
        }, 
        error: function() {
                    options.pcm_url = "http://www.zerofootprint.net";
                },
        success: function() {
                $.ajaxSetup({ async: false }); 
                $.getScript(options.widget_url+"clients/"+options.clientid+"/javascripts/config.js", 
                            function (data, textStatus) {
                            configs = $('script[@src*=zfpcalculator.js]').clientConfig(calcUrl[0]);
                            options = $.extend(options, configs);
                            });
                $.ajaxSetup({ async: true });     
                },
        complete: function() {
    		$.getScript(calcUrl[0]+'/javascripts/typewatch.js');
    		$.getScript(calcUrl[0]+'/javascripts/zfp_calculator_controller.js',
    		            function() {			
    			            $('script[@src*=zfpcalculator.js]').zfpCalculator(options);
    			        });
        }
});

Annotations

  • 4 – 8: The widget takes an optional ‘clientid’ parameter. I check here whether it exists (parameters were parsed earlier) and if not I set a default value so there will always be a clientid.
  • 1 – 3: Make a HEAD request for a file which will exist inside a client directory if one exists.
  • 9 – 11: Essentially, this is the error handling section that gets executed if the file requested doesn’t exist. You should put your default settings in here.
  • 12 – 20: This is the guts of the magic is. First we have to turn of the Async aspect of AJAX. Yes, seems a bit silly but without doing that what happens is the getScript is called but we don’t wait for it to finish so we cannot know for sure whether it was loaded or not when the next chunk is executed. Speaking of the getScript, what is does is load (and execute) the file we originally requested in line 1 – 3 and executes a clientConfig method and adds the array it gets back to the options one we are carrying around. And I remembered to make AJAX calls run async again.
  • 21 – 27: This section gets called after either the success or error blocks were run. From here I load and execute the chunk of code that actually is the core of the widget.

I think it is pretty trick, even if it does add an extra request (the HEAD) into the flow.

Posted on December 2, 2008 in Uncategorized by adam1 Comment »

Joel Spolsky‘s December article for Inc has a wonderful line in it about management’s role.

… management’s job is to get things out of the way so that all the great people we’ve hired can get work done.

This is exactly how I see management’s role and how I run departments. When I actually had people who reported up to me my role was entirely to get things out of their way. My goal for actual testing (from my boss) was 8 hours per week. The rest of the time was meetings, strategy, etc. I think we were pretty effective in our roles there with high quality releases on time (or sooner).

I have also been in situations where management felt their role was to dictate and control my every move. I wasn’t able to be as effective as I could have been otherwise and it wasn’t much fun. I left.

A tester’s role is to provide quality related information to the stakeholders. A manager’s role is to create an environment they can do it in.

Posted on December 2, 2008 in Uncategorized by adamNo Comments »

While I was pretending to go to college I did tech support for a local ISP. Their entire value proposition was that they were the cheapest in the city. This caused me to encounter ethics for the first time.

We had a couple types of modem banks as this was when you had proprietary protocol wars. One of them had a RADIUS stack which didn’t really work with our billing software so people would be ‘logged in’ even when they were not. Eventually we needed to buy more as we oversold things a little too much so they bought… not a portmaster3 (or even a portmaster2) or a usr rack, but another of the computone racks — with sportster modems (real ISPs used couriers). So I quit; I couldn’t honestly tell the people on the other end of the line that things were going to improve which I thought was important.

So now we have the quandary.

Political / philosophical / moral issues aside, I think certifications are a general waste of time and money. However, the school I teach at offers a CSTE course as that seems to be the certificate with any sort of local market penetration. I’ve resisted being the teacher a couple times now on the grounds that I feel bad promoting something I don’t believe in; to do something counter to that feels like an ethical issue.

Seems pretty clear cut, except that even if I don’t teach it they are going to offer it and people will continue to take it. No problem yet except that the instructor who is teaching it is the schools go-to person who teaches anything and everything and started the most recent class with ‘So what do you want to learn about?’. Are you kidding me? Its a freakin’ BOK course; teach the BOK. Hearing this makes me lean towards teaching it so that people who want to learn, actually learn something (according to the BOK and when the ignore the BOK). I almost feel ethically bound to the students in this regard.

And then there is the whole CSTE thing itself. In order to apply for the examination you need one of the following:

  • A 4 year degree from an accredited college-level institution and 2 years experience in the information services field
  • A 3 year degree from an accredited college-level institution and 3 years experience in the information services field
  • A 2 year degree from an accredited college-level institution and 4 years experience in the information services field
  • Six years experience in the information services field

plus ‘Are working, or have worked at any time within the prior 18 months, in the field within covered by the certification designation’. The demographic of the school is largely people new to testing and/or IT in general. Typically there is only 1 of about 20 people who might be able to successfully sit for the exam — let alone pass it. So should I teach something they don’t have a chance of using in the certification context? Well, my bank account says yes, but I’m still pretty uncomfortable with the idea.

There looks like there might be another possible route though. QAI has recently started offering the CAST (Certified Associate in Software Testing) certificate which is aimed at new testers which is exactly who this school markets to. And they would be able to quality to take the exam.

But.

I don’t know what is in the CAST BOK so how can I prepare and deliver a course? You can buy the CSTE and CSQA BOK from the QAI bookstore, but you cannot get the CAST one unless you register for the exam itself. (Which is just dumb.)

Which leads to…

  • School is going to offer a testing certification course as the market is there for it
  • New testers will sign up for it thinking it will increase their marketability
  • There isn’t someone who knows testing teaching it
  • CSTE is not certificate I could comfortably teach them due to qualifications, but could do CAST
  • I have to sign-up (pay) for the CAST exam to get the BOK
  • Which means I might as well write the exam; and <cringe> become certified

But it still feels a bit slimy. I could make some not bad side money teaching it though which is where things stand. Am I more mercenary than set in my certifications-are-useless views.

Why does it always come down to ethics vs. money?

Posted on December 1, 2008 in Quality by adamNo Comments »

Contracts are a powerful tool in the battle of ‘WTF are my requirements’ as they are by definition a series of commitments between the two parties. Depending on the size of the organization and your role in it you might be able to see the contract, at which point you can test them. If the keeper of the contracts doesn’t want you to know the financial details, ask them to give you a redacted version. The money is not what we are interested in really, it is the clauses. Here is how I test a contract (off the top of my head while on the train):

  • Dates
    • When do we need to deliver some / all of the item
    • When do they need to deliver things to us
    • When does the contracted agreement start
    • When does the contracted agreement end
    • Are those dates realistic
  • Location
    • Where is this service being delivered? In the cloud? Datacenter? US or non-US?
    • Is this realistic
  • Consistency
    • Does this contract look like other ones for the same/similar products/services from our organization?
    • Should it?
  • SLA
    • Are the penalties on both sides clearly stated to prevent conflict in the future?
    • Uptime / Availability
    • Support response / resolution
  • Money
    • Is the amount changing hands enough to cover costs (If you have access, and are not using as a loss leader)
    • Are there reoccurring revenues
  • Contacts
    • Is there a phone number and email for each side of the contract to contact the other?
    • Are specific contact conditions and formats specified
  • Deliverables
    • What, exactly, are we contracting about?
  • Additions welcome.

    Posted on December 1, 2008 in Ruby, Selenium by adam1 Comment »

    I dove back into Selenium on a week or so ago, and part of that meant getting the nightly build. And much to my dismay, the Ruby client is not packaged as part of it.

    Bug 1: The gem binary is not part of the nightly build

    So I had to check the tree out of subversion to make it myself.

    Bug 2: The repository url is wrong

    On the OpenQA site, the url specified is for openqa.org, but seems like things are migrating to a new domain, so you need to use

    https://svn.seleniumhq.org/svn/selenium-rc/trunk/

    instead.

    Once I got the code I wandered over to the ruby client directory and tried to figure out which Rake task to run. rake -T is the standard way to have rake parse it’s Rakefile and tell you the tasks. Except, you need to have built the system before it would tell you that.

    Bug 3: rake -T doesn’t work

    Okay. Fine. Build the whole thing (mvn install) then go back to the ruby client directory and build it (rake gem). Finally you need to install the gem. Just make sure that you specify the correct version of your gem in the script

    This is more of a feature request, but if you are building a gem over-and-over I can see your gem store getting pretty cluttered. To partially address this versioning issue, I propose

    Bug 4: version of gem should be timestamped in addition to version number in non-release builds

    « Previous Page