« September 2003 | Main | November 2003 »

XSLT: Sum of products from multiple nodes

October 31, 2003

The XSL method sum(/foo) sums the value of all foo nodes in current context. If you, however, want to sum the product between two or more nodes the sum(/foo * /bar) is not sufficient as the product does not return a nodeset and thus sum() fails.

I found one way to sum products of multiple nodes and is to construct a temporary variable with the products, convert that variable to a nodeset and the sum all nodes in that temporary node set.

The function that converts a variable to a nodeset seems to be XSLT specific and the solution below is for Xalan since we are using it in our app. If you are using MSXML you will have to change the namespace but the name of the function is the same.


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

    <xsl:template match="/Order">
    <xsl:variable name="tmpTotal">
            <xsl:for-each select="OrderLine">
                    <xsl:value-of select="Quantity/Amount * Price/UnitPrice"/>
            <xsl:variable name="myTotal" select="xalan:nodeset($tmpTotal)"/>
            <xsl:value-of select="sum($myTotal/total_amount/item)" />

Concurrent calls to the same session object not allowed

October 30, 2003

That is the error you get if you are trying to access the same instance of a stateful session bean (SSB) with more than one thread.

Our reference to the stateful session bean is stored in the HttpSession object and passed to a stateless session facade. In our scenario the error occurs because we are using framesets in the web tier and up to three threads may be trying to access our SSB at once.

When the header and middle part of a web page request information from the SSB via the session facade, the container will then make three instances of the session facade available to serve each call but each of these instances is trying to access the same instance of the stateful session bean.

A quick search on Google (as always) showed this is a common problem but I was not able to find a quick solution. One of my colleagues suggested that I should try "synchronization" which I did with what seems until now a success.

In my session facade bean, I surround all accesses to the stateful session bean with synchronization blocks, locking on the SSB. This will prevent more than one thread accessing the SSB; once a thread has entered the SSB any additional threads will be queued.

public void submitText(TextTo text, TextSessionLocal textLocal) {
        log.debug("ENTER submitText(TextTo text, TextSessionLocal textLocal): "+text);
        synchronized (textLocal) {
            //set message data in SSB
            .... more code
        log.debug("EXIT submitText(TextTo text, TextSessionLocal textLocal));

One might ask what impact this may have on the performance. Because it will only be one single user that will be accessing the same instance of a SSB I don't think the performance will be detoriated by much but later stress testing will show more.

Stateful session beans should be avoided if possible. Especially if purpose of it is for storing some HttpSession data, like intermediate steps in a shopping process. It is recommended then to store the partial information in the HttpSession and as a last step to use a stateless session bean to perform the business logic. Well, maybe next time ;-)

Update 05/11/03
This QA about EJBs article from Sun is very related

I think we'd better throw some water at it

October 29, 2003

fire_place Last night was very cozy, to start with at least.

I, being the man in the cave, started a fire. After a small celebration that included me dancing around with raised arms and emitting guttural sounds, we went back to the vice of watching TV. Chumbo had prepared an exquisite cheese fondue and it felt so right due to the cold and rainy weather outside.

The problem started when the candles on the side of the fireplace started melting from the heat. A pool of melted wax was building up under the cast iron fire place and slowly caught fire. We got suspicious when flames started coming out from the sides.

"I think we'd better throw some water at it", Chumbo said.

The thing is that water thrown at burning wax just infuriated it and for a moment I thought this would escalate. Fortunately, throwing even more water at the fire killed it.

Then again, killing the fire produced some seriously thick smoke so I hurried of to get the BBQ from outside to move the logs over to it and then rushed out again. There is nothing like some everyday excitement... living on the edge you know... always pushing the envelope and stuff :-)

Oh, and when listening to a lighter to find out whether any gas is coming, make sure to "click" it before putting it close to your ear or else you will end up, like me, with fried ear hair.

FOR SALE: Delonghi Rapido Oil Filled Radiator

October 28, 2003

DelonghiRapido.gif After installing central heating and re-opening the fireplace, we will not be needing this fella anymore. It is almost new, used less than 30 times.

This 3kW Delonghi oil-filled radiator offers you warmth quickly and effectively thanks to its large surface area. With 7 heat settings, thermostat and frost protection. For complete portability the radiator is on wheels. H64.5 x W68 x D24.5cm.


New price £130 (eg JohnLewis), our price: £75


Chilly in Lodon

October 27, 2003

pumpkin.gifI will probably not put it better than was done at theThe Hiding Place but it is getting chilly in London. It feels like yesterday when I was cycling to work in shorts and t-shirt (during weekend of course due to dress code). Now dressing in the morning is a longer ritual including multiple layers of garments, a scarf, a hat and some gloves. At least it's sunny and crisp.

Holiday tickets to Sweden and Brasil are booked so that's one less thing to worry about (obrigado chumbo). If you are in the vicinity of Copenhagen, Helsingborg or Sao Paulo in late December then let me know!

A Halloween party is being planned. I don't quite remember why but the theme will be porn (yes I said porn). I will be downloading some "material" later this week to create the right atmosphere at the party.

... and I can't stop whistling two tunes from Kill Bill, Vol 1. It's the Twisted Nerve by Bernard Herrman and Woo Hoo by and it's driving my colleges crazy :-D. "Watch the movie and sing-along with me", I tell them.

Kill Bill, Vol. 1

October 27, 2003

Well this must be the most violent movie in a very, VERY long time. It's not one of those psychologically violent movies where the scary images are in your mind. It is instead a movie filled with blood, spraying blood and congealed blood. It is not a movie for the fainthearted.

Nevertheless, it is a very captivating film mostly due to its chic soundtrack and heavy Japanese influence. Is it just me or is everything Japanese bizarrely cool.

The movie has the standard Tarantino-style irregular time line in which you are thrown in at the middle of the movie and only later you are revealed details about how things started. This time it is bit easier to follow since we are shown chapters and the number of next victim to be killed.

Apparently, making a two part movie started of as a joke when the movie running time was closing in to 3 hours but later it was not so funny anymore and the decision was made. To me it just seems to follow this years trend of sequels and sequels to sequels.

Kill Bill at IMDB

Wildlife photography III

October 26, 2003

Canon EOS-5, Sigma 300 mm macro, f/5.6, Fuji Superia 100

This photo was taken by Carla. It is of an indigenous insect as it was hanging leisurely of the beautiful flower. It is not so much wild life photo as it is stunning composition and colours. I only wish I had taken it my self!

(This series of wildlife photographs is to highlight the Wildlife Photographer of the Year 2003 Award and exhibition).

java.io.Reader issues

October 25, 2003

I have developed an XML converter that is based on the Castor framework. It is quite simple as it takes certain Java objects (beans, collections and maps) and returns an XML representation.

Actually I have implemented it so it returns an InputSource which goes well with the next step in the process, the Xalan transformation.

The problem I am having is that the InputSource can only be used once whereas we would like to use it multiple times. At least once to log the converted XML and second time for the XSLT. As soon as the input source has been used for logging purposes of the XML, the internal reader is empty and I have not found any way of resetting it.

I see two solutions. Either redesign the XMLConverter to store the XML content internally in a different way or write a utility that copies the content of one reader to another reader, while it outputs the content.

Wildlife photography II

October 24, 2003

Canon EOS-5, Sigma 300 mm, f/5.6, UV Filter, Fuji Superia 200.

We were on a half day cruise along a river in Lengkawi, Malaysia. With us was a very knowledgeable biologists that was explaining about everything around us; from plants to eagle habits.

The highlight of the trip was following around 15 eagles circling around our boat. I felt I really pushed the EOS by using eye focusing, tracking and shutter-priority mode. See more eagle photos.

(This series of wildlife photographs is to highlight the Wildlife Photographer of the Year 2003 Award and exhibition).

I Am David by Anne Holm

October 23, 2003

iamdavid.jpgIf you have come here looking for information about the book I Am David by Anne Holm unfortunately this web site is about me, David Kaspar.

You can buy "I am David" at Amazon.com or Amazon.co.uk.

Or take some time to read my blog which is about the Internet, photography, gadgets and my daily ponderings.

David Kaspar

Due to comment abuse, the comments have been disabled. Please use the I Am David by Anne Holm forum for any discussions.

Wildlife photography

October 22, 2003

Nikon F6006, Sigma 80-250 mm, f/5.6, UV Filter, Fujichrome Sensia 100.

One of the most annoying things while travelling along the Amazon river, Brasil is the amazing amount of mosquitos. The shot was during sunset.

(This series of wildlife photographs is to highlight the Wildlife Photographer of the Year 2003 Award and exhibition).

Swedish meatballs

October 20, 2003

swedishmeatballs.jpgSome of the more Swedish dishes would be herring, smoked salmon, beef with beet root and fried potatoes and sausage cubes (pytt i panna). Swedish Meatballs, though, is probably the most Swedish dish of all dishes. You can find the ingredients anywhere in the world.

For 4 - 5 portions you need: roughly 400 g of mixed minced meat; 3/4 dl of bread crumbs (you can also crush dry white bread); 2 dl of milk; 1 - 1,5 teaspoon salt; 1/2 teaspoon white or black pepper; 1 tablespoon grated onion; 1 egg.

1. Preparing:
First of all mix the bread crumbs with the milk. Let stand for 10 minutes, otherwise the meatballs may get a taste of bread Meanwhile, mix the minced meat with the salt. The salt actually helps the mince stay together. Add pepper, and if desired also other spice, such as ginger, and the onion.

Now add the milk and bread crumbs mixture, and the egg. The egg makes the whole mixture more porous and easier to fry. Mix the ingredients well, but don't overdo which could result in that the fat escapes from the meat. Don't use a kitchen mixer, use your hands!

2. Frying:
Roll the mixture to balls, about 20 - 25 mm in diameter / 1", using your hands. Washing your hands in cold water now and again makes the rolling easier. Place the balls on a cutting board that has been rinsed in water (prevents the balls from sticking). Heat butter in a hot frying pan. Place the balls in the pan, but not all at once. Shake the pan now and again so the meatballs get fried on all sides. Once they have obtained a golden brown colour, reduce the heat and let them fry for another 3 - 5 minutes, depending on size. Do not cover the frying pan.

3. The gravy:
After each batch of fried meat balls, pour some water into the frying pan and stir. Pour the water into a pot. This is the base for the gravy. When finished frying, stir flour (mix with cold water before adding) into the gravy and spice with soy sauce.

4. Suggestions for serving:
Swedes enjoy their meatballs with boiled potatoes and lingonberries. Pour the gravy over the meatballs and potatoes when serving. Yummy! Some also like their meatballs together with stewed macaroni.

Wildlife Photographer of the Year 2003

October 19, 2003

I have just been to the Wildlife Photographer of the Year 2003 Exhibition at the The Natural History Museum, London. It had an amazing display of photographs in various categories like Animal Portraits, Composition and Form, The Underwater World, In Praise of Plants and more.

It was great to always see the equipment used and the exposure settings. One amazing photo was taken in the middle of the night, with three subsequent flashes and a shutter speed of 24 minutes (!). It only took the photographer 6 months to make exposure tables to enable him to take the shot.

If you cannot attend the exhibition then at least browse the web site and be inspired.

To highlight this occasion I have searched my collection and will be showing some wildlife photographs during the next week.

Nikkon F6006, Nikkor 300mm, f/11, UV Filter, Fujichrome Sensia 100.
A native bird drinking in the Los Flamencos National Reserve, Chile.

And all that Work

October 18, 2003

I wish the title was saying 'And all that Jazz' but it is not because it is Saturday noon and I am working. At least it is from my own bed and with Ginger next to me.

The annoying thing with the recent project has been lack of design and the scope of technologies that are in use simultaneously. I have no problems working with a couple of those technologies but all at once takes away some of the concentration.

We are using an unorthodox mix of Data Access Objects (DAOs) and EJB 2.0. What we learned was that you have to watch out not using both technologies to update your precious data base tables. If you do, the EJB container locks the tables and your DAO methods start failing and rolling back to left and right.

I have previously used XDoclet to help with the formalities of EJB 2.0 and Struts framework. This time we have not taken the time (pun intended) to set up XDoclets so it is a pain every time the data model changes or the EJB implementation is updated and the interfaces need to be updated accordingly. At this point of the project, nearly end, it doesn't make sense to start adding XDoclet tags and modifying the Ant build scripts but I have made a mental note to use XDoclets from the beginning next time.

The front-end is prepared for internalization and device independent rendering by using XML/XSL. I found that the Castor frame work is great for converting your complex Java objects to an XML representation. Later Xalan is used for the XSL transformations. One trick from the big bag of tricks is to have dynamic XSL style sheets by using JSPs. This allows us to use constants from our standard Java interfaces and to internalize our pages with the help of JSTL.

Axis framework is a great help for setting up web services for cross application wide services and sending those SOAP calls.

There has not been as much JUnit testing as we first anticipated due to lack of time. Instead of writing JUnit suits for all classes I have only written tests for core utilities that are used by several modules in the application. It was quicker to write the tests and making sure the utilities pass than to face kludgy code that would need thorough debugging.

The mix of everything is fun but just when you are getting groovy with the required on-the-fly design and UML modeling you are interrupted by some nasty JavaScript debugging or even worse, CSS problems.

I wish we find the resources to have a couple of front end developers (scary, MS Word just highlighted the last word because it found the same entry in my Outlook contacts, too smart for my liking).

Feed your mind

October 17, 2003

Did you know that you can access over 500 courses from the prestigious Massachusetts Institute of Technology (MIT)? The best part is that it is for free through the MIT OpenCourseWare (OCW).

You have access to lecture notes, assignments, exams and more to anything between Japanese I and Nonlinear Dynamics and Chaos.

I can definitely recommend you to have a look at the mouthwatering selection of physics courses. I did and found more gems than I can shake a stick at.

[via M Sinclair]

Rooftops in Krakow

October 16, 2003

This view is from the The Wawel Royal Castle in Krakow, Poland. It was quite late and I was lucky that there was enough light to capture the roof tops with the moon in the background.

Of course I used the self timer to avoid motion blur, just like described in earlier advice on low light photography.

Old meets new

October 14, 2003

Hidden in the back streets of East London you will find some breathtaking views.

Like the proud remainders of a 14th century building with a futuristic 21st century tower in the background.

Once there lived one of London's richest business men in the old building; now the modern tower is occupied by a multitude of offices.

Emergency evacuation

October 13, 2003

We are currently the proud owners of three aquarium fish: a red ryukin called Sushi, Ze who is a black moor and Sly, some fast fish. They all live happily in the state-of-the-art Bi-Orb.

Well, they did until yesterday.

I noticed that Ze was having serious problems staying below water. He had to swim furiously to get anywhere below the surface, most of the time he was just bobbing around at the surface. Closer look at the aquarium showed that there was a lot of algae and that the filter was really dirty, thus Ze feeling ill.

So at 11:45 pm an evacuation operation commenced. The fish were moved to a temporary bowl and all the water was drained. I cleaned the inside of the orb from accumulated algae and was lucky enough to have a spare filter to replace the grubby old one. We put Sly in a separate pan because we suspect that it is he who has been eating too much and producing too much, eh, stuff.

Sure enough, Ze started to recover as soon as he was taken out from the old nitrate rich water. We are still not sure of the outcome but will be putting back the fish into the orb later today so will see then.

Hang in there guys!

Update 14/09/03
The fish are back in the BiOrb and I am glad to say that they have fully recovered. Mission accomplished.

Update 22/09/03
Sad, sad... shortly after being put back in the BiOrb both Ze and Sushi contracted some kind of fungus infection. After 4 days of medication they passed away. Sly is still alive and kicking and we'll be going to the pet shop this weekend to look for a new Sushi.

Werewolfs, vampires and a cute clown fish

October 11, 2003

"Underworld" was a very dark movie indeed. You are thrown into a battle between werewolves and vampires and it is hard to tell who is who. During the course of the movie you change your opinion about who is bad and who is good; several times.

The music and the dresses were very much inspired by The Matrix. Tight leather suits and sunglasses dominated the movie; as did the large amount of firearms.

The characters dreams and hallucinations used the same technique as was used in the Lord of The Rings when the ring was worn.

Movie buffs like us are not satisfied by one movie alone so we went straight to the next performance which turned out to be Finding Nemo.

The contrast between the two movies was surreal to say the least. From blodspitting and carnage in Underworld to cute animations and lovable characters in Finding Nemo.

Turtastic movie duuuuude.

This week in brief

October 10, 2003

If you are a web designer and using embedded objects (Applets, ActiveX, Flash and etc) in your web pages, you will have to have a second look at your pages. Microsoft has responded to the judge decision by making changes to IE. There is a patch to be downloaded that will break your IE or you can wait until January next year when new systems are expected to ship with the "patched" IE. This is what the visitors to your page will see:

There are however workarounds so visit MSDN to learn about them.

SunnComm recently released a new CD copy protection method. It was quickly bypassed by a Princeton University graduate student. He exposed it as utterly lame in a recent paper. When I first saw this I was worried that SunnComm might try suing the student under the DMCA legislation. Not long after, the law suit was a fact. Is it just me or does it seem as if SunnComm is desperately trying to cover up their incompetence?

The source code for Half-life 2, this years mostly anticipated computer game, was stolen from Valve earlier this week. A hacker had planted keystroke recording software on several of the companie's computers and was able to access the source code repository.

The company claimed only non-vital parts of the game were stolen but the hackers have now released a workable version of Half-Life 2. This indicates that maps and images must have been stolen along with the source code.

So now you know ;-)

Yes we have no coffee rant

October 09, 2003

It was 9:15 am and I was late for work. Still I decided I had time for a quick coffee and maybe a bite. Costa Coffee is always fresh and there is one on the way to work.

Today the place was empty which should have been a warning. After deciding for a grande vanilla double latte I was grandly disappointed by the announcement that the coffee machine(s) were broken.

Common, you are a coffee shop. If I did not come for a fluffy, creamy and slightly nutty latte then what? To drink some water or eat a banana or... wait for it, have some rancid instant coffee? Put a big red sign up saying "no coffee in this coffee shop today" or just shut your doors.

There, much better.

Why do dogs sniff each others hind quarters?

October 08, 2003

I bet you have been asking your self this very question a few times. Carla's late grandfather once told the reason and it has stuck with me ever since.

You see, a long, long time ago there was a dog party being held and it was one grand party. If you were any kind of quality dog you had to be there. The party was so popular, in fact all the world's dogs were there.

The dogs hung their tails in the cloak room as soon as their entered the party because this was a party with style. They received numbered tickets to properly identify their tails.

The party was lavish and there was a lot of dancing and sausage eating. One big fat female dog was barking with a smooth voice.

Suddenly panic broke out because a fire had started in the basement of the mansion. All the dogs were frantically running around and rushing for the exit. There was no time for searching for the right tail; each dog grabbed first tail available and hurried on out.

And this is why to this very day dogs still are looking for their own tail. Every time they meet a new dog they first check whether this tail could be their old misplaced one.

Quality Sunday

October 06, 2003

For me Sundays are usually just resting days. Some time off to recover from the wounds from previous working week and to prepare for the next.

This Sunday was however busier that normal. Funny how days with no plans can turn into very pleasant ones filled with good action whereas other, well planned days, can turn out to be disappointing...

It started with an early (10 am) brunch. You should not have to set the alarm to attend a brunch but we were hosts for this one so we had to get up. Our house was visited by some friends and their newborn babies. One of the babies is mobile and managed to deliver some damage to our flat but it was all under control. Observation: babies are cute but it's great to be able to return them at the end of the day.

I needed I walk as much as Ginger did so went to Richmond Park for a swim and a walk. Claire and Alex came along. Richmond Park is as close as you can get to "real" nature in central London. Blue algae did not stop Ginger from enjoying the freezing water. Has anybody explained to her that she is not a fish? I don't think so because she just cannot get enough of water.

By the way, what is the name for male reindeers? Suggestions like bull and stag and stud came up but did not sound right.

The annual Bboy (breakdancing) world championship was held at the Brixton Academy. I saw the competition once back in 2000 and this year the action was stepped up a good amount. The crews were from US, UK, France and Korea (last year's champions) among others.

In between the battles various MCs performed. Supernatural was the most notable one, he really could "rhyme to any sh*t". One session involved walking among the audience and incorporating some of the objects they were holding up into his rap. Very impressive indeed especially since the objects varied from glasses, a cap, a mirror, a belt to the flag of Korea and an MD.

Meet Herbivore - an anonymous P2P networking protocol

October 04, 2003

herbivore.gif The recent aggressive behaviour of RIAA to track down single users of certain P2P networks shows the need for an anonymous way of sharing documents.

At the moment it is the musical industry desperately trying to keep up surreal profits. What if instead it was a corrupt government hunting down political opposition?

In a nutshell, Herbivore is a "peer-to-peer, tamper-resistant, scalable anonymous communication protocol".

Until now, individuals have been able to safeguard the content during a communication with means of strong encryption. This has however not protected their identities and any authorities monitoring Internet traffic, e.g. ISPs, have been able to trace back to where a communication originated.

First critical property of Herbivore is that it "hides the identity of communication endpoints, even from attackers with unrestricted wiretapping capabilities". Herbivore achieves this by utilising dining cryptographer networks, or DC-nets for short. Read an illustrative example on the basis of DC-nets.

Two other critical properties of the protocol are that it scales well with large amount of users and that it is bandwidth efficient. Both necessary requirements for a future world wide used P2P network that intends to share large documents.

If you are interested in the juicy details, i.e. mathematical explanations, there is an excellent whitepaper that explains Herbivore in depth.

Belkin F8T003 Bluetooth USB adapter

October 03, 2003

After recently moving to a Sony VAIO without IrD I needed a Bluetooth adapter to be able to continue synchronising my mobile phone and being able to access the Internet on the move.

An USB adapter is an elegant solution due to its small form factor. It will let you communicate with your Bluetooth device securely and without any wires.

I chose the Belkin device because:

  1. Cheap but not cheapest

  2. I have had other Belkin devices that have served me well

  3. I could not find any negative comments or reviews about it

One important thing with an USB adapter is what protocols it supports. The more protocols it supports, the more devices you will be able to communicate with and the more functions you will be able to use. When connecting a laptop to a mobile phone the key features you might want are dial-up, file transfer, synchronisation and serial port. Below are the protocols that the Belkin device supports:

  1. Synchronisation

  2. File transfer: browse public folders on a remote device or transfer arbitrary files to it, e.g. pictures or ring tones.

  3. Dial-up networking: connect to the Internet using a BT modem (mobile)

  4. Network access: will let a device access a network through the adapter. Good when you want to surf the net from your PocketPC

  5. Voice gateway: establish an audio connection with a BT mobile phone. When done, the computer speaker and microphone will be used instead of the phones, making the computer "hands-free"

  6. Head-Set: the remote device will replace the computers speakers and microphone

  7. Fax

  8. PIM Item transfer: transfer business cards and calendar items

  9. Serial port: lets you communicate with your mobile phone on a "lower" level resulting in you being able to use the mobile as a remote control or send SMS from your laptop.

The range of the device is 10m. While some other USB adaptors offer 100m you have to see what your devices support. Most PDAs and mobile phones are 10m devices. Belkin has also a little bit more expensive and bulkier model, the Belkin F8T001, which is a 100m device.

The installation was a breeze. Just make sure to install the CD before plugging in the USB adaptor. Once the adaptor is plugged in, Windows will install the drivers and you are set.

Immediately you can search for discoverable devices in range, pair them up and define what services you would like to use with them. Use a mobile phone for dial-up networking, synchronise with your PocketPC or use your BT hands-free to chat over MSN messenger.

I Think I Might Be Psychic

October 03, 2003

Did not sleep properly the whole night because I forgot my mobile ['mO-"bEl] that I use as alarm in the hallway.

Early in the morning I finally decided to fetch it just to have it ringing on the way back! I suspect I was mentally connected to it the whole night and it called on me one minute before 7 am. Or maybe I have just been slowly molded into a working machine :-(

In other news, I might have to start going to the gym again; just paying each month is not helping out at all.

The SCO Group will be targeting another high profile company, this time Silicon Graphics. Let's hope that SGI will do just as IBM did last month: counter suing and continuing selling their software.

Valve Software's Half-Life 2 has been leaked due to an infiltration of their network. Because they do their software development on the same network as the rest of their Internet activity, it was possible for a hacker to gain access to the companies version control system and get the source. DOH!

Weekend is upon us and I feel, as my friend Tony usually puts it, Gggrreeeat. Plans for the weekend: no plans.

PS This was post sixty9

Evil Baby

October 01, 2003 I friend (Pedro) pointed me in the direction of a photography manipulating tool called FaceFilter. It lets you change the facial expressions of a subject fairly easily by using a set of default templates.

While you would be able to do most of the tricks in your favorite photo editing software, FaceFilter will let you do the manipulations much quicker.

You can also discover some things about facial expressions that you might have realised before.

I tried the 7-day trial and had loads of fun with the "evil baby" below, see for your self.

Original baby

Angry baby

Chubby baby

Making a face

Making another face

Mean baby

Not my baby

Sleepy baby

Young (?) baby