Blog

Aceik hires Brad Paton as Account Director

Exceeding our clients’ expectations has always been and continues to be Aceik’s #1 priority. With the current difficult climate, we are doubling our efforts to look after our clients. To this end, we’re excited to announce that our team has grown again with the addition of Account Director, Brad Paton. Welcome Brad!

Brad’s expertise in digital strategy development and execution as well as his understanding of the Sitecore platform will go a long way to helping our clients to achieve their business goals. We’re also thrilled to share that with Brad now on-board, we’ll be offering Aceik’s Sitecore Business Optimisation Services (Aceik SBOS) to our marketing clients.

We sat down with Brad to get to know him a little better. Here’s what he revealed about himself.

Tell us a little bit about yourself.

Brad: My career has been an interesting one when it comes to digital software development in that I actually studied law many, many years ago. It was the late 90’s, the internet was taking off and I found myself interested in computers and technology. I taught myself to code– first Microsoft BASIC, then Visual Basic, and when the internet gained traction learned HTML, and eventually JavaScript.

I was a big Essendon Bombers Football fan. I actually sent them a letter and said, “I think this internet thing is going to be pretty big do you want to get involved?” and I helped them create the first official Essendon website.

But then I finished my Arts/Law degree and worked as a lawyer for a few years before deciding that law wasn’t for me. I really liked building websites. So, I returned to the Essendon guys and kept working with them, and then also after that build up my own small web design business in the 2000s.

Following the sale of my business to IMG, I landed at Reactive, a digital agency with a Sitecore arm that was eventually sold to Accenture. I spent 4 years working for Reactive and another 2 years at Accenture.

It happened that Richmond Football Club was looking for a Head of Digital so I made the leap from one football team to another. I didn’t think I could change teams from Essendon to Richmond but turns out you can. And so, I’ve spent the last four years as Head of Digital at Richmond, in which time the digital part of the business has grown enormously. We doubled headcount from six to 12 in those four years and won two premierships.

I was introduced to Jason Horne, our Managing Director, by Reactive’s former co-founder. Jason was looking for someone to manage digital strategy, business development and client relationship management. That ticked all of the boxes of what I was looking for in my next role. I started last Friday, met Jason at the office, had a client meeting, collected my computer and have been working remotely ever since.

You’ve been working in digital for about 20 years now. What do you love about digital?

Brad: The thing that kept me in it for so long is that it just changes all the time. So, in my time with Essendon FC back in the 2000s, it went from being a static website to a content managed website. Then we added video and we were the first AFL club to do that. Then social media came along, and then the iPhone was released in 2007. With mobile being important, we built an app.

Digital is just constantly evolving, and you never know what’s going to pop up on the horizon that needs to be addressed. I like the changing nature of the industry.

Any predictions on what’s coming in the next 12 months or so?

Brad: I’m huge on voice. I’ve got a three-year-old daughter and if she ever uses a keyboard, I’ll be surprised. We’ve got a Google Home at home and she can control that already. But voice taking over inputs from keyboards, visual pointing and interactions so whether that’s just by hand gestures or mouse or whatever.

But then of course, the next big leap is going to be augmented reality and virtual reality and how that impacts life. It has promised a lot for a long time and it hasn’t delivered, but the technology now is a lot better and cheaper. They’re starting to scale and I think for the next five to 10 years VR is going to really start to take off and who knows what that means for society.

We’re pretty much in lockdown for the coronavirus at the moment. It doesn’t matter if it’s virtual or physical anymore. If you’re in the same room physically together, you can be there virtually just as easily, and people are doing that at the moment. They’re having a Google Hangout or Skype, if they’re in self-isolation to try and maintain that human contact. And as the technology progresses, then virtual reality is that next logical step.

Why did you choose to join Aceik then?

Brad: Just from the position description I was interested, but when I met Jason, I got a really good sense of his vision and purpose for Aceik. He wants to grow the business in a sustainable way to retain quality. And that’s pretty rare in a lot of businesses because they just want to scale quickly. And what happens then is you might do some good work early, you get a lot more business, you hire a lot of people, not necessarily the most qualified people, and then you turn out work that’s not as good and your reputation goes down. So, I like Jason’s philosophy.

And I guess the other thing is that I like the idea of getting involved in a business that is more technically focused and keeping up to date with the latest trends in that area.

And funnily enough, I learned only after I’d met with Jason that Lila Tournier, who I worked well with at Reactive for about three or four years is currently at Aceik. So, once I knew she was there that was kind of like almost the last check in the box to say, “Yes, obviously this is an organisation worth working for.”

What are your goals over the next couple of months?

Brad: The first thing is really to identify the opportunities, especially in this climate that we want to prioritise. I want to help in terms of growing those relationships with existing clients to ensure that when new opportunities come up we’re first on the list to be looked at. And then second to that is looking at what new opportunities exist with potential organisations that haven’t been clients.

Another the big opportunity is around digital strategy. So, rather than just delivering excellent  technical work, which Aceik has an amazing reputation for, we can actually go in before that technical phase, and do a digital strategy piece of work with the client. This would involve workshops, customer journey mapping and coming up with recommendations on how to use the Sitecore platform to the best of its ability. We all know Sitecore, at its core can just be a content management system for a website, but if you want to get to the top you need to use the marketing features and the marketing features are where the ROI is.

We’re already looking at how we put together multiple options for clients to engage us in a digital strategy piece of work, with the outcome being a roadmap the best way to implement Sitecore.

Was there anything else you wanted to add?

I’ve seen a lot of change in the industry over the last two decades. I remember having my first modem and I had to tell my parents they couldn’t use the phone for two hours because I needed to get onto the internet and learn how to code. Whereas now, I look at my Apple watch on my wrist and it can tell me almost anything that I need to know.

And with that experience, I’ve learnt that times change very quickly. Don’t plan on putting something together today for an activity in 12 months because it’s unlikely to be the same then. It’s crucial to be adaptable.

COVID-19 update: It’s all business as usual at Aceik

Aceik’s approach to the COVID-19 outbreak and how we will continue to support our clients, team, families and community throughout this difficult period.

Remote working is our norm

For many companies, remote working isn’t part of their normal practice. In the last few days, employers and HR departments are frantically exploring and launching flexible work options which have a level of complexity for traditional workplaces. It has provided a new level of chaos and complexity to their work processes and relationships.

Not for the Aceik team.

We have always offered our employees the option of flexible working. In fact, what many of our clients and community may not realise is that 95% of our work has traditionally been remote. Yes! Our engagements with RAA, Fitness Lifestyle Group, Fitness First, Goodlife Health Clubs, Village Theme Parks and Chisholm Institute (to name a few) have all been undertaken offsite.

What has changed for Aceik

The health and safety of the team is paramount and so to complement our flexible working culture, we’ve implemented a policy specifically addressing the changing COVID 19 situation. As of Friday 13 March 2020, all team members are working remotely. There is no international travel and domestic travel is only if completely unavoidable. In-person meetings and events are limited. Our phone system has been diverted and will continue to be answered.

Aceik has always offered online training for developers, marketers and clients. We have moved all of our in-person Sitecore public classes to online training for the foreseeable future. Aceik’s Virtual Classroom will be delivered via Google Hangouts and will feature the same live instructor interaction, the same materials and remote machine lab exercises as you would have in our face-to-face courses.

As always, Aceik documents as we work, and this process is unchanged. This means that if a member of our team becomes unwell, that another colleague can easily step in. It is vital to us that there is no interruption to our clients’ businesses and projects.

Tips for anyone new to remote working

We asked the team to share their top tip for remote working:

1. Continue with your regular morning routine just as if you had to commute to work and play music in the background (recommendation: Bossa Nova does the trick).

2. If you can have a separate space that is only used for work (for example, a study, spare bedroom etc) to commute to work, then it will help family to understand that you are at work and not home.

3. Make a checklist in the morning and use the Pomodoro Technique to execute. There are plenty of phone apps available to manage the technique, and act as a timer.

4. The number one rule for client work is keeping the progress updates going on whatever communication platform is used. So, if its Slack keep the updates streaming in because this builds and maintains trust between all parties.

  • Check in at the start of the day with your team and client.
  • Update them when you complete a task.
  • Update them when you’re blocked on a task.

5. Your new colleagues might now have fur and four legs. It is awesome working alongside the furbabies but when you have a call scheduled, ensure you’re in a quiet space. Not everyone understands how offensive the dogs find it that the pesky postman keeps coming back day after day (that guy just hasn’t learned!)

6. Get outdoors for a walk around lunch time.

7. Take short breaks like you would in an office. It’s just that this break might look like putting on a load of washing, hanging clothes, emptying the dishwasher or weeding. But always return to your laptop (and not the TV) once you’re done.

8. Set an alarm to get up, move around and take a few steps. It’s important to stretch and keep moving every hour. Getting the heart rate up every now and again keeps you alert, and some stretching will help prevent long term injury. You could even do a minute or two of core work like planks or push ups.

9. Staying connected as a team is super important. Start a Slack channel like we have called #coffee_buddies channel for random virtual coffee catch ups. And encourage staff to share ideas to help work and socialise like a dream! 

10. Prepare some witty one liners for when your kids add their own commentary or make an appearance during your video meetings. 

We’re committed to…

Nothing has changed for Aceik in terms of our commitment to our clients, team, suppliers or community. We continue to be committed to:

  • Respecting our client relationships and always exceeding expectations.
  • Paying our suppliers on time or ahead of time so there is no disruption to their business activities.
  • Remunerating our team members on time and recognising their continued outstanding work.
  • Doing our utmost for our community during this difficult time
  • Slowing the spread of COVID 19

An Introduction to Sitecore Pipelines

What is a Sitecore Pipeline?

In Sitecore pipelines describe a series of discrete steps that are taken to achieve some objective.  If you think about writing code to handle an HTTP request for example you could create a monolithic class that does the job from end to end; however the pipeline approach is a number of classes that can be invoked in order.  First do this and then do that etc. 

There are many Pipelines in Sitecore.  You can view existing pipelines and the processors that they call using Sitecore Rocks in Visual Studio.  Right click on the site connection and choose Manage. Click on the Pipelines tab in the Visual Studio edit pane.  Click on one of the listed pipelines to see all the processors that are executed as part of the pipeline.  There are pipelines with a single processor at one end of the scale to the httpRequestBegin pipeline with 45 distinct steps at the other.

Why are they useful?

Thinking about the monolithic class above it would be very difficult to maintain or modify, It would also be truly massive.  So modularising it would make it much easier to maintain. 

It also makes it much easier to customise.  For example, if we consider a pipeline that has three processors it might be drawn something like

To add to the existing functionality we could include a new step like

Where we add some custom function after Step 1 and before Step 2. 

We could also replace an existing step completely

How are they defined?

Pipelines are defined using XML in sitecore.config.  In the example below we can see the httpRequestEnd pipeline definition.  The three processors are called in the order in which they are listed.  A parameters object is passed between them to provide continuity.  The final processor is also receiving four additional parameters from the config file.

<?xml version="1.0" encoding="utf-8"?>
<sitecore database="SqlServer" xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:role="http://www.sitecore.net/xmlconfig/role/" xmlns:security="http://www.sitecore.net/xmlconfig/security/">
…
<pipelines>   
… 
<httpRequestEnd>
      <processor type="Sitecore.Pipelines.PreprocessRequest.CheckIgnoreFlag, Sitecore.Kernel" />
      <processor type="Sitecore.Pipelines.HttpRequest.EndDiagnostics, Sitecore.Kernel" role:require="Standalone or ContentManagement" />
      <!--<processor type="Sitecore.Pipelines.HttpRequest.ResizePicture, Sitecore.Kernel"/>-->
      <processor type="Sitecore.Pipelines.HttpRequest.StopMeasurements, Sitecore.Kernel">
        <ShowThresholdWarnings>false</ShowThresholdWarnings>
        <TimingThreshold desc="Milliseconds">1000</TimingThreshold>
        <ItemThreshold desc="Item count">1000</ItemThreshold>
        <MemoryThreshold desc="KB">10000</MemoryThreshold>
      </processor>
    </httpRequestEnd>
…
    </pipelines>
…
  </sitecore>

How can I work with Sitecore Pipelines?

Existing Sitecore pipelines can be customised as outlined above and it is also possible to create a brand new pipeline from scratch

Customise existing Pipelines

First thing to do is to create a configuration patch to add the new processor class into the pipeline at the desired location.  As you can see from the code it is possible to pass variables to the processor.  Here we are adding a processor called NewsArticleLogEntryProcessor into the httpRequestBegin pipeline after the ItemResolver

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <httpRequestBegin>
        <processor type="Fourbyclub.CustomCode.CustomCode.Pipelines.httpRequestBegin.NewsArticleLogEntryProcessor,Fourbyclub.CustomCode" patch:after="processor[@type='Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel']">
          <NewsArticleTemplateID>{B871115E-609F-44BB-91A4-A37F5E881CA6}</NewsArticleTemplateID>
        </processor> 
      </httpRequestBegin>
    </pipelines>
  </sitecore>
</configuration>

Then we need to create the processor.  Inherit the HttpRequestProcessor and Implement the Process method.  All we are doing here is writing to the log if the requested item is a NewsArticle.

namespace Fourbyclub.CustomCode.CustomCode.Pipelines.httpRequestBegin
{
    using Sitecore.Pipelines.HttpRequest;
    using Sitecore.Diagnostics;

    // TODO: \App_Config\include\NewsArticleLogEntryProcessor.config created automatically when creating NewsArticleLogEntryProcessor class.

    public class NewsArticleLogEntryProcessor : HttpRequestProcessor
    {
        
        // Declare a property of type string:
        private string _newsArticleTemplateID;
        public string NewsArticleTemplateID { get { return _newsArticleTemplateID; } set { _newsArticleTemplateID = value; } }

        public override void Process(HttpRequestArgs args)
        {
            Assert.ArgumentNotNull(args, "args");
            if ((Sitecore.Context.Item != null) && (!string.IsNullOrEmpty(_newsArticleTemplateID)))
            {
                Assert.IsNotNull(Sitecore.Context.Item, "No item in parameters");
                // use util to get id from string property
                if (Sitecore.Context.Item.TemplateID == Sitecore.MainUtil.GetID(_newsArticleTemplateID))
                {
                    // view in log file later, so add FourbyclubCustomCode
                    Log.Info(string.Format("FourbyclubCustomCode: News Article requested is {0} and the item path is {1}", Sitecore.Context.Item.DisplayName, Sitecore.Context.Item.Paths.FullPath), this);
                }
            }
        }

    }
}

Create a new Pipleline

To create and new pipeline is a little more work but still very simple.  The first thing to do is to declare the pipeline with a configuration patch

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <logWriter>
        <processor type="Fourbyclub.CustomCode.CustomCode.Pipelines.logWriter.logWriterProcessor,Fourbyclub.CustomCode" />
      </logWriter>
    </pipelines>
  </sitecore>
</configuration>

The XML above will create a pipeline called logWriter that has a single processor called logWriterProcessor, which will be in the Fourbyclub.CustomCode.dll.

Pipelines must pass a PipelineArgs object to each processor as it is called so that needs to be defined

using Sitecore.Pipelines;

namespace Fourbyclub.CustomCode.CustomCode.Pipelines.logWriter
{
    public class LogWriterPipelineArgs : PipelineArgs
    {
        public string LogMessage { get; set; }
    }
}

At least one processor is needed to do the work of our pipeline

using Sitecore.Diagnostics;

namespace Fourbyclub.CustomCode.CustomCode.Pipelines.logWriter
{
    public class logWriterProcessor
    {
        public void Process(LogWriterPipelineArgs args)
        {
            Log.Info(string.Format("FourbyclubCustomCode: The message was {0}", args.LogMessage), this);
        }
    }
}

Finally we need to invoke the pipeline in our code somewhere.  Instantiate the LogWriterPipelineArgs and set the LogMessage.  Then call CorePipeline.Run and pass it the name of the pipeline and the args.object

var pipelineargs = new LogWriterPipelineArgs();
pipelineargs.LogMessage = "Requested item is not a News Article";
CorePipeline.Run("logWriter", pipelineargs);

Conclusion

Thank you for reading and I hope that this short introduction to Sitecore Pipelines has shown the power of pipelines to customise Sitecore and help to build maintainable code.  However we should always check if there is a way we can implement something using existing Sitecore functionality rather than going for a pipeline as a first resort. As with any customisation does each pipeline or processor added have a potential to increase the challenge of Sitecore upgrades?

Aceik’s Jason Horne and Thomas Tyack Win Sitecore Most Valuable Professional Technology Award

Aceik is thrilled to share that our very own, CEO & Founder, Jason Horne and Solutions Architect, Thomas Tyack have again been named a Most Valuable Professional (MVP) in the Technology category by Sitecore®, the global leader in digital experience management software.

Jason and Thomas are two of only seven named Technology MVPs in Australia. This is the fifth consecutive year that Sitecore has honoured Jason with the Technology MVP award, and the second year for Thomas.

Recognising professionals within the Sitecore community who actively apply their talent and expertise to help others best utilise Sitecore products to deliver premier customer experiences, the MVP program is now in its 14th year. Of more than 13,000 certified developers and over 24,000 active community participants, the 316 MVPs around the world are truly an elite group. This year’s MVPs were selected for the quality, quantity and impact of the contributions they made in 2019, including the sharing of product expertise and mastery of the Sitecore platform to support both partners and customers.

And we are absolutely stoked to have two globally-recognised Sitecore MVPs as part of our team, a true accolade to their commitment to our customers. A huge congratulations to the other 2020 MVPs around the world!

A little about Jason Horne

Jason founded Aceik, a digital consultancy that specializes in the implementation, training and support of Sitecore solutions in 2014. Jason’s vision back then, to place customer satisfaction at the core of all Sitecore projects, still guides the team’s direction today.

Jason has delivered numerous large Sitecore projects, including RAA, Village Roadshow and UniSuper (to name just a few) whilst always holding his team to the highest levels of transparency, communication and technical standards.

Learn more about Thomas Tyack

Thomas is a Technical Lead / Architect that has built a career in content management with over 14 years’ experience across 5 different content management systems. Working for high profile agencies in Australia and the UK he has experience directing web teams across a broad cross section of clients in both the enterprise and start-up sectors.

As a Technical Lead, Thomas’ main toolset strengths are around object orientated programming, .NET, web service API’s and modern java script frameworks like React. His ability to help clients deliver a program of work by bringing teams and projects into line with best practice tools, processes and documentation should be well noted.

Sitecore MVP Program

More information can be found about the MVP Program on the Sitecore MVP site:http://mvp.sitecore.com.

Training for your Sitecore project

To mis-quote Benjamin Franklin ‘By failing to train you are training to fail”.  You can provide the best tools in the world but unless people know how to use them, they are useless.  And the more complex the tool the more apparent that becomes.  I think Sitecore is a simple, intuitive tool but then I have been delivering training on Sitecore for eight years.  I’m now familiar with the system. But I do know that at first sight it can appear overwhelming.

So, how best to use training to mitigate risk in your Sitecore project, or any other for that matter? 

I recommend a three-phase approach starting as early as possible in the project.  If it is possible start before the vendor is decided.  Phase one is pretraining.  Phase two shortly before Go Live or UAT. And finally phase three is ongoing maintenance to allow for staff churn, new features etc.

Let’s look at each phase in a bit more detail. 

Phase One/Pretraining

Phase one is the first tranche of training.  As stated above it should be undertaken early in the project.  Assuming you are starting the project by selecting the vendor for a software project; once you have a short list consider sending key stakeholders to classroom training on each of your shortlisted vendors.  While it may be considered an unnecessary cost it will provide a good insight into the real-world use of the various offerings.  And also consider that the cost of pretraining is insignificant compared to the cost of a failed project.

Once you have decided on a vendor, if they have not already, key business and technical staff should attend appropriate training for their role.  Selection should be based upon who will be working with the implementation partner.  Training at this early stage will equip the team with the skills to work with the implementer.  It also shows attendees the capabilities of the chosen platform; they know what to ask for. 

If an implementation partner hasn’t been selected yet training this early can also be useful in their selection.

Delivery for this tranche should be public classroom training, unless you have the numbers to make a private course worthwhile (hint 6+ staff is the tipping point from a public class to a private one).  Classroom training allows for questions to be asked and a good trainer can adapt the delivery to ensure the learning outcomes are achieved.

Phase two/Go Live

Phase two is where the bulk of your users receive training – this is because you are about to go live with your new website.  By now it should be possible to train on, or at least reference, your application as it will be implemented.  Various options are available.  eLearning, although to be fair I am not a fan of eLearning, it is too easy to click through and be distracted by other incoming tasks and emails without absorbing the information.  However, it is cheap and repeatable.  For business users, you could even consider bespoke eLearning.  While the initial cost is high you own the content and there are negligible ongoing costs plus it covers maintenance training or phase three.  Classroom training such as public courses will be generic and provide a good understanding of the features of the chosen application – it will probably be useful to have an internal follow up to familiarise business users with their application.  Developers should be fine with just a public course and some time to get to know the code.  It is, again, possible to get customized or completely bespoke training delivered in a classroom – where your lesson is about the application you are implementing within your organisation.  Delivery costs should be approximately the same as attending public courses but there will be development costs involved; how much will depend on the degree of customisation required

Phase three/Maintenance

Once your website is live and all the users and developers are trained, we move to phase three or maintenance.  Additional training maybe required if you upgrade the version of the application or introduce new features (depending on the enormity of the changes). 

Phase three training is primarily needed for staff churn.  Developers should start by attending the public courses and then learn peer to peer, consider pair programming here.  For business users it is beneficial to attend public classroom training to get the solid foundation to build on.  Just peer to peer onboarding, while tempting, can perpetuate bad habits and often leaves knowledge gaps in the real understanding of the application.  At the very least you need a set of learning objectives that must be ticked off preferably by your in-house super user.

Aceik is a Sitecore training provider.  We teach public courses around the country.  You can view the public schedule here: Upcoming Courses New courses are being worked on constantly so if you do not see what you want please enquire here or email David Newman at the link below.  We also provide custom or private training email David Newman in the first instance or if you are an Aceik customer already contact your account manager.

Season’s Greetings and 2019 Wrap Up

‘Tis the season to be jolly and over at Aceik, we certainly have a lot to celebrate these holidays. What a year 2019 has been! For starters, we celebrated our 5th anniversary. But then we celebrated so much more:

Partnerships

We partnered with a number of new clients including RAA, City of Yarra, RACQ, Chisholm Institute and CMYKHub. Our partnerships with clients like Toyota, CPA, Unisuper and ANZIIF continued with new and exciting projects.

Team Growth

Our team and capabilities grew with the addition of 8 incredibly talented individuals. We added speciality skills in Sitecore Commerce and UX/UI. Aceik also welcomed Tim O’Neill, formerly of digital services agency Reactive and Accenture in an advisory capacity and Nicole Stirling, formerly Sitecore’s Marketing Director to assist with our marketing activities.

Recognition

Sitecore announced that two of the four Australian Sitecore Technology MVPs were on the Aceik team, Jason Horne and Thomas Tyack.

Events

We organised the first SUGCON event in Australia & New Zealand region and presented at Sitecore User Groups in Melbourne and Queensland.

Product Development

Our development team built two Sitecore modules and we shared these openly with the community. Aceik became a Contentful partner and built a new gym website on this platform. And we wrap up 2019 with the launch of our new training practice. Our first courses will be available from January 2020 and you can sign up here.

What are we getting up to in 2020?

Our 2020 plans are equally exciting and we’d love to share a couple with you:

  • Aceik is aiming to double the number of Sitecore MVPs on our team.
  • Sustainable growth is based on insuring our 100% customer success record. We are planning to continue to grow our team, starting with a new Senior Front End Developer (if you know of anyone who is looking, please let them know that we’re hiring!)

I know I say this a lot, but I truly mean it when I say, ‘thank you’. Your support has been invaluable and I’m looking forward to continuing our work together in 2020.

I wish you and your family and friends a safe and happy holiday.

Cheers

Jason Horne & Aceik team

JSS – Some Key Takeaways

Introduction

In the following outline I will take you through some learning points that Aceik discovered on our first JSS project. Some of this is personal opinion and based on our experience with the Angular framework.

Disconnected Mode – Get started quickly

If your team is just starting out and you want to see JSS in action you will likely start out running in Disconnected Mode. This seems like a great way to get non Sitecore developers up and running without them needing to run an actual Sitecore instance. A key benefit is also that front end developers in your team can work on the project without having any Sitecore skills.

It has been mentioned by Nick Wesselman in the global Sitecore slack (Hi Nick, hope its ok if I quote you) that:

“*I wrote the import process for JSS and I can tell you it was not intended for anything beyond quick start for front end devs and short lived campaign sites”

and  ….

“Sitecore-first was always the intended workflow for anything non-trivial”.

I have to be honest I was disappointed when I read the above comments as we did get a fair way into the project supporting our front end Devs and our backend Devs. It does make sense though that Disconnected mode has its limitations. Your not going to get all the bells and whistles available that Sitecore provides, without actually having Sitecore itself. Still the opportunity to support those developers that don’t know Sitecore is a big draw card and I for one see Disconnected mode as something that is very useful.  

Disconnected Mode – Example usage

From personal experience building out a member portal in Angular we were able to mock up secure API calls in Disconnected mode by detecting which mode the app was run in. The workflow involved building individual components that were verified to be working in Disconnected mode by front end developers. These same components were then verified in Connected mode running in Sitecore. Some people may consider this to be double handling in some ways. I still think the the benefits of continuing to support front end developers has its advantages.  

GraphQL Endpoints

GraphQL is a paradigm shift from traditional APIs in that you have a single API endpoint that you can run queries and mutations against to produce results and updates.

Custom GraphQL Endpoints

A couple of things that took us a while to figure out were

  1. Adding multiple schemes to our single endpoint.
  2. Sending mutations with complex object structures (Nested POCOs)
    1. See Example Mutation Query
    2. See Example Variables that match the above query
    3. See Example Schema in C#

How to Turn on Mutations

If you need to send updates to the server by convention in GraphQL you write these as mutations.

You won’t get far unless you actually enable mutations in your JSS app config. This might seem obvious but it took us a while to find an example and work it out.

See Example Line 128

            <mutations hint="raw:AddMutation">
              <mutation name="createItem" type="Sitecore.Services.GraphQL.Content.Mutations.CreateItemMutation, Sitecore.Services.GraphQL.Content" />
              <mutation name="updateItem" type="Sitecore.Services.GraphQL.Content.Mutations.UpdateItemMutation, Sitecore.Services.GraphQL.Content" />
            </mutations>

Secure vs Insecure Graphql Endpoints

Something we required in the case of our member portal project was custom GraphQL endpoints for logged in users and in some cases insecure endpoints for data that did not require an Authenticated user.

Essentially in Angular we solved this using multiple Apollo clients. A full example is available here: (along with detailed explanation)

https://sitecore.stackexchange.com/questions/22229/in-jss-how-do-i-support-both-secure-and-open-graphql-endpoints/22230#22230

Conclusion

That’s a wrap for some of our key JSS learnings so far. We may come back and add to these over time as we learn more. Happy JSS-ing !!

Install Sitecore 9.2 from Scratch

Introduction

In this post I’ll provide you with instructions to install Sitecore 9.2 from scratch. This article is aimed at developers who may never have installed Sitecore before and need to work through all the prerequisites before installing Sitecore. It also takes the simplest approach possible to get a working installation of Sitecore 9.2. Sitecore 9.2 includes a Graphical User Interface (GUI) that turns the actual installation into a wizard driven process that is much easier than earlier versions of Sitecore 9.x

The starting point is a clean updated installation of Windows 10 Professional. I have also installed Firefox and Edge Developer Trial. This is the Beta Chromium based version of Edge.

Prerequisites

You are going to need the following programs in order to proceed, and instructions are provided below on how to access and install them.

  • IIS
  • Java
  • Solr
  • SQL Server
  • Visual Studio and Sitecore Rocks
  • Sitecore license or Sitecore Developer Trial license (60 days access)

IIS

The first thing to do is turn on IIS. Go to the Control Panel -> Programs and Features and click on “Turn Windows features on or off” Locate Internet Information Services in teh Windows Features popup and click the checkbox. It will not show a tick, just a square to indicate that not all features are enabled by default

The default settings will be fine for our needs.

Open a browser and enter http://localhost you should see the IIS Welcome splash screen.

Java

Java is required to run Solr so if it is not installed you will need to download and install.  Download the latest version here: https://www.java.com/en/download/windows-64bit.jsp Once the download has completed run the .exe file to install Java

Solr

Download Solr-x.x.x from Apache https://www.apache.org/dyn/closer.lua/lucene/solr/8.2.0/solr-8.2.0.zip Extract the zip to the root of your C drive..  You can check that Solr has ‘installed’ correctly and is working by starting it from an elevated command prompt.  Elevated is when you are running the command prompt as Administrator, right click on the command and select Run as administrator. Navigate to the bin folder that is in the Solr folder. Run the command solr start -p 8984

You should now be able to access the Solr Admin page by entering http://localhost:8984 in your browser of choice. You should see:

Assuming your installation of Solr is working correctly, stop Solr from the command prompt using solr stop -all

If you are working on a VM now is a good time to take a snapshot.

To work with Sitecore 9.2 Solr must use https and must be running as a service. This is going to involve creating a self-signed certificate and editing a configuration file to set up Solr to use https.

In an elevated PowerShell window run:

New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName "localhost", "127.0.0.1" -FriendlyName "SolrCert" -NotAfter (Get-Date).AddYears(10)

Use the Cortana search bar to locate and open ‘Manage computer certificates’. Open the Personal -> Certificates folder and export the newly created certificate by right clicking on it and selecting ‘all tasks -> Export’ Select ‘Yes, export the private key’ and ‘Include all certificates in the certification path if possible’ Set a password, I am using the traditional ‘secret’.  Select a location and name for the exported certificate, for example ‘C:\solr-8.2.0\solr_ssl_cert.pfx’.  In the MMC navigate to ‘Trusted Root Certification Authorities -> Certificates and Import the newly exported certificate.

Edit ‘C:\solr-8.2.0\bin\solr.in.cmd‘ and uncomment and edit the HTTPS section so it looks like this (in my case, edit to suit your environment):

Use a command prompt to start Solr using the command solr start -f -p 8984. You should now be able to connect to the Solr Admin page using https://localhost:8984. Note that Firefox may give a warning because it is a self-signed certificate, you an disregard or add an exception. Stop Solr by pressing Ctrl C in the command prompt window.

Finally we need to set Solr to run as a service. Download NSSM (a great little free tool to create and manage Windows Services) from here: https://nssm.cc/download and extract the contents of the .zip file to an appropriate location; I used C:\ so my path to nssm is C:\nssm-2.24\win64\nssm.exe.

In an elevated command prompt run C:\nssm-2.24\win64\nssm install solr82 in the popup enter the path to solr.cmd and the arguments -f -p 8984. Click Install service. The -f argument makes the service run in the foreground so nssm has access to stop and start it. The -p sets the port.

As a final check that everything is working as expected restart the PC (The Solr service should start automatically) and connect to https://localhost:8984

SQL Server

Go to https://www.microsoft.com/en-au/sql-server/sql-server-downloads to download SQL Server, I am using 2017 Express. Download and launch the installer.  I left it on the standard options.  Install SQL Server Management Studio (SSMS), download from https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms You should now be able to launch SSMS and connect to the SQL Server.

There is a little bit of configuration required before it will work with Sitecore though.  The default installation uses Windows Authentication and we need SQL Authentication enabled and the ‘sa’ account activated. Login to SQL Server using SSMS and right click on the Server to access the Server Properties.

On the Security tab ensure that SQL Server and Windows Authentication mode is selected.  Next go to Security -> Logins and open the Properties dialog for ‘sa’. Set a password and ensure that Login is enabled on the Status tab.  It will be necessary to restart the SQL Server service before the changes take effect.  This can be done easily using the Services app:

Finally, we need to allow Contained Database Authentication.  Click New Query and run:

sp_configure 'contained database authentication', 1;

reconfigure;

Visual Studio & Rocks

Download and install Visual Studio, I am using the 2019 Community edition obtainable from https://visualstudio.microsoft.com/vs/

Install Sitecore Rocks extension.  Use the Extensions -> Manage Extensions tool to add Sitecore Rocks.  Restart Visual Studio.  You should now be able to locate Rocks under Extensions:

Sitecore 9.2

Sitecore 9.2 ships with a Graphic User Interface (GUI) that can be used to make the installation process simple if you do not need to customise the installation.  We will be using the GUI for our installation .

You will need permission to access the Sitecore Developer site (https://dev.sitecore.net) and download assets. You will also need a valid Sitecore license to be able to install and use Sitecore. If this is an issue for you consider joining the excellent Sitecore Developer Trial Program. This free trial will allow you to use Sitecore for 60 days.

If have not already, download Sitecore 9.2.0 rev. 002893 (Setup XP0 Developer Workstation rev. r150).zip from dev.sitecore.net, extract the zip into a folder, I would suggest C:\Installer, for example, referred to as the installation folder.  Copy your license into this folder.

Because we are going to use the GUI to install Sitecore most of the needed values are entered during the installation, however, if we want to install Habitat in our new instance of Sitecore there is one small edit required. Habitat is a demo site that follows the Sitecore best practices described in Helix (https://helix.sitecore.net/)

In the installation folder open setup.exe.config in a text editor. Alter the line <parameter name="SitecoreSiteName" value="{Prefix}sc.dev.local /> so that it reads <parameter name="SitecoreSiteName" value="{Prefix}.dev.local /> this will make our site name match the name expected by Habitat.

In the installation folder right click on setup.exe and select Run as Administrator.  Do not skip the Prerequisites stage, it is required to install SIF (if needed) and several Windows and .Net components that are not part of the default Windows installation.  If you run the Sitecore GUI installer again you can skip this step.  Now it should be just a case of entering the values requested by the wizard and allowing it to install Sitecore. 

In my environment the Summary screen looked like:

That’s it! You have now installed Sitecore 9.2 and you are ready to start exploring this great tool.

Sitecore PaaS and Ansible

Sitecore PaaS and Azure is a good match and the idea is to blend in Ansible for Sitecore PaaS infrastructure set up on Azure and vanilla Site deployment.

Why would you use Ansible? Using Powershell scripts with parameter files is the common approach. Ansible is a very valid alternate approach for organisations who have Ansible in their tech stack already or for those that prefer it over Powershell.

Let’s start with a brief overview of Ansible. Ansible is an automation tool to orchestrate configuration and deployment of software. Ansible is based on agent less architecture by leveraging the SSH daemon. The Ansible playbook is a well defined collection of scripts that defines the work for server configuration and deployment. They are written in YAML and consists of multiple plays each defining the work to be done for a configuration on a managed server. 

Ansible Playbooks help solve the following problems:

  1. Provision of Azure Infrastructure required to run Sitecore and the deployment of Sitecore. Ansible supports the ability to seperate the provision of the infrastructure from the deployment of the Sitecore packages into “roles”. These roles can then be shared between different playbooks essentially allowing for re-use and the configuration of different playbooks for different purposes.
  2. Modularise the environment spin up into tasks/plays instead of one monolithic command doing everything in one go.
  3. By executing a single playbook, all the required tasks are coordinated to be executed to result in a fully operational instance of Sitecore up and running and ready to be customised by the organisations development team

Ansible Playbooks help with workflow between teams:

  1. Provide flexibility for Developers and DevOps teams to work together on separate piece of work to achieve a common goal. A DevOps team can work on the Azure Infrastructure set up and Developers can work on Application set up and vanilla deployment  
  2. Once the environment is provisioned hand it over to Development team for each site to deploy the custom code and configuration on Vanilla site.

Ansible has list of pre-built modules for Azure that can be leveraged for Azure Infrastructure Spin up and deployment. A list is available here https://docs.ansible.com/ansible/latest/modules/list_of_cloud_modules.html#azure.  

We have used the azure_rm_deployment module during the setup journey. The best thing I liked about Ansible was the ability to structure the parameters in a clean and organised fashion to ensure future extensibility is maintained. Ansible supports the use of multiple parameter file. This allows for both shared and environment specific parameter files. You will see the example later in the blog. 

All the ARM templates, play books and tasks are source controlled and Ansible tower can be hooked into the Source control of your choice.

This allows/enforces all changes to the templates, play books and tasks to be made locally and then commited to the source control repository using familiar tools. Asnible will then retrieve the lastest versions of these files from source control as the initial step on execution.

This option is more streamlined than having to manually upload the updated files to an online repository like a storage account and have Ansible/Azure access them using URLs.

Below is one of the example of the playbook. The roles mentioned here are just an example. You will need more roles for a complete azure infrastructure and Sitecore deployment 

Note the variables {{ env }} and {{ scname }}. They are passed from the Ansible tower job template into the playbook. This variables needs to be configured in the Extra VARIABLES field as shown below in the example job template. 

The env name is your target environment for which you want to spin up the Sitecore Azure environment. This could be dev, test, regression or production and the site name is the name of your website. This allows you to use same playbook to spin up multiple sites for multiple environment based on the extra variables passed in the job template in Ansible tower. This combination forms the path to the yml file which contains the definition of the parameters, per site, per environment. Below is the snapshot of the variable file structure. 

  • Each role in the Playbook is a Play/Task and the naming convention is fairly self-explanatory. 
  • Each task has a yml file and ARM template (json file). However it is not mandatory to have an ARM template for each of the tasks.
  1. Create the resource group just to have the tasks yml file and no arm template. 

2. Create the Redis Cache resource that will contain both the tasks yml file and the ARM template. 

There are tons of resources available in the Azure ARM template repo https://github.com/Azure/azure-quickstart-templates to get you started. You can then customize it to suit your projects requirements. Sitecore ARM templates are a good starting point which you can utilize to get some ideas. The idea is that you can grab snippets from these example to form your own ARM template. 

I will be writing more blogs on Azure and Sitecore so stay tuned.

SXA Speedy – Supercharge your SXA Page Speed Scores in Google

We are excited to preview our latest Open Source module. Before jumping into the actual technical details here are some of the early results we are seeing against the Habitat SXA Demo.


Results:

Results

Before:

After

After:

Before
* Results based on Mobile Lighthouse Audit in chrome. 
* Results are based on a local developer machine. Production results usually incur an additional penalty due to network latency.

Want to know more about our latest open source SXA Sitecore module …. read on ….


I’m continually surprised by the number of new site launches that fail to implement Google recommendations for Page Speed. If you believe what Niel Patel has to say this score is vitally important to SEO and your search ranking. At Aceik it’s one of the key benchmarks we use to measure the projects we launch and the projects we inherit and have to fix.

The main issue is often a fairly low mobile score, desktop tends to be easier to cater for. In particular, pick out any SXA project that you know has launched recently and even with bundling properly turned on its unlikely to get over 70 / 100 (mobile score). The majority we tried came in somewhere around the 50 to 60 out 100 mark.

Getting that page score into the desired zone (which I would suggest is 90+) is not easy but here is a reasonable checklist to get close.

1) Introduce image lazy loading
2) Ensure a cache strategy is in place and verify its working.
3) Dianoga is your friend for image compression
4) Use responsive images (must serve up smaller images sizes for mobile)
5) Introduce Critical CSS and deferred CSS files
7) Javascript is not a page speed friend. Defer Defer Defer

The last two items are the main topics that I believe are the hardest to get right. These are the focus of our new module.

Critical_plus_defer

Check out the GitHub repository.

I have also done an installation and usage video.

So how will the module help you get critical and JS defer right?

Deferred Javascript Load

For Javascript, it uses a deferred loading technique mentioned here. I attempted a few different techniques before finding this blog and the script he provides (closer to the bottom of the article) seems to get the best results.  It essentially incorporates some clever tactics (as mentioned in the article) that defer script load without compromising load order.

I also added in one more technique that I have found useful and that is to use a cookie to detect a first or second-time visitor. Second-time visitors naturally will have all external resources cached locally, so we can, therefore, provide a completely different loading experience on the 2nd pass. It stands to reason that only on the very first-page load we need to provide a deferred experience.

Critical + Deferred CSS Load

For CSS we incorporated the Critical Viewport technique that has been recommended by Google for some time. This technique was mentioned in this previous blog post. Generating the Critical CSS is not something we want to be doing manually and there is an excellent gulp based package that does this for you.

It can require some intervention and tweaking of the Critical CSS once generated, but the Gulp scripts provided in the module do seek to address/automate this.

Our module has a button added into the Configure panel inside the Sitecore CMS. So Content Editors can trigger off the re-generation of the Critical CSS when ever needed.

Generate Critical button added to Configure.

Local vs Production Scores

It’s also important to remember that the scores you achieve via Lighthouse built into Chrome on localhost and your non-public development servers can be vastly different than production. In fact, it’s probably safest to assume that non-production boxes give false positives in the region of 10 to 20 points. So it’s best to assume that your score on production will be a little worse than expected.

Conclusion

It’s a fair statement that you can’t just install the module and expect Page Load to be perfect in under 10 minutes.  Achieving top Page Load Speed’s requires many technical things to work together. By ensuring that the previously mentioned checklists are done (Adequate Servers, Sitecore Cache, Image Loading techniques) you are partway over the line. By introducing the deferred load techniques in the module (as recommended by Google) you should then be a step closer to top score.

For more hints please see the Wiki on Github.

This module has been submitted to the Sitecore Marketplace and is awaiting approval.


Author: Thomas Tyack – Solutions Architect / Sitecore MVP 2019