Subscribe to:
Everything
Just Tech

PhotoSynth is the Microsoft Research / Seadragon / UWashington technology that can process a collection of photos and turn it into a scene that can be navigated in 3D.

At this year’s Siggraph conference, there’s an interesting paper from the University of Washington and Microsoft about finding more intelligent paths through collections of photos like the ones produced by PhotoSynth.
Here’s the video that accompanies that paper:

(Click for direct link to YouTube)


When I was working for Microsoft in Dublin, I experimented with what was then an internal tool for creating PhotoSynths.  I ran around Dublin taking photos of some famous places.

Two of my favourite Photosynth collections were shot in the early morning quiet at The Temple Bar Pub.  Now, with the public release of PhotoSynth, I can publish these to the web!


Temple Bar (Front Bar), Dublin, Ireland

(Click for larger view on Photosynth site)


If I could go back and shoot these again, I’d put more time into taking close-ups of objects and memorabilia of interest. Photosynth shines in scenes where the viewer is interested in navigating the scene to discover and examine points of interest.


Temple Bar (Back Bar), Dublin, Ireland

(Click for larger view on Photosynth site)


I also have Synths of Newgrange and the Liffey River which I will post when I have a chance to find the original photos.

Congratulations to the PhotoSynth team, and please send me a link if you ‘Synth something cool!

WPF Interactive 2D on 3D Adam Kinney has posted download links to the source for a couple of David Teitlebaum’s WPF 3.5 SP1 great shader demos from a video demo I excitedly linked to a while back.

Check out the WPF TextBox (complete with spell check and other niceties) on a cloth surface, all smoothly hardware-accelerated. Now to (a) figure out where I can fit this into the UI and (b) convince my current client they want one of these ;)

Download the samples via Adam’s Blog.

… and then I Silverlit it!

Is alternately a LOLQuilt, a ROFLMosaic, or a Deep LOL! :)

Here is the full screen version.

Click, drag, shift-click and use the mouse wheel to see that the image is made of over 10,000 LOLCats (there are 2,442 unique images here).

How this came to be?

The kittehs are from the very awesum icanhascheezburger.com which I love and will link to again because I hope they will also find this awesum and not tell me to make it go away.

The photomosaic was generated using AndreaMosaic, a utility for making fun images like this one.

The output of AndreaMosaic got processed by Deep Zoom Composer and turned into a Silverlight app.

And then uploaded to Silverlight Streaming which lets me host these kittehs on the intarwebs without bringing mai wee server to its knees (i hope i hope i hope).

Roger from SilverlightAddict.com asked me for more information about how I manage the sound effects in the Silverlight version of Legend of the Greasepole.

I have a Canvas element in my scene called MusicCanvasRoot.  It contains a number of MediaElement children equal to the maximum number of simultaneous sounds that the game will play. This helper method allows my sound routines to find an unused MediaElement, and returns null if the maximum number of sounds is currently playing:

private static List<MediaElement> MediaElements = null;

private static int MaxSimultaneousSounds = 14;

private static MediaElement GetFreeMediaElement()

{

if (MediaElements == null)

{

MediaElements = new List<MediaElement>();

for (int i = 0; i < MaxSimultaneousSounds; i++)

{

MediaElement me = new MediaElement();

MediaElements.Add(me);

Page.Instance.MusicCanvasRoot.Children.Add(me);

}

}

foreach (MediaElement me in MediaElements)

{

if (me.Tag == null) return me;

}

return null;

}

When a sound is playing in a MediaElement, I set the Tag on the MediaElement to indicate whether or not the sound is looping.  Here’s the internal method that handles requests that come in to play a sound:

private void DoPlay(int volume, int pan, bool looping)

{

MediaElement mediaElement = GetFreeMediaElement();

if (mediaElement == null) return;

mediaElement.MediaEnded += me_MediaEnded;

mediaElement.Volume = Page.Instance.IsMuted ? 0d : 1d;

if (looping) mediaElement.Tag = “PLAYLOOP”; else mediaElement.Tag = “PLAYONCE”;

// …

// Assign a Uri to mediaElement.Source

//

// My sounds are stored as MP3 files stored as Resources in an

// Assembly that is downloaded after the app starts.

// …

// TODO: Set Volume and Pan in Silverlight.

// This allows me to implement IsPlaying for a particular sound effect

MyMediaElements.Add(mediaElement);

mediaElement.Position = TimeSpan.Zero;

mediaElement.Play();

}

And here’s the Event Handler for the MediaEnded event, which managing stopping sounds, or looping them when they complete:

void me_MediaEnded(object sender, RoutedEventArgs e)

{

MediaElement me = sender as MediaElement;

if (((string)me.Tag) == “PLAYLOOP”)

{

me.Position = TimeSpan.Zero;

me.Play();

return;

}

else

{

ReleaseMediaElement(me);

}

}

private void ReleaseMediaElement(MediaElement me)

{

me.MediaEnded -= me_MediaEnded;

me.Stop();

me.Tag = null; // free it up for use by another sound effect.

MyMediaElements.Remove(me);

}

The string-based Tags are a throwback to Silverlight 2 Beta 1, where the Tag exhibited some strange behavior that seems to be resolved in Beta 2.

Hope that helps. Let me know if you have any questions or want a full drop of the sound code.

Expression Blend designInvisible Add-In Support in Blend June Preview
+ Robby’s XAML Intellisense code from KAXAML
+ Stefan’s great work

= Awesome.

+1 to excitement about add-in support for Blend in latest Preview
+1 to observations that the WPF designer in VS2008 is uncomfortably slow
+1 to also wanting C#/VB.NET Intellisense in Blend, to reduce VS2008/Blend context switching

(And no I don’t care that I’m not supposed to want C# Intellisense in Blend because apparently only designers and “dev-igners” use Blend… [a] devs use (and value) Blend too and [b] I find designers are not intimidated by getting their feet wet with C#, and believe me, making designers install VS2008 Express Edition just so they can be handheld through writing a custom converter is WAY more intimidating to them than having C# AutoComplete in Blend.)

(Although I appreciate it is a significant technical challenge to get code Intellisense robustly implemented in Blend.)

I would be very grateful for any advice on how to paste code from Visual Studio into a WordPress post.  I have never found a plug-in or cut-and-paste pipeline that worked well for me.

I’m back in Toronto after a much appreciated break in Italy and Greece.

Before I left, I had the chance to work on a very interesting Silverlight and Windows Live project, and this week I am planning for the rest of the calendar year and eagerly anticipating the release of .NET 3.5 SP1!

Silverlight Streaming was updated to Silverlight 2 Beta 2 while I was away, and so Legend of the Greasepole’s Silverlight version is now working again.  Greasepole is the game project I worked on from ‘96 through ‘98 which I have since ported to XNA and now Silverlight.  The Silverlight version is online here, there are some development comments here, and Roger from SilverlightAddict.com has asked me for more information on how I did the sound, so I will follow up on that soon.

But for now, photos! (More to come on my flickr stream as soon as time permits…)

I didn't like this movie.I was asked a few weeks ago about why Artificial Intelligence over the past few decades has been such a “failure”, meaning mostly that it isn’t seen to be living up to its great expectations.

James Gaskin at NetworkWorld gives a well-referenced response very similar to the one I gave back then, which went like this:

Essentially, whenever some field of AI achieves a result, the successful work is given a name (intelligent search, [something] recognition, adaptive [something], smart [something], etc.), it leaves the lab, has an impact on industry / research / our lives, and “Artificial Intelligence” remains loosely defined as “the tough cognition problems we haven’t solved yet.”

Mind you, even defined in that way, Marvin Minsky would probably still agree that the creators of AI really need to get a hustle on.

I normally don’t cross-link WPF articles unless super-excited because I figure all of us in the WPF-o-sphere are reading each other’s blogs.  But I was particularly interested on Rudi Grobler’s recent look into XAML obfuscation because I’ve encountered obfuscation issues from a couple of sides in a recent project, and look forward to hearing further discussion on the topic.

To sum up, XAML obfuscation is a bit of a quagmire.  I haven’t found a tool (let alone a build pipeline) that would make it easy to obfuscate production XAML code, which some consulting clients certainly would prefer.  I’ll be interested in the results of Rudi’s investigation.

The other side of the coin is that because WPF apps are hard to obfuscate, studying code in order to learn (rather than to “liberate” is also possible.)  I have really valued using tools like Reflector to learn good WPF practices from the experts.  As I mentioned before, Expression Blend, which is a WPF app itself, has been a real inspiration because the Blend team has solved some really hard problems while building Blend.

I’m excited to be launching a WPF training course through Toronto-based consultancy ObjectSharp. The course is called “Windows Presentation Foundation for Developers and Lead Designers,” and, as the title suggests, it offers a hands-on experience designed to give developers and lead designers the knowledge, background, tips and references they’ll need to build smart client applications using the Windows Presentation Foundation.

After enjoying the process of training a team of developers and designers to use WPF, this course is the result of turning that material into a course that we could offer here.

My goal is to give participants in the course the base knowledge and pointers they need to build WPF apps. I’ll also position WPF relative to other presentation layer technologies (such as WPF’s little brother Silverlight), and demonstrate practices that have been useful to me in development I’ve done for my clients.

The inaugural course offering is scheduled for August 11th-13th. [corrected 17 June] If you’re interested in taking part, please find more information about the course on ObjectSharp’s site. Also, if August 13th is too long for you to wait, or you’re interested in an on-site course, please contact me, or Julie James, ObjectSharp’s Training Manager.

Update 8 Aug: ObjectSharp has canceled the 11-13 Aug running of this course. I am now offering a WPF course independently through my consultancy for small groups of designers and developers. If you are interested, please contact me directly.

Older Posts »