While tuning caches for a production level Sitecore 10.0.0 site, I came across a cache name I was unfamiliar with using a cache tuner: LAYOUT_DELTA_CACHE
There were also log entries specific to this cache:
Oddly enough, at the time of this post, no Google Search results mentioned this cache name.
Sitecore's documentation also had no mention of the setting either.
Reaching out to Sitecore Support helped clarify things, and I wanted to share in case anyone else happens to come across this same cache that needs tuning.
"The cache seems to be utilized when applying layout deltas when Sitecore is retrieving the layout field. The default size of this cache is 50MB, however, you can modify it with the "Caching.LayoutFieldDeltaCacheSize" setting."
Check out the following example configuration:
Hopefully, this helps with your Sitecore cache tuning activities. Happy tuning! ๐
My Windows Docker installation was recently updated to version 3.5.2 (66501), after which commands like docker-compose up --d failed with the following errors:
level=warning msg="network default: network.external.name is deprecated in favor of network.name" not implemented
unknown flag: --d
As it turns out, this is due to an experimental feature that seems to be enabled by default in Docker's Experimental Features settings:
The solution, for now, was to simply disabled the experimental feature by unchecking the `Use Docker Compose V2` checkbox in the settings; or run `docker-compose disable-v2`.
More information about the Compose V2 beta CLI can be found here:
After prepping and polishing a custom legacy Sitecore 8.2 Docker environment for our developers, we ran into a significant blocker that had us questioning whether we needed to backtrack and use locally installed Sitecore instances instead.
The blocker stemmed from this particular client's VPN: Cisco AnyConnect Mobility Client. ๐คฎ
At a high level, any time we connect to the VPN using Cisco AnyConnect, the running containers would begin to misbehave - and symptoms disappeared after VPN was de-activated.
Symptoms included:
Inability to use custom hostnames to access the site (pings from the host to the CM and Solr hostnames failed with an `Unreachable` or `Request Timeout` code).
Inability to use the localhost:portnumber hostname to access the site.
Complete loss of internet access from the running containers.
Because a VPN connection is required for several API-based components, it was essential to solve this.
Some of the troubleshooting attempts included:
Switched ISOLATION mode from isolation to hyperv.
Checked and uncheck various options in the Cisco AnyConnect settings (including `Allow local (LAN) access when using VPN`).
Checked and unchecked various Docker settings under the General tab in Docker Desktop settings (`Expose daemon on tcp://localhost:2375 without TLS`).
Asserted local firewall settings.
Applied DNS overrides to the Docker Engine daemon.json file that matched the active DNS configuration for the VPN endpoint.
Applied various parameters to the docker-compose.yml file (dns, extra_hosts, etc.)
Fiddled with various `Advanced TCP/IP Settings` under Control Panel\Network and Internet\Network Connections in Windows.
Created custom Hyper-V and Docker bridge/transparent networks to try to restore internet connectivity.
The number of tabs I had opened in my browser was unfathomable without much to show for it. There were undoubtedly many similar issues reported across the web related to Cisco AnyConnect and Docker, but no suggestions remedied the problem.
After hours of troubleshooting, I tried to replicate the behavior with other VPN connections not using the Cisco AnyConnect client and found that none of the symptoms were present. I couldn't find any evidence that this is an issue with Docker itself but instead caused by how Cisco AnyConnect handled connections and IP routing.
Since we don't have any pull over the client's VPN setup and configuration, I decided to try OpenConnect as a substitution for Cisco AnyConnect, which evidently uses the same protocol to establish a VPN connection.
I connected to the client's VPN endpoint using OpenConnect, and all of the networking issues with the running Docker containers disappeared!
If you happen to find yourself in a similar situation, go ahead and drop Cisco AnyConnect and give OpenConnect a try to save yourself some troubleshooting hours! ☺
I managed to snag a category win for the 2021 Sitecore Hackathon! ๐
This year, I unexpectedly flew solo as my team members could not attend (both
due to completely understandable reasons). Luckily for me, one of this
year's categories, in particular, made me feel like I stood a chance: "Best use of Sitecore PowerShell Extensions
to help Content Authors and
Marketers."
YES. YES YES 1000x YES.
Knowing that I needed to
land on something fairly quickly to complete all submission requirements (a
completed module with clean code, reliable installation instructions, a
well-documented README.md, and a video) my evening began with a brainstorming session listing all possible routes I could take for the next 24 hours.
I actually landed on a similar concept I posted about a couple of years back;
interacting with
Microsoft's
Cognitive Services
using PowerShell,
then focusing
on content translation. I knew Microsoft had continued to update their API offerings since that
post, so I started digging into what was new. I stumbled upon
the Sentiment Analytics API, which seemed like an excellent use case that
could satisfy the 'help
Content Authors and marketers' category requirement.
By providing the right combination of SPE user interactivity (modal dialogs,
accessibility of the utility in the Ribbon, etc.), I could build a utility
that analyzes content from a given field and provide a sentence-by-sentence
breakdown of the content's sentiment score using AI.
After playing
around with the example APIs in the browser, I decided to create my
Text Analytics Cognitive Service in Azure, grab my API keys, and fiddle around with the API
further in PostMan. At that point,
I felt pretty confident that I could integrate this with SPE. ๐ค
The Sentiment Analyzer would
Analyze the sentiment of field content directly in Sitecore.
Give Content Authors the ability to run an analysis of a given field's
content, which returns an overall sentiment score and a sentence-by-sentence
breakdown of each sentence's sentiment score and corresponding confidence
scores.
The results are displayed using a Show-Result modal and rendered in an
easy-to-digest format.
I built the user dialog, wrote code that generated the appropriate POST data to be passed to the sentiment API endpoint, built the functions to render the data (using emojis, of course ๐ฉ๐), configured a new Sitecore template and the corresponding item for API key storage then tied it all together into an SPE module that exposed the tool from the right-clicked Context Menu,
and from the Ribbon.
As midnight approached, I felt that I was in decent enough shape
with the Sentiment Analysis script, I could begin exploring using another API in the same Text Analytics product group. I moved forward with a second tool
utilizing the API's keyphrase extraction feature
without a tremendous amount of overhead; mostly endpoint changes, JSON
parsing, and data rendering differences.
The Keyword Analyzer would:
Analyze a field's content to extract critical keywords/phrases.
Give Content Authors the ability to analyze a given field's content which returns a list of extracted keywords that can then be used to manually populate a meta keywords field.
The results are displayed using a Show-Result modal and rendered in an
easy-to-copy format.
I got started, but a couple hours later...
Okay, it's ~2:30 AM. I'm going to sleep.
#SCHackathon
I'm awake after a few hours of sleep and briefly back to review the ~300
lines of PowerShell I wrote yesterday for
#SCHackathon. Both my
kids seem to have woken up with colds so my priorities may need
to shift today. ๐คง
I spent most of the day (alongside juggling sick-kids priorities) polishing
the scripts I had so far; resolving logic issues, error prevention, adding
code comments, and overall meticulous code clean-up.
Eventually, I
had a functional set of utilities.
Buttons in the Ribbon configured in the SPE module.
Dialog when clicking either utility against an item with a
Single-Line, Multi-Line, or Rich Text field.
Sample output of sentiment analysis
Sample output of keyword analysis
I made sure to stop by for a late morning Coffee Break. ☕
Shout out to the #SCHackathon warriors who joined us for Coffee Break. Special big up @GabeStreza who stepped up to fly solo!
I built the final structure of the SPE module using the Module Wizard ๐ง♂️ to configure my integration points. The module also stores the API Settings item, so swapping in an API key would be seamless for anyone who installs the module.
⚡ The module looked like this in the tree:
I spent the final hours of the event packaging the module/testing the installation steps before working on multiple documentation phases (using Markdown for absolutely everything in 2020 was really coming in handy).
It wasn't long before a mid-afternoon Twitter update:
The video production was probably one of the most challenging parts of this experience. After writing a short-handed verbal script, I tried to record the entire demo in a single recording. I used OBS Studio to record and the built-in Video Editor in Windows for post-production. I even squeezed some personal music snippets I composed some time ago without risking Copywrite strikes on YouTube. ๐
The video submission can be viewed here:
By around 5 PM, I was done and had submitted my entry ๐
The full Github submission can be found here, including the full source code for both scripts, the module ZIP for installation, and installation steps.
Take it for a spin if you care to! ๐คน♂️
I'm really humbled and proud to have been a part of the winner's circle this year. Another big shout-out to the folks who run and judge the event, as well as a big congratulations to the other category winners!
If you're looking to finally dive into the world of Docker, there's no better time than now with the release of 'Sitecore XP 10.1 Initial Release'. If you haven't worked with Sitecore
Containers yet, you'll need to settle several prerequisites before starting.
As a callback to when Sitecore 9 and SIF were all the rage and new machine prerequisites were aplenty (ref Sitecore 9 Machine
Prerequisites Check with PowerShell), I spent some time developing a new, menu-driven PowerShell script to facilitate
the validation of prerequisites when setting up a local development environment using Sitecore Containers.
Software requirements (Docker Desktop, Docker engine OS type Linux vs. Windows Containers)
Network Port Check (443, 8079, 8984, 14330)
Download and Install required software:
Chocolatey
Docker Desktop
mkcert
Enables required Windows Features
Containers
Hyper-V
Download latest 10.1.0
Container Package ZIP
Local Development Installation Guide PDF
Demo
Selecting 'Scan All Prerequisites' option will execute all scan options (effectively each individual scans -- which are also available):
Here's a demo of the script identifying that Docker is set to use Linux Containers instead of the required Windows Containers:
I hope this helps folks new to Sitecore Containers get started confidently, knowing their machine is ready - and also bring some simplicity to those accustomed to developing with Sitecore Containers and are just setting up a new machine.
7x Sitecore Technology MVP ๐ Technical Architect @ Rightpoint ๐ป, Dad x3๐จ๐ฉ๐ง๐ฆ, Drummer ๐ฅ, Tech junky ๐จ๐ป๐ป All views posted here are my own.