Amcom Home Page

 Source Code Management with Multiple QA environments using Git

Up until now we've been using Seapine Surround SCM, it works much like Microsoft's Visual Source Safe in that it's linear development. When we were a very small team of 3 people Surround worked great because our development life cycle was also linear in that we developed in a Development branch, promoted to a QA branch which had a related QA environment, and then promoted to a Staging/PreProduction branch prior to releasing.

Now being slightly larger (7 developers) the linear approach has become a hurdle. We have multiple projects in play, using the same code base, and only one QA environment. This resulted in various issues:

  • With two+ projects in *THE* QA environment, you were never really sure if you were testing the project you think you're testing. Or if there's a bug, which project that bug originated from. It's really trying to do integration testing without the premise that all changes are meant to work with each other.
  • You'd get a log jam of changes where projects in QA weren't done testing, while in Development the next round of changes on the same files couldn't move forward because they were tied up in QA.
  • Hotfixes were problematic. As you'd have to make the change in front of what's in QA, and then make sure it retroactively gets merged back down stream.
  • Sometimes a file that was in QA, would have an unrelated change in Development put in that is then tested in QA and then prematurely pushed forward into Staging.

The next step is we needed to introduce multiple QA environments so that we can develop all these project independently of each other, test all these projects independently of each other, integrate them together, and support hotfixes with less grief.

Moving forward...

After doing an analysis of tooling and source code management (scm) processes we determined that Git was the scm tool of choice. It provides a lot of flexibility in that you can merge any which way, and branching is fast and inexpensive, thus making it easy to tailor a process that will work well for what we want to do.

Our process and branching model is completely inspired by this blog posting, so a big kudos to Vincent Driessen for putting that diagram together.

What we did to help train the development and project management staff is break it down into the various scenarios so that they could relate to it in comparison to how they were used to doing things.

Git multibranch model

We'll probably have to do a few more tweaks to get the kinks out, but if it helps I've made the presentation available for download below (I tried posting to SlideSix, SlideRocket, and SlideShare - but they didn't render it properly).

Download/View the scm process slides.

 Moving windows on secondary monitor to primary when RDCing

Some of you may have encountered this Windows gotcha.

When you remote desktop to your PC, you'll see the primary monitor. The problem arises when you have windows showing on the other screen that aren't visible to you, or you open up a program that was last used on the secondary monitor – by default it'll reopen on there.

A quick solution is to right click on the task bar and select maximize. But if you need to work with multiple windows:

  1. Right click on the app and select Move

  2. Press any arrow key
  3. The window will now follow your mouse, allowing you to move it back onto the primary monitor.

 Remote Desktop and Grabbing Apps on the 2nd Monitor

Just a quick note to address the resolution to something that's plagued me for a while now...

At work I have a dual monitor setup. At home, I have a single monitor. On occasion, I have to remote in to work from home. On occasion, I'll find that applications that were open on my 2nd monitor can't be accessed via my RDS session.

This bit me on Friday night. I needed to promote a few files up to our QA environment. Surround, our version control software, was running on the 2nd monitor. I didn't see it in the task bar, so I wasn't even sure it was running at all. I even went so far as to uninstall and reinstall the client. Nothing. Finally, at 11:30pm on a Friday night, I broke down and drove into the office so that I could promote the files.

Determined to never have to do this again, I hit Google to find a solution once and for all.

I was hoping for something built into RDS. Some sort of "bring all applications to Monitor 1", but it doesn't seem as if such an animal exists. What I did find is a 3rd party app called DeskLite. Unfortunately, it doesn't seem as if the application is maintained anymore. Any references to a DeskLite site that I found resulted in 404 errors.

I was finally able to find it, though. I don't want to link directly to it, because I'm not 100% sure about the legitimacy of the link. By that, I mean I'm not sure that the site hosting the file (http://www.shellfront.org/utils/) is truly authorized to host the file (desklite.zip). Ahem.

So far, it seems to work perfectly. DeskLite will bring up a window of all running applications. Choosing a specific app will bring that application to the center of Monitor #1. Problem solved.

If anybody knows of a better way to do this... something built into RDS, or a 3rd party application that's actively maintained, I'd love to hear it. But for now, DeskLite should save me those 11:30pm Friday night trips into the office.

 Alternate services while we wait for Meer Meer

For those of you who attended MAX 2008 you saw this awesome demo of an upcoming Adobe service called Meer Meer which lets you see what a web page looks like in any combination of OS and Browser.

But... until this service becomes available, what's a coder to do? Well we found two other options.

Cross Browser Testing (CBT) is one of them. You provide a URL, and it takes a graphical snapshot and sends it to you (about an hour later). Besides the lag time which would impede using the service to develop and test against, we found it doesn't really work too well.

BrowserCam is the other. It's similar to CBT is similar in that you submit a capture job and it goes into some screen capture queue which you can then go back into and retrieve. At least this one you only have to wait about 5 minutes for the results.

The services are better than nothing - but based on what I saw at MAX I eagerly await Meer Meer!

 Service Capture 2.0 Available

As mentioned at MAX 2008, Flex Builder 4 will have a built in network monitor so that you can watch what's going on behind the scenes as your client interacts with back-end servers.

But... until then, a tool you definitely need to have (even when FB4 becomes available) is a good traffic analyzer. The two popular ones for use with Flex are ServiceCapture and Charles Web Debug Proxy.

These tools are lifesavers, and can save you an enormous amount of time when trying to figure communication/integration issues.

Kevin Langdon has now released a major update to his ServiceCapture tool which has a slew of nifty enhancements. Here's a snippet:

Save and Restore Sessions
A full session's data can now be saved to a portable file. This allows you to open up a previous session from any computer. It is the perfect way to prove to a remote team member that you are in fact seeing some unwanted server responses.

Firefox Extension to Automatically Handle Proxy Settings
Now with a very simple installation, you can say goodbye to starting and stopping Firefox while working in ServiceCapture.

See Trace Output from Flash Player
If you have the flash debug player installed, ServiceCapture will now display all trace() calls inside it's UI.

Map URLs to Local Directories
You can now map a segment of a URL to a local directory. This allows you to mimic a complete static website from your hard drive with no local server and the whole time your browser still thinks it's hitting production servers.

Resend/Test any HTTP request
You can now select resend any HTTP request and view the results. This allows you to isolate and test a specific service call. Gone are the days of signing in and recreating 33 steps to test one call back to the server.

Include/Exclude Based on URL Regular Expressions
Tired of seeing all those request for files you don't care about? You can now exclude or include requests based on any part of the URL, domain, extension, or query string.

Monitor ANY Log File
You can now setup ServiceCapture to point at any text-based log file on your system and it will display logging inside the UI with the other events and network traffic. This is great for watching an HTTP Server error file for any issues that might be related to your browser's requests.

Images Displayed in Response Area
A new tab was added to the Response area to allow you to view any image that is served back to your client.


For more information visit www.kevinlangdon.com.

 Split Screen View in Eclipse

Most IDEs offer what's known as a "split screen" view. In such a view, while editing a single file, you can horizontally "split" the page in the editor and scroll each section individually. This is useful when you've got a particularly long file to edit, and you need to see some code at the top of the page while editing code at the bottom (or really, editing any part of the page that might depend on another part that would have otherwise scrolled off of the page).

A co-worker is trying to make the change from his current IDE to Eclipse and recently asked whether or not this functionality is there. The answer is yes. Kind of. It's not a "true" split screen view, but here's how to get as close to it as is currently possible within Eclipse.

[More]

 Stress Testing a CF Server - Interesting results

Over the years we've been enhancing this fairly large (500K+ lines) CF application. It's a system that we've inherited, and as we've built up the infrastructure we generally knew what the operating capacity needed was.

As part of a Disaster Recovery project we've relocated the environment to a state of the art Colo, so as part of building a brand new home for this product we wanted to do some stress testing. Part of that was to observe how the Web/CF/DB servers perform, but this is the first time users would be accessing the servers over a WAN - so we wanted to simulate what the experience will be like when the WAN has heavy HTTP load on it.

Tool Selection

We needed to quickly find some tools to do this, so we took a look at a few products including Microsoft's Web Application Stress Tool, Minq's PureLoad, Paessler's Webserver Stress Tool 7, and Apache's jMeter.

Microsoft's tool seems to have technical potential, but from a usability point of view it's difficult to use. PureLoad is industrial strength, and a great solution if you need to do a lot of it regularly, but the setup is too involved for a quick and simple test. Similarly with jMeter, it's an industrial stength tool, but there's no way non-technical people would be able to quickly get it setup.

So that left us with Paessler's WebServer Stress Tool (PWST); it's got great features and the ability to do complex scripting. But our use case was to have a bunch of people load it up on their desktops and fire away with a barrage of canned URLs. And PWST can help you do that in a matter of minutes.

Granted, when the URLs remain static you'll start to get caching going on at very levels of the system, but we made sure everyone was generating their own unique set of URLs that even if cached were returning significant amounts of data.

Observing the Results

Our environment consists of a CISCO Network Load Balancer using round robin w/sticky sessions to four ColdFusion 8 Enterprise servers.

We progressively ramped up more and more load and could see the load being distributed fairly evenly, and CPU and Memory increased at a linear rate.

Another goal was to progressively increase the load towards a point of failure, and as the load ramped up towards 10X more load than what the servers would ever see, it was interesting to see how the system failed. I was expecting for one server to lock up first, and then the others to pick up the slack but act incredibly sluggish before another went down.

What actually happened is within 10-15 seconds of the first server going down, the load was re-distributed and the remaining servers were already on the brink of failure that they all went down pretty much at the same time.

 AJAX/JS Framework Showdown - jQuery vs Spry

In an ongoing effort to put together our development standards at Amcom, we're currently researching AJAX/JS frameworks. The choices have been essentially narrowed down to Spry or jQuery.

I haven't done a considerable amount of work with either, but my personal preference leans towards jQuery. I'm more familiar with it than Spry (while I haven't really gotten my hands too dirty with it, I've used a number of jQuery plugins), and being someone who likes JavaScript I'm comfortable with the syntax.

The boss, however, being a big Flex guy, really gravitates towards the Spry syntax, as it's more familiar to him. The boss, being a fair and noble kind of boss (yes, he reads the blog), told me to go out and do an objective analysis of the two and see if one comes out significantly ahead of the other.

I built a few demo apps using each (http://amcomtech.net/labs/ajaxframeworks/) and from a technical perspective I have to admit, it's still kind of a tie.

[More]

 How I Learned to Stop Worrying and Love Eclipse

Here at Amcom we're starting to formalize our coding processes, which includes coding standards, tools, etc. While I don't think we'd ever mandate the use of a specific IDE (as long as the final code adheres to the agreed upon standards, it's not really important how it was created), we find that we keep coming back to Eclipse.

We've discussed unit testing and MXUnit (Eclipse plugin). We've discussed the CF8 debugger (Eclipse plugin). We've decided to use the ColdBox framework (which has Eclipse plugins). We do a good amount of Flex work (FlexBuilder being available as a standalone Eclipse product or as an Eclipse plugin). And of course, as a ColdFusion shop, there's CFEclipse (Eclipse plugin).

A few of us have been using Eclipse (and various plugins) for a while, but some have yet to make the leap. I recalled my first efforts to make the switch from HomeSite+ (previously ColdFusion Studio) to Eclipse, and some of the challenges that I faced.

I was a bit overwhelmed at some of the terminology like "Perspective" and "View" and don't even get me started on the concept of a "Project". It took me a good couple of tries switching back and forth between Eclipse and HS+ before I was truly comfortable developing in the Eclipse environment. I put together a document that was intended to be used internally to help demystify Eclipse as an IDE. At this point it's pretty basic and a work in progress. But it was suggested that it might have some value to the community, and might help others that are considering making the switch but having a hard time mentally reconciling the Eclipse environment versus their current environment. I've attached a pdf to this entry, available at the "Download" link below.

If anyone finds this to be useful, please let me know and perhaps I'll flesh it out a bit more. If there's anything in the document that needs further clarification or correction, please bring that to my attention as well.

BlogCFC was created by Raymond Camden. This blog is running version 5.9.002. Contact Blog Owner