SharePoint 2016 Site-wide Anouncement

There are tons of tutorials on how to add an announcement banner using PowerShell or custom web parts, but why go through all that when you can use plain-old CSS to get the job done via the UI?

If you browser to the Master Page section within the Site Settings area, there is an option titled “Alternate CSS URL”. Within the file used here, you can easily add the following CSS to inject a quick announcement to all of your SharePoint pages:

#suiteBarDelta:before {
    content: "[Enter desired text here]";
    display: block;
    padding: 10px;
    color: #000000;
    background-color: #ff8383;
}

Apply your changes and refresh the page to see your announcement on display.

The beauty is in the queue

In the lead up to Netflix’s DVD-by-mail service ending this week I’ve read several articles noting it’s pending death and marveling at the 1.5 million that still subscribe to the service. Can you imagine *waiting* for a movie to arrive?! Why would anyone do that with today’s myriad of choices offering on-demand access to nearly any title you can imagine?

Some have pointed to the fact that Netflix’s DVD-by-mail service offers a wider selection of titles than their streaming side does. This is certainly a draw as they aren’t hindered by the licensing agreements (or lack thereof) that have carved up the streaming landscape into a hodgepodge of walled content gardens. Titles are usually visible on the DVD site as soon as you hear of them on a late-night show or read that they won an award at a film festival.

Others have speculated that the remaining subscribers must be fearful of change or unable to successfully stream video for some reason. While this less and less the case, these users surely still exist with high-speed internet still not universally available.

For me, there is actually one killer feature that is so overlooked that we have to excuse the writers for missing it, as even today’s streaming services have failed to recognize it’s greatness – the queue. A queue is more than just a list. It’s an *ordered* list that can be curated both for content and sequence. The queue is what enabled Netflix to slay the video store as it eliminated the need to wander aisles looking for what to watch that night. You setup your queue and the movies you wanted to see were sent to you as soon as they were available.

Today’s streaming services typically feature a list you can add titles to, but few-if-any offer the ability to prioritize your queue. What’s worse is that many of the most popular services are actually making your list harder to find, instead pushing the latest releases or suggestions their algorithm has come up with.

In the rush for each content provider to build out their own streaming platforms, they have all failed to center the user’s experience in their design process. With competition starts to thin the streaming provider heard, I suspect the first one to refocus their efforts on the user will again rise to the top. Time will tell.

SharePoint & “The HTTP Request was forbidden with client authentication scheme ‘Negotiate'”, Event ID 8306

If you find yourself running into this error, here’s one solution that you might not find elsewhere (at least at the time of this writing). Check the SSL Settings > Require SSL checkbox for the SharePoint Web Services site and the SecurityTokenServiceApplication subnode. Make sure that it is unchecked as SharePoint accesses it locally over port 80.

This is an obscure self-own, but if you like to set your IIS configuration via script, it’s easy to accidentally set this and (seemingly) brick your WFE.

WordPress RSS – Invalid Feed Error

While trying to make WordPress and Mailchimp work better together, I was having a hard time getting Mailchimp to accept my blog’s RSS feed. After some research, I noticed that the XML wasn’t formatted properly, as the feed was emitting a blank line before the XML declaration. Many of the other help docs I found online recommended hunting for extra lines in my theme’s functions.php file among others. After a few minutes of that nonsense, I figured there must be a better way. I knew that I didn’t want anything output before the xml declaration, so I figured if I just cleared the output buffer prior to echoing the xml declaration, that should do the trick. Sure enough, it worked.

nano \wp-includes\feed-rss2.php

Insert the following line just prior to xml declaration:

ob_clean();

Saving money with Azure SQL

I’ve messing around with Azure for quite a while. One of my my biggest complaints has been that the pricing often doesn’t pencil for smaller web projects, especially when that project utilizes SSL certs or a backing database.

In learning about Azure Synapse for a larger project, I stumbled across the mention of serverless Azure DB that can auto-scale and more importantly, for my small projects’ bottom lines, auto-pause. Now my projects that only use a handful of hours per month can function on-demand 24/7 without the need of having a provisioned DB that I’m getting charged for all 24/7.

One gotcha I ran into while switching from the Basic pricing tier to Serverless was that the conversion was failing for an unspecified reason. It turned out the reason was that I had Long Term Retention (LTR) setup on my server. Make sure to zero out any LTR settings you might have and retry the conversion.

SPUpgradeException: Action 16.0.5.0 failed

I recently ran into the following error while trying to upgrade SharePoint 2016:

Exception: Microsoft.SharePoint.Upgrade.SPUpgradeException: Action 16.0.5.0 of Microsoft.SharePoint.Upgrade.SPIisWebSiteWssSequence failed. —> System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.SharePoint.Upgrade.RemoveAppDataWebConfig.RemoveAppDataEntries(XmlDocument webConfig)….

This update was being run on a farm server that had previously hosted the Central Administration application. When CA had been moved to the new server, the previous CA installation had not been removed yet. Simply running Remove-SPCentralAdministration within a SP Management Shell (likely As Administrator) on the “old” server successfully removed the unused CA installation and allowed the SharePoint upgrade to complete successfully.

My take on “The Tragedies of the Remote Worker”

As someone who has worked remotely on and off since the days of NetMeeting, I can closely identify with much of what is raised in Scott Hanselman’s “Tragedies of the Remote Worker“.  In an admitted rant, Scott rattles off a number of suggestions of how onsite workers could be more inclusive of their offsite colleagues by making full use of the tools available to them.  He then goes on to invite commenters to add their pet peeves about remote work, which at the time of this writing have been mostly constructive.

One of the most important suggestions Scott makes is that we have empathy for our teammates.  Make an effort to get to know your coworkers, to understand their situation and work together to be the best team possible.  If it’s not an onsite/offsite issue, it’s parents with children, adult children of aging parents, chronic health issues, transportation issues, or a myriad of other stumbling blocks that life puts in everyone’s way.  Life happens to all of us and good teams work through it together.  This is really a bedrock principal for any successful team that others ignore or discount to their detriment.

Commenter Les Orchard sums it up nicely, “If you think working remote is some kind of special benefit that the remote workers have to compensate for – then you’re failing yourself, your team, and your company. Everyone is remote, at some point.”

Unfortunately [android app] has stopped working

A few years back, I had some time to kill and my AT&T Samsung Captivate smartphone was stuck using Android 2.2 (aka “Froyo”), so I decided to look into installing alternate firmware on my phone.  It was surprisingly easy.  By the end of the night, I was up and running with Android 4.2 (aka “Jelly Bean”).  My old phone had a new lease on life!

Over time, I’ve run into some quirks here and there, leading me to learn a lot more about Android.  One problem that I’ve periodically run into is that after installing a fresh ROM, within a few weeks, I will start receiving message stating “Unfortunately, [app name] had stopped working.”  Often time the app in question wasn’t even one I was using.  Within a few days, they notices would come so frequently that my phone was useless, leading me to reflash the ROM.  I’ve tried several other fixes over time, but nothing has really seemed to fix the root of the problem.

Fast forward to tonight.  I had noticed that my SD Card wasn’t really being used.  In digging around, I realized that my phone listed its internal memory as sdcard0, whereas the removable SD Card was listed as sdcard1.  As I started moving files around and altering programs to use my true SD Card natively, I noticed that my errors had gone away.

Long story, short:  I recommend that you use a storage visualization app such as Disk Usage to get a true picture of what your storage situation is like.  Clear space on your device by deleting unnecessary files or moving pictures, movies, etc. over to your true SD Card.  Finally, tweak your Camera app’s settings to save to the SD Card natively.

Installing a Blackmagic Intensity Pro on 64-bit Windows7

I help out with the webcasting duties at my church.  We recently purchased a new machine to replace on old WinXP Pentium4 box that had been around since the beginning.  The new box was very similar to the other two webcasting rigs we have (both Windows7 on Intel i5 processors), except that it had an Intel i7 processor on board.

When we went to install the Blackmagic Intensity Pro video capture card, we were prompted with something the other two rigs never required:  a firmware update for the card.  I’ve never been fond of firmware updates as I’ve bricked a handful of motherboard over the years.  This firmware update was repeatedly failing despite following the instructions to the letter.

Fortunately, after some hardcore Google-fu, I ran across this forum thread on Blackmagic’s support site.  It turns out there’s something about the power saving features in this OS/Processor/Chipset combination that was the culprit.  Disabling the power saving features by switching to the “High Performance” power profile did the trick.  The firmware update sailed through and we were webcasting in minutes.