We are getting really close to being able to release all of our Selenium functional tests and JSUnit unit tests to our developer community! Ryan has been doing a kick ass job of bring Cruise Control back from the brink and we are being way better about actually running all our tests
With Cruise Control we can now check out our web based dashboard to see the results of automagical test runs and builds or do a manual build. We can even see the results of our Java based Selenium functional tests online.
By abstracting much of the Ajax and DOM leg work into base classes we get really clean Java based functional tests that look something like this: clickCell(2,2);
assertEquals("Some cell value", getSelectedCellValue());
What could be easier? It is also nice that it is run from Java since I can just create a Java project that references all my Ajax tests then compile and run them individually on my development computer using JUnit. Then they can also easily be called from ANT build files and Cruise Control as well.
I will be posting some more about Ajax testing soon.
My good friend Ian Kirby runs a small company named Sequence where they handle everything from web design to motion design to feature films and DVD authoring. They also share office space with Nitobi and _always_ lose at foosball.
Most recently they did some very well received animated shorts for the latest Will Smith production I Am Legend.
Adobe is at it again with the OnAIR bus tour European leg.
There will be two legs this time one in the west and one in the east.
Of course the most exciting part is that Andre will be joining the party again for both legs and talking about all the Ajax goodness that AIR has to offer. So if you are a Nitobi customer in one of the tour cities be sure to contact us and meet up with Andre!
It came up when, thanks to the great performance of our Grid component, a customer wanted to have about 35 grids on a single page for a very complex ordering system. Now as is usually the case, by the time that people come to us to help them they usually have a pretty firm business case for their application and don’t want to change the overall information architecture and the like - so we had to figure out how to get 35 grids running in Internet Explorer.
The problem arises from the fact that for a live scrolling grid where blocks of data are dynamically inserted into the page as the user scrolls, each grid needs its own stylesheet since the column widths and a few other parameters are defined on a grid/column basis and need to be changed globally in a lot of cases; for example, when a column is resized we need to be able to just change one CSS rule and have the widths of all the relevant HTML nodes get updated.
The worst part is that there is even a difference between IE 6 and IE 7 - w00t. In IE 7 it has no problem with just creating one stylesheet and continually appending or overwriting that stylesheet. So that was a pretty easy fix to have a global stylesheet instead of one for each grid. Then comes IE 6… in IE 6 it seems that you can’t even write to the same stylesheet object more than 31 times (or some number around 31 I am not really sure).
So what was the solution for IE 6? We essentially had to make a registry of all the components on the page that keeps track of which components were done initializing and then when all the components are ready create one huge stylesheet and write the contents only that one time. Failing to use this approach meant that IE 6 would just crash.
The other approach that we of course considered was using addRule on the stylesheet object to inject each of the CSS rules into an existing stylesheet rather than writing the stylesheet. I quickly learned that addRule is ridiculously slow in IE. Something like on the order of 30ms to add a rule. So ~35 grids * 50 columns per grid * 30ms per addRule = way too long. Retarded.
We now almost have everything working with > 31 grids. Joy.
Recently when I tried to log in to my online bank account I was asked the following security question to validate my identity: “What is your favourite television show?”.
Of course normally I would answer Dallas in an heartbeat, however, I have been watching the Designing Women marathon this week and I am re-living the early romance I had with it.
Needless to say who comes up with temporal security questions? My favourite X changes from week to week so just stick to things that don’t change like your first car, first high school, first wife etc.
Pretty much all the desks had people hacking and there were five of us around the boardroom table writing code. Hopefully everyone will update the wiki with their names and projects. There was a collaborative flex app, a Rails web application, a blog API written in merb, a Facebook app, foosball cup holders, an iPhone app, declarative YUI components, a command line twitter client, and a few others that my hangover is preventing me from recalling. Hopefully people will update the wiki with the full list.
Ryan had the best hack that was an Adobe AIR application that controlled music being played on a different computer - way cool and hopefully he will polish it up and release it for everyone! For his efforts Ryan won a copy of Adobe Creative Suite Master Collection!
There is still lots of beer left at the office so I am sure that this will be a productive week coming up.
Thanks to everyone who participated and hopefully we will have another hack day in a couple of months.
FutureShop has a great search feature. When you enter a search string that has no results they helpfully suggest you try searching again, however, they don’t present a search box nor even a link to get back to the search page. Maybe the search functionality on their site is server intensive and so want to prevent the low IQ crowd from entering too many difficult searches?