HOT PRESS 27.2.09

More credit crunch friendly antics come courtesy of MTV, which has launched a website / video sharing site with internet provider Verizon FiOS and web production studio New New Networks (NNN). Signed and unsigned bands can upload videos they have created on a $99 budget or less within a 24 hour period. www.99dollarmusicvideos.com  

Johnnie Walker has launched Crossroads, its first global film since 2006’s award winning Human. The filmic commercial continues the brand’s Keep Walking tag line and the concept of progress. www.youtube.com/watch?v=jZl2rR5NDRY  

For more viral madness, if you haven’t seen it, check out Ken Block Gymkhana Practice, which has clocked up a massive 14m views since November. www.youtube.com/watch?v=rs-jAImScms  

Posted on 2/27/2009 1:42:00 PM by KatyDenis

Permalink | Comments (14) | Post RSSRSS comment feed |

Categories: Hot Press

Tags: , , , , , ,

 

Social Networking - A Travelers Observations

 

 

Two months overseas taught me a lot but coming back to present to the FARM there was one thing of interest that really stood out. 

Everywhere I went on my trip I noticed the huge potential for social networking as a travel tool and marketing device. There are facebook groups for almost everywhere I stayed, everything I did and even the weird local phenomena I found along the way. Agencies like The FARM should recognise the massive potential reach that  such a global, transient and digitally savvy demographic can have. 

Travel applications are already a goldmine for new media platforms such as Facebook and the iPhone, here are just a few:

  • Cities I’ve Visited
  • TravelPod Traveler IQ Challenge
  • Local Picks
  • LearnIt
  • Flight Status
  • Sit or Squat (find a bathroom near you!!)
  • iPhone Tipper
  • CouchSurfing (for those on a low low budget)

So why should we as a digital agency care?

It's all another case in point to solidify that social networking is NOT a fad, it is a fundemental shift in our means of communication and it's here to stay. The digital landscape is transforming! It will change the outlets for our line of work and our knowledge of this will becoming increasingly more valuable to clients.

Consumers are at the centre of this trend and it is predicted that by 2010 Gen-Y will have taken over the baby boomers and they are a very different group of consumers. They are rather digital USERS with huge potential spending power. At present 96% of Gen-Y internet users are part of a social networking site so there is great power here in word of mouth and viral marketing as users trust friends and recommendations rather than pushed sells.

So let's apply this to my trip. 

  • England: Piccadily Backpackers Hostel in London - incredibly active Facebook group. No wonder Facebook is the #1 social networking site with over 150 million users.
  • England: London Heathrow’s new Terminal 5 have facebook only internet stations (just in case you really feel the need to send your friend a poke before leaving the country).
  • England: The Red Phone booth challenge (how many people can you fit in one at once?) and the replica Harry Potter Platform 9 3/4 both have vast Facebook groups and Flickr galleriesand have been used as part of interactive advertising and marketing campaigns. 
  • Edinburgh, Scotland: Hogmanay, the 3 day Scottish New Year - one of the most blogged about New Years Eve events in the world, UGC rich website and active facebook group
  • New York City: Improv Everywhere's 'No Pants Subway Ride 2009' - a group similar to flash mobbers perform public stunts and are now a youtube phenomena much like Where The Hell is Matt? the dancing traveler who is now sponsored by Visa. A viral marketing success!!

  • Texas: Post-Obama Inauguration - an interesting case of social networking fear amidst the racial/political climate of the Obama-McCain election, also an impressive effort by the Obama camp to utilise social networks as campaign tool through Facebook application and keyword targeted Facebook group. A very smart move in realizing the new voting demographic of young people awakened by Obama's run for office. 
  • Los Angeles: iPhone tour applications for the Hollywood Walk of Fame and social network driven campaigns to get celebrities a star on the Walk 

So what are the questions the FARM should be thinking about?

How do we get a strong revenue stream through social network and viral marketing? Many businesses are still struggling to see how this can work for them as a marketing tool.

As users are engaged with their profiles and content simple display mechanisms do not work. Rather, widget and other applications that help people chat, create and share content are the areas to investigate. There is a need to harness the power of word-of-mouth and let users “do the marketing for you” by creating opportunities for people to feel ownership of the brand (much like Obama did with his campaign). According to eMarketer there is a predicted $1.3 billion social network advertising spend in 2009 so this is definitely not an outlet to ignore.

The client services team here at The FARM have begun delving into this realm to become experts on the possibilities of new media and the inevitable change that is taking place in our industry. 

So go and get BLOGGED!! 

Posted on 2/25/2009 11:36:00 AM by KristinaReddaway

Permalink | Comments (20) | Post RSSRSS comment feed |

Categories: Morning tea

Tags: , , , , , , , ,

 

The FARM Renovation Rescue

 

The FARMers were thrown into the twilight zone arriving to work February 2nd, after the FARM Renovation Rescue Team transformed the office over the weekend. Under Natasha’s “interior art direction” Chris, John, Nina, Chris Rann, Leah, Dang (and a cameo by Shannon) knocked out a wall, redecorated the lounge, rewired the entire office suite and induced jungle fever with a plant collection worthy of Mr Don Burke.

Rann hit the renovations with a vengeance. Spurred on by an eerie resemblance to Tom Williams, Australia's favourite chippy (except for maybe Scotty Cam), Rann set about to refit all the office's power boards. 

Leah starred in the role of Sadie the Cleaning Lady, dashing in elbow length rubber gloves and armed with a bottle of Domestos. Johnny Farnham would be proud. For those of you who not familiar with this song, look up the lyrics - gender theorists eat your heart out!!

 

Nina and Natasha braved Ikea and two nursery visits. Fortunately the latter included the assistance of a lovely tall South American chap, followed by a knowledgeable greener who asked "are the balcony plants going to be loved or neglect?" In all honesty, he suggested star jasmine as a hardy solution.The FARM gnomes now start out blankly from our plant boxes and occasionally get hugs at Friday night drinks. 

 

Meanwhile, back at the office ChrisP became playmates with the FARMs resident entertainer Asher, saving him the epic ordeal of the Ikea children's ball-pit pen. 

 

Pushing through with a totaly of 24 hours work in two days, half a case of the amber liquid (only half? i hear you ask), and a strategically placed pizza break or two, short work was made of the refit. 

Massive thanks to the team for making the office so pimpin'!! 

  
   

Posted on 2/24/2009 3:16:00 PM by KristinaReddaway

Permalink | Comments (43) | Post RSSRSS comment feed |

Categories: The Farm

Tags: , , , ,

 

Linq to Umbraco

Intro

We've been working on 3 larger Umbraco sites in which we've implemented our own Linq to Umbraco strategy. It's a fairly simple strategy, it doesn't involve custom expression trees or anything, it simply leverages Linq to Xml, IEnumerable<T> and extension methods. In simple terms, we basically convert Xml nodes into our own objects which we can then run typed Linq queries against. Since the performance of deserialization of this Xml into objects was one of our concerns, we implemented Microsoft's Policy Injection framework to handle the caching of our Umbraco objects which works really well (more on this later). Here's a quick example of what this allows you to do with Umbraco data (in this case Umbraco is storing information about events, such as festivals, etc...)

var todayEvents = (from e in GetEvents()
                               where e.FromDate.Date == DateTime.Now.Date
                               select e).ToList();

The source code is available here: LinqUmbraco.zip (566.35 kb).

Background

In order for this to work, there is a bit of setup involved. The way that we've gone about this implementation is by defining a data model for each Document Type that you want to be able to use in this framework. In this example, Umbraco will need to be setup with a few Document Types: Event, EventComment, EventOrganizer, EventsContainer. I've included the definitions of these doc types in the source code so you can easily import them. For an event model, we would create an interface:

public interface IUmbEvent : IUmbracoItem
    {
        System.Collections.Generic.List<UmbEventComment> EventComments { get; set; }
        string EventTitle { get; set; }
        DateTime FromDate { get; set; }
        string FullDescription { get; set; }
        string ShortDescription { get; set; }
        bool ShowInListing { get; set; }
        DateTime? ToDate { get; set; }
    }

You'll notice this interface extends IUmbracoItem which I've defined in our code library. It contains all of the basic properties of an Umbraco node:

 public interface IUmbracoItem
    {
        DateTime CreatedDate { get; set; }
        int CreatorId { get; set; }
        string CreatorName { get; set; }
        int Id { get; set; }
        int Level { get; set; }
        System.Collections.Generic.Dictionary<string, string> NodeData { get; }
        string NodeName { get; set; }
        int NodeType { get; set; }
        string NodeTypeAlias { get; set; }
        int ParentId { get; set; }
        string Path { get; set; }
        int SortOrder { get; set; }
        int? Template { get; set; }
        DateTime UpdateDate { get; set; }
        string UrlName { get; set; }
        string Version { get; set; }
        string WriterName { get; set; }
    }

Next I've created a class that implements this interface called UmbEvent which extends UmbracoItem(which in turn implements IUmbracoItem). The constructor function of these objects are what does the deserialization:

public UmbEvent(XElement x)
            : base(x)
        {
            //Get the from date and use the DateConverter to convert it.
            //If the returned date is MinValue, then the value in Umbraco has not actually
            //been set and since it is mandatory, we'll throw an Exception.
            FromDate = x.UmbSelectDataValue<DateTime>("FromDate", DateConverter);
            if (FromDate == DateTime.MinValue)
                throw new Exception(string.Format("The node with id {0} does not have a start date set", this.Id.ToString()));

            //Get the ToDate using a NullableDateTimeConverter
            ToDate = x.UmbSelectDataValue<DateTime?>("ToDate", NullableDateTimeConverter);

            EventTitle = x.UmbSelectDataValue("EventTitle");
            ShortDescription = x.UmbSelectDataValue("ShortDescription");
            FullDescription = x.UmbSelectDataValue("FullDescription");
           
            //Get the ShowInListing using the IntConverter since the value stored in Umbraco is
            //an integer, not a boolean.
            ShowInListing = x.UmbSelectDataValue<int>("ShowInListing", IntConverter) == 1;           
           
            //Select all child "node" nodes that have a node type alias
            //of "Event Comment" from the current element, deserialize them
            //to UmbEventComment objects, and store them in our List property.
            EventComments = x.UmbSelectNodes()
                .UmbSelectNodesWhereNodeTypeAlias("EventComment")
                .Select(n => new UmbEventComment(n))
                .ToList();           
        }

In the code for the UmbracoItem class are some helper methods for data conversion so exceptions are not thrown and that data is converted properly. 

The next step is to setup the data service layer. I generally create a different service class for each model and in this example we'll have IUmbEventService interface with an UmbEventService class defined as:

public interface IUmbEventService : IUmbracoService
    {

        int CreateEvent(IUmbEvent cqEvent);
        void UpdateEvent(int eventId, IUmbEvent e);
        List<IUmbEvent> GetEvents();
        IUmbEvent GetEvent(int eventId);
        DateTime LastEventDate { get; }

    }

Using the code

Service Layer

Most of the important work is done in the service layer. The underlying method that is called for retreiving events is the GetEvents() method which returns a List<IUmbEvent> object which we can use to query. This method will look up all events in the Umbraco xml cache, convert each one to an UmbEvent and return a list of these deserialized objects. I've created a bunch of Linq to Xml extension methods for use with Umbraco which I use to query the Umbraco xml cache. This makes querying Umbraco xml much nicer, easier and allows you to use System.Xml.Linq objects instead of the old XPath objects. Here's the definition of the GetEvents() method:

[CachingCallHandler(1, 0, 0)]
public List<IUmbEvent> GetEvents()
{

    Console.WriteLine("Looking up and caching all published events...");

    //Lookup the event container node in Umbraco
    XElement xNode = UmbXmlLinqExtensions.GetNodeByXpath(EventContainerXPath);

    var eventData = xNode
        .UmbSelectNodes() //selects all descendant "node" nodes
        .UmbSelectNodesWhereNodeTypeAlias(EventNodeTypeAlias) //selects nodes of a certain alias
        .Select(x => new UmbEvent(x)) //This does the object conversion
        .Where(x => x.FromDate != DateTime.MinValue); //ensure we don't return events with no start date

    return eventData.Cast<IUmbEvent>().ToList();
}

Now that this method is create, we can just query the result of the method to find Events by whatever criteria we've defined in the IUmbEvent interface. For example, the GetEvent method body is quite simple:

public IUmbEvent GetEvent(int eventId)
{
    var myEvent = m_This.GetEvents()
        .Where(x => x.Id == eventId);

    return myEvent.SingleOrDefault();
}

To expose my service layer classes, i have a service factory class that creates new instances of each service type when requested. This makes it easy to call services from code since there's always one point of entry.

Calling the services

I've included a class called Tests which calls the methods of the event service. With the above framework in place, using the code is extremely easy:

List<IUmbEvent> events = m_Factory.EventService.GetEvents();

or

IUmbEvent e = m_Factory.EventService.GetEvent(LookupEventId);

Also in the source code are service methods to create and update Umbraco nodes. If you're not familiar with how to do this, this will show you a fairly easy way to get the job done. The CreateEvent method actually checks to see if a "Pending" event organizer node is there and if not it creates one and then creates new unpublished events under this node.

Running the tests

I've created a simple ashx handler that you can setup in your Umbraco project to test this data layer. You'll need to build the solution and copy the DLL files over from the bin folder of the UmbracoData project into your Umbraco bin folder (don't copy over the Umbraco DLLs if you don't want to ... these are Umbraco 4 DLLs). Then add an HttpHandler to your web.config:

<add verb="*" path="datatest.ashx" type="UmbracoData.TestHandler, UmbracoData" />

You'll have to make sure Umbraco is setup for this project so you'll need to: 

  • Import all of the document types
  • Create a node of type "EventsContainer" called "Events" under the root content node

Now you can navigate to datatest.ashx which will allow you to run the tests. If you want to step through the code, just Attach to your Asp.Net process with the solution open.

Policy Injection

As I mentioned before, performance will be a factor if for every event query, we need to deserialize every event xml node into an object. This is where caching comes in handy. We use Policy Injection quite a bit to do caching and logging in our applications as it makes these tasks incredibly easy. Policy Injection is a simple form of AOP (Aspect Oriented Programming) and is part of Microsoft's Enterprise Library. You'll see that this method is attributed with the CachingCallHandler which is going to cache the output of this method for 1 hour in this case. In each subsequent call to this method Policy Injection will intercept the call and determine if it has been cached, and if so, it will simply return the cached results and cancel the execution of the method.

In order for Policy Injection to work, you need to either create a new service class or wrap and existing service class the with Policy Injection. As i mentioned before I use a service factory to expose all of my service classes and in this class, it creates each service with Policy Injection:

public class ServiceFactory
{
    public IUmbEventService EventService
    {
        get
        {
            return PolicyInjection.Create<UmbEventService, IUmbEventService>();
        }
    }       
}

There is a catch!! You'll notice in the above code snippet that defines the GetEvent method uses the syntax: m_This.GetEvents(). This is because we need a reference to the event service class wrapped in Policy Injection inside the event service class.... confusing in know. This is because the Policy Injection framework is the only thing that knows anything about the CachingCallHandler attribute and if we call GetEvents inside one of the methods of the UmbEventService, then Policy Injection is actually not playing any part of that method call. To get around this, we define an internal property in the UmbEventService class of type IUmbEventService and in the constructor function, we wrap this instance in Policy Injection and assign it to this property:

public UmbEventService()
{
    //Ensure our internal object is wrapped in PolicyInjection
    m_This = PolicyInjection.Wrap<IUmbEventService>(this);
}

/// <summary>
/// We declare this variable as a "trick" to ensure that PolicyInjection
/// is still used when we call internal members of this class.
/// For example, any method of UmbEventService that calls GetEvents() will need
/// to call m_This.GetEvents() to ensure that it returns the cached data
/// and does not re-execute the code in body of the method.
/// </summary>
IUmbEventService m_This;

Another point of interest is that i've included an Umbraco action handler to refresh the Policy Injection cache whenever a node is published.

The source code is available here: LinqUmbraco.zip (566.35 kb).

Posted on 2/24/2009 12:38:00 PM by Shannon Deminick

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories: Technology

Tags: , , ,

 

Camp Quality Launch!

[February 2009] The FARM is very proud to announce the launch of the new Camp Quality website that brings to life the concept of “Bubbles of sunshine” for its supporters and families. Camp Quality is a not for profit organisation that believes in bringing optimism and happiness to the lives of children and families affected by cancer through fun therapy.

 

 

Drawing upon CQ’s philosophy that “Laughter is the best medicine”, one of the features of the website is the spontaneous page takeovers to make people laugh and smile! Keep an eye out for Giggle and the McDonald’s CQ puppets debuting for launch. The technology used here is flash based and as such can be flexible in the future to inject random moments of fun, interactivity or campaign support, without having to change the overall architecture or design of the site.

 

 

As a colourful and media rich site (featuring CQTV and Jukebox), the online component of Camp Quality becomes just as fun a space for children living with cancer to hang out, as the programs’ real world activities.

Using the new feature rich Umbraco 4 CMS system, the CQ site allowed us to think outside the box creatively and still enable the client control and flexibility over the content. The site also drives participation by inviting public users to add their own events, videos, photos, comments and stories which are also managed through the CMS.

We hope the new Camp Quality site inspires you to stay positive and laugh out loud. Have fun!

Posted on 2/23/2009 4:35:00 PM by KristinaReddaway

Permalink | Comments (10) | Post RSSRSS comment feed |

Categories: Project Releases

Tags: , , ,

 

Linq + Unity + AOP = Fun

I've recently had some time to look at using Dependency Injection alongside of Linq to SQL to manage the DataContext. Because of the way that Microsoft made Linq to SQL, it's not very easy to use dependency injection properly with the DataContext because many of the members in this framework are not interfaces or cannot be instantiated directly from code. Type mocking frameworks can be used to mock these objects but i wanted to see if there was a way around all of this. I've posted a project on the CodeProject website here. A few tricks had to be implemented like creating an interface for the DataContext (IDataContext) and exposing a new property called GetITable exposing a new interface called IEnumerableTable<>. This way, you can resolve IEnumerableTable's from the IDataContext instead of resolving a System.Data.Linq.Table from the GetTable<> method (which you would never be able to implement in a custom DataContext class). Because the IEnumerableTable<> interface is IEnumerable<T> itself, you can run all your normal Linq queries against it as per normal. IEnumerableTable<> also implements ITable so you can perform all of the normal Linq to SQL table methods (i.e. InsertOnSubmit, etc...) on the resolved object.

To get this framework setup and working there's quite a few things you need to build, but it's quite a fun exercise. Included in the source is a custom DataContext called XDataContext which turns the data store into XML files instead of database tables and still uses the Linq to SQL entities that are generated. You can simply just map the IDataContext to any custom data context using the Unity (Microsoft's dependency injection framework) configuration. I've also implemented PolicyInjection into this framework as it is extremely easy to do now that all of the objects are interfaced already. Now it's too easy to cache and log calls to methods.

There's a complete description of everything in the article.

Posted on 2/20/2009 1:28:00 PM by Shannon Deminick

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories: Technology

Tags: , , , ,

 

The Official FARM Family Portrait

All smiles, cheers and bright balloons - the raw genius of The FARM Digital is concentrated in one photo... can you handle it?!

Posted on 2/19/2009 5:00:00 PM by KristinaReddaway

Permalink | Comments (9) | Post RSSRSS comment feed |

Categories: The Farm

Tags:

 

HOT PRESS 13.2.09

This is pretty cool. Nike’s demonstration of the potential of ‘Hotspot’ technology with an ad featuring perma-tanned Portuguese striker Ronaldo that allows users to click on and buy Nike products worn by the footballer on screen. View the spot here http://coull.com/labs/nike/manu_large/

In case Valentine’s Day is about to take you by surprise, what about some treats from 50 Cent’s new range of guy make up? Hmmmm. Via Trendhunter www.trendhunter.com/trends/male-makeup-50-cent-faces-up-to-fading-image  

Or express your love with the help of lovable skunk Pepé Le Pew, via Atmosphere BBDO in the US for AT&T. http://pepe.att.com/

Posted on 2/13/2009 7:45:00 PM by KatyDenis

Permalink | Comments (9) | Post RSSRSS comment feed |

Categories: Hot Press

Tags: , , ,

 

HOT PRESS 6.2.09

Doritos' slapstick Super Bowl consumer-generated spots – which cost $2,000 - topped the USA Today Ad Meter and encouraged Doritos to give the creators $1,000,000 to kick-start their film business. Watch the spots here as you ponder your future in marketing….
http://www.youtube.com/watch?v=UukD_cIw08E

Agency websites can often be too corporate or too cheesy, or both. Cliff Freeman & Partners took a different tack and launched an interactive, open-source, Twitter-esque chat platform that invites you to chat with anyone from the agency who’s online. That’ll stop those agency slackers taking lunch…
www.cfpnyc.com

The next stage in arcade gaming could involve blocks controlling on-screen characters. Tapping into a wider trend of blurring ‘real’ and electronic gaming, Sega’s arcade game, Block Pipo will be unveiled at the AOU 2009 event in Tokyo on 21-21 February. http://www.siliconera.com/2009/01/27/remotes-lego-controlled-arcade-games-are-the-future

Posted on 2/6/2009 7:50:00 PM by KatyDenis

Permalink | Comments (10) | Post RSSRSS comment feed |

Categories: Hot Press

Tags: , , , , , ,

 

Upgrading to Umbraco 4

This is a pretty detailed guide of how to upgrade a version 3 Umbraco web application project to be version Umbraco version 4. Theoretically Version 4 is 100% backwards compatible with version 3. I've run a couple of upgrades and everything seems to work great. To upgrade an Umbraco 3 installation that is not part of your own web application project, it should be nearly the same, however you wouldn't need to worry about DLL references, etc.. as mentioned below.

  1. Download umbraco 4 binary files: Umbraco 4 Download
  2. Backup Database
  3. Take backup of all files for current version 3 install
    • If using source control might be best to create a branch
  4. All of the Umbraco DLLs that your project is referencing need to be updated to the new Umbraco 4 DLLs.
    • Generally this means replacing the folder that contains your referenced DLLs with the DLLs in the bin folder of the Umbraco 4 download.
  5. Update/Replace the "umbraco" folder's files:
    • If your project has not customized any of the files located in the "umbraco" folder, then just delete your original "umbraco" folder and replace it with the new "umbraco" folder found in the Umbraco 4 download.
    • If you project does have customized files in the "umbraco" folder, then it might be worthwhile running a diff on the files compared to the new umbraco 4 files to see what has changed and then manually make the changes to the new files to suit your needs.
  6. Update/Replace the "umbraco_client" folder's files:
    • If your project has not customized any of the files located in the "umbraco_client" folder, then just delete your original "umbraco_client" folder and replace it with the new "umbraco_client" folder found in the Umbraco 4 download.
      • In most cases, files should not be modified in this folder
    • If you project does have customized files in the "umbraco_client" folder, then it might be worthwhile running a diff on the files compared to the new umbraco 4 files to see what has changed and then manually make the changes to the new files to suit your needs.
      • In most cases, files that have been modified in this folder have been done to modify the UI of the admin section (which requires a paid Umbraco license) or custom icons have been added to style tree nodes.
  7. Web.config changes:
    • There are a few changes to the Web.config in umbraco 4 which may need to be manually merged in the AppSettings:
      • Change the value of the umbracoConfigurationStatus to be an empty string... otherwise the installer will fail to run.
      • The umbracoSmtpServer value is no longer used, Umbraco 4 uses the system.net -> mailSettings -> smtp values instead
      • The umbracoDisableVersionCheck is no longer required and can be removed
      • The umbracoVersionCheckPeriod should be merged from the Web.config of the Umbraco 4 download files
      • The umbracoUseSSL should be merged from the Web.config of the Umbraco 4 download files
      • The umbracoUseMediumTrust should be merged from the Web.config of the Umbraco 4 download files
    • The browserCaps section can be removed as the /config/browserCaps.config is no longer used.
    • The Umbraco membership providers must be added to your membership providers section if you have one, otherwise create the same membership providers section as seen in the version 4 web.config
    • The Umbraco roleManager providers must be added to your roleManagers section if you have one, otherwise create the same rolderManagers section as seen in the version 4 web.config
    • The Umbraco siteMap providers must be added to your siteMap section if you have one, otherwise create the same siteMap section as seen in the version 4 web.config
    • In the pages->controls section, you need to add the umbraco reference, this is important otherwise the new master page templates will not work.
  8. All other files in the /config folder of your installation may need to be manually merged with the new versions of these files:
    • Don't overwrite your Dashboard.config, XsltExtension.config, formHandlers.config, 404handlers.config, metablogConfig.config, restExtensions.config, or your UrlRewriting.config files!!
    • If you've customized your tinyMceConfig.config then you will need to manually merge this file, otherwise, overwrite it with the new Umbraco 4 version
    • The umbraco.Settings file:
      • You'll need to merge the errors section if you want support for different error pages based on culture
      • The allowedAttributes property of the imaging tag has been updated to no longer support: title,hspace,vspace
      • The disableHtmlEmail property of the notifications section is no longer needed
      • By default the TidyEditorContent in Umbraco 4 is set to true (which uses a new version of Tidy)
      • The requestHandler section should be completely replaced by the new Umbraco 4 version (unless you've specifically made changes to this for your own reasons)
      • The templates section should be added
        • Please not if you set the useAspNetMasterPages to false, Umbraco 4 will still work (there's a couple of quirky bugs in the admin section with this but no show stoppers) but will be using the old Umbraco 3 templates. Setting this to true will automatically upgrade your templates to use master pages!
      • The logging section should be added
      • The webservices section should be replaced
      • The repostories and providers sections should be added
    • Replace the /config/splashes files with the new version 4 files.
    • Add the new App_Browsers folder
  9. Replace the default.aspx file in the root of your project with the new Umbraco 4 default.aspx file
  10. Replace the /install folder with the Umbraco 4 /install folder
  11. Copy the Umbraco 4 /data/packages folder into your /data folder
  12. Copy the master pages folder into your root directory
  13. Delete all DLLs from your project's output bin folder to ensure there are no old Umbraco DLLs hanging around
  14. Attempt to rebuild your project!
    • If your project does not build, then this is most likely due to an error in your project, not Umbraco 4 DLLs. Umbraco 4 is 100% backwards compatible with version 3 and version 3 controls/packages
  15. Run the installer: /yoursiteurl/install/
    • The installer should run seamlessly and you shouldn't need to modify anything
    • When prompted to install Runway, probably best not to do this on an existing installation
Some things to note after upgrading:
  • Though Umbraco automatically created new master page templates for me, i had to manually add the
  • I had to add a ScriptManager to my master master template as many of my controls relied on it. Umbraco 3 must have automatically inserted a ScriptManager
  • It seems as though any public boolean properties that exist in user controls that get set via macros used to either have a 1 or 0 passed in to it which Umbraco would convert. With the new umbraco:macro control, true or false needs to be passed to it instead of 1 or 0.


Happy Umbraco 4ing!

 

Posted on 2/5/2009 6:31:00 PM by Shannon Deminick

Permalink | Comments (4) | Post RSSRSS comment feed |

Categories: Technology

Tags: , ,

 
Copyright © 2010 TheFARM