Mindscape

Technology doesn’t matter – solving problems does
5 December 2007 in General & Mindscape | Comments (7)

Perhaps a funny thing for a geek to say but hear me out. We, geeks, surround ourselves with many other geeks and we all get our jollies discussing the latest and greatest technology. We have to build this website in Ruby on Rails! This application must be written in .NET 3.5! We must use SQL Server 2008 RC9! We need to change back end to use framework XYZ!

If geeks were to be believed, often you would think they completely couldn’t function without the latest alpha bits of technology xyz.

The thing that geeks often ignore is what is best for the end user. If you’re building a website, for example, and you elect to build it in fancy technology xyz but it delays your delivery by 3 months is that a benefit to the end user? If you elect to build it in technology xyz but, because you had no idea how it really worked beforehand, needed to stop and start all over again in the middle, is that a benefit to the end customer?

Customers just want the work done so that it works, is delivered on time and helps solve the problems it was designed to solve. That is about where their interest ends usually. Your mission to to ensure you meet those goals effectively and in a manner that won’t turn into a maintenance nightmare when it needs to be supported later.

But I am a geek!

I want to stop short of saying that technology platform NEVER matters because, to geeks, it does. And keeping geeks happy, in fact any employee, is important to moving forward efficiently. No geek wants to still be coding in VB 3 (and those that still want to code in Access… well… that’s a seperate blog post!). We do get job satisfaction from playing with cool stuff. If you were a pilot you’d probably love to fly some kick ass new fighter jet rather than than what you currently fly.

There are also additional benefits to developers from new technology – some things do become easier, some things do require less code and perform faster. However the decision to use the latest and greatest needs to be considered carefully – I know many software houses that use the latest stuff only because it is the latest stuff and this about the worst reason to move up.

WTF JD?

Some of you might be asking this question – how can I be saying this when we at Mindscape were pumping out solutions based on LINQ to SQL 9 months before it even RTMs? We all speak about upcoming changes in the new releases of SQL 2008, Windows Server 2008. Heck, Jeremy has even been training folks on how to use Windows Server 2008 a year before it comes out. So what’s the story?

I believe strongly that it is beneficial to play with these technologies before you put them into production. We are geeks, we do grab alpha bits, we do explore but that is so that we can make judgment calls about when it’s appropriate to use in products. What is LightSpeed written in and targeting? .NET 2.0. That’s it. We know a lot of our customers can’t move up to .NET 3.5 right away and, while we could have targeted 3.5, we knew it was better for our customers and therefore better for us to use .NET 2.0.

If code is performing its function correctly and is performing well then you do not have a major reason to upgrade. For example – TradeMe used to be all ASP code and it took them a while to jump on the .NET bandwagon. I’m not sure the specific reasons that dictated it was time to move up but my guess is that it’s a combination of reasons:

  • It was getting harder to find developers wanting to code in ASP
  • ASP code can be a wee bit harder to maintain due to it only providing an inline code experience
  • .NET code could be run faster than the older ASP code (that’s a guess on my behalf)

As I say, these are just a guess from my part. I’m pretty sure it wasn’t from a lot of people posting in the forums saying “ASP sucks – you should use .NET. I’m not going to use TradeMe anymore unless you move up”. Customers don’t care unless the technology starts surfacing in terms of performance slow downs etc which is often more of a design issue that being explicitly because of the technology choice.

What are your thoughts? Have you fallen victim to upgrading for the sake of it? Am I completely off the mark or have I missed something out?

John-Daniel

kick it on DotNetKicks.com

We shipped LightSpeed 1.0!
6 August 2007 in Mindscape & Tools | Comments (1)

Late Friday last week we pushed LightSpeed 1.0 out the door for everyone to poke and prod! I’m really pleased with what has been produced and have had some great feedback to date about the performance, elegance of the API and generally great feedback.

As much fun as we had celebrating the occasion of shipping our first product we’re not going to rest, now it’s time to step up to the plate of trying to educate developers and technology vendors of the benefits of using LightSpeed in their applications. I honestly believe that this product will enable your developers to develop data driven solutions faster than ever before with LightSpeed.

While the market is pretty full the feedback is that our method of achieving things works much better than most competitors. We’ve already had several purchases of LightSpeed and those commercial customers have been really pleased with LightSpeed, it’s always a good sign that you’re ready to ship when someone has taken the risk of playing beta software only to have it pay off for them and start praising the framework before you even reach 1.0 status. That probably sounds like bragging but I honestly am just really happy with what has been created.

I’d love for anybody who keeps track of my blog to download the Express edition and have a play with the samples. You will see the difference right away and hopefully appreciate that it’s worth using in your application development (and if you don’t decide that, let me know why so we can work on it ;) ).

Phew! It feels great to ship! :)

– JD

P.S. We also upgraded our site on Friday with new forums, content and slightly enhanced look at feel. If you were part of the EAP program, your credentials and posts have been migrated :)

Busy times, we’re hiring
18 July 2007 in Business & Mindscape & Windows | Comments (4)

I’ve been a bit quiet lately with so much going on with Mindscape and life in general. The good news is that we have recently elected to expand our team to help ensure we continue to deliver (if you are interested check out the position information here).

I’ll be delivering two lunch time sessions at TechEd this year, one regarding unit testing and another about how to get up and running with BackgroundMotion. I’ve been to TechEd for the last two years and it has been fantastic and I think it will be the same this year. Unfortunately the tickets are already sold out but I’d love to catch up with anyone who follows my blog that lives further afield that Wellington :)

I’ve been up to my elbows in WPF recently and look forward to posting some of the things I’ve discovered on here soon (as a side note, Expression Blend is possibly the best V1 product I’ve ever used, it’s fantastic!).

More posts to come,

– JD

Remix part III
26 June 2007 in Events & Microsoft & Mindscape | Comments (1)

Today is day two of Remix so lets recap what has happened so far. Yesterday was my first presentation which I felt went pretty well and I got some good questions at the end of the session. There seems to much more interest in developing Web Parts with .NET 2.0 so most of the questions revolved around that. Thanks to everyone that came to that.

The evening brought about WebJam at Galactic circus. This was a fun event more for meeting people and I got the opportunity to meet and talk with Nick Hodge. Nick’s business card reads “Professional Geek” which was quite cool, apparently a lot of work had to be done to get Microsoft to print a card with a title like that.

WebJam was fun and the time at Galactic Circus wasn’t too bad although it didn’t take too long for most people like myself to jet off to the Casino and to explore. Clock up another $10 lost at the Casino last night. Stayed out until about 12ish but sadly decided to be responsible given I had another presentation to deliver today.

The presentation went off without a hitch and I think that people all picked up something new from it. The WatiN content seemed to be the most popular, I’ll have to demonstrate it as a user group session sometime (I did for Christchurch but not in Wellington yet). The audience for this session was also very good, had quite a few questions and people come and ask me things at the end – always a good sign.

So now the event is winding down and I think it’s been great. I’ve had the opportunity to meet with quite a few Microsoft folk that I know only from their blogs which has been great. People overall seemed to enjoy the event and the sessions. The event has certainly be a success and I hope the feedback shows that. Hopefully they’ll let me back for Remix next year :)

Tonight is one more dinner with some of the speakers and then I’m free to explore until about 6pm tomorrow when I fly back to Wellington :)

– JD

Remix part II
25 June 2007 in Events & Microsoft & Mindscape | Comments (0)

This morning is the first official day of Remix and we’ve just completed the key note and first round of sessions. The content presented so far has been top notch and certainly things are looking bright for UX in the Microsoft space based on what I’ve seen.

The keynote was enjoyable, good spread of speakers showing what has been done with Silverlight and Brian Goldfarb seems more than comfortable with himself when speaking and did a good job of holding audience attention. I stayed for the following session by Lee Brimelow from Frog Design and while his content wasn’t overly technical (this is a dev & design conference mind you :) ) his presentation style was relaxed and his candour was much appreciated. He’s the guy behind sites such as www.thewpfblog.com which I’ve always enjoyed.

My first presentation isn’t until later today (around 3:15 Melbourne time) so I’m just waiting for that to roll up. I’ve been talking with a few people here and it seems many people are quite positive about how things are going. Everyone attending is getting a free copy of Expression Web that is valued at considerably more than the admission price so there is no surprise that I’ve spoken to a couple of people who are only attending a couple of sessions but otherwise are collecting the giveaway only. That’s a bit of a shame because it seems quite short sighted given the quality of the content and the speakers taking part. I wonder if perhaps rather than announcing the giveaway beforehand if it might be better to just mention it in the keynote? That would ensure people come from content and then get a nice surprise.

Overall there is approximately 300 people attending Remix and it seems to be a good size as the audiences aren’t too intimidated to speak up and ask questions. Always nice to interact and feel a good vibe rather than you’re just talking at people for an hour. The mix based on a straw poll at the keynote showed about an 80/20 mix for developers to designers. Microsoft and trying to get into that designer market and my feel is that those sort of numbers aren’t too bad for the first event of this type that they have put on.

Last night there was a speaker’s dinner at The Brasserie in the Crown Casino which was enjoyable – I far prefer chatting over a meal with people than feeling like you’re hijacking them after an event. The food was nice although I’ve decided I don’t like chicken heart all that much which was part of my entree :) The location was nice however I never did work out where the huge fireballs that kept exploding outside the window were coming from!

In terms of Casino losses, clock up another $4… not sure why I keep having that figure so low, clearly I’m not going to find myself in the high rollers room on this trip :)

– JD

Remix part I
24 June 2007 in Events & Microsoft & Mindscape | Comments (2)

Today we kicked off the rehearsals for Remix that’s happening here in Melbourne on Monday and Tuesday. The event so far is shaping up really well, I’ve had a chance to meet with some of the other speakers and the content so far looks to be right up there.

Yesterday I had to depart from Wellington at 6am as it was the only direct flight and arrived in Melbourne at about 8:30am local time. This is my first time visiting Melbourne but I’d heard more than a few stories about it from Lena as she grew up here. It was nice being able to see the places she has spoken about and see exactly why she loves the place. I met up with a friend who guided me around for most of the day which was great – I got to see far more places than I would have stumbled onto myself. I can really see why so many people rave about this city and it makes sense, given the strong culture here, that Microsoft selected the city to hold a conference about bringing design and code together to create beautiful systems (yeah, I bet you were wondering how I could pull my rave about Melbourne back to Remix ;) )

Managed to make my way to the Casino yesterday but only for about 30 minutes (so no attempt at poker) and walked out about 4 dollars worse off, not too bad. Tonight is a speaker’s dinner so perhaps I’ll be able to convince some folks to lose some money with me at the tables.

Today the rehearsals have gone well and all the technology seems to work. Touch wood it works again tomorrow and Tuesday though! I really can’t wait to get on with the conference and meet the attendees – I always enjoy that the most. Especially after they’ve seen me speak and want to ask some questions. So if you’re reading this and attending then mention this post and I’ll shout you a drink :) ) hopefully this offer will result in some great nights out drinking.

Anyway, I’d better get back to it,

– JD

BackgroundMotion.com is live!
19 June 2007 in Microsoft & Mindscape | Comments (2)

We flipped the big switch earlier this week to launch backgroundmotion.com! We spoke a lot about this website at the technical events hosted by Microsoft earlier in the year and how we developed it within three weeks (excluding some subsequent additions as things such as SilverLight popped up on the radar :) ).

So what is BackgroundMotion?

It’s a site where you can go and share you favourite desktop images, and videos for use with Windows DreamScene. However it is a lot more than just that – it’s also a living breathing open source site where you can download the code and check out how we did certain things. You can learn about technologies and design principals used in the site such as:

  • ASP.NET AJAX
  • LINQ for SQL (in a .NET 2.0 project no less!)
  • The MVP and Repository patterns
  • How to integrate with Flickr, SilverLight, Virtual Earth, Windows Live Space
  • How to write Vista Gadgets
  • How to write secured Vista Gadgets using WCF
  • How to use the Web Client Software Factory (Composite Web Block)
  • How to work with RSS
  • How to write a basic search engine using Lucene.NET
  • Heaps more!

It really is quite an action packed sample application (and real world application). I’d strongly urge you to pull it down off codeplex and have a play.

I’d also like to urge you all to go and put at least a favourite desktop image or video onto BackgroundMotion.com. It’s a great resource and is getting a good amount of traffic right off that bat (all you need to do is link to the media you want to download. Nigel has an example if you want to host a video).

Web 2.0?
Part of what we wanted to show with BackgroundMotion is not just how to do some cool stuff but to show how you can leverage Microsoft technologies to create really compelling Web 2.0 style applications quickly and easily. We purposefully looked to simply leverage other services on the internet and provide our own services to aid in building BackgroundMotion faster.

Open Source?
This project was built using Microsoft technologies and we did work with folks from Microsoft (Mainly Darryl and Nigel with occasional appearances from Sean McBrean :) ) however this project is designed for developers to have a poke at and to play with. I’d be really excited to see some people pull it apart and add new features and submit them back to us so that we can look at integrating your changes into the codeplex project.

If you do have some patches then please email me.

Not big on downloading source? That doesn’t matter! We have integrated a way of viewing the key bits of code for each page so you can view it on the site. Of course I’d always suggest you dig a bit deeper and download the source – you will learn a lot :)

– JD

Basic querying with LightSpeed
12 June 2007 in .Net & Code & Mindscape & Tools | Comments (2)

In my previous post about LightSpeed I discussed setting up a very basic LightSpeed instance but didn’t go into any detail about working with the data once we had configured it. In this post we’ll have a look at some basic ways of performing CRUD actions on our database through LightSpeed.

Creating Objects

To create an object we simply need to create an instance of our model class and assign the properties that we want set. This isn’t complicated and not LightSpeed specific so this isn’t a difficult mechanism to understand.

ConfigurationItem item = new ConfigurationItem();
item.ReferenceName = referenceName;
item.ValueType = type;
item.DisplayName = displayName;
item.Description = description;
item.Value = value;
 
Repository.Add(item);
Repository.CompleteUnitOfWork();

The important part here is at the end where we add the item to the repository and then tell the repository to complete the associated unit of work.

Retrieving Objects

There are many ways to retrieve objects in LightSpeed but I will detail two basic queries here. Retrieving my primary key and retrieving by a single field.

// Find the configuration item that has a primary key of 2
ConfigurationItem configItem = Repository.Find<ConfigurationItem>(2);

Here is a query by the DisplayName property which is just a normal property, not a primary key.

// Create a query to get an entity where the property "DisplayName" is equal to "Example"
QueryExpression query = Entity.Attribute("DisplayName") == "Example";      
 
// Get a collection of items that match that query from the database
IList<ConfigurationItem> items = Repository.Find<ConfigurationItem>(query);

Queries certainly are a breeze when working with LightSpeed. In later posts we will look at more advanced queries that have multiple criteria.

Updating Objects

Updating an object with LightSpeed is an easy operation of just updating one or many properties on your entity and telling the repository to save those changes.

// Retrieve an object
ConfigurationItem configItem= Repository.Find<ConfigurationItem>(2);
 
// Update the display name
configItem.DisplayName = "My Updated Display Name"
 
// Save the changes to the database
Repository.CompleteUnitOfWork();

Deleting Objects

Last but not least we occasionally need to delete data from our database.

// Get a configuration item of primary key 2
ConfigurationItem configItem = Repository.Find<ConfigurationItem>(2);
 
// Mark the entity as deleted
Repository.Remove(configItem);
 
// Save the change, actually commiting the delete to the database
Repository.CompleteUnitOfWork();

Now we have walked through CRUD interactions through LightSpeed.

Hope that helps,

– JD