Upload with Uploadify running in public_html folder

Just to try it out I tried to get Uploadify to work in my public_html folder. I set it up according to the guidelines in the docs/example and ran. It returned success but the file wasn’t uploaded.

My first debug idea was to add an alert to the onError event. It wasn’t triggered.

My second idea was to try and print the response in the onComplete event. I added:

'onComplete': function(event, queueID, fileObj, response, data) {
    alert('onComplete: ' + response)
}

and it returned:

Warning: move_uploaded_file(/var/www/home/ola/public_html/uploadify/uploads-folder/test-image.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/ola/public_html/uploadify/_lib/uploadify.php on line 40

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php1rJUsg' to '/var/www/home/ola/public_html/uploadify/uploads-folder/test-image.jpg' in /home/ola/public_html/uploadify/_lib/uploadify.php on line 40

I guess it’s some rewrite issues when Apache rewrites the /home/ola/public_html folder to /~ola.

I opened uploadify.php (the ”server side code” for Uploadify) and replaced:

$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';

with:

$targetPath = $_REQUEST['folder'] . '/';

And it worked.

Write to TinyMCE in a WatiN integration test

Last week I worked on some integration tests in Selenium. Today I’m redoing the same test in WatiN to get a feel for both tools.

Since the application uses TinyMCE for most of it’s text inputs I had to find a way to write to it within the tests. With Selenium Nick Bartlett had a solution. For WatiN I used the Eval method and executed the setContent JavaScript method in the TinyMCE API.

var js = "tinyMCE.get('tinyTextAreaId').setContent('some html');";
var s = Document.Eval(js);

This would work just as good with Selenium and it has one advantage over setting the text areas. It executes the eventual cleanup rules in TinyMCE before it sets the text.

Start and stop Selenium Server with NUnit

I want to have our Selenium tests to run automatically the same way as our other NUnit tests does. This means that I want to have the Selenium Server started automatically before running the test cases.

  1. I started by downloading the Selenium RC and unzipped it to C:SeleniumSelenium-RC
  2. I created a .NET project where I referenced the ThoughtWorks DLLs in C:SeleniumSelenium-RCselenium-dotnet-client-driver-1.0.1
  3. I added a new class to where I copied the Selenium getting started C# class
  4. I added my own TestFixtureSetup and a TestFixtureTeardown to this class. TestFixtureSetup launches the Selenium Server and TestFixtureTeardown closes it

Here is the class for starting the Selenium Server and the example Selenium test.

using System;
using System.Diagnostics;
using System.Text;
using NUnit.Framework;
using Selenium;

namespace Test.UI.Web.Selenium
{
	[TestFixture]
	public class SeleniumGoogleTest
	{
		private ISelenium selenium;
		private StringBuilder verificationErrors;

		private Process seleniumServer;
		private readonly ProcessStartInfo seleniumServerProcessStartInfo = new ProcessStartInfo("java", @"-jar C:SeleniumSelenium-RCselenium-server-1.0.1selenium-server.jar");

		[TestFixtureSetUp]
		public void TestFixtureSetup() {
			seleniumServer = Process.Start(seleniumServerProcessStartInfo);
		}

		[TestFixtureTearDown]
		public void TestFixtureTearDown() {
			seleniumServer.CloseMainWindow();
		}

		[SetUp]
		public void SetupTest()
		{
			selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://localhost:4444");
			selenium.Start();
			verificationErrors = new StringBuilder();
		}

		[TearDown]
		public void TeardownTest()
		{
			try
			{
				selenium.Stop();
			} catch (Exception)
			{
				//Ignore errors if unable to close the browser
			}
			Assert.AreEqual("", verificationErrors.ToString());
		}

		[Test]
		public void OpenGoogleWebSite()
		{
			selenium.Open("http://www.google.com");
		}
	}
}

Enjoy!

Fix for WordPress, AutoFocus and wide images problem

Update: I uploaded my version of AutoFocus to Google Code.

I’m building a photo blog to show mostly panoramas using WordPress with the AutoFocus plugin. It works fine but I had one issue.

My panoramas are often in 8:1 (width-height) proportions. When I scale the images it means that I get images that are about 100 px high at 800 px width. It makes the images wrap around the div on the first page in the AutoFocus theme.

Wordpress-AutoFocus-Issue

To fix it I installed the Additional image sizes plugin.

Wordpress-AdditionalImageSizes

I configured it to make 800 x 300 images with cropping. I called them 800x300Crop.

Then I added three lines to the function the_post_image_url($size=large) in the functions.php file in AutoFocus. See the code on Google Code.

// Post Attachment image function. Image URL for CSS Background.
function the_post_image_url($size=large) {

        global $post;
        $linkedimgurl = get_post_meta ($post->ID, 'image_url', true);

        if ( $images = get_children(array(
                'post_parent' => get_the_ID(),
                'post_type' => 'attachment',
                'numberposts' => 1,
                'post_mime_type' => 'image',)))
        {
                foreach( $images as $image ) {
                        $attachmenturl=wp_get_attachment_image_src($image->ID, $size);

                        // Added for panoramas
                        // Use the Additional image sizes plugin to generate images that
                        // are 800 x 300 px (cropped) that can be used if the original image
                        // isn't big enough (width or height) when downscaled
                        if($attachmenturl[2] < 300 || $attachmenturl[1] < 800) {
                                the_post_image_url("800x300Crop");
                                return;
                        }

//Keep the rest of the function

It seems to work. Enjoy!

Pair programming – Research

I’ve read up on some pair programming research. Here is the different papers I’ve read. With a short description for each.

Strengthening the Case for Pair-Programming

They compare results from professional developers working with and without pair programming and teams at the university doing both pair programming and non pair programming. In all cases pair programming deliver better results.

Promiscuous Pairing and Beginner’s Mind: Embrace Inexperience

The optimal time between switching partner is 90 minutes and inexperienced developers solve problems both faster and better that people with previous knowledge about the problem. Beginners luck or just that you are more open without a baggage of experience?

A new developer was totally integrated to the team within 3 weeks of work. When not pairing they noticed a huge impact on productive. In 18 months the longest time it took to find and fix a bug was 6 hours. They also found out that a team is most productive when they own, manage and assign all tasks themselves.

The Agile Toolkit Podcast did an interview with Arlo Belshee Tue, 9 August 2005

Adventures in Promiscuous Pairing: Seeking Beginner’s Mind

They verified the performance boost described in Promiscuous Pairing and Beginner’s Mind: Embrace Inexperience, which means short times (~90 min) between changing pairing partner. They verified the results but it also broke the team.

A Study About Pair Programming in Practice

During a course at Lund University the students answered two surveys about pair programming. The first before the course. The second after.

The students were a bit more negative to pair programming after the course.

Practical recommendations about how to assign partners and tasks. What role should a team coach have in a pair programming team. How often you should change partners.

Most important personality types are not technical skills but social skills and worst personality types are dominant and ineffective.

Weaker developers liked pair programming more than the strongest.

  • Authors: Mia Nyström, Johan Rix, Karin Wanhainen at Lund University
  • 2002
  • Original title: En studie om parprogrammering i praktiken
  • PDF: NystromWanhainenRix.pdf
    Appendix: http://www.cs.lth.se/EDA270/Djupstudier/Articles/2001-2002/NRW-bilagor.pdf

Pair programming – Podcasts and tools

Coding QA Podcast – Episode 30 Pair Testing

  • Pair testing makes you more open to think about the customer and corner cases
  • You increase creativity by helping each other to see new solutions
  • If you are having a bad day there will be someone helping you out
  • You’ll be more effective pair programming
  • Important to create an uniform workstation so you can pair on every workstation
  • The rule: You aren’t forced to seek out pair programming but if someone asks, you to, you are required to join

Link: http://codingqa.com/index.php?post_id=561862

Tools

Pair Programming Timer

A simple, egg clock like, timer that can be used to help you keep track of when to change driver.

Project page and Project blog

focus booster

focus booster is a simple and elegant application designed to help you eliminate the anxiety of time and enhance your focus and concentration.

Can be used as a pair programming timer. Visit the Project page.

Remote pair programming

See: http://olofb.wordpress.com/2009/03/14/remote-pair-programming-experiment/