Friday, 12 February 2010

Spark learns to master the Fubu View

I swear I’ll eventually run out of crazy titles that include the names “Spark” and “Fubu”, but until then you’ll just have to take what you can get :)

In my last post, I talked about getting FubuMVC up and running with Spark as the view engine of choice. That dealt with all the bootstrapping stuff and getting a basic “hello world” example off the ground.

This time we’re digging a little deeper by bringing to bear the powerful 3-pass layout rendering system built into the Spark View Engine. I’m also going to talk about using Spark Partials, mainly showing that they will now work in conjunction with FubuMVC.

The goal

As I said last time, Spark is very opinionated, and if you work with those in mind, you can pretty much get a lot of complex wiring-up for free. The Spark documentation talks about 4 ways (conventions) in which a master layout can be defined and automatically picked up in Ascending order of importance (number 4 wins every time):

  1. Application.spark file in the Shared or Layouts folders
  2. A [ControllerName].spark in the Shared or Layouts folders (Pssst….the convention is to strip off “Controller”)
  3. Naming the Layout as an argument when returning the View – I’ve deliberately not added support for this method because I feel it’s a code smell. Disagree with me? Then just say so and tell me why, and I’ll think about it ;)
  4. Naming the master layout in the .spark file using the <use master=”MasterOfTheUniverse” /> syntax.

The goal here for me was to ensure that people familiar with using Spark on Castle MonoRail or ASP.NET MVC projects could pretty much hit the ground running when it came to working with their Views in terms of Master Layouts and Partial use.

FubuMVC has its own opinions on how partials and layouts are derived, but for now they are separate. I’m not quite up to speed yet on how it all works, but if there is a gap that Spark isn’t filling, then I’ll be making use of the Fubu way where it makes sense. For now though – if you’re coming from a Spark background, you should be able to use it very comfortably.

How do I use it?

Well, I’ve tried to make it as easy as possible. I’ve created a fork of my own from the main FubuMVC-examples repository where you’ll be able to see all the code I’ll show below. One day I hope to have this integrated into the main branch, but for now you’ll have to get it from my fork.

I’ve taken the liberty of compiling the latest dlls from the Spark integration work on my fork and put them in the lib folder. After creating a standard ASP.NET Web Application, You can reference them along with all the Fubu bits like so:

References

Project setup

Here are files we’ll be working with for this example:

Files

From the top

Once you’ve done a few of these, it really does start to get easier. Start with the Global.asax which is as empty as ever given that I’ve following my pre-built conventions discussed in the last post:

namespace MasterAndPartialViews
{
public class Global : SparkStructureMapApplication
{
}
}

Next I like to go straight for the controller. For this example I chose a simple question-answer app that I can build out more and more as I find more things to write about. For now though, it’s only demonstrating this particular topic. Two methods on the controller – easy:
using MasterAndPartialViews.Models.Question;

namespace MasterAndPartialViews.Controllers
{
public class QuestionController
{
public QuestionListViewModel Ask()
{
return new QuestionListViewModel();
}

public AnswerViewModel Answer(QuestionInputModel model)
{
return new AnswerViewModel(model.Question);
}
}
}

The models I’ve used are also fairly simple, although at this point you could see them calling out to a Repository or Data Service somewhere:

using System.Collections.Generic;

namespace MasterAndPartialViews.Models.Question
{
public class QuestionListViewModel
{
public List Questions = new List
{
"What is the answer to life, the universe, and everything?",
"What is the first decimal place of Pi?"
};
}
}


namespace MasterAndPartialViews.Models.Question
{
public class QuestionInputModel
{
public string Question { get; set; }
}
}


namespace MasterAndPartialViews.Models.Question
{
public class AnswerViewModel
{
public AnswerViewModel(string question)
{
Answer = GetAnswer(question);
}

public string Answer { get; set; }

private string GetAnswer(string question)
{
switch (question)
{
case "What is the answer to life, the universe, and everything?":
return "42";
case "What is the first decimal place of Pi?":
return "1";
default:
return "I used to know that one. Hmm, let's see...";
}
}
}
}


At this stage, our code compiles, but we haven’t added any views. Let’s have a look at what the handy FubuMVC diagnostics are telling us so far – Hit F5:

No Views

We create the two Spark files (Ask.spark and Answer.spark) as per the controller method names and place them inside a folder (see project layout above) decided by conventions already configured. The files can be blank, but as long as they’re there, they’ll be picked up by the conventions. Hit F5 on the browser this time:

Views Bound

OK – now that we’ve established that FubuMVC has spotted our views and bound them to the correct Actions, we’re ready to start mucking about with the layouts and partials. First let’s take a look at the Ask.spark view:

<viewdata model="MasterAndPartialViews.Models.Question.QuestionListViewModel" />

<QuestionList questions="Model.Questions" />

<form action="Answer" method="POST">
<div>Ask your question:
<input id="SomeId" type="text" width="500" name="Question"/>
<input type="Submit"/>
</div>
</form>


You’ll notice I’ve specified that it is a strongly typed view using the <viewdata> Spark convention. Now the view has access to dig into the ViewModel.

Next you’ll notice an Html tag called QuestionList. “What the HELL is that ?!?!” You may ask…Well that’s our partial, and that fact that we’ve used the Spark convention of naming the partial (see project files above) starting with an underscore means that we can refer to it as a native Html tag and the vIew engine will pick it up as part of the rendering pipeline. We can also “feed” it part or all of the ViewModel coming in to help it construct itself. Here is the _QuestionList.spark in the flesh:



<!-- expects a list of questions as an input from anything that uses this partial -->
<div>
Here is the list of questions you can ask:
<ul>
<li each="var question in questions">${question}</li>
</ul>
</div>


The Answer.spark view is just a simple display that has a strongly typed ViewModel of its own:

<viewdata model="MasterAndPartialViews.Models.Question.AnswerViewModel" />

<div><h2>The answer is: ${Model.Answer}</h2></div>

<div><a href="/Question/Ask">Ask another...</a></div>


There you have it – partials for a start. Trust me, you can go so much further with them, and I plan on putting a few more complex samples together to demonstrate everything from separation of concerns for your views up to doughnut caching techniques for the more extreme optimizers among us. We’ve only just begun!

Mastering the Layouts



Following the conventions at the top of this post, and looking at my project layout above, you’ll see I have two layouts defined: Application.spark, and Question.spark. Given the order of preference rules at the top, the layout that the whole site with use is Application.spark, except for views that are tied to the Question Controller – all of which will use the Question.spark layout instead as an override. The two layouts look like this:

<html>
<head>
<use content="head" />
</head>
<body>
<div><------- I'm from the Application Layout Begin -------></div>
<use content="view" />
<div><------- I'm from the Application Layout End-------></div>
</body>
</html>


<html>
<head>
<use content="head" />
</head>
<body>
<div><------- I'm from the Question Layout Begin -------></div>
<use content="view" />
<div><------- I'm from the Question Layout End-------></div>
</body>
</html>


The output of the Ask view looks like this:

QuestionLayout

You can then employ override rule number 4 to the layouts by changing the Question.spark layout like so:

<use master="Application" />

<html>
<head>
<use content="head" />
</head>
<body>
<div><------- I'm from the Question Layout Begin -------></div>
<use content="view" />
<div><------- I'm from the Question Layout End-------></div>
</body>
</html>


And then you have an output that contains one layout wrapped within another like so:

WrappedLayout

Of course it doesn’t make sense to have two <html> elements etc nested inside one another, but you get the idea – you can stack layouts inside one another as they make sense to build up a page like Lego(TM) blocks.

The possibilities are endless here and I really think this post is getting a bit long. If there are specific scenarios you’d like to tackle, but can’t figure out how, then I’d be keen to put an example like that out – so let me know. Either way, I hope you find this useful…

What’s next?



As you’ll see from my code samples above, I’m using POHF – Plain Old Html Forms. Whilst this is not necessarily a bad thing, many of you will be used to HtmlHelpers if you’ve come from ASP.NET MVC background or perhaps some other for of fluent html tag building or convention based mechanism. Well as it turns out, Jeremy Miller been working on just such a mechanism for FubuMVC – but alas, this only works with the standard Webforms View Engine code at the moment.

I see this as the area can possibly provide another piece of integration, and I’m probably gonna focus on that next. If you disagree, or have a particular show-stopper that’s preventing you from using the Spark View Engine on FubuMVC, then by all means get my attention and I’ll see what I can do.

That goes for you too Jeremy, Chad, Josh, Mark et al :) Let me know where you think I should focus regarding this work…

Conclusion



I haven’t been able to test everything regarding partials and master layouts, but I’m hoping that with just a few people using it, they can discover if I’ve left anything out and shout for help. I’d be very keen to plug any holes if they’re found, but for the most part, I’ve been using it to put something together the way I have using ASP.NET MVC before and I’ve pretty much plugged all the holes for my personal use – now go find me some more! ;)

Until next time…

RobertTheGrey

Tuesday, 2 February 2010

Nobody’s Perfect

One of the things I am reminded of daily is perfectionism and how it works for me and against me. I strive to ensure that everything is in perfect balance, runs perfectly smoothly and is perfectly timed. Every now and then I am assaulted with the bald face truth that I am not perfect and neither is anyone around me. This is especially prevalent in my dealings with employees, but also in dealings with the most challenging of people - myself.

How it serves me

In the communications industry I am often proofing documents, ads and general correspondence for the companies that pay me to make sure their stuff is perfect. I am not talking in a factual sense as I am not a lawyer or an accountant - but rather in the finer details of what it looks like, making sure there are no typos or misaligned elements on a page etc.

It also helps me tremendously with caring about what I do and how I do it. I can’t stress enough how it disturbs me when people slap things together as quickly as they can, without a care in the world as to how it may be received. This applies to both clients I have and staff I have employed or seen in action. A person does not need to be a perfectionist to care – although, that being said, even I find that hard to believe sometimes, given my experiences.

The cons

Disappointment, disappointment and more disappointment. I had a good laugh with a friend the other day, who often gives me sage council with regards to staff, about perhaps hanging a sign around a new employee’s neck that says “I am not perfectionist”, just to remind myself that they are not me and I cannot possibly expect them to be. I’ve had to learn to manage my expectations in order that my disappointment levels are kept in check. Expecting too much of other people is most certainly a potential downfall to being a perfectionist.

‘No-one can do the job as well as I can’ is another pitfall that is best side stepped. It’s not possible for one person do everything. If I cannot delegate duties to qualified people and be confident in the outcome, I’m going get stuck pretty quickly. I believe it is possible to find ‘me’ in amongst the sea of people out there looking for a job. It just requires patience to find someone that fits, but finding the right people for the right job is for another blog post though.

Expecting too much of myself, dropping the ball and beating myself up about it, is another classic. One micro example would be signing up on Project 52 which is a challenge to complete a blog post once a week for the whole of 2010. I’ve already missed one week due to completely unforeseen circumstances and I was quite upset by falling short so early on in the year, but it also gave me insight into what the challenge is actually about - making sure I do my best whenever and however I can - without killing myself.

Final Thought

I’ve learnt that my desire for everything to be perfect is a major asset if used correctly. Always strive to do your best at whatever you are doing and you will inevitably be content with the outcome. If you hate your job or project, wishing constantly it would move from work into play time - you are in the wrong career. Make the change – it will leave you feeling younger, happier and more in control of your own life.

Spark learns to speak Fubu

About three weeks ago, I heard that the FubuMVC framework was undergoing a reboot of sorts, and the team are driving an effort primarily by means of a call for help – or a call to action if you will. FubuMVC natively supports the Web Forms model for page generation, but I’ve always wondered what it would be like to use Spark as the View Engine of choice on FubuMVC, and so I figured that I may as well give it a go!

Opinionated meets Opinionated

As you may already know, FubuMVC favours a convention over configuration (to the extreme) approach to building your MVC application, and on the other side we have Spark which has its own ideas (opinions) about how views should be stored, discovered and created. Luckily for me, this was not a case of “the unstoppable force” meets “the immovable object” – quite the opposite in fact! Both frameworks present strong opinions, which are categorically weakly held – which made my life much easier when integrating the two. I got to decide which parts of FubuMVC I thought were a better approach and vice versa. It doesn’t necessarily mean I’m right, but at least I got to choose.
Needless to say, if you disagreed with my approach, you could also go ahead and replace the bits I’ve written as default integration points with your own strategies and conventions. But assuming you just want to see it working, here’s how you setup a basic Hello Spark Application:

The Project

Assuming you’re using Visual Studio and not something more hard-core (like notepad), fire up a bog standard new ASP.NET Web Application - no not an MVC application, and no, not an empty MVC application either – although you’re welcome to do that if you’re willing to fix your references. You may need to adjust references anyway, so it’s easier if I just show you that you end up with something roughly like this:
References Project

Bootstrapping

The default IoC Container for FubuMVC is StructureMap, although I believe work is currently under way to swap out with one of your choice. Regardless, it stands to reason that you’d want to put some bootstrapping code in there. Wanna get a sneak peak at my Glabal.asax? Yup – that’s it – all wrapped up nice and snug…
namespace FubuMVC.HelloSpark  
{ 

    public class Global : SparkStructureMapApplication 

    { 

    } 

}

“What?” you may ask does that SparkStructureMapApplication contain then? Well, not much really – it inherits directly from HttpApplication and the important bits are as follows:

public virtual FubuRegistry GetMyRegistry() 
{ 
    return new SparkDefaultStructureMapRegistry(EnableDiagnostics, 
ControllerAssembly, ViewFactory);   
} 
protected void Application_Start(object sender, EventArgs e) 
{ 
    RouteCollection routeCollection = RouteTable.Routes; 
    SparkStructureMapBootstrapper.Bootstrap(routeCollection, GetMyRegistry());   
}

Most of it is standard stuff. The ControllerAssembly helps tell us where to look for actions and views and the ViewFactory finds and describes them. The bootstrapping comes next, and I’ve provided a default SparkStructureMapBootstrapper that you can use as long as you like the same conventions as I do:

public class SparkStructureMapBootstrapper
{
private readonly RouteCollection _routes;

private SparkStructureMapBootstrapper(RouteCollection routes)
{
_routes = routes;
}

public static void Bootstrap(RouteCollection routes, FubuRegistry fubuRegistry)
{
new SparkStructureMapBootstrapper(routes).BootstrapStructureMap(fubuRegistry);
}

private void BootstrapStructureMap(FubuRegistry fubuRegistry)
{
    UrlContext.Reset();
    ObjectFactory.Initialize(x =>
    {
        x.For<ISparkSettings>().Use<SparkSettings>();
        x.For(typeof(ISparkViewRenderer<>))
            .Use(typeof(SparkViewRenderer<>));
    });
    var bootstrapper = 
    new StructureMapBootstrapper(ObjectFactory.Container, fubuRegistry);
    bootstrapper.Bootstrap(_routes);
    }
} 

The important points to note here are the usage of the default FubuRegistry and StructureMapBootstrapper which do most of the heavy lifting in terms of building the object graph across the application. You can still wire up your own classes here though as I’ve done with SparkSettings and SparkViewRenderer.

Create some views and controllers

For this simple application, I’m not going to go into too much detail regarding view and controller creation. Suffice it to say that you can view and download the code yourself right here. To get this going, you can see the files I created for this small web app in the folder structure above. We have Application.spark which is our primary Master page:
<html> 
  <head>   
    <title><use content="title">Default Title</use></title> 
  </head> 
  <body> 
    <div id="header"> 
      <use content="header"> 
        <div>no header by default</div> 
      </use> 
    </div> 
    <div id="main"> 
      <use content="view"/> 
    </div> 
    <div id="footer"> 
      <use content="footer"> 
        <div>no footer by default</div> 
      </use> 
    </div> 
  </body> 
</html>

I’ve followed my preferred method of organising Views and Controllers. With FubuMVC, there’s nothing stopping you from putting them any which way you like because the entire assembly is scanned regardless and a mapping of routes, views and actions are built by associations that you get to establish in code – or you can just use the defaults :)

First you add a Controller like so:

public class FireController 
{ 
    public FireViewModel Create(FireInputModel model) 
    { 
        return model.GotALight() 
                   ? new FireViewModel {Text = "Light 'em up!"} 
                   : new FireViewModel {Text = "Light 'em up anyway!"}; 
    }  
} 
public class FireInputModel 
{  
    public bool GotALight() 
    { 
        return true; 
    }  
} 
public class FireViewModel 
{   
    public string Text { get; set; }   
}

Next, you implement a view (Create.spark) to go with the “Create” controller method like so:

<viewdata model="FubuMVC.HelloSpark.Controllers.FireViewModel" /> 
<content:title>Let the Sparks fly!</content:title> 
<content:header>What do we wanna do?</content:header> 
<h1>${Model.Text}</h1> 
<content:footer>That's right baby!</content:footer>

And then you hit F5 like so:

Browse

Behind the scenes

I’ve created the integration work which contains all the glue between the Spark View Engine and the FubuMVC pipeline in a separate assembly for the moment, the source code for which you only really have to go in if you’re curious, but you don’t need to if you just want to start building with Spark. It’s not yet integrated into the main Github branch, but I hope that after some scrutiny and more additions that I make, that we can find a more permanent home for it.

What next?

My next port of call is to get master pages and areas properly supported. I haven’t yet delved into how areas and slices work in the FubuMVC code, and so I was reluctant to do any work in this area until I at least got the basic page lifecycle done. Spark also has it’s own implementation of partials as well as caching and so I’m going to have to explore those parts a bit more before I decide who’s opinion is stronger. I haven’t started on it yet, so if you want to give me your two pennies, I’d be happy to take notice.

Cudos

Jeremy, Chad, Joshua and the rest of the gang have done a great job on the framework so far! There are more extensibility points and configurable bits than there are spikes on a blow fish – a veritable candy shop of choice – and yet just going with the defaults will get you going in no time at all. I hope this post, and the examples to come will help you learn more about these fantastic frameworks – and do let me know if there is something specific you’d like covered here… I’m always looking for ideas.

Till next time,
Rob G

Tuesday, 19 January 2010

The Power of Words

“Words start wars and end them, create love and choke it, bring us to laughter and joy and tears. Words cause men and women willingly to risk their lives, their fortunes, and their sacred honour. Our world as we know it revolves around the power of words.” Secret Formula’s of the Wizard of Ads.

A Personal Perspective

I Love words and always have. I play word games as often as I can because I find it simply riveting. When I chat with good friends I can often get captivated in the conversation and find it hard to sleep afterwards. When I read the opening paragraph for the first time, it resonated with my very core because I have experienced the charisma and repulsion that words have to offer.. both written and verbalised. I’m not sure who ever said “sticks and stones can break my bones, but words can never harm me”.. but it’s completely inaccurate in my opinion.

I believe an inescapable fact is that the leaders of our world are not consistently remembered for how they laughed, paged a book, walked into a room or their visual appearance but rather for what they said. So many quotes have touched lives of those who are not wordsmiths by nature, and even some that are. History also reflects the need to keep it simple.. the shorter the quote, the more effective the impact. It’s the choice of the combination of words that make it ripple into our subconscious.

In Advertising

A vital cog in any advertising agency’s team is their copywriter. Funnily enough they are often overlooked, especially by clients. An Account Manager from a firm is so often assaulted with the ever so tedious question: “why should I pay this much for some writing” and every so often it comes down to an even less palatable statement “I will write it for you and then you can just edit it”. It would be a phenomenal sight (yet to be seen by mois) where a client can actually write something truly worth publishing. They may be intensely qualified to run their business, but they are painfully unqualified to write copy.

If there is nothing else you take from this blog post, let it be: words are worth paying for! A copy writer knows how to make the most of as few words as possible. If they can arrest someone’s attention with electrifying words, their job is done! If you want someone to remember your ad and message, make it simple, clear and captivating. As a business owner or production person, you are not equipped with these skills – leave it to the professionals.

Scientifically Speaking

Without going into detail on the factual and technical side of how we tick, which as an aside is often my favourite part, here’s a small insight into what makes words work for us. Read chapter 5 of Secret Formula’s of the Wizard of Ads for a more in-depth explanation. Wernicke’s area is purposefully positioned in the brain where the association of auditory and visual signals meet to fulfil its function of naming objects. It rules the nouns of our vocabulary.

Broca is on the other side of the auditory association that links into the motor association cortex. This cortex is the centre of all physical action and Broca’s area is the hub for action words..a veritable verb manufacturer. It energetically generates verbs, passionately formulates sentences and waits with baited breath to hear what others have to say. If you present Broca’s area with a predictable sentence, write up, description etc, it will - as sure as the sky is blue - ignore what you have to say. If you manage to engage it with your opening gambit, you’re on a winning wicket!

On the Web

cozwecan.com intends to harness the true power of communication and more simply words. Our challenge is to keep it simple and understandable even to the man on the street, yet arresting enough to engage the more cognitively affluent of society. I believe that words have the potential to make or break any site in the end.

Conclusion

Make use of undoubtedly the most powerful force there has ever been. Use explosive and energetic words in work you want to make a statement with. It will reap benefits that you’ve never imagined.

Words are, of course, the most powerful drug used by mankind ~ Rudyard Kipling

Tuesday, 12 January 2010

Inbound Marketing – It’s the New Black!

 

I’ll start by saying: “What a book”! Everyone should get it! In my first blog post I expressed a keen interest in learning much more about online marketing. This is a completely new avenue for me, being traditionally orientated to TV, radio and more than anything else, print media. I was forwarded a blog post a while back in which Dharmesh, a co-author of the book ‘Inbound Marketing’, spoke about overcoming the ‘barrier to entry’ obstacle for start-ups. I was so inspired by the end that I went straight to Amazon to buy the book. If you’re planning on interacting on the web in any way, shape or form – this book is a fantastic down payment.

The Advertising Industry Today

For a while now, I’ve been hearing the increasing rumble of rumours flying around about how advertisers need to change their strategy because of the clutter, saturation and ability of the human mind to ignore ‘what we have to say’, no matter how many times we say it. I’ve seen the decrease in ROI (Return on Investment) growing rapidly as clients’ budgets shrink.

It used to be a game of the frequency of relaying a certain message/feeling/visual to the correct market in order to grow a brand. Not only does this require a healthy budget, it is not even working any more to the extent of its past successes. Many (if not all) of the smaller companies are not in a position to go head to head with the conglomerates when citing dollar for dollar spend, nor should they want to.

Television is by far the most popular medium for maximum reach and emotional impact. An ad can make most of our senses come alive, if executed correctly. It saddens me greatly to see how many companies produce low budget ads only to go forth and spend an absolute fortune flighting it over and over again resulting in transmitting a less than adequate message repeatedly. Regardless, the impending danger to television advertising spend is actually the ever increasing number of Personal Video Recorders hitting the market. Translate that to radio and you have iPods taking over.

People are adapting to our strategies, creating ways of avoiding listening to our messages, and we have only ourselves to blame. Everybody, including marketers, are tired of being bombarded from morning to night with advertising messages. Even if we don’t own a PVR or iPod – we have just simply become accustomed to blocking it out.

Print media is what interests me most, as it is where most of my experience lies. This is slowly starting to revert to the World Wide Web. I am not suggesting that people will stop reading magazines and newspapers just yet, but the time of a paperless society is no longer a dream, it is becoming a reality and we shouldn’t be too far behind when that day dawns. As a small (yet large) example, look at Wikipedia. I bet Britannica are not too happy they started up! Wikipedia is eating rapidly into their market share.

An Epiphany of Note

What this book has taught me so far, I’m only just over half way through it, is how imperative it is to change our mindset without delay around how we market ourselves, products and services. We need to talk to people when they are ready to receive our message and this book illustrates this so spectacularly.

I’ll get more into the details on my next blog post, once I’ve finished devouring the book’s contents in its entirety. Please don’t let that stop you from getting it in the interim. It shall be an invaluable tool for anyone – not just marketers.

Till Next Week

A quote the book starts with and is indubitably a truth most people forget:

What gets us into trouble is not what we don’t know. It’s what we know for sure that just ain’t so ~ Mark Twain

Tuesday, 5 January 2010

Inspiring the Contributor

If there is one challenge that perturbs me about phase 1 of our new project – it’s how to get the contributor (in this case – a photographer) inspired to do what’s required to help us make it a success. I find photographers particularly difficult to coerce because they are creative people who have very little interest in the administration of their work. I’m aware that is a sweeping generalisation, but I feel more than qualified to make such a statement, so will happily duck if the stones are hurled.

Contributor Importance

I fear that so many online ventures go bust or don’t maximize their potential because they bully their contributors into submission or simply make it a “don’t like it – lump it” scenario. This has been acceptable in the past because it was the developer and/or business that had the skills, so contributors just had to follow suit or get left behind in the dust. With the steep growth of internet users year on year, it is now almost imperative to hop on the band wagon, or face missing out on the opportunity to be noticed. Few are prepared to come on board when critical mass is imminent.

I am, and always will, remain adamant that the contributor is just as important. Now let’s just be clear on this – the contributor is not important when it comes to layout and interaction, nor do they contribute to how the business model is set up and a few other areas I may have been remiss in mentioning. Where they reign supreme is when it come to their goods – i.e. the saleable items. I’d even go so far as to say that I believe they should have a more than fair say in the assigned price tag.

We have the technical, marketing and business angles pretty much covered – but tell me – what would we do with this if we had no contributors? It would lay to waste all of our efforts and talents. Never underestimate the value a contributor can bring to the table – listen, take heed and act when they speak – they are their product and should be accounted for.

Part and Parcel

So how would I aim to inspire the contributor? I would start by looking at the basic psychological habits we all develop as a child. If one wants a child to take part in a game and the child is important (not made to feel) in the game – they will happily engage – that is simple deduction. I don’t believe that there are many human beings on the planet that do not enjoy a sense of camaraderie and belonging – it’s what religion is based on. If we can keep the contributor “Top of Mind”, they will understand that this is for them as much as it is for us and should be inspired to help us make it work. After all – this is for the greater good of us all. Should we choose to neglect their opinions, thoughts and feelings – we can still do it the old fashioned bullying style – but reaching our maximum potential will be but a pipe dream. This will naturally be coupled with physical incentives because I am all too well aware of the importance of the material plain we exist upon – no matter how young or old.

Wish me luck – it shall be a challenge I relish!

In Conclusion

Remember that everybody – even and probably especially a child – has something of value to offer. Don’t ignore gems in favour of egotism.

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist ~ Friedrich Nietzsche

Monday, 4 January 2010

Year++ and Team members++

Happy new year to everyone following our progress and here’s wishing you all fantastic success for this, the last year of the decade i.e. 2010! Controversial I know – it’s a geek thing ;-)

We’ve been cracking the whip on cozwecan.com publically for a good 6 months now, formulating ideas, getting our ducks in a row etc. but the idea came to us a good solid year before that. You’d think we could get something out the door by now – well that’s hopefully coming one small step giant leap closer! Whilst the incubation of a start-up definitely hinges upon effective time management, a huge portion of it effectively boils down to “actual time spent” working on the project. As I said right at the beginning, we all have day jobs which keep us pretty busy and putting time in has always been a labour of love – and strictly part-time.

Until now that is…

Without further ado, I’d like to publicly welcome our first full time team member on the project. I’m very happy to announce that Scott Galloway has agreed to join our team to help speed up our development efforts. Scott joins us after spending the last 4+ years working at Microsoft including 2 years on the ASP.NET team – you know…the platform we’re building this entire thing on?!

You can find out more on his blog or contact him on twitter.

This is very exciting for us indeed! Scott brings a wealth of technical expertise and ideas to the team which we’ll be exploiting utilising to the best of his and our ability! Most importantly, this will help accelerate our time to market, which is the best possible thing a start-up can do for its survival.

Watch this space!

So what now you may be thinking? Well, the first thing we’ll be aiming for is getting a private beta out to a select group of photographers and testers to play with and provide feedback. You can expect a lot of progress in this area over the next few months – as soon as we know the dates, so will you.

If you’d like to participate in the beta, then feel free to drop us an email to beta@cozwecan.com with your reasoning and we’ll be sure to get in touch as we get closer to launching it.

When will that be you may ask? Well that depends on quite a few things really. It depends on the speed at which Scott and I can write the code and it depends on whether or not Frankie and Paul like the results they see. Then there’s “legal” and “content” and “look & feel” etc. being worked on in parallel. Either way, we’ve much more than doubled our programming power now, so we should start seeing results in the very near future!

Wish us luck… Hopefully 2010 brings us a little success too!

All the best,
Rob G