I've been working on getting the excellent video sharing site Video.Show up and running on my home server for easy sharing of home videos with friends and family. Video.Show was developed by Vertigo software as a sort of blueprint for implementing silverlight applications, but I think it's pretty cool as-is.You can grab it from codeplex and see for yourself.

In order to get my videos ready for the site and uploaded to my silverlight streaming account, I have a simple command line application that scans my home video directory, adds the video to the database, and then kicks off the processing of it. The Video.Show implementation has most of the mechanics worked out including launching the Expression Encoder command line.

Things were working just dandy, videos getting processed and uploaded and then appearing on my site. Except some were causing the expression encoder to throw an unhandled exception. Some were for valid reasons - for example, I didn't have the required codec installed for some videos. (Why an unhandled exception is necessary for that is beyond me. It seems like a pretty common scenario). Anyways, I still had a set of videos that were causing the encoder to still throw an exception, and these were videos of the same type as others successfully getting processed.

Digging deeper I found that for the videos in question the command line encoder was throwing the following exception:

Unhandled Exception: System.ArgumentOutOfRangeException: The value must be great er than or equal to zero and less than the console's buffer size in that dimension. Parameter name: left Actual value was -4. at System.Console.SetCursorPosition(Int32 left, Int32 top) at Microsoft.Expression.Encoder.ConsoleEncoder.OnEncodePropChange(Object send er, PropertyChangedEventArgs e) at Microsoft.Expression.Encoder.PropertyChangedImplTarget.FirePropertyChanged Event(String strName) at Microsoft.Expression.Encoder.PropertyChangedImpl.Dispose() at Microsoft.Expression.Encoder.EncoderBase.b__3() at Microsoft.Expression.Encoder.MessageManager.SendToUIThread(MethodInvoker i nvoker) at Microsoft.Expression.Encoder.EncoderBase.FinishItem() at Microsoft.Expression.Encoder.Encoder.EncodeItem(ItemData item, PublishItem Info& publishedItem) at Microsoft.Expression.Encoder.ConsoleEncoder.Encode() at Microsoft.Expression.Encoder.ConsoleEncoder.Encode(ConsoleJob job) at Microsoft.Expression.Encoder.XmlCommand.Execute() at Microsoft.Expression.Encoder.Program.Run(String[] args) at Microsoft.Expression.Encoder.ProgramStarter.Run3[T](String[] args, RunAppH andler`1 runApp) at Microsoft.Expression.Encoder.ProgramStarter.Run[T](String[] args, RunAppHa ndler`1 runApp) at Microsoft.Expression.Encoder.Program.Main(String[] args)

I was still sort of baffled. I noticed that the expression encoder console application outputs to the console the percentage complete of the task, which seems perfectly logical to me. With this video though, it wasn't fitting on one line in the console window, because the file name for source and destination were big, so it looked like this:

Encoding: Playing-before-swim-lessons.wmv -> Playing-before-swim-lessons.wmv 0.1
%

Note the way the percent wrapped to the next line. I changed the properties of my command window to change the width from 80 to 100, making it so that the status would appear on one line, and what do you think happened?

it worked!

So there is a bug somewhere in the calculation of how to output the status line when dealing with wrapping.

Hopefully this helps someone else out.

I like listening to music while I work, and I like having all of my music at my fingertips. It used to be that I had to literally have a full copy of all my music on my work computer, until I found this cool service called Lala. It's a music service where I can have an application scan my home collection, and then play any song I own in my web browser, instantly making my entire collection available from anywhere.

Check it out: lala.com

I've been curious as to how exactly it handles the matching of the song I own to the song they have in their database. It appears that some songs just match, and others don't match, and they then upload the file into my account, so it's still available to me. Most curious is when it matches 5 songs from an album that has 10 songs. I would think it would match all of them, but maybe they only have the most popular five songs from that album in their database.

Anyways, I had scanned my library a while ago, and listening to different albums for the last few weeks, with no complaints what-so-ever. Today I started listening to Green Day's American Idiot. I was suprised to find that while the first two songs were the album versions, the third song, Holiday, was actually a live version from another album. I guess the matching logic still needs a little refining.

with no comments
Filed under: ,

Continuing with my list of the most important tools for any web tester to have in thier arsenal, I turn to a set of tools that give you the low level HTTP information related to your tests.

Let's say you are busy bug bashing on the latest build of your super cool world changing web service, and suddenly there is one portion of the page failing to load. Maybe it's a silverlight or flash control, or a complex javascript image loader, or whatever. Every tester should log that bug. However the really good testers aren't content with just that. They want to know why that portion didn't load. In another post i'll talk about tools you can use on the client to determine that the page is working just fine, for now let's assume that it is. So that means there must be a problem getting the resources from the server.

Maybe you have a special version of your web site formatted for mobile devices, but there is one particular device that isn't getting detected. Again, every tester is going to log that bug, but the really good ones are going to say exactly why it's broken. So how are you going to figure that out?

Enter HTTP Tracing tools. With these tools you'll be able to see exactly what the client is requesting from the server and the data it's sending, as well as the actual response from the server.

A really good tool for http tracing will 

  • let you see the raw http request and response, including headers and body
  • provide better visual aids for searching complex requests and responses
  • allow you to craft your own requests

Two great tools out there that meet these needs are Fiddler and Wireshark.

Both of these tools are useful, and you would be well served getting familiar with them. Fiddler is just an HTTP(s) proxy, so it will only show that traffic, while Wireshark is a full network sniffer, so it will show all traffic in gory detail, and you can filter down to just show the HTTP traffic if you want.

I've found that I use Fiddler mostly for the simple reason that I am only interested in the HTTP traffic usually.

Let me know if you have a favorite that's not one of these

with 2 comment(s)
Filed under: , ,

The primary deliverable for many testers are bug reports. A treatise on what makes a good bug report is a post in and of itself, so i won't drill into that part (now), but will say that it's true that a picture says a thousand words. I've seen many bug reports with very little information get tossed around in triage meetings for weeks without resolution, because the tester didn't do a great job explaining the issue. I've also seen many bug reports with tons of information get tossed around in triage meetings for weeks without solution, because the triage team didn't want to wade through reams of complicated explanations.

Enter the screen capture tool - It's amazing how much a screenshot can help move a bug along. Everyone instantly grasps the problem without having to figure out what you are trying to say, and can make decisions quickly, plus you don't have to type so much.

So what are good tools to use for this? For me I look for a few different features: 

  1. Easy to invoke
  2. Provides basic cropping
  3. Provides ability to highlight specific areas
  4. Integrates well with my bug reporting tool

My current screen capture tool of choice comes from the reporting tool we use, FogBugz Screenshot. It sits in my system tray, a single click on it takes a screenshot that i can then crop, add highlighting to, and then either append to an existing bug, or create a new bug.

Check your current bug system and see if there is a similar facility, you'd be suprised how many of them actually provide something.

If your bug system doesn't there still are lots of other great screen capture tools out there. I've been using the Snipping tool in Windows 7 a lot recently as well. This lifehacker post has a list of a bunch of other great ones.

If you want to get really sophisticated you can grab one that actual makes recordings for complicated scenarios, like this tool

Obviously if you are working on something that doesn't have a UI to take a screenshot of, then this isn't specifically helpful, but your takeaway should be about determining the best way to get your bug across visually. We have an image transcoding service without a UI, but providing before and after images as well as expected image helps get the point across alot better than a few lines from an error log.

with 3 comment(s)
Filed under: , , ,

I was planning on giving a talk to my test team at Nokia about great tools for web testers, and then the hammer dropped, and won't be able to. I was planning on blogging about them anyway, so my next few posts are from a version of that talk.

Before I do that, I wanted to put them in perspective. This list is by no means comprehensive, and i'm quite sure I missed your favorite tool. If you have cool tools for testers, please let me know in the comments! This list is also a bit targeted at testers of web platforms or web services, although some are applicable across the board.

Finally, all the tools in the world won't help without an intimate understanding of the software you are testing, and the platform it is running on. If you are testing a web site built in ASP.NET running on .NET 3.5 and IIS 7, you should know exactly what it means to be running ASP.NET 3.5 websites on IIS 7 even before you get into the intracies of the web site itself. This principle is the same if you are running Ruby sites on Linux. Make sure you know the gotchas of the platform, or the freebies that developers get from the platform. Understanding that will bring you great insight into a better class of bugs that are the real shipstoppers.

 

with no comments
Filed under: ,

I've been playing Jewel Quest on XBox live Arcade recently. The essential point of the game is to match 3 or more gems of the same kind to color the squares they are on gold, removing them from the board, repeating until all the squares are gold. The game board refills with new random gems when you remove some. 

Learn more about the game here

In any event, you start the game with 4 or so lives, and you get a new life after every 50,000 points scored. Also, you are allowed anywhere from 3-5 moves on a board before restarting the board costs you a life.

Of course, if you are going to spend time gaming, might as well spend time finding bugs too :)

Bug number 1: Unlimited lives - Get very close to a free life in your score, like 2-3 moves close. Let time run out on the board, or complete the board if you are that close. You'll start the next board within 3-4 moves of a free life, go ahead and make those moves. Now, restart the board. Here's the bug, your score resets to what it was before you started the board, which is correct, but it doesn't reset your number of lives. You can pretty much earn unlimited lives by making a few moves, getting that free life, restarting the board, and repeating this.

Another aspect of the game is making cascading matches. You match 3 gems which causes the ones above them to fall, in turn making a match, etc

Bug number 2: Points after restart - This is in combination with the first bug. If you make a match that you know will cause cascading matches, press start immediately after you match that initial match, and choose restart. The game resets your score immediately, but then allows the cascading to continue, increasing your score before the board actually resets. This one isn't as useful as the first one, but still interesting to see.

with no comments
Filed under: , ,

It's that time of year again, so the family went for Santa pictures. We've been going to the same photographer for the last 7 years or so, so all of our Santa photos are essentially the same - Same Santa, same setup, just growing kids and aging parents :). This year though the Santa was different, and not even remotely close to looking like the other Santa's. We were there so we took the picture anyway.

Of course we paid the going rate for a Santa photo, and the 5 minutes of photographer time it took for the session, we even sprung for the extra copy of the photo on disk. Here's what we got:

Share on Ovi

Yes it is 2008 and yes that is a floppy disk. I no longer own a computer that has a floppy drive, so i don't think i'll be getting that photo anytime soon. But of course what would the point be? What digital camera takes a decent photo that fits on a 1.44MB floppy anyway? The photo on this disk is for the "web", it's really reduced in size. 

Talk about timewarp. 7 years ago, this seemed perfectly logical. Everyone has floppy drives, not alot of folks have advanced digital cameras, and you always reduced the size of a photo to a thumbnail put it on the web because otherwise it would take forever to load.

with no comments
Filed under:

A few weeks ago I was fortunate to be able to attend the Google Test Automation Conference here in Seattle. While the name of the conference implies that it’s all about Test Automation, I found it to actually be a little broader than that, aiming at testing in general. Certainly it was one of the first technical conferences I’ve been to where you didn’t have to explain to other people what a tester is or what we do.

 

Many of the talks had great impressive titles that it seemed the 2 days would be awesome. In actuality some of them fell a little short of the lofty goals of the title and abstract of the talk, but all in all, a great conference.

 

As a software tester, some of my takeaways from the conference:

- Move away from large system tests towards smaller, focused, modular tests.

- Stop writing your own tools, the ones you need are likely already out there

- Start thinking outside the box as it relates to Virtualization - It's more than just getting more machines.

I'll probably post on these more in the future.

 

All of the talks are posted on YouTube.

You should also check out the Google Testing Blog.

with no comments
Filed under:

Wow, over a year since my last post. Alot has happened. I work for Nokia now, not Microsoft. Instead of working on ASP.NET, i'm working on a real Internet Service built with ASP.NET (http://share.ovi.com)

I am officially rebooting this blog today,I've changed the title for now. I'll be posting about more than just ASP.NET and Testing software, so that title wouldn't fit.

I want to talk more about software problems and how they are getting solved. I want to help folks host large scale ASP.NET  applications the right way. I want to share my hobbies and interests.

(Insert your favorite reboot sound here)

We've officially released ASP.NET 3.5 today, you can get it as part of .NET Framework 3.5 from here. This download includes SP1 for both .NET Framework 2.0 and 3.0 as well.

So what's new in 3.5?

  • The AJAX Extensions are now a core part of the product. You won't need to install the AJAX Extensions separately to get ScriptManager, UpdatePanel, etc.
  • LinqDataSource
  • ListView
  • We've also fixed a lot of the issues submitted via Microsoft Connect in 2.0 SP1

There's a ton of great videos to get you started with the new 3.5 features here.

Alongside this release, is a new Visual Web Developer 2008 release that you can get here.

Finally, we've updated the standalone Script Library download. If you move to using 3.5, and you need the standalone scripts as well, you can get them here.

Soma has more details about the larger Visual Studio 2008 / .NET Framework 3.5 release.

(this must explain why i haven't blogged in months, right? :))

More Posts Next page »