Earlier in the year I dropped in to see some former colleagues of mine who are working on a new product/service called KoodibooK at their software company in Bath (UK).
KoodibooK is a product that allows you to build up a set of photographs into a book, publish that book to an online store and then buy copies of the book that you made or, equally, books that other people have made and published.
I really like the application – you can try it yourself in beta from http://www.koodibook.com – it looks great and “feels” really slick, snappy and just “friendly” to use.
I’ve put together photograph books like this before myself using iPhoto on my Mac and I hadn’t come across a Windows solution quite as rich as this one – I plan to try it for my next photo book and see how it works out.
On the tech side – what I really found interesting was that the client applications and the websites/services that the guys have brought together cover such a wide range of the Microsoft stack.
The book creation part of the application needs to be rich and so there’s a Windows application written in WPF that leads the user from the creation of their book through to publishing it to the website.
On the website there’s still a need to show the book off in its best light and so Silverlight steps in ( with some re-use from the desktop code base ) in order to ensure that a very wide range of users can still see the books that are available with high fidelity even though they may not have the book creation application installed.
And those Silverlight “islands of richness” are hosted within web pages written with ASP.NET MVC2 and hosted in Windows Azure – KoodibooK is “living the dream” when it comes to bringing together all those platform pieces 🙂
I managed to get Richard Godfrey and Paul Cross of KoodibooK captured on video talking about the application ( which they demo ), the company and how they needed to harness the power of the client PC over for the sort of application that they wanted to build – it’s a bit of a “warts” and all discussion in that the guys talk about some of the pain points of getting .NET Framework V3.5 Sp1 deployed but that’s the reality of building software ( plus, it’s a lot easier now we have Windows 7 with 3.5 Sp1 already built in 🙂 ).
I was lucky enough to have a chance to chat with Aaron Skonnard at DevWeek last month and I captured a few videos which I thought I’d share here.
Aaron (as you probably know) is a co-founder of the Pluralsight company and is a great trainer and technical presenter and was keynoting DevWeek with a talk about Cloud Computing so I manage to snag him and ask him a few questions about “the Cloud”.
I’ve broken this down into a couple of sections, the first one here mostly being about timelines as we head towards Cloud;
and then the second one here being more about how developers can prepare for Cloud computing;
and then this last one here was really more of a “fun” question where I asked Aaron what he was currently playing with. I always find this an interesting question as I think all developers are always secretly toying with some bit of technology even if it means staying up late 🙂
I’m trying to write some code against the Live Framework SDK and I was trying to avoid hanging my UI so I figured that what I’d do is to use all the async options within the object model.
So…as a for instance – if I have data backed by 5 MeshObjects on the screen and the user selects 3 of them and presses Delete then I’d want to delete those items and I’d want to do it asynchronously.
However…more than one “in flight” async operation against the current Live Framework object model seems to hit you with a;
“Concurrent Operations are Not Supported”
error so this post is just a word of warning if you encounter this.
It’s tricky for me because I have other instances where I want to display N images on the screen. These are data-bound with WPF and the original intention in the property accessor that supplies the Image was something like this;
public BitmapImage Image
if (image == null)
image = new BitmapImage();
image.StreamSource = s;
image = value;
So, you can see that I lazily load the image asynchronously from the Mesh ( GetMediaStreamForPhotoAsync is my function but I’m sure you get the picture regardless of whether you’ve seen the Live Framework object model or not – note that the callback provided as a lambda above is marshalled back to the Dispatcher thread ).
This works brilliantly until WPF calls the Image property on object 1, gets a null ( causing an async operation to begin ) and moves on to object 2 where it causes another async operation to begin and the Live Framework object model can’t handle that in its current incarnation.
What to do? I figure that I can either;
Work synchronously and hang the UI. Not acceptable! 🙂
Work synchronously but put some “background thread” in place and call all the synchronous functions from that thread, somewhat like BackgroundWorker.
I think I’ll go for 2, pity I’d written such a lot of code before I realised it wouldn’t work 🙂