Thursday, December 18, 2014

Sitecore User Group (SUG) BELUX #3 - WFFM (The What, How, When and Why)

That is right,

our third User Group is comming !
Next year, on the 29th of January !

Short intro :

The SUG board members would like to welcome you to the third Sitecore User Group event (BeLux). This third session is meant as a mix of a both Developer and Product information on WFFM.

Webforms for marketers is the Form generation module offered by Sitecore. During the sessions we will explain the value of using the WFFM module for marketers, the flexibility it offers and the limitations the product has.

And to sweaten the deal, we'll go into detail on how you can work around the limitations, show the code that drives this and zoom in on what capabilities the module has.

Optionally, the differences between the versions of WFFM can be looked at in more detail as well as the roadmap from Sitecore on this module.

For the full agenda:
http://www.meetup.com/Sitecore-User-Group-Belgium/events/219021476/

Feel free to contact me with questions, or agenda requests !


Thursday, December 11, 2014

Sitecore bug solution: Media Library item Title meta info field not working

The problem

We have found that a number of Sitecore versions (at minimum up to 7.2) have a problem with defining the Title field (used for onhover's) of Media items such as images.
Even though Sitecore has a Title field on media library items (metadata), it is not rendered correctly. We tested this on multiple sitecore environments with these scenarios:

  • using the sc:image fieldrenderer
  • rich text field using an inclosed image from the media library

I opened up a ticket with Sitecore and they acknowledged the problem as a bug and will take this up with their patching and version releases.

In the meanwhile you can

As a workaround, you can do the following:

To resolve this issue in the <sc:image> XSL Extension Control

You can override the <processor type="Sitecore.Pipelines.RenderField.GetImageFieldValue, Sitecore.Kernel" /> processor in the <renderField> pipeline.

You should create your own class.
For example:

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class GetImageFieldValue
    {
        protected virtual ImageRenderer CreateRenderer()
        {
            return new ImageRenderer();
        }

        public void Process(RenderFieldArgs args)
        {
            if (args.FieldTypeKey == "image")
            {
                ImageRenderer renderer = this.CreateRenderer();
                renderer.Item = args.Item;
                renderer.FieldName = args.FieldName;
                renderer.FieldValue = args.FieldValue;
                renderer.Parameters = args.Parameters;
                //
                if (!args.Parameters.Keys.Contains("title"))
                {
                    Field innerField = args.Item.Fields[args.FieldName];
                    ImageField imageField = new ImageField(innerField, args.FieldValue);
                    if (imageField.MediaItem != null)
                        renderer.Parameters.Add("title", imageField.MediaItem.Fields["title"].Value);
                }
                //
                args.WebEditParameters.AddRange(args.Parameters);
                RenderFieldResult result = renderer.Render();
                args.Result.FirstPart = result.FirstPart;
                args.Result.LastPart = result.LastPart;
                args.DisableWebEditContentEditing = true;
                args.DisableWebEditFieldWrapping = true;
                args.WebEditClick = "return Sitecore.WebEdit.editControl($JavascriptParameters, 'webedit:chooseimage')";
            }
        }
    }


Build the solution and move the .dll file to the /Website/bin folder. 
Change the <processor type="Sitecore.Pipelines.RenderField.GetImageFieldValue, Sitecore.Kernel" /> processor.
 Example:
   <processor type="Namespace.YourProcessorClass, AssemblylName" />

To resolve this issue in the Rich Text field

You can override  <CodeBeside Type="Sitecore.Shell.Controls.RichTextEditor.InsertImage.InsertImageForm,Sitecore.Client"/>  in the InsertImage.xml file (Website\sitecore\shell\Controls\Rich Text Editor\InsertImage).
You should create your own class and inherit it from the Sitecore.Shell.Controls.RichTextEditor.InsertImage.InsertImageForm class.
Override the OnOk method.
Example:

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
protected override void OnOK(object sender, EventArgs args)
        {
            Assert.ArgumentNotNull(sender, "sender");
            Assert.ArgumentNotNull(args, "args");
            string str = this.Filename.Value;
            if (str.Length == 0)
            {
                SheerResponse.Alert("Select a media item.", new string[0]);
            }
            else
            {
                Item root = this.DataContext.GetRoot();
                if (root != null)
                {
                    Item rootItem = root.Database.GetRootItem();
                    if ((rootItem != null) && (root.ID != rootItem.ID))
                    {
                        str = FileUtil.MakePath(root.Paths.Path, str, '/');
                    }
                }
                MediaItem item = this.DataContext.GetItem(str);
                if (item == null)
                {
                    SheerResponse.Alert("The media item could not be found.", new string[0]);
                }
                else if (!(MediaManager.GetMedia(MediaUri.Parse((Item)item)) is ImageMedia))
                {
                    SheerResponse.Alert("The selected item is not an image. Select an image to continue.", new string[0]);
                }
                else
                {
                    MediaUrlOptions shellOptions = MediaUrlOptions.GetShellOptions();
                    string text = !string.IsNullOrEmpty(HttpContext.Current.Request.Form["AlternateText"]) ? HttpContext.Current.Request.Form["AlternateText"] : item.Alt;
                    Tag image = new Tag("img");
                    this.SetDimensions(item, shellOptions, image);
                    image.Add("Src", MediaManager.GetMediaUrl(item, shellOptions));
                    image.Add("Alt", StringUtil.EscapeQuote(text));
                    //
                    if (!string.IsNullOrEmpty(item.Title))
                        image.Add("Title", StringUtil.EscapeQuote(item.Title));
                    //
                    if (this.Mode == "webedit")
                    {
                        SheerResponse.SetDialogValue(StringUtil.EscapeJavascriptString(image.ToString()));
                        base.OnOK(sender, args);
                    }
                    else
                    {
                        SheerResponse.Eval("scClose(" + StringUtil.EscapeJavascriptString(image.ToString()) + ")");
                    }
                }
            }
        }

Also you should copy the SetDimensions method from the InsertImageForm class.
Example:

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private void SetDimensions(MediaItem item, MediaUrlOptions options, Tag image)
        {
            Assert.ArgumentNotNull(item, "item");
            Assert.ArgumentNotNull(options, "options");
            Assert.ArgumentNotNull(image, "image");
            NameValueCollection form = HttpContext.Current.Request.Form;
            if ((!string.IsNullOrEmpty(form["Width"]) && (form["Width"] != item.InnerItem["Width"])) && (form["Height"] != item.InnerItem["Height"]))
            {
                int num;
                int num2;
                if (int.TryParse(form["Width"], out num))
                {
                    options.Width = num;
                    image.Add("width", num.ToString());
                }
                if (int.TryParse(form["Height"], out num2))
                {
                    options.Height = num2;
                    image.Add("height", num2.ToString());
                }
            }
            else
            {
                image.Add("width", item.InnerItem["Width"]);
                image.Add("height", item.InnerItem["Height"]);
            }
        }

Build the solution and move the .dll file to the /Website/bin folder. Change <CodeBeside Type="Sitecore.Shell.Controls.RichTextEditor.InsertImage.InsertImageForm,Sitecore.Client"/> in the InsertImage.xml file.
 Example:
   <CodeBeside="Namespace.YourProcessorClass, AssemblylName" />

Hope this helps any of you who might currently be facing this problem !
And a big thanks to Support for acknowledging this problem !

Wednesday, December 10, 2014

Sitecore Hidden Gems: Admin Pages (based on Sitecore 8)

Introduction

This page is meant to provide insight into what tools are available in an ootb installation of Sitecore with regards to specific administrative tools decoupled from the actual Sitecore Content Management System.

* Update * - When you read through this document be sure to check out the update on more recent versions of Sitecore here: 
http://kverheire.blogspot.be/2016/02/sitecore-hidden-gems-updated-admin.html

These can obviously be expanded upon by installing additional modules and/or related tooling that creates new functionality in this Admin section.
The pages described below are made available under the webserver that provides access to the "/sitecore/admin" URL. In other words : "http://company.domain/sitecore/admin/tool.aspx".
Make sure that the aforementioned URL is protected and not accessible from the web or at least correctly shielded through authentication with Sitecore since a number of the tools described below can divulge information regarding the setup of your Sitecore environment and/or impact performance. Pre-Sitecore 6.6 versions did not have this ootb as you can now see on each of the pages:


The list

Every version of Sitecore comes with a slighty different list of available admin pages. To ensure the most up to date and correct listing I chose to use the Technical Preview of Sitecore 8 instance and the listing contained therein.


The admin pages - one by one

Since this list of admin pages provide significant features to developers and administrators it is important to keep them top of mind during any project. They provide quite the tool-set in investigating issues with running instances and can help you optimize your solution.

Since most of these pages have no implicit documentation and could therefore be perceived as obscure admin pages, we have listed each of these below in order to identify their purpose and where they can assist you throughout your implementation or maintenance.

Cache.aspx

Located at /sitecore/admin/cache.aspx, this page displays details about the configured cache settings as well as the current use. Measured and retrieved caches include database pre-fetch, data cache, item cache, HTML cache as well as specifically defined caches. This information can provide the needed insight into the cache levels during development / acceptance / load tests. It can give you information related to the relation between the current in-use cache levels and the defined maximum thresholds.Use of this page is vital when fine tuning and tweaking caching settings on your site. Latest versions of this page work under the password protected approach. However, when using an older version (<6.6) do please check this as it might display sensitive site information and expose site vulnerabilities as well as allowing any users to instantly clear the Sitecore caches.

The interface has two buttons : "Refresh" and "Clear All" - These should be pretty self-explanatory, but it is still mention-worthy that you best click refresh a number of times to get the correct results visualized.

I recommend using the https://marketplace.sitecore.net/en/Modules/Cache_Tuner.aspx DB Cache tuner to optimize your application.

DBBrowser.aspx

Located at /sitecore/admin/dbbrowser.aspx this page displays a shorthand view on the Sitecore databases and structure as well as the filesystem. The look and feel kind off related to the content tree / content editor interface but has clearly been brought down to basics.

This interface is mainly meant as a very quick responding insight tool that allows for cleanup and management of the content contained therein. Most of the basic functionalities related to pure content management are made available here.
However, features such as DMS, devices, layouts and so on are not manageable through this interface. This interface is quick to work with and does this (amongst other approaches) by only loading sub-items when parent items are selected.

FillDB.aspx

Located at /sitecore/admin/FillDB.aspx this page allows you to quickly create huge amounts of content based on a number of variables that are configurable in the tool. Fully configurable and disabled by default, this tool allows for automation through the creation of powershell scripts that allow you to define the needed variables and steps that are required to run. Initial setup requires all steps to run, after the initial setup only the last 3 steps are needed to be ran.
These are the following: 4) Clear site caches 5) Generate items 6) Rebuild Index(es).

More information on the updates to this tool that shipped with version 7.2 and onwards can be found here:
http://www.sitecore.net/Learn/Blogs/Technical-Blogs/Sitecore-7-Development-Team/Posts/2014/03/FillDb-Updates.aspx

LinqScratchPad.aspx

Located at /sitecore/admin/LinqScratchPad.aspx this page allows you to run LINQ queries against your indexes all within the browser!
Not only this but you can play around with different POCO's, settings and also test the performance of your queries out of the context of the entire running solution.
The tool can even inter-operate with snippets of code presented on Sitecore sites provided you have a local Sitecore 7 running (coupling through the instance-name).


More information on this tool can be found here:
http://www.sitecore.net/Learn/Blogs/Technical-Blogs/Sitecore-7-Development-Team/Posts/2013/05/Sitecore-7-LinqScratchPad.aspx

Login.aspx

Located at /sitecore/admin/Login.aspx this page serves as the default admin login form.
Unauthorized access into the admin pages or restricted pages on your website will redirect you here. Thank to the use of the query string parameter "returnUrl" it allows you to return after successful authentication.

MediaHash.aspx

Located at /sitecore/admin/Mediahash.aspx this page helps you generate a specificMedia URL that holds the value for the dynamic image scaling properties.
This functionalitiy appears to have become an integral part of the Sitecore product as every Media URL now holds a hash key. Little to no information is currently found on the use and restrictions of this hash key that is appended to the media item's URL.


Pipelines.aspx

Located at /sitecore/admin/Pipelines.aspx this page helps you gain more insight in the processes run on page requests and web site operation.
By default the Pipeline profiler is disabled since it has a performance impact when the CPU time and processor behavior is being measured.

After modifying the described files/setting in the configurations of your Sitecore instance the following page is presented after refreshing the Pipelines.aspx page:


This overview give a good insight into what pipelines are executed, how many times executions takes place and what the total execution time/percentage is and what the impact is on the servers CPU's.
Furthermore, a visual indication is given on the heavy hitters per pipeline section in the processing lifecycle, so the needed attention can be given during optimizing of the solution.

John West Blog post on the usage thereof: http://www.sitecore.net/Learn/Blogs/Technical-Blogs/John-West-Sitecore-Blog/Posts/2013/04/Sitecore-7-Pipeline-Profiling.aspx

RebuildReportingDB.aspx

Located at /sitecore/admin/RebuildReportingDB.aspx this page allows you to rebuild the Analytics reporting database since Sitecore 7.5

In order to minimize interruptions to reporting functionality, the rebuild reporting database process now works with a dedicated, secondary instance of the reporting database. When the rebuild process has finished, you then replace the primary reporting database with the secondary reporting database. Report rebuilding is performed using the new /sitecore/admin/RebuildReportingDB.aspx page. This replaced the Refresh Aggregated Data in Reports wizard.

Source: http://sdn.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%207,-d-,5%20Preview/ReleaseNotes/Release%20History/Release%20History%20SC75.aspx

RemoveBrokenLinks.aspx

Located at /sitecore/admin/RemoveBrokenLinks.aspx this page is used to remove all broken links in your selected databases. This tool is especially valuable when content was re-structured, importe or cleaned up. The altered items can be serialized so that they can be restored on different instances if needed.


Restore.aspx

Located at /sitecore/admin/Restore.aspx this page helps you reset Archived content back to a specified database.
This admin tool feels somewhat needless and outdatedand does not adhere to the authentication and look&feel used in the other tools.


Serialization.aspx

Located at /sitecore/admin/Serialization.aspx this page helps you serialize database content into XML.
Serialization allows you to backup database content / place it into version control and create the basis for a version comparison. Just like when creating Sitecore packages, where content is serialized in the background, this is a direct interface to help serialize database content into flat files for further use. The tool also allows for either Serialization or updating of the Sitecore databases.


SetSACEndPoint.aspx

Located at /sitecore/admin/SetSACEndPoint.aspx this page allows you to change the Sitecore App Center endpoint. It is useful when playing whit Email Campaign Manager


ShowConfig.aspx

Located at /sitecore/admin/ShowConfig.aspx this page shows the compiled Sitecore config. Do keep in mind that this only shows you the content of the <sitecore> node and not the full web.config. A perfect way to see the culmination of all the configuration modifications in your project. Configuration modification are supported in Sitecore through custom .config files placed in the /App_Config/Include/ folder whereafter these files are merged in with the web.config.
Useful for checking the final settings during debugging when you are unsure whether your config files are being used. Especially make sure this page can not be accessed without the proper access rights since this contains sensitive configuration data.

John West information: http://sitecorejohn.wordpress.com/2010/03/11/tool-to-examine-sitecore-web-config-after-accounting-for-include-files/
Sitecore Marketplace module that uses this admin page: https://marketplace.sitecore.net/en/Modules/Detailed_Config_Report.aspx

Stats.aspx

Located at /sitecore/admin/Stats.aspx this page provides rendering statistics for all registered sites. Includes load times, cache sizes, etc.

This tool provides the necessary insight into what presentational components have been loaded for each site. It also provdes information on load time, amount of time it was loaded (and how many times the cache was hit), when it was last ran and so on.
Alongside with the showConfig, Pipelines and Cache pages, this page serves as a vital tool for fine tuning and tweaking of your solution.

Unlock_admin.aspx

Located at /sitecore/admin/Unlock_admin.aspx this page helps you unlock the locked-out admin account.
When the Administrator account would become locked out of the system due to for example too many invalid login attempts, this page can be used.
As a means of securing this page and functionality, the "Unlock Administrator" button is disabled by default, modify the ASPX to enable further functionality.


UpdateInstallationWizard.aspx

Located at /sitecore/admin/UpdateInstallationWizard.aspx this page allows you to update Sitecore using an update package.

This page is used for many update packages or other functionalities and should be well known to most Sitecore developers.

Saturday, December 6, 2014

ASP.NET and MVC / Let's combine with Sitecore

Ok,

I have been delaying this too long. It's time to get onto the bandwagon and join all you guys out there with MVC and Sitecore.

And since I recently heard a Sitecore representative say that Sitecore is embracing and enforcing the MVC approach I find it high time.

So, lets try to find all information I possibly can to make sure I get a good start on this.
First off, I found this information :

-          http://sitecore-community.github.io/docs/documentation/Sitecore%20MVC/index.html - Very up to date, thank you Martina Wehlander !
-          http://www.alen.me.uk/2012/08/learning-sitecore-mvc-part-1.html - Learning Sitecore MVC and the subsequent post 2,3,4 dates from 2012 though….
-          http://mhwelander.net/2014/05/28/posting-forms-in-sitecore-mvc-part-1-view-renderings/ - Posting forms (again : Martina Wehlander) – 2014
-          https://github.com/Sitecore-Community/sample-sitecore-mvc - more Martina Wehlander
-          http://www.hhogdev.com/blog/2012/august/sitecore-mvc-prototype-part1.aspx - Hedgehog mid/eind 2012 subsequent posts 2,3,4
-          http://www.sitecore.net/learn/blogs/best-practice-blogs/chris-van-de-steeg/posts/2012/03/sitecore-mvc.aspx - Sitecore MVC starter app – 2012 (outdated?)

Wondering if the above, combined with the information om the VirtualSummit will provide me with all the information I need to make this work flawlessly.

And let's hope all modules and products are able to do what I want to do through MVC as well...

-update- (!) Found the following KB article on Sitecore giving good insight on what modules and products can be used with Sitecore MVC approach: https://kb.sitecore.net/articles/522918/
 

Friday, October 24, 2014

Sitecore Symposium Recap slideware

Yesterday's Sitecore User Group presentation was a success. It was hard to get everything crammed into one presentation but I pulled it off in the end.
It is a hard task to get the correct feeling and bring it across correctly but I gave it my best shot

Download the information and slideware here:
http://files.meetup.com/14353282/Sitecore%20symposium%202014-SUG-BELUX.pptx



If you have any more questions or want me to give more detailed information feel free to contact me directly.

Kind regards.

Tuesday, October 21, 2014

High Sitecore memory consumption

Case

We experienced a problem last week on a number of servers that steadily kept on using up memory.
After inspection it turned out that each and every page request was creating up-to 7 new caches for BlobId's. Since we saw the following in our logs:



As you can see, each of these caches took up 500KB and in our case (since 7 caches were created) this resulted in a 3,5MB of consumed memory on the server for each page request.
Furthermore, it turned out that these caches were not accessed or used at all but only kept on consuming valuable memory.

Find the problem and solution below so you never make the same mistake and don't have to embark on a wild goose-hunt to solve this one.

Okay, how did we fix this and what was causing it !?

First off, our sincerest thanks to the intervention of Sitecore support which helped us pinpoint the problem directly and made for a quick resolve.

Sitecore informed us that the creation of these cache entries is done when a new instance of a Sitecore Database object is created instead of using the Factory that helps provide these.

In other words:         new Database("web"); 

The reason that we had the problem appear so heavily is that the following code:
LanguageCollection configuredLanguages = LanguageManager.GetLanguages(new Database("web"));
 was used in a utility method for handling language information... and of course this method was called a number of times.


Where we should be using any of the below:  
var database = Sitecore.Data.Database.GetDatabase("web");
var database = Sitecore.Configuration.Factory.GetDatabase("web")

Or in the case where you just need the current context database:
var database = Sitecore.Context.Database;

Cool, any pitfalls though ?

Obviously no pitfalls exist here. The only important thing that has to be done is make sure NONE of your projects/code bases are still using the red-highlighted code above.

Tuesday, October 14, 2014

Preparing for the SUG-BELUX next meeting - hard at work

That's right,

I'm working on the last preparations for the presentation on the next SUG-BELUX event hosted in Ghent.
http://www.meetup.com/Sitecore-User-Group-Belgium/events/197698722/

The following are the two sessions that will be presented at this meetup:

Session 1 : Sitecore Symposium Highlights - Kris Verheire
Session 2 : How-to (e-)CRM - Johan Becue

Afterwards there will be plenty of time to mingle and do some of your best networking.

Hope to see sou all there on October 23 in Ghent !



Tuesday, October 7, 2014

Sitecore Symposium 2014 - Recap of Session Day 2


The Sitecore Symposium Party in the Maritime museum of Barcelona, combined with some recaps and brainstorms on the sessions of the first day after a few drinks, made us enter the second session-filled Symposium day with too little sleep.
The same seemed true for the bulk of the audience that trickled into the various interesting sessions this second day had to offer.

This second day had to become a mix for me where I could follow up on the sessions as well as getting through 8 more Partner booths to make sure I captured all information and contacts that were available there too.

Since I want to cover the Partner information in seperate posts, I'll skip this and might have some holes in my timeline and continuity.

Let's do this:

Product track - Developers aren't marketers, but can we coexist

 

A good track to open with since it helps spot one of the tricky parts of developing a full-fledged CXP implemented website presented by Mike Edwards and Mike Shaw.

Since personas and profiles are created and conceived of by marketers, a number of assumptions are being made onf how these should best be constructed.
With the information your website is capturing through the xDB, all the information required to view existing profile information and compare it against each other is available.



This implies that you can also determine which users are currently not being profiled into specific personas and profile types.
The tool that was presented in this session gave a good insight into what the future of marketers and developers in terms of maximizing the amount of captured information and behavior combined with constantly streamlining your visitor identification efforts in order to make your site more responsive by serving the most relevant information. 

Simply because your website has a good coverage of all the type of visitors that are approaching it.

More really interesting information can be found here:

Developer track - Sitecore new reporting services and custom aggregations


This session by David Morrison provided some welcome insight on how the xDB information gathering and segmentation engine actually works. I actually showed up a little late for this session but I'll give a quick rundown.

In short, David showed how the different aspects of information are stored inside the xDB as facets of data. Most interestingly, data stored in the xDB is stored in a cumulative manner.

To clarify: when you have a facet for the gender (Male, Female) data stored in the xDB is stored as flat data with regards to the individual records that are added for each action (page-visit / click / campaign / realized goal / ...) as well as an cumulation for the facet values. Which actually means that if 15 visitors (8 males / 7 females) made it to the website you will find 15 flat records for the visits and a value of 8 of the male value of the gender facet and 7 for the female value of the gender facet.

In other terms, requesting the xDB what the amount of visits (for example) were female or male does not result in an actual query that has to go over the stored visits but can simply revert to the accumulated data stored as facet information on the xDB.

But what happens when a certain facet/variant needs to be added afterwards ?
Apparently, the xDB has an extra setting in the connectionstrings that allows for a 'primary' and 'secondary' analytics configuration. 
Whereas the primary is being used to serve information to the website, the secondary website can be used to rebuild the 'indexes/facet information' based on the collected data inside the xDB.
This approach allows for quite some flexibility without impacting the live website behavior.

To sum up, the architecture behind the xDB platform looks really nice and, like everything in Sitecore, allows for enough flexibility to create these custom aggregations, tables, report services, dashboards, mobile reports and so on.

Guest Keynote - Dietmar Dahmen, Creative Consultant - Do it Now


Wow... That kind of sums it up for me :)



If you were there, like me, you would now be stating a large number of buzz words, re-usable quotes and so on. Because it all made sense, even though there was a thin line with how scary this all might be becomming...

I know Dietmar Dahmen @MrDahmen has been giving this presentation with a number of variations in a large number of locations and inspiration seminars, but it was still very impressive. Presentation, Visualization, Inspiration, a professional and veteran presentor in my honest opinion.

He showed us on how we should not perceive of things too much in their current state, either as a brand or products but try to see them as what they could be. Through examples of how brands are unable to make the transfer across channels, products and technologies (Sony, Samsung, Nokia, Apple) and so on we were requested to think outside of the box and find the bigger picture. Or if there was no bigger picture, to paint it ourselves and move forward.


We need to start thinking about what is possible, how can we change, rather than asking ourselves why we should change. Ask yourself why we shouldn't change.



My favorite Dietmar quote (or quoted quote) : "Be less like a book, be more like a letter.", since this actually matches what we at The Reference are doing, we don't want to approach the customer with a general story but  go personal and rather do the effort of getting to know you personally and build a true relationship rather than being generalistic. We want to get under your skin, and become a part of you that understand you and can reason with you on an individual/personal level. Understanding is key, most (if not all) the rest is collateral. Apparently, these inspiration sessions are infectious... :)

More on Dietmar Dahmen here: 

Developer track - Creating dynamic brochures with Sitecore Print Experience Manager


After being all juiced up by dinner and an impressive guest keynote we were all ready for more.
This hands on session by Julia Gavrilova @julia812 in the developer track was something I had been looking forward to for quite some time.
The Adaptive Print Studio has been with Sitecore for a while now and we have played around with it and did an implementation but found it to be poorly supported, horribly documented and not transparent at all. In short, a lot of headaches for our developers, the project manager struggling to keep everything aligned and a worried customer. In the end we made it through, albeit unsatified.

So I was looking forward to the input Gavrilova could give us on the evolution of this product.
My first reaction was dissapointment because, and so please stick with me, what was displayed here featured more of an actual Case presentation. But then the vivid presentation by Gavrilova told a story I could relate to.

JD Little guest blog

When performing the implementation for the print integration on the weil.com site she was driven to the point of giving up, when at long last she found the information she needed by contacting Sitecore. Sitecore noticed the need for more information and clarity on the APS implementation and has since then put more effort in documenting, supporting and even providing code in the Jetstream demo website that should help along future implementations of what is now called the PXM (print experience manager - more in next topic)

Furthermore, a number of tools and head-ups were described for debugging efforts:
- Use the XML viewer that should give you a good insight in how your data is sent to InDesign
- Don't use inpage CSS, or make sure the mapping towards InDesign servers is done correctly.

It was good to hear that it was not only us who struggled on the implementation of this product, and that Sitecore has understood the need for more information and support.

More information here:


Product track - Beyond print: Delivering rich experiences


As a perfect continuation on the previous session, it was time to find out what the Print Experience Manager was evolving into and what the roadmap on this product is. Time for Mark Demeny @mde_sitecore and Hylke Heidstra to enlighten us further.

Even though the room was only moderately filled, I found this session to be one of the 'need-to-go-to' sessions since it fits perfectly into what Sitecore wants to do with its customers, and that is to go full-cirlce. Offline print media fed by online date holds the very key to success in my opinion.



Displayed above is the main concept, again a part of Sitecore that is handled through the connectors approach.

It was good to see that the product is still evolving and that they are looking into clearer and easier ways to adopt PXM into Sitecore.



One of the extra possibilities is to have an online document generator that lets you create tailored printable of digital catalogues depending on the customers intrest. For example, you can converse with the prospect and list the informtion he/she needs and have it printed directly at your reception desk for when the prospect leaves. But this time he/she will leave with the relevant information in hand.

Furthermore, the option to creation this ISSUU like "flip-able" catalogue of document in your website through use of the Rendition builder seems like quite a nice treat as well, since you can make sure the latest prices are displayed and have Javascript nested inside the flipbook that gets the correct information where needed, which to my eyes is quite innovative.

I'm looking into finding the Cookbook-format mentioned during the symposium and will update as soon as I found it.

More info:
APS Cases info
coming soon...

Developer track - Sitecore X-Developer class 101 - Upgrade your superpowers to match the next generation Sitecore Experience Platform


Quite the mouthfull as a topic name, this session presented by Alex Shyba @alexshyba showed us how we van use the xDB to be creative, innovative and scale applications with regards to functionalities.

What if your product analyst or direct chief asked for a pretty pie-chart like report that provided a good insight into the website usage and any other derived information ?

The REST API of the xDB was used to pass Json to the client which worked together with dc.js that helped render the charts on the report page/overview. This example was shown to indicate how easy it was to leverage and build experience analytics fed applications.
Further down the track, the session covered the code and effort needed to provide a clear drilldown into page visits and clickthrough by using the Path Analyzer that gave detailed page visits information as well as showing how engaged a visitor is during their journey.

Path analyzer, worst picture ever, sorry...
As a finisher, Alex showed u the possibilities of mixing input into the xDB. Through an application he conjured up, visitors of the session were able to log into this application with their LinkedIn profile (after granting access obviously) which then looked at the skills you have defined on your LinkedIn profile. These skills were then fed into the xDB and approached as a facet for the application to work on.

The result was a diagram with yourself in the center and lines stretching out to every connected user. How thin or fat the lines connecting you are was based on the amount of shared skills. All of this being fed from the REST Api of the xDB site. Quite impressive and nicely visuallized.


And on that bombshell.... oh wait, we have the Closing keynote to sum things up for us !

Closing keynote introduced by Sitecore CMO James Smith


To sum up everything, a brief closing keynote was given which served more as a teaser for next year's products that are to be released, the Sitecore roadmap and an open invitation into next year's Symposium.


After a good round of thank you for attending and the confirmation that there will be a symposium next year as well we moved along the topic of what is to come:


Which shows that more effort will be made in merging the online and offline world with regards to media, crm information, commerce approach and merchandising.


Finanlly the roadmap displaying what is to come... apparently we can expect Sitecore 9 to hit the 'shelves' in 2016, eventhough i'm guessing that this will more likely be a Q4 release then a Q1 ;)

Conclusion


Sitecore is very active, a lot of the things we see are only the tip of the iceberg. And there are a lot of elements at work behind the screen while the Sitecore architects are hard at work to enrich Sitecore with all the tools needed to make Sitecore into your Business Backbone. This backbone will help to store and unify all online and (optionally) offline data into one stronghold platform that allows for content editors, marketeers, product managers and business users alike to manage their aspect of your brands online presence.

The symposium came with a few very big wow moments, FXM, Path Analyzer, Revamp on SC8, xDB explained and so on, but luckily touched on a number of more fundamental and architectural decisions and future roadmaps as well.

Sitecore is heading in the right direction and I feel confident that we should all go there as well.

Thursday, September 25, 2014

Sitecore Symposium Partner Pavilion

The Sitecore Symposium at Barcelona featured an impressive 12+ partner booths that were each and every one worth a visit. As a perfect Sitecorian (or what was the name again) I went over to each booth and visited them all.

Which was hard and took up all my spare time between sessions and even kept me out of some of the first minutes of some sessions.

But I think it was worth it. Because you do not build a Sitecore solution alone. Sitecore is a platform that lends itself to co-operation and integration.

In the comming blog posts I'll try to make an post for nearly each of the Partners there.

And as proof that i visited every one of them, here is my Passport with every partner stamp on it:


First one to do: ADAM, full-fledged data asset management tool that now integrates perfectly with Sitecore. ADAM was Signature sponsor of the Symposium and the Sitecore Symposium Party.

Sitecore Symposium 2014 - Recap of Day 1


Now that the Sitecore Symposium in Barcelona is behind us, I finally find the time to reflect on everything that was transferred and imprinted into our mind there. 
The two main days of the Symposium were on Tuesday and Wednesday, the two days were a good mix between Business, Product and Developer tracks were given. All of these fueled by inspiring keynotes from Michael Seifert, Dietmar Dahmen and XX


This first post is mainly meant to give an insight on what tracks I followed the first day and to provide a short summary of the other important sessions that came along. Followup posts will elaborate in more detail on specific topics that were presented on the Symposium.

Putting day 1 and day 2 into one blog post would not do the Symposium honor. Each of the presentations given there were lengthy, relevant and important. Enjoy the first day below as I experienced it.

Let's kick it off with the first day:

Opening keynote from Michael Seifert (Sitecore CEO)


The keynote gave a good opening statement on Sitecore's vision with regards to performing its role as a full cycle platofrm in the digital landscape of today and where the platform is evolving into.
As was to be expected, capturing and delivering the right user experience will be key in doing so. Through capturing and captivating you customer/visitor it is possible to shade the delivered content with marketing purposes in mind, however diverse.

The keynotes gave a good alround understanding of how experiences tailored for each customer can driver your brand grotwth. Through optimization, nurturing and correct measuring of both online and offline efforts, the Sitecore platform can help you create customers for life.

Michael Seifert - keynote Sitecore Experience Symposium

During the presentations and first insight we were also show some of the new layout that has been given to Sitecore 8, you can find more in this post but the one that I simply can not hold back any longer is the revamp of the login screen (notice the lack of the login options) :



Finishing the keynote were 4 Las Vegas originals that energized the audience to help make this promising symposium a winner!
On to the sessions... since I am a Technical Consultant, the main tracks for me were the Product track as well as the Developer track. Not always an easy choice, but we made sure (my colleagues from The Reference) to cover every inch of the Symposium by spreading out across the sessions in each tracks as well as the Partner booths.

Product track keynote - Building the Sitecore Experience Platform


... or, how to establish an ecosystem...
Steffen Anderson took us through a presentation that gave us the insight of where Sitecore comes from as a product. Whereas once, the focus was solely on becomming a strong and respected CMS, nowadays this focus has shifted (after the previous was achieved) towards becomming a fully integrated marketing tool. Since there are now numerous ways of disclosing content to your target audience, dispersed amongst multiple channels, devices and influences, they key is to centralize. Managing a number of disparate systems creates a high level of overhead with regards to training, management, platforms which in turn results in a very costly approach. 
Sitecore offers the perfect solution to this as an single platform/framework where your content is contained and distributed from.

Same of the examples are: Mobile, Social, Ecommerce, Follow-up, Mass emailing...



Product track - What's next in the march toward customers for life


In this track, Mark Floisand gave us more insight on the Sitecore Eco-System with regards to interactions and connections to other systems as well as other sites.
Sitecore has incorporated the use of what they call "connectors". These connectors open up the platform and provide the possibility for partners and implementers alike to connect into the underlying framework and expand on it using the SPEAK api.

A few examples with regards to this connector approach was given through the new Commerce connector which allows for easy integration with any ecommerce solution and the social connector that allows for easier connection with Facebook, Twitter, Google+, LinkedIn and so on. Komfo, their social agency, is what is used to power this approach.

All of these functionalities were displayed on the Sitecore 8 version which is due to be released around christmass of 2014. Sandbox versions will be made available earlier to Symposium attendees.



The visual overhaul is extensive and invasive (in a good way) and I'm personally looking forward to exploring it. It looks much more modern, SPEAK powered and allows for the creation of new "apps" that can be added on a launch pad. This launch pad will replace the existing desktop look and feel, thus facilitating their Sitecore tasks individually.


A large part of this session was devoted to showing us the importance of testing within Sitecore 8 and how testing has become an integral part of the platform as well as the process of content editing. More information on this will be given in the project Skynet session later on in the day.

This session also gave us a glimpse into the Federated Experience Manager that allows for a Sitecore editing and A/B testing experience outside of Sitecore. Confused ? I'll touch on the FXM further along since this was covered in a number of sessions later in the day.



Product track: The power of a single customer view: Sitecore Experience Database


This is where Sitecore and Experience are brought together. The presentation given by Mark Stone gave us a better insight and understanding into what the new xDB looks like and how it functions with regards to merging offline and online data, data fed into de database from your crm system or any other system while providing a visual insight with the Experience profiler.

Where the Sitecore Analytics used to give as a more generalistic level of information, the new approach lets us drill down right to the behavior and analytics of one specific person which allows for very detailed (and personalized) analytics.
Facets and segments allow for grouping and reporting of these analytics in enormous detail and helps drive the marketer in knowing your individual visitor.

List segmentation is one of the features that is an inherent result of the approach described above. Facets can be used to make sure that the correct users are selected for list selection in for example the ECM and any other plaform (commerce?) within Sitecore.

One of the new concepts and keywords in this Session was the idea of an Outcome. In short, this is what you want to be the ultimate result of your strategy. The cullumination of the goals you set on your website. I personally like to think of it as the highest value in your value Pyramid (SBOS-excercise). Goals working together should lead towards the desired outcome.

Product track - Keep the customer at the center of your marketing efforts with Sitecore’s Federated Experience Manager


And here it finally is, one of the most exciting topics of the first day (besides testing, segmentation, new UI, new connector concept ofcourse) : the Federated Experience Manager (FXM), a session by John Field and Brian Payne.

What should you do if you (as a company) want to invest heavily in Sitecore and profile capturing to provide the correct experience but not every site in your ecosystem has been built with Sitecore as the underlying platform (For example; campaignsites, minisites, annual reports, eventsites) ?

Interestingly, the presentation mentioned that before making a decision (to purchase) a customer uses 6 different channels on overage for prospecting purposes. Wouldn't it be interesting if you could capture and manage as many of these channels as possible ?



At that point the Federated Experience Manager make it's appearance. Through the addition of a single line of Javascript right into the the non-sitecore site (either in the HTML or through use of the google tag manager) you can transform this disconnected site into a site that helps track behavior.

Actually, it goes beyond simple tracking. You can gather your visitor's data, use the Sitecore info to match him/her to a specific persona and personalize that visitors user experience by personalizing the secondary site as you would any other Sitecore website. Since you can use the Page editor (now named the Experience Editor - what did you expect) you can add personalization, goals events, A/B testing and so on. This is mainly due to the use of the same rule engine as used in the typical page editing process.

The implementation of the FXM, analyses the DOM of the secondary site and decides on blocks, texts placeholders and so on where content can be changed at the editors whim.

Apparently, the FXM tool has been made available a while ago and can be plugged in on any Sitecore 7.2+ site., get your hands on it and play with it where possible.
The behavior of the FXM is a lot like Visual Web Optimizer (VWO) but has so much more value since whatever you are tracking and testing can immediately serve as enrichment on all the other analytics you were already capturing across the platform.

The session described above ran in parallell with the session by Stephen Pope: "Our princess is in another castle! Tracking activity on non-Sitecore sites" which seems to have been quite an impressive session as well. I'm trying to get a hold of more information and will add it to the blog when available.

Developer track - How Project Skynet will change the way we create content


This session was given by Timothy Ward, who was very enthousiastic throughout the entire session, and with good reason!
As mentioned in the recap of the above sessions, Sitecore 8 is adapting the principle of test first, commit later but now in terms of content. This means that every change that is performed in content will result in a proposed test to be performed. My apologies for the fuzzy picture below, but this gives some first insight on how it will work:


Above you can see the result of a double A/B test setup on a page, which results in 4 possible outcomes for your visitor which are previewed here and where a pane is shown that gives you insight on what the expected effect of your changes will be.

And this is where it gets interesting. For every test that you create, you have to indicate in Sitecore how successfull you think the modification will be in terms of result. In doing so, the machine learning incorporated within Sitecore gets an idea of how good or bad you are at performing tests as well as guessing the outcome of these tests. 
Tim Ward event went a few steps further and showed how the machine was tought to distinct and categorize content through OCR and image analysis. Thus helping to determine the type of content that is shown in a certain context. They used specific models and the integration with goals and patterns in the experience database (xDB) as tools to help sculpt the algorithm. The machine learning that was implemented into Sitecore uses a specific algorithm that is used to determine the outcome of your tests. But this would not be a Sitecore implementation if it was not created as fully configurable through a number of pipelines and providers that provide you with the flexibility to add your own algorithms and implementations tailored to your own business.

The full extent of this development is still not entirely clear to me at this point but once I get my hands on Sitecore 8 we'll be able to dive deeper into this. All I can conclude now is that the information the machine gathers from create A/B tests, their outcomes and expected outcomes is used further on in the process. The algorithm will use this insight to improve A/B testing and engagement by proposing tests by itself and already giving you the possible outcome of new tests before it has even been published to your visitors.

Curious to see where Sitecore will further integrate this technology. It could be used to automate everything with regards to A/B testing and content optimization reports but they could go even further and help propose an engagement path that is relevant for specific persona's / profiles of web site visitors...

Overall recap/conclusion in keywords ?


No use in writing a recap of a recap, but some keywords could sum up the first day quite well in my opinion, here goes;

- Sitecore 8 awaits us
- Experience is key
- Testing best practice
- Federated Experience Manager 
- List Segmentation 
- Machine learning / Skynet
- New user interface
- All round experience Platform 
- Brand growth  
- Lifelong customers