<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-27022525</id><updated>2012-01-21T06:11:26.907-08:00</updated><title type='text'>Taumuon</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27022525.post-2117639182643563138</id><published>2010-09-06T08:21:00.000-07:00</published><updated>2010-09-06T08:40:54.691-07:00</updated><title type='text'>Klapa Solin 10th anniversary</title><content type='html'>I was privileged to be able to go to &lt;a href="http://en.wikipedia.org/wiki/Klapa"&gt;Klapa&lt;/a&gt; Solin's 10th anniversary. Klapa is traditional a cappella singing, and the tradition is alive and well in Dalmatia.&lt;br /&gt;&lt;br /&gt;The event was set in the striking Roman ruins of Solin (&lt;a href="http://en.wikipedia.org/wiki/Salona"&gt;Salona&lt;/a&gt;), and it couldn't have made a more perfect backdrop to the event.&lt;br /&gt;&lt;br /&gt;What's more - even though tourists would pay handsomely for the night, it was put on especially just for friends of the singing group, with a feast of seafood (black squid risotto, fried anchovies, salata od hobotnice (octopus salad), cod soup) with, of course, plenty of wine to wash it down. The night was totally authentic, everyone was there to enjoy the music, ambience and the food, and life in general.&lt;br /&gt;&lt;br /&gt;In between each musical performance were recitals where they spoke of tradition and love of the land. Especially interesting was Pepe Kalafot, and his funny &lt;a href="http://www.youtube.com/watch?v=ZkDVrDR2m6c"&gt;Dlaka&lt;/a&gt; recital (I followed enough of this to get the gist ;-) - he has a strong dialect, I think from &lt;a href="http://en.wikipedia.org/wiki/Komi%C5%BEa" title="Komiža"&gt;Komiža&lt;/a&gt; on the island of &lt;a href="http://en.wikipedia.org/wiki/Vis_%28island%29"&gt;Vis&lt;/a&gt;, and from his intonation it sounds almost as if he's speaking Italian!)&lt;br /&gt;&lt;br /&gt;Even more special than the live performance were the impromptu performances afterwards, in the beautiful terrace gardens of Salona, full of food and wine groups would break into song. All in all, it was a magical evening.&lt;br /&gt;&lt;br /&gt;These videos don't do the night justice, but they might give an idea:&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=k8LvgqoZYaU"&gt;Video 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=_arr-Gc6CQY"&gt;Video 2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=0pfTU-8cn2A"&gt;Video 3&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-2117639182643563138?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/2117639182643563138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=2117639182643563138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/2117639182643563138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/2117639182643563138'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2010/09/klapa-solin-10th-anniversary.html' title='Klapa Solin 10th anniversary'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-393159536288020758</id><published>2009-09-27T12:08:00.000-07:00</published><updated>2009-09-27T12:11:07.218-07:00</updated><title type='text'>HDR Image of Tower Bridge</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9XuDfr9pYU0/Sr-4W2xZMQI/AAAAAAAAAFI/kxpsP1U6ldk/s1600-h/hdr2.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_9XuDfr9pYU0/Sr-4W2xZMQI/AAAAAAAAAFI/kxpsP1U6ldk/s320/hdr2.jpg" alt="" id="BLOGGER_PHOTO_ID_5386226382157721858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm trying to keep the taumuon blog free of geeky stuff, putting that on &lt;a href="http://taumuon-jabuka.blogspot.com/"&gt;taumuon-jabuka&lt;/a&gt;, which has the details of me messing around creating HDR images.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-393159536288020758?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/393159536288020758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=393159536288020758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/393159536288020758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/393159536288020758'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2009/09/hdr-image-of-tower-bridge.html' title='HDR Image of Tower Bridge'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9XuDfr9pYU0/Sr-4W2xZMQI/AAAAAAAAAFI/kxpsP1U6ldk/s72-c/hdr2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-5047954560352523379</id><published>2008-09-21T11:40:00.001-07:00</published><updated>2008-09-21T12:11:40.727-07:00</updated><title type='text'>Summer holidays</title><content type='html'>Photos are up of our trip to Croatia at &lt;a href="http://www.taumuon.co.uk/gallery"&gt;www.taumuon.co.uk/gallery&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We visited the island where Marijana's mum grew up, Vis - the scenery was spectacular; we stayed in a family house in a village in the hills. Being away from any light pollution was great - I've never seen so many stars in the sky! Vis used to be a military base; tourists weren't allowed to visit so it is very unspoilt. Unfortunately, our visit was cut short by car troubles but we'll be back as soo as we can make it there!&lt;br /&gt;&lt;br /&gt;We also spent a couple of days on a visit to Bosnia and Herzegovina - we took a bus to stay with Ivana and family in Mostar, thank you very much for your hospitality :) We then went out to take photos of Mostar at night - the photos came out a bit wonky - I can't be bothered to carry a tripod around so for night shots I usually just find something to hold my camera steady against, but there wasn't anything convenient around. That's my excuse and I'm sticking to it - it had nothing to do with the home-distilled rakija and local wine I had with dinner before heading out, not at all!&lt;br /&gt;&lt;br /&gt;Speaking of food and drink, as ever, the food I had was delicious! Ivana's mum cooked savoury doughnuts with cured meats on the first night, and veal and mushrooms wrapped in pancakes covered in cream in the second night. Delicious! The food was more rich in Bosnia and Herzegovina, in Dalmatia the food is much more mediterranean - lighter, sea food and vegetables, though lots of cured meats and cheeses etc (salivates). In Sarajevo, we ate &lt;a href="http://en.wikipedia.org/wiki/%C4%86evap%C4%8Di%C4%87i"&gt;Ćevapčići&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Burek"&gt;burek&lt;/a&gt;, and I think it might have almost, just almost, been too much meat for me in one day!&lt;br /&gt;&lt;br /&gt;Yeah, Sarajevo - we took the train there, ewhich was much better for taking photos - I get frustrated travelling on a bus or car as photos through the windows are always rubbish, and on the train I could just hang out of the window! This is especially frustrating on the coastal bus - the dalmatian coast is spectacular, but not through grimy bus windows! Anyway, enough diversion... Sarajevo was very interesting, similar to Mostar in that it feels a lot more Eastern than anywhere in Croatia, with the mosques, kebabs, carpet sellers etc. it could be Turkey, but the main streets are similar to Central Europe (Austrian influenced).&lt;br /&gt;&lt;br /&gt;It's sad though to see how run down it felt compared to Zagreb, due to the war. In the former Yugoslavia Sarajevo was one of the main cities, a melting pot of different cultures and had a large alternative scene, for instance it had lots of alternative bands who were enjoyed throughout the region. Now, there are reminders of the war thoughout the city - on the town in the main streets, there are blotches of red paint which show were grenades landed, and on the wall adjacent there are plaques showing who died in that blast. In spite of that, it does have an exciting feeling, maybe it's just that mixture of Eastern and Western influences...&lt;br /&gt;&lt;br /&gt;Otherwise, we just spent two weeks swimming in the glorious Adriatic sea, relaxing and soaking up the sunshine :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-5047954560352523379?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/5047954560352523379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=5047954560352523379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/5047954560352523379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/5047954560352523379'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2008/09/summer-holidays.html' title='Summer holidays'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-2247463938145324370</id><published>2008-06-23T13:51:00.000-07:00</published><updated>2008-06-23T14:06:46.428-07:00</updated><title type='text'>Rome and stuff</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9XuDfr9pYU0/SGAQFq7-owI/AAAAAAAAAC0/soDLJVUyqmY/s1600-h/trevi.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_9XuDfr9pYU0/SGAQFq7-owI/AAAAAAAAAC0/soDLJVUyqmY/s320/trevi.jpg" alt="" id="BLOGGER_PHOTO_ID_5215186058106282754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Photos are now on the &lt;a href="http://www.taumuon.co.uk/gallery/"&gt;gallery&lt;/a&gt; of our trip to Rome - needless to say we had an amazing time (we stayed at the Sunrise Hotel, a bit out of town, but still really convenient on the buses). Getting around was easy - we picked up a bus route map for €2.50 from a tourist office, and had no problems asking anyone if we were lost; everyone we met was really friendly (Mare was gossiping away in Italian with some women on the bus).&lt;br /&gt;&lt;br /&gt;It's a stereotype, but it's true, that the traffic in Rome is absolutely mental (and I thought that Split was bad!!) On the last day we found a cafe to crash in showing the Croatia-Austria game. The views from the top of St. Peter's (the Vatican) were immense, climbing up the crooked steps were worth the view. We ensured that we threw a coin each into the Trevi Fountain, to book our trip back :)&lt;br /&gt;&lt;br /&gt;Apart from recovering from our trip, we went down to the Cadogan Arms in Chelsea on Friday watching the Croatia-Turkey game with a load of other Croatia supporters. A shame about the score, but it was a great atmosphere none-the-less (&lt;a href="http://news.bbc.co.uk/1/hi/england/3827031.stm"&gt;some pics from the pub in 2004&lt;/a&gt; - it looked pretty much the same! I was actually in Croatia in 2004 when that game was on, and everyone treated me superbly)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-2247463938145324370?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/2247463938145324370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=2247463938145324370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/2247463938145324370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/2247463938145324370'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2008/06/rome-and-stuff.html' title='Rome and stuff'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9XuDfr9pYU0/SGAQFq7-owI/AAAAAAAAAC0/soDLJVUyqmY/s72-c/trevi.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-6025135462500490896</id><published>2008-05-09T14:28:00.001-07:00</published><updated>2008-05-09T16:11:36.846-07:00</updated><title type='text'>Seized Quill Stem</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9XuDfr9pYU0/SCTKYtXJZgI/AAAAAAAAACg/BnUrTwv-__w/s1600-h/DSCF5887.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_9XuDfr9pYU0/SCTKYtXJZgI/AAAAAAAAACg/BnUrTwv-__w/s320/DSCF5887.JPG" alt="" id="BLOGGER_PHOTO_ID_5198502395734746626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9XuDfr9pYU0/SCTJ3NXJZfI/AAAAAAAAACY/EBcAv-BENpc/s1600-h/DSCF5885.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_9XuDfr9pYU0/SCTJ3NXJZfI/AAAAAAAAACY/EBcAv-BENpc/s320/DSCF5885.JPG" alt="" id="BLOGGER_PHOTO_ID_5198501820209128946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9XuDfr9pYU0/SCTJgtXJZeI/AAAAAAAAACQ/-ZDe72lV2Og/s1600-h/DSCF5884.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_9XuDfr9pYU0/SCTJgtXJZeI/AAAAAAAAACQ/-ZDe72lV2Og/s320/DSCF5884.JPG" alt="" id="BLOGGER_PHOTO_ID_5198501433662072290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I thought I'd blog about my experiences freeing a seized quill stem, as while researching on the internet on how to free it there were a few potential solutions listed, but no-one seemed to say definitively which of the kookier methods worked for them.&lt;br /&gt;&lt;br /&gt;I bought a second hand bike off a work colleague a few years ago, and found out later that the stem was frozen (an aluminium stem in a steel steerer tube). I've put up with it for a while, even though the bike position didn't suit me, but I finally got around to sorting it as I want to take more advantage of the good weather - it was 13 miles each way to commute to my last job and I was managing to do it roughly once a week last year, but my new job's looking further away, and I want to try to do it more often so I want to get my position sorted. More importantly, I was prompted by the headset needing servicing.&lt;br /&gt;&lt;br /&gt;I've tried off and on for the last couple of years to free the stem, without much success, saturating the stem in WD40 etc. A couple of weeks ago I managed to free the bottom quill wedge by backing out the stem bolt and hammering it using an allan key (using a big wrench - if you've got a hammer then all you see is nails, and if you don't have a hammer anything that comes to hand'll do). This freed the wedge, but not the stem. I didn't feel confident cycling without the wedge being fastened, even though it was jammed, as I didn't trust Sod's or Murphys's law from freeing at a dangerous moment, so I had to spend an hour trying to hold the wedge in position with an old spoke fiddling to get the bolt to attach again.&lt;br /&gt;&lt;br /&gt;There were a number of solutions &lt;a href="http://www.bikeforums.net/archive/index.php/t-73823.html"&gt;listed&lt;/a&gt; to free a quill stem, including soaking it in penetrating oil, freezing it, using household ammonia, or coke to free the stem. I didn't really try twisting the stem out via grabbing the front wheel whilst securing the handlebars, as I read that it was more likely to twist the forks out of alignment than actually free the stem.&lt;br /&gt;&lt;br /&gt;I got some "Shock and Unlock" from Halfords, which doubled as trying the penetrating fluid solution, and the freezing solution - I applied to either side of the stem (i.e. from below and above) for a week, then filled the stem with a large quantity of this solution, to ensure that it would have had the cooling effect, and then leathered the living hell out of the stem with a hammer, from above, below, and every other angle, to no effect.&lt;br /&gt;&lt;br /&gt;I didn't fancy using household ammonia, as messing with chemicals doesn't really appeal to me, and I haven't got anywhere safe I could do it without poisoning the neighbour's cats. The coke method seemed not worth bothering with - apparently the aluminium oxide is dissolved by alkalis (hence the ammonia), and as coke is acidic this wouldn't apply. I'm not a chemist though (as you can tell ;-)) but I really didn't see it working, and I didn't fancy paying the Coca Cola corporation just to turn my bike into a sugary sticky mess (if I was interested in this, apparently lime juice is more acidic than coca cola, but the claims are that it's the electrolytic effect of coke that works - it'd be great if anyone lets me know if that actually worked for them).&lt;br /&gt;&lt;br /&gt;I followed the advice in &lt;a href="http://yarchive.net/bike/threadless_headset.html"&gt;this thread&lt;/a&gt; and decided to cut it out. I hacksawed the stem off about 5mm above the steerer, which was the easy job. Then I had to cut a slot down the length of the stem. This was initially tricky, as the hacksaw blade only just fit into the inner diameter of the stem, I had to take it easy from the top to get a good angle to get the slot cut. Some threads say how delicately they took it, but I just wrapped the top of a hacksaw blade in duck tape, and went at it.&lt;br /&gt;&lt;br /&gt;The aluminium is a lot softer than steel, and it's obvious when you're through, so I didn't pansy around. It took around 4 hours to cut through though, solidly going at it (spread over two evenings). I did badly blister and cut up my nancy-boy office worker hands, so if you're concerned about that kind of thing it might be worth getting some gloves or taking it easier...&lt;br /&gt;&lt;br /&gt;I had to cut a slot totally through one side of the stem, and cut almost entire through the other side of the stem, to allow it to flex enough. I gradually bent the stem in on itself by pinching the top with a pair of mole grips, spraying the "shock and unlock" down as I went. Finally, I grabbed the top of the stem in the jaws of some mole grips, put the front wheel back on to give myself something to turn against, and bugger me, was I surprised when it turned slightly! I gritted my teeth and managed to twist the old stem out :)&lt;br /&gt;&lt;br /&gt;I got myself a quill stem to ahead adapter but it refused to go down the steerer tube. Before I could fit it I needed to polish the remaining crap out of the steerer tube using some wet and dry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-6025135462500490896?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/6025135462500490896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=6025135462500490896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/6025135462500490896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/6025135462500490896'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2008/05/seized-quill-stem.html' title='Seized Quill Stem'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9XuDfr9pYU0/SCTKYtXJZgI/AAAAAAAAACg/BnUrTwv-__w/s72-c/DSCF5887.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-8337419124421876925</id><published>2008-05-09T14:03:00.000-07:00</published><updated>2008-05-09T14:20:43.982-07:00</updated><title type='text'>Visitors from Croatia</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9XuDfr9pYU0/SCS_hdXJZdI/AAAAAAAAACI/pBaNwHab7sU/s1600-h/IMG_3755.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_9XuDfr9pYU0/SCS_hdXJZdI/AAAAAAAAACI/pBaNwHab7sU/s320/IMG_3755.JPG" alt="" id="BLOGGER_PHOTO_ID_5198490451430696402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Dijana and Ivana came to visit for a few days last weekend, and we kept ourselves busy...&lt;br /&gt;&lt;br /&gt;We went to see the Lord of the Rings musical in London on Friday night, and it was very very cool! The effects were amazing, and it was all very cleverly done.&lt;br /&gt;&lt;br /&gt;On Saturday we went to (near enough) my hometown of &lt;a href="http://en.wikipedia.org/wiki/The_Iron_Bridge"&gt;Ironbridge&lt;/a&gt;, and the Blists Hill museum. It's years and years since I went to the open air museum, and it brought back memories.&lt;br /&gt;&lt;br /&gt;On the Sunday we went to Windsor Castle. I didn't really know much about Windsor but was surprised by how nice the town was... Mare was really impressed by Queen Mary's dolls house in the castle (photography wasn't allowed unfortunately).&lt;br /&gt;&lt;br /&gt;Photos are up on the &lt;a href="http://www.taumuon.co.uk/gallery/EarlyMayBankHol2008/"&gt;gallery&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-8337419124421876925?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/8337419124421876925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=8337419124421876925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/8337419124421876925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/8337419124421876925'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2008/05/visitors-from-croatia.html' title='Visitors from Croatia'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9XuDfr9pYU0/SCS_hdXJZdI/AAAAAAAAACI/pBaNwHab7sU/s72-c/IMG_3755.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-5978162864552864156</id><published>2008-04-07T13:06:00.000-07:00</published><updated>2008-04-07T13:14:13.623-07:00</updated><title type='text'>Easter in Düsseldorf and Cologne</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9XuDfr9pYU0/R_qAD2zBIRI/AAAAAAAAACA/0Wzr_NZTv20/s1600-h/DSCF5101.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_9XuDfr9pYU0/R_qAD2zBIRI/AAAAAAAAACA/0Wzr_NZTv20/s320/DSCF5101.JPG" alt="" id="BLOGGER_PHOTO_ID_5186598724608008466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We spent Easter at our friend George's in Düsseldorf, and made it on a day trip to Cologne. It was absolutely freezing cold, but we kept ourselves warm drinking the local beer :)&lt;br /&gt;&lt;br /&gt;Cologne was great, we went to a Chocolate museum (we somehow missed the Eau de Cologne museum!)&lt;br /&gt;&lt;br /&gt;The pictures are up, as ever, on the &lt;a href="http://www.taumuon.co.uk/gallery/"&gt;gallery&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-5978162864552864156?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/5978162864552864156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=5978162864552864156' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/5978162864552864156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/5978162864552864156'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2008/04/easter-in-dsseldorf-and-cologne.html' title='Easter in Düsseldorf and Cologne'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9XuDfr9pYU0/R_qAD2zBIRI/AAAAAAAAACA/0Wzr_NZTv20/s72-c/DSCF5101.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-4544198753232239187</id><published>2008-04-07T12:59:00.000-07:00</published><updated>2008-04-07T13:06:02.666-07:00</updated><title type='text'>Brother's wedding</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9XuDfr9pYU0/R_p-RGzBIPI/AAAAAAAAABw/B_xZxehX2P0/s1600-h/DSCF5002.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_9XuDfr9pYU0/R_p-RGzBIPI/AAAAAAAAABw/B_xZxehX2P0/s320/DSCF5002.JPG" alt="" id="BLOGGER_PHOTO_ID_5186596753218019570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I was best man at my brother's wedding a couple of weeks ago, and obviously had a great day, our sister made the trip from Spain and everything went really well.&lt;br /&gt;&lt;br /&gt;Mare was proud of her nibbly cakes, and I enjoyed eating them, so it would be rude not to put a picture up!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9XuDfr9pYU0/R_p-hWzBIQI/AAAAAAAAAB4/Cdw30ShyOHc/s1600-h/DSCF5006.JPG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_9XuDfr9pYU0/R_p-hWzBIQI/AAAAAAAAAB4/Cdw30ShyOHc/s320/DSCF5006.JPG" alt="" id="BLOGGER_PHOTO_ID_5186597032390893826" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-4544198753232239187?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/4544198753232239187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=4544198753232239187' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/4544198753232239187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/4544198753232239187'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2008/04/brothers-wedding.html' title='Brother&apos;s wedding'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9XuDfr9pYU0/R_p-RGzBIPI/AAAAAAAAABw/B_xZxehX2P0/s72-c/DSCF5002.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-4192560390950743173</id><published>2008-02-29T13:56:00.000-08:00</published><updated>2008-02-29T14:31:10.784-08:00</updated><title type='text'>Zagreb</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9XuDfr9pYU0/R8iF9PpUNjI/AAAAAAAAAA0/DNK8TGSLISI/s1600-h/GaryMareZagrebCathedral+%282%29.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_9XuDfr9pYU0/R8iF9PpUNjI/AAAAAAAAAA0/DNK8TGSLISI/s320/GaryMareZagrebCathedral+%282%29.JPG" alt="" id="BLOGGER_PHOTO_ID_5172531459253351986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We just got back from a long weekend in Zagreb, and the photos as ever are up on the &lt;a href="http://www.taumuon.co.uk/gallery/ZagrebFebruary2008/index.html"&gt;gallery&lt;/a&gt;. We stayed at Ivanas (she was a very good host, as always, thank you! We're returning the favour in England soon though :-) )&lt;br /&gt;&lt;br /&gt;I went out for a long weekend, but as Mare had accrued more holiday than me she spent a week out there (and got to do stuff like go to the theatre - things that she can't usually do when I'm with her). She visited a couple of exhibitions, including the painter &lt;a href="http://en.wikipedia.org/wiki/Marc_Chagall"&gt;Mark Chagall&lt;/a&gt; (who I'd never heard of!)&lt;br /&gt;&lt;br /&gt;We had a great time, the weather was surprisingly warm and sunny (though it was cold for Mare at the start of the week - she was there for the Snow Queen ski races, and saw many politicians and celebrities in the town).&lt;br /&gt;&lt;br /&gt;We went to the &lt;a href="http://www.pivnica-medvedgrad.hr/nase_pivo-eng.html"&gt;Zlatni Medo (golden bear) pub&lt;/a&gt; - they have their own microbrewery. Last time we were in Zagreb we went, but I overdid it eating delicious sausages, this time I concentrated on the beer :) I sampled all of the beers - Crna Kraljica is very good, but my favourite was the &lt;span class="style1"&gt;GRIČKA VJEŠTICA, it went down very well! Mare is not a big lager drinker, but she did enjoy the zlatni medo...&lt;br /&gt;&lt;br /&gt;We ventured outside of Zagreb; it's not every day that you get to visit the birthplace of a communist dictator. We stopped off briefly in the town of Klanjec, to visit the museum of renowned Croatian sculptor &lt;a href="http://www.mdc.hr/augustincic/eng/opci/index.html"&gt;Antun Augustincic&lt;/a&gt;. We visisted the village where Marshal Tito was born, and it's setup just as it was in the olden days, with examples of rural life and customs. It was very peaceful, fascinating, and in beautiful surroundings. Not far away we visited a &lt;a href="http://www.veliki-tabor.hr/html/english/start.htm"&gt;castle&lt;/a&gt;, again very interesting.&lt;br /&gt;&lt;br /&gt;We finished off by eating at a restaurant serving traditional cuisine in the style of Hrvatsko Zagorje (the part of Croatia west of Zagreb, and close to the Slovenian border), very different to the Dalmatian style of food I've been used to so far. I gorged myself silly on homemade cheese, bread, followed by exceptional country style mushroom soup, and -then- venison goulash. I did feel guitly afterwards though, just outside the restaurant were the brother and sister deers!!! Marijana was then trying to make me feel guity to point out how cute the bambis were (but my stomach beat my head).&lt;br /&gt;&lt;br /&gt;Sadly the time went too quickly, but we managed to squeeze in another trip to town in the morning, where we made it to the antique market in the Britanski Trg (British Square). We then sat around drinking coffees enjoying the last rays of sunshine before we had to return to rainy England.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-4192560390950743173?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/4192560390950743173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=4192560390950743173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/4192560390950743173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/4192560390950743173'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2008/02/zagreb.html' title='Zagreb'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9XuDfr9pYU0/R8iF9PpUNjI/AAAAAAAAAA0/DNK8TGSLISI/s72-c/GaryMareZagrebCathedral+%282%29.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-865316803565596857</id><published>2008-01-29T13:28:00.000-08:00</published><updated>2008-01-29T13:40:20.390-08:00</updated><title type='text'>IPTV</title><content type='html'>While we were in Croatia, I noticed that Marijana's friends had IPTV installed in their apartment, and I found it really impressive, the quality was top notch with no visible artifacts at all.&lt;br /&gt;&lt;br /&gt;It's not that I watch much TV nowadays, but the situation in the UK seems to be years behind.&lt;br /&gt;&lt;br /&gt;Freeview is slowly being switched on, but for us to benefit with the current feeble signal levels we got a quote of £150 to install a new roof mounted aerial. NTL/Virgin Media were unwilling to install cable, despite the fact that our next door have it, as apparently a surveyor says that we're too far back from the street (though not having Virgin Media installed is probably not a bad thing).&lt;br /&gt;&lt;br /&gt;Instead we've moved to Sky, and obviously the picture's fine, but some of the frustrations of the Sky monopoly are apparent (some of them peculiar to my setup).&lt;br /&gt;&lt;br /&gt;I have a 19" CRT monitor which is perfectly usable as a TV monitor, and helps to cut down on space taken up. I've got a cheap BT878 tuner card to convert the picture. This works OK, the tv quality isn't bad whilst watching, but faint red and green diagonal bands can be occasionally seen (though &lt;a href="http://deinterlace.sourceforge.net/"&gt;dscaler&lt;/a&gt; does seem to remove these). These bands do become much worse when recording though, making the playback unwatchable.&lt;br /&gt;&lt;br /&gt;There are a couple of solutions which work - which would give a better picture watching and recording, but I'm loathe to spend the money as a moderately-powerful PC should function fine as a PVR without the extra expense (and boxes cluttering up the space).&lt;br /&gt;&lt;br /&gt;The tv tuner card does have s-video input which would improve the quality, but Sky don't output s-video (they output either composite, or RGB over SCART. Apparently there are some old Grundig digiboxes that do have s-video output, which I could get off ebay, but they're supposedly not too reliable anyway).&lt;br /&gt;&lt;br /&gt;Converting the RGB signal to s-video is do-able with an a&lt;a href="http://www.js-technology.com/product_info.php?products_id=34"&gt;dapter for about £70&lt;/a&gt;, which doesn't seem worth it (I could just get Sky+), or there is a TV card available which accepts an RGB signal (the &lt;a href="http://www.pluggedin.tv/site/sweetspot/reviews/index.html"&gt;sweetspot&lt;/a&gt;), but it's even more expensive at over £120, and definitely not worth the money.&lt;br /&gt;&lt;br /&gt;As media centres are becoming more and more popular, I don't understand why there aren't any other tuner cards that take an RGB input.&lt;br /&gt;&lt;br /&gt;Sky+ does have s-video output, it's that defeats the point (if I had Sky+, I'd be unlikely to want to use my PC as a PVR, though it would give a better picture when watching).&lt;br /&gt;&lt;br /&gt;It would be nice to be able to take the satellite input directly into a DVB-S PCI card, but Sky don't let anyone else use their NDS VideoGuard decryption (apparently there does exist a card, but will be useless if Sky change the format).&lt;br /&gt;&lt;br /&gt;A separate alternative would be to just buy a HDD recorder, or even a DVD recorder, but it's just the annoyance at what's on the market preventing me from having an easily archivable/streamable media centre on the cheap.&lt;br /&gt;&lt;br /&gt;The system's a mess. In part, this would be helped by having RGB Tv Tuners, but with hi-def digital inputs becoming more popular, there's less motivation for this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-865316803565596857?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/865316803565596857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=865316803565596857' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/865316803565596857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/865316803565596857'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2008/01/iptv.html' title='IPTV'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-3633430224246462312</id><published>2008-01-29T13:04:00.000-08:00</published><updated>2008-01-29T13:28:52.769-08:00</updated><title type='text'>Christmas in Croatia</title><content type='html'>In case anyone was wondering why I hadn't blogged in a while, I didn't die! I've been busy - I started a new job last week and prior to that I was busy completing projects at the old one.&lt;br /&gt;&lt;br /&gt;Anyway, we spent Christmas and New Years in Croatia, but I didn't go crazy taking photos this time. Instead, there are a few photos from when I was a traitor to England, by going to watch &lt;a href="http://www.taumuon.co.uk/gallery/CroatiaEnglandWembleyNovember2007/index.html"&gt;Croatia .v. England at Wembley&lt;/a&gt; :)&lt;br /&gt;&lt;br /&gt;(Oh, while I'm mentioning the gallery, can any picasa users let me know how easy it is to use - I switched to using JAlbum simply because I can drag and drop a folder into an application and have it automatically resize the photos and generate a website, ready to drag into an FTP program. How much faff is it to resize and upload a set of pics in picasa?)&lt;br /&gt;&lt;br /&gt;The other thing is that I've moved all geeky/programming stuff into another blog: &lt;a href="http://taumuon-jabuka.blogspot.com/"&gt;Taumuon Jabuka&lt;/a&gt; (I would have moved all general geeky stuff, but this blog would've been empty then ;) )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-3633430224246462312?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/3633430224246462312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=3633430224246462312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/3633430224246462312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/3633430224246462312'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2008/01/christmas-in-croatia.html' title='Christmas in Croatia'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-307995037056875275</id><published>2007-11-04T14:26:00.000-08:00</published><updated>2007-11-04T14:54:02.818-08:00</updated><title type='text'>Paris!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9XuDfr9pYU0/Ry5HpFFmMoI/AAAAAAAAAAs/0PxYWcE4dso/s1600-h/MareGazEiffel.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_9XuDfr9pYU0/Ry5HpFFmMoI/AAAAAAAAAAs/0PxYWcE4dso/s320/MareGazEiffel.JPG" alt="" id="BLOGGER_PHOTO_ID_5129115796687434370" border="0" /&gt;&lt;/a&gt;Well, it's probably obvious from the photo where we were ;) We spent 5 very nice days in Paris a couple of weeks ago, and utterly tired ourselves out through an immense amount of walking.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.taumuon.co.uk/gallery/ParisOctober2007/index.html"&gt;Photos &lt;/a&gt;would have been up earlier, but Ana and Dado were visiting us for a few days following, and have been busy doing other stuff, excuses excuses.&lt;br /&gt;&lt;br /&gt;We both really enjoyed Paris; it has an elegance about it, and feels less rushed than, say, London, and strangely, has a feeling of a very very large village! There's the obvious cuisine and fashion difference, but it's hard to put my finger on why I like Paris so much especially.&lt;br /&gt;&lt;br /&gt;It definitely wasn't a relaxing week though, in retrospect we tried to squeeze too much in (we had a 4 day Paris Pass, which meant that we had queue-free access to the majority of attractions).&lt;br /&gt;&lt;br /&gt;We were there (coincidentally) on the weekend of the England-France Rugby semi-final, and everyone was good-natured with us (though I did play on my Welsh heritage at the airport, and Mare had no problems with her Croatian passport). P.S. the facilities at Orly airport are dire, and we were amused with some of the English rugby supporters in that respect. Though, we can't say that much, as we flew from not much more than a shed in someone's back garden, oops, that's Coventry airport.&lt;br /&gt;&lt;br /&gt;Eating steak and chips, with red wine everyday, was something I could all too easily become accustomed to, but Mare was scared that her steak would get up off the plate and start walking around (medium cooked apparently in French means still breathing ;) ). Parisiens didn't speak English much, which I found surprising, as a few years ago whilst trying to speak French in the Alps whilst snowboarding, everyone would reply straight away in English. This time, I was forced to speak French in quite a few situations, which I was happy to find I could still do (actually better than before, I think making a tit of myself speaking Croatian in many situations means that I've lost lots of my inhibitions) - especially as I was forced to buy new insoles for my shoes due to the amount of walking (the first couple of days were rough though, I kept having to pause to stop myself answering in Croatian, Mare caught me a couple of days...)&lt;br /&gt;&lt;br /&gt;I've never believed in stereotypes, but it was nice to see that the French are so much better dressed than the British, and had half-eaten baguettes permanently attached to their arms. We stayed in the Hotel Moulin Vert in Montparnasse, it wasn't too expensive, was clean, with friendly staff, and had everything we needed (included breakfast in bed every day).&lt;br /&gt;&lt;br /&gt;The highlights were the view of Paris at night, including the Eiffel Tower, from the Montparnasse tower (and we were lucky to first see the Eiffel Tower at night as it was sparkling, we didn't know in advance that it sparkles on the hour). The musee d'Orsay was impressive, along with the Louvre (though it was far too big to appreciate properly). Galeries La Foyette is worth popping in (even as a non-shopper, as the dome is really impressive; I can't even avoid the shops when I'm on holiday ;) ). Mare was quite happy to test that the credit card works the same in France!&lt;br /&gt;&lt;br /&gt;Versaille was OK, but not too critical to see on a short visit (despite what various guidebooks say), the gardens are really impressive, but if you don't have time to spend a long relaxed day there it's not really justified visiting. We did enjoy the train journey though (and despite the stereotype of the French always striking, they did reinforce the stereotype that travelling on any public transport system in Europe shows just how backwards things are in the UK).&lt;br /&gt;&lt;br /&gt;Notre Dame at night was breathtaking, as was most of Paris, and in the mostpart it felt absolutely safe walking around at night, and very romantic (as was walking from the Concorde along the Champs Elysee towards the Arc de Triomphe, and actually, most of Paris in the autumn!!).&lt;br /&gt;&lt;br /&gt;A bientot!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-307995037056875275?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/307995037056875275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=307995037056875275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/307995037056875275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/307995037056875275'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2007/11/paris.html' title='Paris!!'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9XuDfr9pYU0/Ry5HpFFmMoI/AAAAAAAAAAs/0PxYWcE4dso/s72-c/MareGazEiffel.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-4032260061432189843</id><published>2007-09-09T14:08:00.000-07:00</published><updated>2007-09-09T14:50:24.199-07:00</updated><title type='text'>Two weeks in Dalmatia</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9XuDfr9pYU0/RuRqlRyfI3I/AAAAAAAAAAk/PyX9C_WdhwY/s1600-h/Mare+Gary+Waterfall.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_9XuDfr9pYU0/RuRqlRyfI3I/AAAAAAAAAAk/PyX9C_WdhwY/s320/Mare+Gary+Waterfall.JPG" alt="" id="BLOGGER_PHOTO_ID_5108325066007847794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We've just returned from two relaxing weeks in Croatia. The subject isn't (two weeks in Split) as we actually managed to quite a lot of sightseeing this time around. We spent our first week swimming twice a day, until the Bura and Jugo winds appeared. Better than that though, we went visiting various places, most of them UNESCO world heritage sights.&lt;br /&gt;&lt;br /&gt;We obviously spent some time in &lt;a href="http://en.wikipedia.org/wiki/Diocletian%27s_Palace"&gt;Diocletian's palace&lt;/a&gt;, as usual, drinking fine wine while musicians played across the square. We took a bus trip to &lt;a href="http://en.wikipedia.org/wiki/Trogir"&gt;Trogir&lt;/a&gt;, took a ferry to the town of &lt;a href="http://en.wikipedia.org/wiki/Hvar"&gt;Hvar&lt;/a&gt; on the island of the same name (&lt;a href="http://uk.youtube.com/watch?v=ppAYvEL5LP0"&gt;youtube video&lt;/a&gt;), and as we flew from &lt;a href="http://en.wikipedia.org/wiki/Zadar"&gt;Zadar&lt;/a&gt; this time we had time to look around the town. Zadar was surprisingly beautiful, there are sea organs designed so that various notes play as waves hit the sea wall. There are &lt;a href="http://uk.youtube.com/watch?v=t6YVIfRYTMM"&gt;videos on youtube&lt;/a&gt; of this, but they don't in any way transmit how special this is; it really has to be experienced in real life.&lt;br /&gt;&lt;br /&gt;We also visited &lt;a href="http://en.wikipedia.org/wiki/Plitvice_Lakes"&gt;Plitvice lakes&lt;/a&gt;, which were stunning. The end of summer is not the best time to visit, as there has been no rain in months, so the waterfalls were quite muted, but they are still very impressive, and colour of the lakes are unbelievable and totally indescribable.&lt;br /&gt;&lt;br /&gt;As usual, I tried to capture the sights that I saw, and photos are up on the &lt;a href="http://www.taumuon.co.uk/gallery/SplitAugust2007/index.html"&gt;gallery&lt;/a&gt;, but as ever the photos don't do the places justice.&lt;br /&gt;&lt;br /&gt;I'll probably update the blog later in the week with some more details on the places we saw, but for now follow the wikipedia links. Oh, I was also quite impressed with how my Croatian is getting along; whereas last time I visited I could follow a few conversations by linking together the words I understood, this time I found that I was totally understanding many conversations without even trying...&lt;br /&gt;&lt;br /&gt;I never even mentioned the weather, food, people... Anyway, vidimo se!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-4032260061432189843?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/4032260061432189843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=4032260061432189843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/4032260061432189843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/4032260061432189843'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2007/09/two-weeks-in-dalmatia.html' title='Two weeks in Dalmatia'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9XuDfr9pYU0/RuRqlRyfI3I/AAAAAAAAAAk/PyX9C_WdhwY/s72-c/Mare+Gary+Waterfall.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-3307809663390000032</id><published>2007-08-12T13:37:00.000-07:00</published><updated>2007-08-12T14:04:15.110-07:00</updated><title type='text'>Shropshire Lad</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9XuDfr9pYU0/Rr9wxtqVwyI/AAAAAAAAAAc/dsjHHbOXPLI/s1600-h/GaryMareLongMynd.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_9XuDfr9pYU0/Rr9wxtqVwyI/AAAAAAAAAAc/dsjHHbOXPLI/s320/GaryMareLongMynd.JPG" alt="" id="BLOGGER_PHOTO_ID_5097917302579774242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.taumuon.co.uk/gallery/ShropshireEvansReunionAugust2007/slides/GaryMareLongMynd.html"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.taumuon.co.uk/gallery/ShropshireEvansReunionAugust2007/slides/GaryMareLongMynd.html" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We made it to Shropshire to catch up with my sister and her boyfriend in &lt;a href="http://www.shropshiretourism.info/church-stretton/"&gt;&lt;span style="font-style: italic;"&gt;Little Switzerland&lt;/span&gt;&lt;/a&gt; before they disappear back off to Barcelona, and the photos are up on the &lt;a href="http://www.taumuon.co.uk/gallery/ShropshireEvansReunionAugust2007/index.html"&gt;gallery&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The photo's from the top of the Long Mynd in Shropshire, an &lt;a href="http://en.wikipedia.org/wiki/Long_Mynd"&gt;area of outstanding natural beauty&lt;/a&gt; in my favourite old mountain biking haunt (and I will be bringing a bike next time I visit!!!). Driving up the Burway is a hellofalot easier than the long hard slog cycling, but in a strange way I do miss putting myself through that pain. The drive down from &lt;a href="http://www.visitironbridge.co.uk/"&gt;Ironbridge&lt;/a&gt; along the backroads into Church Stretton is beautiful and a route I'd cycle regularly when I was younger.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-3307809663390000032?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/3307809663390000032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=3307809663390000032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/3307809663390000032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/3307809663390000032'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2007/08/shropshire-lad.html' title='Shropshire Lad'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9XuDfr9pYU0/Rr9wxtqVwyI/AAAAAAAAAAc/dsjHHbOXPLI/s72-c/GaryMareLongMynd.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-7309356780936760903</id><published>2007-08-08T14:39:00.000-07:00</published><updated>2007-08-12T13:36:30.868-07:00</updated><title type='text'>"Game Physics Engine Development" mini review</title><content type='html'>I bought a copy of Ian Millington's book a few weeks ago, and have had time to skim through it and get aquainted with it, so I thought I'd post a mini-review (mini meaning that it won't be very large at all).&lt;br /&gt;&lt;br /&gt;It's difficult to review as the book is aimed at beginners, and I have to imagine what it would be like to read this book from the start. This book is perhaps what the book Physics for Game developers should have been.&lt;br /&gt;&lt;br /&gt;The basics seem to be well explained, and should help a noob get up to speed in writing an engine pretty quickly.&lt;br /&gt;The problem I found with the book is, is that for someone who is confident in implementing an engine and needs the basics, then the free resources by David Baraff and Chris Hecker are more than adequate.&lt;br /&gt;&lt;br /&gt;What I was hoping for from this book was more of a bridging between the basics of how to implement the engine, and all of the very useful, complete, but needlessly inaccessible information available in Eberly's Game Physics book. The latter half of the book that delves into these territories is too sparse and seemingly hurried.&lt;br /&gt;&lt;br /&gt;Departing from the review, I want to gripe that I found errata while reading, and despite the book saying that errata could be reported via the publisher's website, I couldn't find a link on there!&lt;br /&gt;&lt;br /&gt;Here it is (in case anyone finds it useful)&lt;br /&gt;&lt;br /&gt;Page 19 states that the source code listings in the book contain line numbers, but I couldn't see any!&lt;br /&gt;&lt;br /&gt;Page 56 states that a 500 m/s bullet being slowed to 25 m/s is a delta s of 20. This shouldn't be a delta, it's a factor.&lt;br /&gt;&lt;br /&gt;Page 81. Hook's law throughout should be Hooke's law.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Throughout, using p to signify the vector position of an object rather than s for displacement means that the author uses g for momentum, rather than p, which just looks weird.&lt;br /&gt;&lt;br /&gt;The use of the % operator on the Vector class doesn't really help, should provide a named method.&lt;br /&gt;&lt;br /&gt;On page 436 the author "discusses" developing an engine on other platforms. The author is dismissive of any language other than C++. The author discusses that it may be beneficial to have the time-critical parts of an engine in a DLL, but fails to discuss design implementations such as chunky over chatty interfaces. It should perhaps mention that using C++/CLI would give less overhead than having a COM layer.&lt;br /&gt;The author discusses the overhead of objects in the Java section, but in the .NET section fails to make the distinction that the .NET platform has value types which mitigate against this.&lt;br /&gt;&lt;br /&gt;Given that a physics engine could be developed purely on a Java platform, or using C# for XNA, the author's comments that C++ should be used for the engine and consumed by a caller isn't particularly helpful. Given the growth of managed environments, it would have been useful if the author would have discussed any design differences throughout the book, rather than concentrating purely on C++.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-7309356780936760903?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/7309356780936760903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=7309356780936760903' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/7309356780936760903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/7309356780936760903'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2007/08/game-physics-engine-development-mini.html' title='&quot;Game Physics Engine Development&quot; mini review'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-3660850739818433763</id><published>2007-07-29T13:54:00.001-07:00</published><updated>2007-07-29T14:03:04.286-07:00</updated><title type='text'>Summer rain's killing my brain</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_9XuDfr9pYU0/Rqz_dC9iYQI/AAAAAAAAAAU/GDe5Xxx1dEY/s1600-h/DSCF2127.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5092726153125454082" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_9XuDfr9pYU0/Rqz_dC9iYQI/AAAAAAAAAAU/GDe5Xxx1dEY/s320/DSCF2127.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I haven't cycled to work in a couple of weeks because of persistent rain and/or wind. But it's actually held off for a couple of days, luckily! On Friday, we went to Newmarket Nights for the horseracing and to watch the Pet Shop Boys. They were very camp, Mare'll probably be blogging about it soon! (Once I get clips off my phone...) While I was there I was getting incoherent texts from &lt;a href="http://www.phillipjackson.co.uk/"&gt;PJ&lt;/a&gt;: he's motorbiking across Europe in his long teaching holidays and stopped off at our other uni friend George, who's currently living in Dusseldorf.&lt;br /&gt;&lt;br /&gt;The photo's from a fancy dress party we went to recently, Marijana was a gypsy witch, and I was a Buddhist monk (as if you couldn't tell!)&lt;br /&gt;&lt;br /&gt;I've been a bit slack recently, I've kind of put on hold work on Jabuka, and learning Croatian, as I've been doing so much family tree stuff. I've been ordering certificates from Birmingham Register Office (who have great service), and ordering census info, and have make connections with a lot more relatives via genesreunited.co.uk. Hopefully things'll be back on track soon.&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-3660850739818433763?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/3660850739818433763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=3660850739818433763' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/3660850739818433763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/3660850739818433763'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2007/07/summer-rains-killing-my-brain.html' title='Summer rain&apos;s killing my brain'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9XuDfr9pYU0/Rqz_dC9iYQI/AAAAAAAAAAU/GDe5Xxx1dEY/s72-c/DSCF2127.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-5795650751749842386</id><published>2007-07-01T13:09:00.000-07:00</published><updated>2007-07-01T13:27:09.630-07:00</updated><title type='text'>BTCC and stuff.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9XuDfr9pYU0/RogK2E5dkbI/AAAAAAAAAAM/injdLeyqYXI/s1600-h/btcc.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_9XuDfr9pYU0/RogK2E5dkbI/AAAAAAAAAAM/injdLeyqYXI/s320/btcc.JPG" alt="" id="BLOGGER_PHOTO_ID_5082324103631573426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It's probably better if I don't title every post with "Update"...&lt;br /&gt;&lt;br /&gt;This is the first time I've sat in front of the computer with time to write a post in quite a while. I spent last weekend at the British Touring Car race at Oulton Park with a work colleague, supposedly requirements gathering (the photo's obviously from one of the other races happening that weekend). It was quite a relaxed feel compared to the F1 testing day at Silverstone I made it to last year, and Oulton Park is quite picturesque. Cheshire itself reminds me a lot of Shropshire (and it's nice to see some hills rather than Fenland). We went out in Chester, and it's a very quaint looking town (if slightly quiet).&lt;br /&gt;&lt;br /&gt;Otherwise, Mare is getting very confident on the bike now, and inbetween torrential rain we've been doing a lot of cycling around the local nature reserve. Riding over mud and rocks on a Giant FCR is so twitchy that it almost feels like I'm mountain biking, even on the tame terrain (the FCR is basically identical to their OCR racer apart from the fact I've got risers on it. It's perfect for the 13 mile ride into work, but it's had to put a 35CC tyre on the rear to cope with the rocks).&lt;br /&gt;&lt;br /&gt;I've spent the rest of my spare time researching my family history, searching through bmd records, ordering certificates and census records. Through genesreunited.co.uk I've been in touch with a relative who has put an enormous amount of time in and researched our family history back into the 1600s. It's extremely fascinating reading through that much family history, and she's uncovered a surpringly detailed and complete history. That side of my family (the non-Welsh side) lived in the Birmingham area for approx 200 years, and before that from the Northants area (surprisingly one of my ancestors was from Leamington Spa, only interesting as I lived there for two years as a student).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-5795650751749842386?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/5795650751749842386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=5795650751749842386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/5795650751749842386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/5795650751749842386'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2007/07/btcc-and-stuff.html' title='BTCC and stuff.'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9XuDfr9pYU0/RogK2E5dkbI/AAAAAAAAAAM/injdLeyqYXI/s72-c/btcc.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-2717708625525662135</id><published>2007-04-16T13:49:00.000-07:00</published><updated>2007-04-16T14:18:58.401-07:00</updated><title type='text'>Easter in Split</title><content type='html'>We spent a week in Croatia, having a well-needed break, spending our days walking along the beach in the sunshine, meeting up with people for coffees, eating fish and blitva (amongst other delicious food). Pics as usual are up on the &lt;a href="http://www.taumuon.co.uk/gallery/index.html"&gt;gallery&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The sun was hot, and the sea was warm. We got our feet wet, but I was too chicken to go swimming. I lost my &lt;em&gt;football-cherry&lt;/em&gt;; I saw my first live football game (Mare's brother joked that a guy from England watching his first football game in Croatia is like a German drinking his first beer in Croatia). I saw Hajduk play Pula, and I think I jinxed it (Hajduk lost, and they ended up firing the trainer after the game). The Poljud stadium is pretty amazing, with the sea visible on one side, and the hills on the other.&lt;br /&gt;&lt;br /&gt;Roll on our next visit!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-2717708625525662135?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/2717708625525662135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=2717708625525662135' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/2717708625525662135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/2717708625525662135'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2007/04/easter-in-split.html' title='Easter in Split'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-117061514452410563</id><published>2007-02-04T10:37:00.000-08:00</published><updated>2007-02-04T10:53:40.683-08:00</updated><title type='text'>schwarzbier</title><content type='html'>We came across &lt;a href="http://www.wadsworthwines.co.uk/"&gt;J Wadsworth&lt;/a&gt; in St Ives yesterday, they have a massive collection of spirits, wines and beers from around the world (but nothing from Croatia unfortunately).&lt;br /&gt;&lt;br /&gt;I picked up a bottle of &lt;a href="http://www.beerhunter.com/documents/19133-001610.html"&gt;Herold Bohemian Black Lager&lt;/a&gt; which went down very nicely, probably the nearest thing to a &lt;a href="http://www.bottledbeer.co.uk/index.html?beerid=2770"&gt;Tomislav&lt;/a&gt; (and couple of other dark Croatian beers) that I've tasted in the UK.&lt;br /&gt;&lt;br /&gt;Please somebody start importing Tomislav!!!!&lt;br /&gt;&lt;br /&gt;(In case anybody wonders I'm not against UK beers, just the insipid main lagers. I had a delicious fruity real ale in the local when my friend Phill was visiting a couple of weeks ago.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-117061514452410563?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/117061514452410563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=117061514452410563' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/117061514452410563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/117061514452410563'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2007/02/schwarzbier.html' title='schwarzbier'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-116958419018997937</id><published>2007-01-23T12:20:00.000-08:00</published><updated>2007-01-23T12:29:50.216-08:00</updated><title type='text'>Caffeine Addiction</title><content type='html'>The stereotype is for software engineers to all be coffee addicts, but I had this confirmed to be true in my case over Chrismas. When we arrived in Split I had a 3 day break from caffeine, and boy did I suffer! I only ever have one or two cups of coffee a day, but if I don't have any then I'm usually grumpy and tired, but during the three days off caffeine I was totally comatose. I didn't do anything but sleep (well, the caffeine-free break was on top of still being hungover from our office Christmas party, and from driving down to Gatwick airport in the fog in the early hours of the morning, to have the fun of standing in a 3 hour queue, grrrr). Anyway, I'm going to have to cut down; it's shocking to realise that you have a dependency that controls your mood and energy levels.&lt;br /&gt;&lt;br /&gt;It's going to be difficult to cut down though; I've got lots of coffee-making paraphernalia, including an ibrik for making Turkish coffee which I enjoy in the morning (I either buy the coffee from a Turkish shop in Cambridge, or bring it back from Croatia), as well as a stove top espresso pot. There's nothing better (well, not -that- many things) than a really strong coffee followed with bitter dark chocolate. While I'm ranting about coffee, why is it so hard to buy a decent cuppa in this country? Costas is probably the best of the big chains, but their Americano is still too weak/tall (though their macchiato isn't bad, it's a pity they don't have something between the two) - luckily there are a few decent small cafes around that do a decent lavazza.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-116958419018997937?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/116958419018997937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=116958419018997937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116958419018997937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116958419018997937'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2007/01/caffeine-addiction.html' title='Caffeine Addiction'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-116820337547897034</id><published>2007-01-07T12:52:00.000-08:00</published><updated>2007-01-07T15:40:55.556-08:00</updated><title type='text'>Croatia Christmas and New Year 2006</title><content type='html'>We spent Christmas and New Year in Split (&lt;a href="http://www.split-online.com/"&gt;http://www.split-online.com/&lt;/a&gt;.) partying, eating, drinking. Being on the Mediterranean, the weather was very spring-like, being about 13 deg.C every day but feeing warmer in the sunshine. I must have put on a few kilos by eating an extraordinary amount of food, and enjoyed sitting in the sunshine drinking proper coffees. Photos are up &lt;a href="http://www.taumuon.co.uk/gallery/SplitChristmas2006/index.html"&gt;here&lt;/a&gt; (and I'm trying to clear up the backlog, so last year's photos of Zagreb and Ljubljana are also up &lt;a href="http://www.taumuon.co.uk/gallery/ZagrebNovember2005/index.html"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We didn't really do much sightseeing this time, we were catching up with Mare's family and friends (and playing a lot of Risk). Oh, thanks to Robi for the home made herbal Rakija and red wine (unfortunately I couldn't bring it through airport security, but will get hold of it soon!). &lt;br /&gt;&lt;br /&gt;I really like being in Split - everybody is always really warm and hospitable, and really makes me feel welcome. I also like the culture there, loads of English people say how they'd miss the local pub and real ales, but I much prefer being in a konoba (like a bistro) eating and drinking with live performers playing traditional music. Everybody's into singing and dancing - Mare's got a great voice (her brother was a pop idol finalist and her cousin is in a band), and it's great when everyone in the bar starts singing along. My dad said that it was quite like that in pubs in Mid Wales maybe 30 years ago - at the end of the night everyone would be singing along together; it's a pity that that's died out now (well, not for anyone that would have to suffer hearing my singing!) &lt;br /&gt;&lt;br /&gt;Anyway, here's the list of foods that rocked my boat this time: Salata od hobotnice (octobus salad), black squid risotto, pašticada, Francuska Salata (with homemade mayonnaise), pršut, tuna pašteta, fried white bait, anchovies, olives, home made cheese, sarma (minced meat in cabbage leaves) along with so many cakes I lost count!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-116820337547897034?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/116820337547897034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=116820337547897034' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116820337547897034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116820337547897034'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2007/01/croatia-christmas-and-new-year-2006.html' title='Croatia Christmas and New Year 2006'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-116466747632418691</id><published>2006-11-27T14:43:00.000-08:00</published><updated>2006-12-26T09:50:52.396-08:00</updated><title type='text'>Barcelona</title><content type='html'>We spent 4 days walking our feet off around Barcelona for our anniversary, and to meet up with my sister and her boyfriend (they're living just outside of Barcelona). (photos are up on the &lt;a href="http://www.taumuon.co.uk/gallery/"&gt;gallery on taumuon&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Barcelona is a hell of an interesting and cool town, especially for sightseeing, due in no small part to the architect Gaudi; it seems that everywhere you look there are colourful and wiggly buildings (I can imagine the architects lined up to kill me now for that description), all like nothing else I've seen before. &lt;br /&gt;&lt;br /&gt;We stayed in the Abba Rambla hotel, right in the heart of El Raval. The hotel was really plush, but the area is a bit rough. The area is renowned for being 'a bit dodgy', and all the tourist guides recommend keeping away, but it's not that bad in the day, especially nearer to La Rambla. It has some decent cheap cafes that aren't used by tourists, and the area has a buzzing feel (I'm not sure whether that adequately describes the hippy we saw kissing trees as he walked down the street). It does, however, feel quite unsafe late at night. That wouldn't put us off staying at the hotel again, and taxis are cheap around town.&lt;br /&gt;&lt;br /&gt;Being as we were acting as tourists, we did the tourist thing and watched a flamenco show at the Tablao Cordobes, and it was a totally amazing night. We took a couple of pictures and clips, but it doesn't give anywhere near the impression of watching it live, and words won't really do it justice either, so if you can GO! They served up food in the form of a buffet before the show, and it was mmm mmm delicious, with traditional dishes from different parts of Spain (I recommend the rabbit!).&lt;br /&gt;&lt;br /&gt;Most people spoke English around town, but Mare's knowledge of Italian, and watching Spanish soap operas, meant that she could communicate quite well - she was gassing away without any problem to Jordi's parents. I could get the gist of Catalan better (it's nearer to French), but home made grappa did cause me to spew a weird mix of French interspersed with Croatian (that stuff should come with a health warning, it's almost as lethal as home made &lt;a href="http://en.wikipedia.org/wiki/Rakia"&gt;Rakija&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;All in all, Barcelona is highly recommended!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-116466747632418691?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/116466747632418691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=116466747632418691' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116466747632418691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116466747632418691'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/11/barcelona.html' title='Barcelona'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-116293699837739190</id><published>2006-11-07T13:53:00.000-08:00</published><updated>2006-11-27T06:06:28.116-08:00</updated><title type='text'>Weekend in Wales</title><content type='html'>As the subject says, we spent last weekend in Wales visiting family. The drive was a killer, with delays and crashes (not us!), but the weekend was otherwise really relaxing, and we were lucky with the weather.&lt;br /&gt;&lt;br /&gt;We spent a day hanging around in Aberystwyth, photos are up at the gallery on taumuon: &lt;a href="http://www.taumuon.co.uk/gallery/index.html"&gt;http://www.taumuon.co.uk/gallery/index.html&lt;/a&gt; . We usually end up in Aber when the students are away in the winter and it seems a bit dead, but it's currently term time and the town had a good buzz to it. Also, Aber seems to have got a lot more continental than last time we visited, with exotic cafes and delicatessens. We ate in a greek cafe and the food was delicious (I also had Greek Coffee, they made it a hell of a lot sweeter than when I make it at home).&lt;br /&gt;&lt;br /&gt;I really missed my mountain bike when we passed Nant yr Arian forestry centre heading into Aberystwyth; I'm going to have to build something new up next year...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-116293699837739190?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/116293699837739190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=116293699837739190' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116293699837739190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116293699837739190'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/11/weekend-in-wales.html' title='Weekend in Wales'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-116188246217911818</id><published>2006-10-26T10:03:00.000-07:00</published><updated>2006-10-26T10:07:42.180-07:00</updated><title type='text'>Just like buses...</title><content type='html'>...you wait a month for a post and then two come along at once (actually just like buses around Cambridge, grrr). I thought I'd get posting out the way though as we're busy this weekend; Mare's friend's visiting from Croatia.&lt;br /&gt;&lt;br /&gt;I made it to a mid-week salsa lesson yesterday; we want more practice than just going on the weekends and I found that Cambridge University was running Cuban-style improvers lessons, and it was great! I tried an intermediate class elsewhere with Mare and it was impossible :( I'm thinking of going to their beginners lessons too, and Mare's thinking of doing their intermediate. It was pretty freaky chatting to students though, I feel really old now!&lt;br /&gt;&lt;br /&gt;On a totally different tack, I was at the supermarket the other day and saw a woman cycling along at a crawling pace, shopping bags hanging off her handlebars, cigarette in her mouth. There's nothing wrong or unusual about any of that, but the frame sticker caught my&lt;br /&gt;eye as she went past and I had a double take to see that she was riding a nickel-plated Orange P7 circa 1995 with the rigid F7 forks. This is the same mountain bike that I used to thrash (well, pootle) around Shropshire, Wales (including Snowdon), the Peak District and lots of other places I can't remember. I'm glad that the bike hasn't ended up in a skip or a landfill, but it's a real shame that even though more modern bikes would wipe the floor with it (with their long fork adjusted geometry etc), it's a lot more capable and justifies being more than a shopping or hackabout bike.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-116188246217911818?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/116188246217911818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=116188246217911818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116188246217911818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116188246217911818'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/10/just-like-buses.html' title='Just like buses...'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-116188220032762365</id><published>2006-10-26T10:00:00.000-07:00</published><updated>2006-11-06T13:27:00.340-08:00</updated><title type='text'>mixed mode debugging tips</title><content type='html'>I'm currently working on a C# component to be consumed by a COM application (and did the same at my last place of work), and thought I'd give a few hints on debugging this (as there doesn't seem to be much info on this via a web search, and I forgot all the little tips I learnt about this last time after a few months gap).&lt;br /&gt;&lt;br /&gt;Firstly, the assembly is registered with regasm /codebase (or RegistrationServices.RegisterAssembly()), so that COM can load it up from&lt;br /&gt;wherever it resides on disc. However, when mixed mode debugging, the debugger loads the assemblies from the path of the unmanaged executable. So make sure that the assemblies and&lt;br /&gt;pdbs are copied to this location, and remember to do this whenever rebuilding the managed component (else you could end up very frustrated from debugging the wrong version).&lt;br /&gt;&lt;br /&gt;There's a bit of a rant coming on, 'cause even if you remember to do all of this, Visual Studio 2005 crashes out inexplicable far far far too regularly, (or hangs, or fails to connect the debugger, sometimes fixed by a restart of a computer, or voodoo magic) and we're not in a position at work to see whether the upcoming SP1 beta fixes this *but fingers crossed*.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-116188220032762365?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/116188220032762365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=116188220032762365' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116188220032762365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/116188220032762365'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/10/mixed-mode-debugging-tips.html' title='mixed mode debugging tips'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-115913742819569277</id><published>2006-09-24T15:25:00.000-07:00</published><updated>2006-09-24T15:37:08.210-07:00</updated><title type='text'>Croatia September 2006</title><content type='html'>Last weekend we got back from an amazing two weeks in Croatia. I've put the photos online and they're at:&lt;br /&gt;&lt;a href="http://www.taumuon.co.uk/gallery/CroatiaSeptember2006/index.html"&gt;http://www.taumuon.co.uk/gallery/CroatiaSeptember2006/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We flew with Wizz air to Zagreb to see Mare's friends. We stayed at Ivana's for the night, and the day after caught a bus to Šibenik to visit Ana and Dado on the way to Split. They cooked us the most amazing tasting grilled fish, and I put on loads of weight again eating delicious food for two weeks.&lt;br /&gt;&lt;br /&gt;We went on a day trip to Dubrovnik one day, and the scenery along the Croatian coast is breathtaking. Unfortunately taking photos out of travelling car windows doesn't work too well, but we stopped off at Omiš on the way there and Ston on the way back. Dubrovnik is really impressive, and its history is intriguing (it's worth reading on the wikipedia). We'll definitely make it back one day.&lt;br /&gt;&lt;br /&gt;The rest of the time was spent relaxing, seeing people, swimming in the crystal clear sea, and just having a good time. I was filling up on fish and black squid risotto, but no octopus this time. And I got to drink Tomislav beer again :) (it's got a bitter taste, like stout, but is a lot lighter, maybe it's most similar to something like Leffe Brune or Chimay, but more bitter. It's a pity I can't fill the suitcase!) We also made it to a Salsa club, but they were dancing LA style and it was pretty confusing..&lt;br /&gt;&lt;br /&gt;We got some nice pics around town, and now I've found that JAlbum isn't too bad (it does 90% of what I want), I'll try and clear our backlog of photos! We just can't wait for our next trip to Croatia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-115913742819569277?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/115913742819569277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=115913742819569277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115913742819569277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115913742819569277'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/09/croatia-september-2006.html' title='Croatia September 2006'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-115697845948460746</id><published>2006-08-30T15:40:00.000-07:00</published><updated>2006-09-02T02:56:34.773-07:00</updated><title type='text'>Still been busy</title><content type='html'>Apart from us both suffering from colds that lasted for two weeks, we've still been hectic. We went to the horse races at Newmarket, it was quite a laugh but a bit too posh for me..&lt;br /&gt;&lt;br /&gt;My sister and her boyfriend drove up from Barcelona (where they live) in a camper van. We went punting in Cambridge for the first time, and had a good time. They were going to spend a week in Newquay surfing, but the dire weather meant that they left the UK early and sunned themselves on French beaches.&lt;br /&gt;&lt;br /&gt;We got two-for-one tickets for Madame Tussaud's out of the paper (it's still overpriced, but wasn't too bad), and was a very fun.&lt;br /&gt;&lt;br /&gt;We've got a big stack of photos to get online now; I need to sort out a hosting site (I don't want to pay for ASP.NET hosting, and don't want to continue messing with generating HTML pages) - flickr seems too restrictive, how do people get on with photobucket?&lt;br /&gt;&lt;br /&gt;Oh, and the new Iron Maiden album, A Matter of Life and Death, is awesome. The first impression is heavy, and on the first listen some of the time changes almost sound discordant, but after a few listens they sound natural. I've been thrashing the CD and there's still something new on every listen...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-115697845948460746?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/115697845948460746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=115697845948460746' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115697845948460746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115697845948460746'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/08/still-been-busy.html' title='Still been busy'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-115697753570190794</id><published>2006-08-30T15:35:00.000-07:00</published><updated>2006-08-30T15:40:34.656-07:00</updated><title type='text'>Jabuka Tutorial 3</title><content type='html'>Tutorial 3 of Jabuka (C# physics and 3D engine) is finished (a lot shorter than tutorial 2, but I didn't want to be working on it for six months again). The main page is here &lt;a href="http://www.taumuon.co.uk/jabuka/"&gt;http://www.taumuon.co.uk/jabuka/&lt;/a&gt;, and the pdf file is here &lt;a href="http://www.taumuon.co.uk/jabuka/Tutorial3/Tutorial3_v1.pdf"&gt;http://www.taumuon.co.uk/jabuka/Tutorial3/Tutorial3_v1.pdf&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This tutorial basically just consumes the work done in the last tutorial (the Test-Driven Developed physics component), by our 3D app. Also has a brief discussion of favouring composition over inheritance.&lt;br /&gt;&lt;br /&gt;I think next up will be simple sphere-sphere collision detection, and then once this is working then add rotations. Some feedback on handling rotations would be good - I've got quaternion rotation working, but as it's kinda a beginners engine maybe I should just use matrices? Anyone care?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-115697753570190794?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/115697753570190794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=115697753570190794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115697753570190794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115697753570190794'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/08/jabuka-tutorial-3.html' title='Jabuka Tutorial 3'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-115455836623096014</id><published>2006-08-02T15:35:00.000-07:00</published><updated>2006-08-02T15:41:45.676-07:00</updated><title type='text'>Been busy</title><content type='html'>It's been a busy couple of weeks. Marijana's friends Ivana and Dijana from Croatia came to visit, so we went to Stonehenge, Oxford, a Lebanese restaurant in London, Warwick Castle, an Indian restaurant in Leamington Spa, and a pub in Coventry, all in the space of two weekends! (They were sightseeing in London and Cambridge while we were working). It was an amazing week, and it was great having them to stay. The photos will be up once I get around to sorting out a photo gallery.&lt;br /&gt;&lt;br /&gt;Otherwise, I've just finished Tutorial 2 of Jabuka, and it's been bugging me for ages, just doing minor tidying (the code's been finished for months). Also, I've almost finished off the NUnit Extensibility stuff (Data-Driven NUnit/dynamic fixtures stuff), all along with being busy at work with the end of a project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-115455836623096014?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/115455836623096014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=115455836623096014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115455836623096014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115455836623096014'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/08/been-busy.html' title='Been busy'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-115455810472247058</id><published>2006-08-02T15:31:00.000-07:00</published><updated>2006-08-02T15:35:04.733-07:00</updated><title type='text'>Jabuka Tutorial 2</title><content type='html'>Tutorial 2 of Jabuka is now finished! It can be found on &lt;a href="http://www.taumuon.co.uk/jabuka/"&gt;http://www.taumuon.co.uk/jabuka/&lt;/a&gt; (or a direct link to &lt;a href="http://www.taumuon.co.uk/jabuka/Tutorial2/Tutorial2_v1.pdf"&gt;http://www.taumuon.co.uk/jabuka/Tutorial2/Tutorial2_v1.pdf&lt;/a&gt; ).&lt;br /&gt;&lt;br /&gt;Tutorial 1 was an introduction to Visual Studio 2005 and the Tao Framework in developing a simple 3D application (as well as being a tutorial on OO design and refactoring).&lt;br /&gt;&lt;br /&gt;Tutorial 2 is predominantly a tutorial on Test-Driven Development using NUnit (whilst developing a very simple C# Physics Engine).&lt;br /&gt;&lt;br /&gt;This tutorial was far too big, and took far too long to finish, so the next ones will be much shorter (5 to 10 pages) but hopefully more regular!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-115455810472247058?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/115455810472247058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=115455810472247058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115455810472247058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115455810472247058'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/08/jabuka-tutorial-2.html' title='Jabuka Tutorial 2'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-115255963091186205</id><published>2006-07-10T12:23:00.000-07:00</published><updated>2006-07-10T15:24:16.750-07:00</updated><title type='text'>Winning and losing</title><content type='html'>Marijana won her small claims court case a couple of weeks ago against the dealer who sold us the car with an engine that blew up after six weeks. The advice that we got off Consumer Direct (trading standards advice line) was much better than the advice we got from the Citizens Advice.&lt;br /&gt;&lt;br /&gt;If you ever have problems with a dealer, it's worth trying to get hold of the book "See you in Court!" by Anthony Reeves. We got one second hand on Amazon. Also, the forums on justclaim.co.uk were incredibly helpful. Keep a meticulous record of all phone calls, and send post by recorded delivery. Don't assume that you won't end up going to court until the problem is fully sorted.The book and the advice on the forums helped us with stuff that isn't really found on the court websites, like organising a Claims Bundle, or that if the Defendant makes an offer, you should head the letters confirming any arrangements "Without Prejudice".&lt;br /&gt;&lt;br /&gt;In other news, we were moved up a class in our Salsa dancing lessons a couple of weeks ago. That was OK, except yesterday as the class sizes were small ('cause of the footie), we were put in the highest level class. Hell, it was torture!!!&lt;br /&gt;&lt;br /&gt;I was looking here where Franz Ferdinand says that Croatian pršut is the best: &lt;a href="http://www.index.hr/clanak.aspx?id=321753"&gt;http://www.index.hr/clanak.aspx?id=321753&lt;/a&gt; (original Guardian article here: &lt;a href="http://www.guardian.co.uk/g2/story/0,,1814573,00.html"&gt;http://www.guardian.co.uk/g2/story/0,,1814573,00.html&lt;/a&gt;), and the guys have got taste! We can't find anything quite like pršut in the UK unfortunately, though serrano's not a bad substitute.&lt;br /&gt;&lt;br /&gt;And the losing? I had Brazil in the work sweepstake, though after their first games I wasn't holding out much hope anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-115255963091186205?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/115255963091186205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=115255963091186205' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115255963091186205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115255963091186205'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/07/winning-and-losing.html' title='Winning and losing'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-115161318406122249</id><published>2006-06-29T13:31:00.000-07:00</published><updated>2008-01-11T14:21:08.777-08:00</updated><title type='text'>Data-driven NUnit using 2.4 Extensibility.</title><content type='html'>(Edit: There is now a build NUnit add-in supporting this post, hosted at &lt;a href="http://www.taumuon.co.uk/rakija/"&gt;rakija&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Following my earlier blog posts, I posted a feature request to the NUnit list on Sourceforge, and NUnit maintainer Charlie Poole replied saying that I should nvestigate whether I could get the functionality I want using the new Extensibility features in NUnit 2.4.&lt;br /&gt;&lt;br /&gt;Many thanks to Charlie Poole for giving me an insight into how Extensibility works, into the inner workings of NUnit, and for giving me guidance in creating these plug-ins. Any mistakes in this posting are purely my own. There are two problems that these solve - creating fixtures dynamically&lt;br /&gt;(parameterized fixtures), and creating tests dynamically (parameterized tests). This can be combined to give dynamic fixtures that contain dynamic tests. The dynamic fixtures and tests that are loaded are specified at user assembly load time. This will be clearer below.&lt;br /&gt;&lt;br /&gt;The add-in code can either be build into an assembly to live in an addins sub-folder under the NUnit install location, or can be supplied in the actual user assembly that is loaded into NUnit (primarily for quick development of add-in code).&lt;br /&gt;&lt;br /&gt;The terminology for what I was originally thought in my head were called test fixtures, as are the classes present in the user assembly decorated with the [TestFixture] attribute, are known as user fixtures, to distinguish them from NUNit's internal TestFixture classes.&lt;br /&gt;&lt;br /&gt;The code below is built against NUnit 2.4 beta 1 (build 2.3.6162).&lt;br /&gt;&lt;h2&gt;Dynamic fixtures&lt;/h2&gt;&lt;br /&gt;I'll show how the tests make use of the plug-ins first, then show how the plug-ins are implemented.&lt;br /&gt;&lt;br /&gt;We want to have a user fixture that takes a constructor, and create many instances of these with different constructor arguments. We expect the test TestConstructorValue1 to pass when we construct it with an int value of 1, and&lt;br /&gt;similar for the other methods.&lt;br /&gt;&lt;br /&gt;The string in the constructor will be used to give a name to this instance of the user fixture.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;public class MyTestFixture1 : IDynamicFixture&lt;br /&gt;{&lt;br /&gt; private int value = 0;&lt;br /&gt; private bool fixtureSetupCalled = false;&lt;br /&gt; private string name = "default";&lt;br /&gt;&lt;br /&gt; public MyTestFixture1(string name, int value)&lt;br /&gt; {&lt;br /&gt;  this.name = name;&lt;br /&gt;  this.value = value;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [Test]&lt;br /&gt; public void TestConstructorValue1()&lt;br /&gt; {&lt;br /&gt;  Assert.IsTrue(value == 1);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [Test]&lt;br /&gt; public void TestConstructorValue2()&lt;br /&gt; {&lt;br /&gt;  Assert.IsTrue(value == 2);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [Test]&lt;br /&gt; public void TestConstructorValue3()&lt;br /&gt; {&lt;br /&gt;  Assert.IsTrue(value == 3);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [Test]&lt;br /&gt; public void TestFixtureSetupCalled()&lt;br /&gt; {&lt;br /&gt;  Assert.IsTrue(fixtureSetupCalled);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [TestFixtureSetUp]&lt;br /&gt; public void FixtureSetup()&lt;br /&gt; {&lt;br /&gt;  fixtureSetupCalled = true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #region IDynamicFixture Members&lt;br /&gt;&lt;br /&gt; public string Name&lt;br /&gt; {&lt;br /&gt;  get&lt;br /&gt;  {&lt;br /&gt;   return name;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This class isn't decorated with the TestFixture attribute, to distinguish it from standard NUnit user fixtures. But otherwise it behaves the same. It has Test methods with the same attributes. It implements the IDynamicFixture interface, defined in the plug-in, that has a name property to provide a name for this user fixture in NUnit's tree view.&lt;br /&gt;&lt;h3&gt;Plug-in code&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;public interface IDynamicFixture&lt;br /&gt;{&lt;br /&gt; string Name&lt;br /&gt; {&lt;br /&gt;  get;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, we need a way for instances of this class, our user fixtures, to be created and provided to NUnit. We do this by having a class that implements an interface, IDynamicFixtureBuilder. This class is created by NUnit on loading the assembly, and the GetUserFixtures() method called to register our user fixtures with NUnit:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;public class MyDynamicFixtureBuilder : IDynamicFixtureBuilder&lt;br /&gt;{&lt;br /&gt; public List&amp;lt;IDynamicFixture&amp;gt; GetUserFixtures()&lt;br /&gt; {&lt;br /&gt;  List&amp;lt;IDynamicFixture&amp;gt; fixtures = new List&amp;lt;IDynamicFixture&amp;gt;(3);&lt;br /&gt;  fixtures.Add(new MyTestFixture1("instance1", 1));&lt;br /&gt;  fixtures.Add(new MyTestFixture1("instance2", 2));&lt;br /&gt;  fixtures.Add(new MyTestFixture1("instance3", 3));&lt;br /&gt;  return fixtures;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public Type FixtureType&lt;br /&gt; {&lt;br /&gt;  get&lt;br /&gt;  {&lt;br /&gt;   return typeof(MyTestFixture1);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We can also have &lt;em&gt;normal&lt;/em&gt; NUnit user fixtures decorated by the TestFixture attribute in the user assembly. The plug-in code defines the interface that will be implemented and used to create the user fixtures:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;public interface IDynamicFixtureBuilder&lt;br /&gt;{&lt;br /&gt; List&amp;lt;IDynamicFixture&amp;gt; GetUserFixtures();&lt;br /&gt;&lt;br /&gt; Type FixtureType&lt;br /&gt; {&lt;br /&gt;  get;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, we need to implement a SuiteBuilder that will create our user fixtures. NUnit loads our assembly, and for each type found in the assembly that it loads, it passes the type to two methods on the ISuiteBuilder interface, BuildFrom, and CanBuildFrom, to see whether that builder wants to create a suite from that type. In the &lt;em&gt;normal&lt;/em&gt; case, a NUnit user fixture is decorated by the TestFixture attribute, and the NUNitTestFixtureBuilder informs NUNit that it can build that type, and builds it. We want to have our MyDynamicFixtureBuilder type recognised - we want to create the instances of MyTestFixture1 ourselves.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;[SuiteBuilder]&lt;br /&gt;public class MyFixtureBuilder : NUnitTestFixtureBuilder&lt;br /&gt;{&lt;br /&gt; #region ISuiteBuilder Members&lt;br /&gt;&lt;br /&gt; public override TestSuite BuildFrom(Type type)&lt;br /&gt; {&lt;br /&gt;  if (CanBuildFrom(type))&lt;br /&gt;  {&lt;br /&gt;   IDynamicFixtureBuilder dynamicFixtureBuilder =&lt;br /&gt;    (IDynamicFixtureBuilder)Reflect.Construct(type);&lt;br /&gt;&lt;br /&gt;   TestSuite suite = new TestSuite(&lt;br /&gt;    dynamicFixtureBuilder.FixtureType);&lt;br /&gt;&lt;br /&gt;   // Iterate over our user fixtures.&lt;br /&gt;   foreach (IDynamicFixture userFixture in&lt;br /&gt;    dynamicFixtureBuilder.GetUserFixtures())&lt;br /&gt;   {&lt;br /&gt;    TestFixture fixture =&lt;br /&gt;     new ParameterizedTestFixture(userFixture);&lt;br /&gt;    fixture.TestName.Name = userFixture.Name;&lt;br /&gt;&lt;br /&gt;    IList methods = GetCandidateTestMethods(&lt;br /&gt;     userFixture.GetType());&lt;br /&gt;    foreach (MethodInfo method in methods)&lt;br /&gt;    {&lt;br /&gt;     TestCase testCase = TestCaseBuilder.Make(method);&lt;br /&gt;&lt;br /&gt;     if (testCase != null)&lt;br /&gt;     {&lt;br /&gt;      fixture.Add(testCase);&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;    suite.Add(fixture);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   return suite;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return null;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public override bool CanBuildFrom(Type type)&lt;br /&gt; {&lt;br /&gt;  if (Reflect.HasInterface(type,&lt;br /&gt;   "Taumuon.DynamicFixture.IDynamicFixtureBuilder"))&lt;br /&gt;  {&lt;br /&gt;   return true;&lt;br /&gt;  }&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Our CanBuildFrom method just checks for types implementing our IDynamicFixtureBuilder interface. The BuildFrom method creates an instance of this type, then it creates a TestSuite passing in the fixture type profided from the IDynamicFixtureBuilder - this is the actual type of the user fixtures. It calls GetUserFixtures(), which is where we construct our parameterized user fixtures.In the loop I create a ParameterizedTestFixture, and use the GetCandidateTestMethods method on the base NUnitTestFixtureBuilder class to get methods of the correct signature, and the TestCaseBuilder.Make() creates standard NUnit tests (as they implement the [Test] attribute).&lt;br /&gt;&lt;br /&gt;These tests are added to the fixtures, and the fixtures are added to the TestSuite.&lt;br /&gt;&lt;br /&gt;The purpose of the ParameterizedTestFixture is to keep the instance of our&lt;br /&gt;user fixure, as the NUNitTestFixture implementation of DoOneTimeSetup instantiates new instances of the user fixtures from the FixtureType. We want to keep an instance of our non-default-constructor constructed types around so that we can call their test methods.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;public class ParameterizedTestFixture : NUnitTestFixture&lt;br /&gt;{&lt;br /&gt; private object userFixture;&lt;br /&gt;&lt;br /&gt; public ParameterizedTestFixture(object userFixture)&lt;br /&gt;  : base(userFixture.GetType())&lt;br /&gt; {&lt;br /&gt;  this.userFixture = userFixture;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; protected override void DoOneTimeSetUp(TestResult suiteResult)&lt;br /&gt; {&lt;br /&gt;  // We assign the user fixture here,&lt;br /&gt;  //  so the correct instance is invoked on when running the test.&lt;br /&gt;  this.Fixture = userFixture;&lt;br /&gt;  base.DoOneTimeSetUp(suiteResult);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Dynamic tests (parameterized test cases)&lt;/h2&gt;&lt;br /&gt;The idea behind dynamic tests is to have a fixture that is something like the following. The fixture can have normal [Test] decorated NUnit tests, but the plug-in has a new attribute [DynamicTest], to indicate a test that takes parameters. The user fixture implements the IDynamicTestBuilder interface to indicate that this method contains dynamic tests, and this interface contains the SetTestsToRun method, as obviously NUnit wouldn't know what arguments to call the test method with. The SetTestsToRun() method is called by the plug-in, passing in an object implementing IDynamicTestDetails. Our user fixture calls on this interface, specifing for each call of the DynamicTest method, what name it should appear with in the NUnit tree view, the name of the actual method to call, and the arguments to pass into the method.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;public class MyUserFixure : IDynamicTestBuilder&lt;br /&gt;{&lt;br /&gt; [DynamicTest]&lt;br /&gt; public void MyTestMethod(string arg1)&lt;br /&gt; {&lt;br /&gt;  Assert.AreEqual(arg1, "arg1");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [Test]&lt;br /&gt; public void NormalTestMethod()&lt;br /&gt; {&lt;br /&gt;  Assert.IsTrue(true, "This is a normal NUnit test");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #region IDynamicTestBuilder Members&lt;br /&gt;&lt;br /&gt; public void SetTestsToRun(IDynamicTestDetails setDetails)&lt;br /&gt; {&lt;br /&gt;  setDetails.SetTestDetails("Test 1", "MyTestMethod", "arg1");&lt;br /&gt;  setDetails.SetTestDetails("Test 2", "MyTestMethod", "arg2");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Plug-in code&lt;/h3&gt;&lt;br /&gt;The plug-in code contains the definition of our DynamicTest attribute, and our two interfaces:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;[AttributeUsage(AttributeTargets.Method, Inherited=false,&lt;br /&gt; AllowMultiple=false)]&lt;br /&gt;public class DynamicTestAttribute : Attribute&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public interface IDynamicTestDetails&lt;br /&gt;{&lt;br /&gt; void SetTestDetails(string testName, string testMethodName,&lt;br /&gt;  params object[] parameters);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public interface IDynamicTestBuilder&lt;br /&gt;{&lt;br /&gt; void SetTestsToRun(IDynamicTestDetails details);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Similar to the Dynamic Fixtures, we want to provide a SuiteBuilder that will handle adding our custom user fixtures containing dynamic tests into the system.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;[SuiteBuilder]&lt;br /&gt;public class MyDynamicTestFixtureBuilder :&lt;br /&gt; NUnitTestFixtureBuilder, IDynamicTestDetails&lt;br /&gt;{&lt;br /&gt; private TestSuite fixture = null;&lt;br /&gt;&lt;br /&gt; public override TestSuite BuildFrom(Type type)&lt;br /&gt; {&lt;br /&gt;  if (CanBuildFrom(type))&lt;br /&gt;  {&lt;br /&gt;   IDynamicTestBuilder testBuilder =&lt;br /&gt;    (IDynamicTestBuilder)Reflect.Construct(type);&lt;br /&gt;   fixture = base.BuildFrom(type);&lt;br /&gt;&lt;br /&gt;   // base.BuildFrom will have added a single instance&lt;br /&gt;   //  of our test - it will have found the&lt;br /&gt;   //  DynamicTestMethodBuilder and added the 'vanilla'&lt;br /&gt;   //  (i.e. no parameter, test name set to&lt;br /&gt;   //  the method name) version of the test method.&lt;br /&gt;   //  We only want the user-added version of this method to be present.&lt;br /&gt;   for (int i = fixture.Tests.Count - 1; i &amp;gt;= 0; --i)&lt;br /&gt;   {&lt;br /&gt;    if (fixture.Tests[i] is DynamicTestMethod)&lt;br /&gt;    {&lt;br /&gt;     fixture.Tests.RemoveAt(i);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   testBuilder.SetTestsToRun(this);&lt;br /&gt;&lt;br /&gt;   return fixture;&lt;br /&gt;  }&lt;br /&gt;  return null;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public override bool CanBuildFrom(Type type)&lt;br /&gt; {&lt;br /&gt;  if (Reflect.HasInterface(type,&lt;br /&gt;"Taumuon.DynamicTests.IDynamicTestBuilder"))&lt;br /&gt;  {&lt;br /&gt;   return true;&lt;br /&gt;  }&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;... more code below!&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This just looks for types implementing the IDynamicTestBuilder interface, and calls on the base NUnitTestFixtureBuilder class to build our user fixture. This makes sure that all &lt;em&gt;normal&lt;/em&gt; NUnit TestAttribute-decorated methods are included. This will also have detected our DynamicTest decorated method, and added an instance of this to our test, we'll cover why this is in a bit when we look at our custom TestBuilder, but for now just see that we remove this DynamicTest from the fixture, as we want to add the versions we build ourselves, containing parameters.&lt;br /&gt;&lt;br /&gt;We create our type implementing IDynamicTestBuilder from the type passed into the SuiteBuilder, and call SetTestsToRun on it, passing in this, as our SuiteBuilder implements IDynamicTestDetails. Here's the implementation of this interface:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt; /// &amp;lt;summary&amp;gt;&lt;br /&gt; /// TODO: exceptions etc.&lt;br /&gt; /// &amp;lt;/summary&amp;gt;&lt;br /&gt; /// &amp;lt;param name="testName"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt; /// &amp;lt;param name="testMethodName"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt; /// &amp;lt;param name="parameters"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt; public void SetTestDetails(string testName, string testMethodName,&lt;br /&gt;  params object[] parameters)&lt;br /&gt; {&lt;br /&gt;  if (null == fixture)&lt;br /&gt;  {&lt;br /&gt;   throw new ApplicationException("Test fixture is null");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // TODO: should cache some of this stuff.&lt;br /&gt;  MethodInfo mi = fixture.FixtureType.GetMethod(testMethodName);&lt;br /&gt;  ParameterInfo[] methodParameters = mi.GetParameters();&lt;br /&gt;  if (methodParameters.Length != parameters.Length)&lt;br /&gt;  {&lt;br /&gt;   throw new ApplicationException(&lt;br /&gt;       "Wrong number of parameters");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  for (int i = 0; i &amp;lt; parameters.Length; ++i)&lt;br /&gt;  {&lt;br /&gt;   ParameterInfo pi = methodParameters[i];&lt;br /&gt;   if (pi.ParameterType != parameters[i].GetType())&lt;br /&gt;   {&lt;br /&gt;    throw new ApplicationException(&lt;br /&gt;     "Parameter is of the wrong type");&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  TestCase testCase = TestCaseBuilder.Make(mi);&lt;br /&gt;  testCase.TestName.Name = testName;&lt;br /&gt;  if (testCase is DynamicTestMethod)&lt;br /&gt;  {&lt;br /&gt;   ((DynamicTestMethod)testCase).Parameters = parameters;&lt;br /&gt;  }&lt;br /&gt;  if (testCase != null)&lt;br /&gt;  {&lt;br /&gt;   fixture.Add(testCase);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The user fixture calls back into this method, specifying the testName, testMethodName, and any parameters (there's not much point of this if there are no parameters). We get the MethodInfo from the user fixture, from the MethodName that they've supplied, check that our parameters array matches the parameters on the DynamicMethod.&lt;br /&gt;&lt;br /&gt;Now, to build up the test case, we call TestCaseBuilder.Make() with the method info. This will call into our DynamicTestBuilder (code below), to create a DynamicTestMethod, it sets the parameters on it, and adds this to the user fixture.&lt;br /&gt;&lt;br /&gt;This is our DynamicTestMethod:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;public class DynamicTestMethod : NUnitTestMethod&lt;br /&gt;{&lt;br /&gt; private MethodInfo method;&lt;br /&gt;&lt;br /&gt; #region Constructors&lt;br /&gt; public DynamicTestMethod(MethodInfo method) : base(method)&lt;br /&gt; {&lt;br /&gt;  this.method = method;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public DynamicTestMethod(MethodInfo method,&lt;br /&gt;  Type expectedException, string expectedMessage,&lt;br /&gt;  string matchType)&lt;br /&gt;  : base(method, expectedException, expectedMessage, matchType)&lt;br /&gt; {&lt;br /&gt;  this.method = method;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public DynamicTestMethod(MethodInfo method,&lt;br /&gt;  string expectedExceptionName, string expectedMessage,&lt;br /&gt;  string matchType)&lt;br /&gt;  : base(method, expectedExceptionName, expectedMessage,&lt;br /&gt;           matchType)&lt;br /&gt; {&lt;br /&gt;  this.method = method;&lt;br /&gt; }&lt;br /&gt; #endregion&lt;br /&gt;&lt;br /&gt; public override void RunTestMethod(TestCaseResult testResult)&lt;br /&gt; {&lt;br /&gt;  // The method info is private in the base class,&lt;br /&gt;  //  so have a member in this class.&lt;br /&gt;&lt;br /&gt;  // This is the same as Reflect.InvokeMethod,&lt;br /&gt;  //  except that it invokes with arguments.&lt;br /&gt;  if (this.method != null)&lt;br /&gt;  {&lt;br /&gt;   try&lt;br /&gt;   {&lt;br /&gt;    this.method.Invoke(this.Fixture, parameters);&lt;br /&gt;   }&lt;br /&gt;   catch (TargetInvocationException e)&lt;br /&gt;   {&lt;br /&gt;    Exception inner = e.InnerException;&lt;br /&gt;    throw new NunitException("Rethrown", inner);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public object[] Parameters&lt;br /&gt; {&lt;br /&gt;  get&lt;br /&gt;  {&lt;br /&gt;   return parameters;&lt;br /&gt;  }&lt;br /&gt;  set&lt;br /&gt;  {&lt;br /&gt;   parameters = value;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private object[] parameters;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It overrides NUnitTestMethod, and the constructors are provided to capture a copy of the method MethodInfo, as this member is private in the base class. There is a Parameters array, where we can store the parameters that the user fixture specified should be used for this test instance. This overrides RunTestMethod - this is called from the the base class TestMethod.Run after the Setup method is called. The base class RunTestMethod isn't much different from this, it just calls Reflect.InvokeMethod() that invokes with no parameters. we've just copied the guts of that method to here, invoking with the parameters set on our DynamicTestMethod.&lt;br /&gt;&lt;br /&gt;This is the code for our DynamicTestMethodBuilder (I'll introduce it gradually)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;[TestCaseBuilder]&lt;br /&gt;public class DynamicTestMethodBuilder : NUnitTestCaseBuilder&lt;br /&gt;{&lt;br /&gt; #region ITestCaseBuilder Members&lt;br /&gt;&lt;br /&gt; public override bool CanBuildFrom(&lt;br /&gt;        System.Reflection.MethodInfo method)&lt;br /&gt; {&lt;br /&gt;  if (Reflect.HasAttribute(method,&lt;br /&gt;   "Taumuon.DynamicTests.DynamicTestAttribute", false))&lt;br /&gt;   return true;&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;CanBuildFrom just checks for methods decorated with our DynamicTest attribute.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt; // Duplication of AbstractTestMethodBuilder and&lt;br /&gt; // NUnitTestMethodBuilder code, as HasValidTestCaseSignature&lt;br /&gt; // isn't marked as virtual&lt;br /&gt; public override NUnit.Core.TestCase BuildFrom(MethodInfo method)&lt;br /&gt; {&lt;br /&gt;  // NUnit.Core.TestCase testCase = base.BuildFrom(method);&lt;br /&gt;&lt;br /&gt;  TestCase testCase = null;&lt;br /&gt;&lt;br /&gt;  #region From AbstractTestMethodBuilder&lt;br /&gt;  if (HasValidTestCaseSignature(method))&lt;br /&gt;  {&lt;br /&gt;   testCase = MakeTestCase(method);&lt;br /&gt;&lt;br /&gt;   string reason = null;&lt;br /&gt;   if (!IsRunnable(method, ref reason))&lt;br /&gt;   {&lt;br /&gt;    testCase.RunState = RunState.NotRunnable;&lt;br /&gt;    testCase.IgnoreReason = reason;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   testCase.Description = GetTestCaseDescription(method);&lt;br /&gt;&lt;br /&gt;   SetTestProperties(method);&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;   testCase = new NotRunnableTestCase(method);&lt;br /&gt;  }&lt;br /&gt;  #endregion From AbstractTestMethodBuilder&lt;br /&gt;&lt;br /&gt;  #region From NUnitTestCaseBuilder&lt;br /&gt;&lt;br /&gt;  if (testCase != null)&lt;br /&gt;  {&lt;br /&gt;   PlatformHelper helper = new PlatformHelper();&lt;br /&gt;   if (!helper.IsPlatformSupported(method))&lt;br /&gt;   {&lt;br /&gt;    testCase.RunState = RunState.Skipped;&lt;br /&gt;    testCase.IgnoreReason = helper.Reason;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   testCase.Categories = CategoryManager.GetCategories(method);&lt;br /&gt;   testCase.IsExplicit = Reflect.HasAttribute(method,&lt;br /&gt;    "NUnit.Framework.ExplicitAttribute", false);&lt;br /&gt;   if (testCase.IsExplicit)&lt;br /&gt;    testCase.RunState = RunState.Explicit;&lt;br /&gt;&lt;br /&gt;   System.Attribute[] attributes =&lt;br /&gt;    Reflect.GetAttributes(method,&lt;br /&gt;    "NUnit.Framework.PropertyAttribute", false);&lt;br /&gt;&lt;br /&gt;   foreach (Attribute propertyAttribute in attributes)&lt;br /&gt;   {&lt;br /&gt;    string name = (string)Reflect.GetPropertyValue&lt;br /&gt;         (propertyAttribute,&lt;br /&gt;          "Name", BindingFlags.Public |&lt;br /&gt;          BindingFlags.Instance);&lt;br /&gt;    if (name != null &amp;amp;&amp;amp; name != string.Empty)&lt;br /&gt;    {&lt;br /&gt;     object value =&lt;br /&gt;         Reflect.GetPropertyValue(propertyAttribute,&lt;br /&gt;            "Value", BindingFlags.Public |&lt;br /&gt;            BindingFlags.Instance);&lt;br /&gt;     testCase.Properties[name] = value;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #endregion From NUnitTestCaseBuilder&lt;br /&gt;&lt;br /&gt;  return testCase;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;BuildFrom is pretty simple. It is only present as the base class's HasValidTestCaseSignature isn't marked as virtual (though this should change in a later NUnit build - I've got a feature request in for this). We have to copy the code out of both of the base class methods, just so that our own version of HasValidTestCaseSignature is called. Obviously, this will be much neater once that method is marked as abstract.&lt;br /&gt;&lt;br /&gt;Here's our HasValidTestCaseSignature method:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt; // Change over base class method is to remove requirement&lt;br /&gt; //  for number of parameters to be zero.&lt;br /&gt; // TODO: note that AbstractTestCaseBuilder method should&lt;br /&gt; // be marked as virtual.&lt;br /&gt; protected new bool HasValidTestCaseSignature(MethodInfo method)&lt;br /&gt; {&lt;br /&gt;  return !method.IsStatic&lt;br /&gt;   &amp;amp;&amp;amp; !method.IsAbstract&lt;br /&gt;   &amp;amp;&amp;amp; method.IsPublic&lt;br /&gt;   &amp;amp;&amp;amp; method.ReturnType.Equals(typeof(void));&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This method's only difference over the base class method is to remove a check for the number of parameters to be zero (as obviously we've got parameterized tests).&lt;br /&gt;&lt;br /&gt;The final method of this class is MakeTestCase.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt; protected override NUnit.Core.TestCase MakeTestCase(&lt;br /&gt;                                          MethodInfo method)&lt;br /&gt; {&lt;br /&gt;  Type expectedException = null;&lt;br /&gt;  string expectedExceptionName = null;&lt;br /&gt;  string expectedMessage = null;&lt;br /&gt;  string matchType = null;&lt;br /&gt;&lt;br /&gt;  Attribute attribute = Reflect.GetAttribute(method,&lt;br /&gt;   "NUnit.Framework.ExpectedExceptionAttribute", false);&lt;br /&gt;  if (attribute != null)&lt;br /&gt;  {&lt;br /&gt;   expectedException = Reflect.GetPropertyValue(&lt;br /&gt;    attribute, "ExceptionType",&lt;br /&gt;    BindingFlags.Public | BindingFlags.Instance) as Type;&lt;br /&gt;   expectedExceptionName = (string)Reflect.GetPropertyValue(&lt;br /&gt;    attribute, "ExceptionName",&lt;br /&gt;    BindingFlags.Public | BindingFlags.Instance) as String;&lt;br /&gt;   expectedMessage = (string)Reflect.GetPropertyValue(&lt;br /&gt;    attribute, "ExpectedMessage",&lt;br /&gt;    BindingFlags.Public | BindingFlags.Instance) as String;&lt;br /&gt;   object matchEnum = Reflect.GetPropertyValue(&lt;br /&gt;    attribute, "MatchType",&lt;br /&gt;    BindingFlags.Public | BindingFlags.Instance);&lt;br /&gt;   if (matchEnum != null)&lt;br /&gt;    matchType = matchEnum.ToString();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (expectedException != null)&lt;br /&gt;   return new DynamicTestMethod(method, expectedException,&lt;br /&gt;    expectedMessage, matchType);&lt;br /&gt;  else if (expectedExceptionName != null)&lt;br /&gt;   return new DynamicTestMethod(method, expectedExceptionName,&lt;br /&gt;    expectedMessage, matchType);&lt;br /&gt;  else&lt;br /&gt;   return new DynamicTestMethod(method);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The code for this method is identical to the base class NUnitTestCaseBuilder method, except that at the end it constructs instances of DynamicTestMethod rather than NUnitTestMethod.&lt;br /&gt;&lt;br /&gt;That's it! Well, not quite, I did promise that we could use have dynamic fixtures that make use of dynamic tests. But that involves a few changes; the code as presented above could be shipped as two separate plug-ins, but to get them to play well together means that we have to do a little bit more work, and the dynamic fixture will need some rejiggling. It would be nice if neither plug-in knows about each other (as we would want dynamic fixtures and dynamic tests to work with any other type of plug-in). I'll do this in the next blog posting, but I'll whet your appetite by showing the sort of user tests that I want to have:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Desired combined dynamic test and fixtures&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;using NUnit.Framework;&lt;br /&gt;&lt;br /&gt;using Taumuon.DynamicFixture;&lt;br /&gt;using Taumuon.DynamicTests;&lt;br /&gt;&lt;br /&gt;namespace Taumuon.TestDynamic&lt;br /&gt;{&lt;br /&gt;public class MyDynamicFixtureBuilder : IDynamicFixtureBuilder&lt;br /&gt;{&lt;br /&gt; public List&amp;lt;IDynamicFixture&amp;gt; GetUserFixtures()&lt;br /&gt; {&lt;br /&gt;  List&amp;lt;IDynamicFixture&amp;gt; fixtures =&lt;br /&gt; &amp;amp;nbspnew List&amp;lt;IDynamicFixture&amp;gt;(2);&lt;br /&gt;  fixtures.Add(new MyTestFixture1("instance1", 1));&lt;br /&gt;  fixtures.Add(new MyTestFixture1("instance2", 2));&lt;br /&gt;  return fixtures;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public Type FixtureType&lt;br /&gt; {&lt;br /&gt;  get&lt;br /&gt;  {&lt;br /&gt;   return typeof(MyTestFixture1);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class MyTestFixture1 : IDynamicFixture, IDynamicTestBuilder&lt;br /&gt;{&lt;br /&gt; private int numberOfDynamicTests = 0;&lt;br /&gt; private string name = "default";&lt;br /&gt;&lt;br /&gt; [DynamicTest]&lt;br /&gt; public void MyTestMethod(string arg1)&lt;br /&gt; {&lt;br /&gt;  Assert.AreEqual(arg1, "arg1");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public MyTestFixture1(string name, int numberOfDynamicTests)&lt;br /&gt; {&lt;br /&gt;  this.name = name;&lt;br /&gt;  this.numberOfDynamicTests = numberOfDynamicTests;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #region IDynamicFixture Members&lt;br /&gt;&lt;br /&gt; public string Name&lt;br /&gt; {&lt;br /&gt;  get&lt;br /&gt;  {&lt;br /&gt;   return name;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;&lt;br /&gt; #region IDynamicTestBuilder Members&lt;br /&gt;&lt;br /&gt; public void SetTestsToRun(IDynamicTestDetails setDetails)&lt;br /&gt; {&lt;br /&gt;  for (int i = 0; i &amp;lt; numberOfDynamicTests; ++i)&lt;br /&gt;  {&lt;br /&gt;   setDetails.SetTestDetails("Test " + i.ToString(),&lt;br /&gt;    "MyTestMethod", "arg" + i.ToString());&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-115161318406122249?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/115161318406122249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=115161318406122249' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115161318406122249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115161318406122249'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/06/data-driven-nunit-using-24_29.html' title='Data-driven NUnit using 2.4 Extensibility.'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-115046089592415826</id><published>2006-06-16T05:20:00.000-07:00</published><updated>2006-06-16T08:38:28.170-07:00</updated><title type='text'>BonJovi and Silverstone</title><content type='html'>Last week we saw Bon Jovi at the Ricoh Arena in Coventry. I took a couple of vids on my mobile phone, and they're up at http://www.taumuon.co.uk/BonJovi/ along with some photos - I didn't figure out that my phone camera was set on my shonky resolution, which is a pity.&lt;br /&gt;The arena was pretty impressive, but I wouldn't go there again because of their absolutely terrible/unbelievable parking arrangements. It was a great concert but I've got to get this off my chest *Rant*. A week before the concert I got a letter saying that all parking was off site and had to be booked in advance. I phoned the number given, to be informed by an automated voice that the phone extension wasn't working! I emailed the address given, to be told that I had to print off a car park booking form and post off a cheque (and this is supposed to be the 21st century). A couple of days before the concert I was obviously getting a bit panicky, so tried emailing the address a couple of times, and phoning the arena, with no luck. I spoke to a bus company who said that all of the parking was booked out and that thousands of people (this is probably an exaggeration, though the switchboard was continually busy) were trying to get in touch with the arena to sort something out. Luckily, our friend George lives in Coventry and came to give us a lift, but if it wasn't for him it would have been a disaster. So, the Ricoh arena is a great venue, but avoid if you don't live right next to it or don't mind waiting around for hours for a taxi.&lt;br /&gt;&lt;br /&gt;Also, at the weekend we made it to Silverstone for the qualifying on Saturday. I got sunburn, and it was very loud, but it was a good day out! Pics are up at http://www.taumuon.co.uk/Silverstone/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-115046089592415826?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/115046089592415826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=115046089592415826' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115046089592415826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/115046089592415826'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/06/bonjovi-and-silverstone.html' title='BonJovi and Silverstone'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-114677543079953616</id><published>2006-05-04T13:27:00.000-07:00</published><updated>2006-05-04T13:47:28.773-07:00</updated><title type='text'>Another proposed NUnit feature.</title><content type='html'>This post will clarify the proposed NUnit feature mentioned in the last post, and also propose a new feature (right near the end).&lt;br /&gt;&lt;br /&gt;I was thinking of another concrete example of where adding a new feature to NUnit, to allow a more flexible method to create TestFixtures (proposed via a TestFixtureProvider attribute), as mentioned in my last post, may be useful. First, a bit of background on how NUnit was being used:&lt;br /&gt;&lt;br /&gt;In the past, I worked on the mapping of financial instruments from an-memory representation of a complex hierarchy of objects into a multi-line string for consumption by another product.&lt;br /&gt;&lt;br /&gt;The test fixtures were broadly organised into product types (e.g. bond), with tests for the different conditions encountered by that product (e.g.buy/sell, expired, amortising, etc.)&lt;br /&gt;&lt;br /&gt;It was chosen that the tests should be XML driven:&lt;br /&gt;&lt;br /&gt;To act as documentation: as the mappings were complex it would provide concrete human-readable examples of the instrument states, and associated mappings.&lt;br /&gt;Tests are more manageable - can generate XML automatically, to give creater coverate quicker.&lt;br /&gt;Allows financial analysts to create additional tests - don't have to know programming.&lt;br /&gt;&lt;br /&gt;The original instrument was represented by COM objects, with the C# mapping code consuming these objects via interop. As COM is interface-driven, it was fairly trivial to create mock objects implementing these interfaces, for testing.&lt;br /&gt;&lt;br /&gt;As the instrument was hierarchical, an XML representation was a natural fit. There were XML files for each test fixture, each containing nodes which contained the XML representation, and either the expected string output from the mapping or any expected exception.&lt;br /&gt;&lt;br /&gt;e.g.&lt;br /&gt;&lt;br /&gt;InstrumentTypeATests.xml&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;TestFixture name="InstrumentATests"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;Test name="TestACertainConfiguration"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Instrument&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This is an XML representation of an instrument.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Instrument&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ExpectedMapping&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;An expected mapping string in a CData section.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/ExpectedMapping&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/Test&amp;gt;&lt;br /&gt;&amp;lt;/TestFixture&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is where we're getting to the point of this post. We want to run these XML tests in NUnit - there are a number of ways to do this.&lt;br /&gt;&lt;br /&gt;One is to have a fixture, with a RunXmlTest method, that would load the XML file (with the filename either hardcoded into the file, or into the fixture constructor - remember we've currently got no way to specify constructor arguments, other than via a parameter as passed into the commandline?), then would iterate through the nodes, populating the mock objects, map these mock objects into their string representation, and check that mapping against the expected mapping as specified in the tests. Which is fine, except that we'll have a single green bar per fixture/test xml file, which isn't very useful when there are hundreds of test cases.&lt;br /&gt;&lt;br /&gt;(forgive any poor syntax/noddy-errors - I can't remember exactly what this looked like, but this should be enough for you to get the idea)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[TestFixture]&lt;br /&gt;InstrumentATestFixtureOriginal : BaseXmlFixture&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;[FixtureSetUp]&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void FixtureSetup()&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Set the path as used by the base class.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pathToXml = "InstrumentTypeATests.xml";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Base class method to load the XML.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadXml(); // loads into xmlDocument member&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;[Test]&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void RunXmlTest()&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach( XmlNode node in xmlDocument )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RunTest(node.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;An improvement is to have a TestACertainConfiguration test corresponding with each Test node in the XML - so we get a green bar for each of the tests:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[TestFixture]&lt;br /&gt;InstrumentATestFixtureNew : BaseXmlFixture&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;[FixtureSetUp]&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void FixtureSetup()&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Set the path as used by the base class.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pathToXml = "InstrumentTypeATests.xml";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Base class method to load the XML.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadXml(); // loads into xmlDocument member&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;[Test]&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void RunXmlTest1()&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RunTest("Test1");&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;[Test]&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void RunXmlTest2()&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RunTest("Test2");&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;But only tests as specified in the C# NUnit test are executed.&lt;br /&gt;&lt;br /&gt;The solution that I used for the above, as all of the functionality is in the base &lt;br /&gt;classes, is to generate the classes InstrumentATestFixtureNew from using XSLT on the XML files to produce .cs files which are compiled into the build.&lt;br /&gt;&lt;br /&gt;This worked nicely, it allowed any changes in the XML files to be taken into account in the tests, but still required a rebuild.&lt;br /&gt;&lt;br /&gt;So, the desired behaviour is to allow new test files to be added into a folder somewhere, and the tests to be modified, and have test fixtures generated according to the data in the xml files, without a rebuild of the test project. This is where the new proposed NUnit features would be useful.&lt;br /&gt;&lt;br /&gt;Method 1, using the proposed TestFixtureProvider, is to have a constructor on InstrumentATestFixtureOriginal taking the path to the XML file to load, and registering instances of this class with the NUnit framework (see last post for more details on the syntax). This would work OK, but would mean that all of the tests contained in the fixture would only register one red/green bar in the GUI.&lt;br /&gt;&lt;br /&gt;Method 2 is a variation on method 1, in that we'd modify InstrumentATestFixtureOriginal to be constructed with the path to the XML, and also the name of the test node - i.e. we'd create a fixture for each test. This would work, but would look cluttered on the GUI. It may be that we could specify in the TestFixtureProviderAttribute how to group these fixtures on the GUI. But this still feels a bit hack-y.&lt;br /&gt;&lt;br /&gt;Method 3 is to create the fixtures in memory dependant on the XML, using either CodeDOM or Reflection.Emit. We'd still need to use the proposed TestFixtureProvider property to get these test fixtures to be registered, but it would be the neatest solution. However, it would be a lot of work.&lt;br /&gt;&lt;br /&gt;Method 4 is where we get to the second proposed new NUnit functionality. It's basically to -somehow- implement method 3 but without having to generate the fixtures in code. What we'd like is for every time the base class's RunTest method is called, it appears on the UI. Maybe a new method called "RegisterTest(string name)" could be added to NUnit to be called from RunTest.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-114677543079953616?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/114677543079953616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=114677543079953616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/114677543079953616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/114677543079953616'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/05/another-proposed-nunit-feature.html' title='Another proposed NUnit feature.'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-114617047345141541</id><published>2006-04-27T13:23:00.001-07:00</published><updated>2006-05-14T15:11:35.643-07:00</updated><title type='text'>Unit testing frameworks not OO / Suggested new NUnit features.</title><content type='html'>I was looking at the arguments into one assertion per test (not wanting to open a can of worms here), and how the proposed solution shows how testing frameworks lead to non-OO code. In the original blog entry to be found at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=35578"&gt;http://www.artima.com/weblogs/viewpost.jsp?thread=35578&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.daveastels.com/articles/category/programming/page/4"&gt;http://blog.daveastels.com/articles/category/programming/page/4&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Converting the example provided to C#/NUnit (rather than the original Java/JUnit), the test-driven developed Address being tested is:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public class Address&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;private string addr1;&lt;br /&gt;&amp;nbsp;private string cityStatePostalCd;&lt;br /&gt;&amp;nbsp;private string country;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public Address(string address)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Parse(address);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private void Parse(string address)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;string[] tokens = address.Split('$');&lt;br /&gt;&amp;nbsp;&amp;nbsp;addr1 = tokens[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;cityStatePostalCd = tokens[1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;country = tokens.Length &gt; 2 ? tokens[2] : "";&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public string Addr1&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;get { return addr1; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public string CityStatePostalCd&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;get { return cityStatePostalCd; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public string Country&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;get { return country; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And the original non-one assertion per test fixture is:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[TestFixture]&lt;br /&gt;public class OriginalFixture&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;[Test]&lt;br /&gt;&amp;nbsp;public void TestAddress1()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Address a = new Address("ADDR1$CITY IL 60563$COUNTRY");&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual(a.Addr1, "ADDR1");&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual(a.CityStatePostalCd, "CITY IL 60563");&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual(a.Country, "COUNTRY");&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The suggested solution to this is to have new fixtures for each of the assertions:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[TestFixture]&lt;br /&gt;public class Addr1CspTests&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;private Address anAddress;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[SetUp]&lt;br /&gt;&amp;nbsp;public void setUp()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;anAddress = new Address("ADDR1$CITY IL 60563");&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[Test]&lt;br /&gt;&amp;nbsp;public void TestAddr1()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual("ADDR1", anAddress.Addr1);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[Test]&lt;br /&gt;&amp;nbsp;public void TestCsp()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual("CITY IL 60563", anAddress.CityStatePostalCd);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[TestFixture]&lt;br /&gt;public class Addr1CspCountryTest&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;private Address anAddress;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[SetUp]&lt;br /&gt;&amp;nbsp;public void setUp()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;anAddress = new Address("ADDR1$CITY IL 60563$COUNTRY");&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[Test]&lt;br /&gt;&amp;nbsp;public void TestAddr1()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual("ADDR1", anAddress.Addr1);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[Test]&lt;br /&gt;&amp;nbsp;public void TestCsp()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual("CITY IL 60563", anAddress.CityStatePostalCd);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[TestAttribute]&lt;br /&gt;&amp;nbsp;public void TestCountry()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual("COUNTRY", anAddress.Country);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The author suggest as the Addr and Csp tests are similar in both cases, then they could be refactored into a base class.&lt;br /&gt;&lt;br /&gt;However, this got me thinking about the test code I've written/worked with - it's usually quite script like and not very OO, and this example shows why - even though it leads to the definition of more classes, it's not really OO - each of the classes corresponds with an instance that is instantiated by the test framework. And each of the instances doesn't differ in their operation, but only in the data used in the construction and the test methods.&lt;br /&gt;&lt;br /&gt;It would be tidier if we could instantiate these test fixtures with the data required, and allow NUnit to add them to the list of fixtures and maintain them. I think MBUnit lets you somehow define what data the tests will use via XML, which may do the trick.&lt;br /&gt;&lt;br /&gt;So what I'm thinking is is that -somewhere-, I'm not sure where would be best, there would be a method decorated with a TestFixtureProviderAttribute, and this would return a set of TestFixtures when called - so no longer would the TestFixtures only be created using their default constructors.&lt;br /&gt;&lt;br /&gt;In our case, the above example would be replaced by something like (excuse any syntax errors):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[TestFixture]&lt;br /&gt;public class AddrTest&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;private Address anAddress;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public AddrTest(string address, string expectedAddr1, string expectedCsp, string expectedCounty)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;...// assign to members&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[SetUp]&lt;br /&gt;&amp;nbsp;public void setUp()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;anAddress = new Address(address);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[Test]&lt;br /&gt;&amp;nbsp;public void TestAddr1()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual(expectedAddress, anAddress.Addr1);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;[Test]&lt;br /&gt;&amp;nbsp;public void TestCsp()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual(expectedCsp,anAddress.CityStatePostalCd);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[TestAttribute]&lt;br /&gt;&amp;nbsp;public void TestCountry()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Assert.AreEqual(expectedCountry,anAddress.Country);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And this would be created by:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;nbsp;[TestFixtureProvider]&lt;br /&gt;&amp;nbsp;ArrayList GetTestFixtures()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;ArrayList fixtures = new ArrayList();&lt;br /&gt;&amp;nbsp;&amp;nbsp;fixtures.Add(new AddrTest("ADDR1$CITY IL 60563", "ADDR1",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"CITY IL 60563", "");&lt;br /&gt;&amp;nbsp;&amp;nbsp;fixtures.Add(new AddrTest("ADDR1$CITY IL 60563$COUNTRY", "ADDR1",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"CITY IL 60563", "COUNTRY");&lt;br /&gt;&amp;nbsp;&amp;nbsp;return fixtures;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This would be more OO - the data could be easily populated from an XML file, or created manually, and more importantly, to add a test case wouldn't require creating a whole new Class definition. This would stop the profileration of classes problem caused by test fixtures leading to non-OO code. If anyone's reading this, and cares, I can try modifying the NUnit sources to investigate further.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-114617047345141541?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/114617047345141541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=114617047345141541' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/114617047345141541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/114617047345141541'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/04/unit-testing-frameworks-not-oo_27.html' title='Unit testing frameworks not OO / Suggested new NUnit features.'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27022525.post-114616842402771913</id><published>2006-04-27T12:47:00.000-07:00</published><updated>2006-05-03T04:16:26.286-07:00</updated><title type='text'>Visit to Split, Croatia Easter 2006</title><content type='html'>Photos from our trip to Split for Easter 2006 will be up on Taumuon soon. We got to do quite a lot on this visit - we went to the village where Mare's father grew up, high up in the hills above Split, and took a trip to Mostar and Međugorje in Bosnia and Herzegovina.&lt;br /&gt;&lt;br /&gt;The bus to Mostar went down the coast from Split through Omiš (which itself way amazing; there are towering cliffs either side of where the river joins the sea), and we were treated to amazing views of the rising sun lighting up fishing boats in picturesque coves, with crystal clear seas and islands in the background.&lt;br /&gt;&lt;br /&gt;Mostar itself was really impressive; Marijana's friend Ivana lives there and gave us a guided tour - the old town is beautiful, and it's quite a weird mixture because of the mix of muslim and non-muslim population. Well, I say mix, but the town is divided between the muslim and catholic population. We got to climb to the top of a mosque's tower, which was vertigo-inducing. The old part of town has markets selling ibriks/cezves/džezve (Turkish coffee pots) and flying carpets (well, that's what they look like). The old town again is an amazing sight, with the bridge (of course) and I hate to use the word picturesque again, but it's too late now.&lt;br /&gt;&lt;br /&gt;Also, looking at the photos (when they're up) you might think that there are way too many bombed buildings in Mostar, but there really aren't that many, and there's been lots of redevelopment done, it's just fascinating as the buildings have been left standing as they are, rather than being demolished. It also felt quite morbid to be taking pictures of them all.&lt;br /&gt;&lt;br /&gt;Međugorje was a bit of a letdown; admittedly we didn't go into the hills where I'd expect there is a shrine or something, but the town just feels really commercialised.&lt;br /&gt;&lt;br /&gt;The other cool thing we did, is to look around the Roman ruins of the town of Solin/Salona, just outside of Split. It was a third of the size of Split is now, almost 2000 years ago. The ampitheature was probably the most impressive thing there.&lt;br /&gt;&lt;br /&gt;I also got to hire a mountain bike on the hill Marjan just outside of Split, with Mare's brother Mladen. I wasn't too bad despite having a two year break!&lt;br /&gt;&lt;br /&gt;Of course, it was great to catch up with everyone there, and to stuff myself with amazing food and drink again, and to experience UK summer weather in April (can't wait for our next trip!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27022525-114616842402771913?l=taumuon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://taumuon.blogspot.com/feeds/114616842402771913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27022525&amp;postID=114616842402771913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/114616842402771913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27022525/posts/default/114616842402771913'/><link rel='alternate' type='text/html' href='http://taumuon.blogspot.com/2006/04/visit-to-split-croatia-easter-2006.html' title='Visit to Split, Croatia Easter 2006'/><author><name>Taumuon</name><uri>http://www.blogger.com/profile/12874508418428339669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://bp0.blogger.com/_9XuDfr9pYU0/SGAMUjxkNvI/AAAAAAAAACs/YhujEd8cyMk/S220/colloseum.jpg'/></author><thr:total>0</thr:total></entry></feed>
