Happy Birthday Twitter

It has been a minute since I last posted here. Ironically, I’ll soon be reusing the technique that I wrote about in that last post.

I just wanted to take a moment to note Twitter’s 20th birthday is today – the first tweet was sent at 1:50pm on March 21st, 2006. Take that time with a grain of salt. I’m not sure of the authenticity, but I must’ve seen it somewhere because I actually noted it in my calendar. Likely you can still see Jack Dorsey’s tweet to verify, but I won’t bother. I try to stay off that site as much as possible these days. I won’t go into the details here any further than the site lost its way when it was sold and we’re still dealing with the fallout to this day.

One thing that most folks might not know about me is that I’m a student of cultures. I kinda minored in social sciences at college, which was the same time that the internet really started to take off. Being an early internet developer and hobby sociologist during the social media wars was an interesting time. It was fascinating to see how each network had its strengths and weaknesses and how users cobbled each network together to craft the social presence they wanted to consume and portray.

Facebook was an early entrant and quickly became the 300lb gorilla of the group, but did you know (or recall) that Facebook didn’t start with a feed? Initially, it was just about making connections (or Friends). One could update their status, but when you changed the status text, it was gone forever.

I wasn’t on all the networks then (or now), but in my view Twitter was the first social network to introduce the concept of a “feed” as we know it today. No one knew what to do with it. The concept of uttering the thoughts in your head or capturing the view in front of you was so novel that most mocked it at first (myself included). Endless photos of what people were eating became a popular theme of posts (and of ridicule). However, a few “killer features” of the format quickly emerged.

One feature was how quickly someone could source news and information from around the world. If one were to view the general feed, they could learn of major events like earthquakes, etc. hours before they showed up in any online news source.

Another feature was that one could interact more closely with those they were connected with. Life became a shared experience where you were taking in the experiences of your social circle simultaneously, a phenomenon wasn’t read-only. This enabled a type of real-time interaction that hadn’t been possible. Depending on the types of folks you were following you could be involved in conversations about the latest scientific discovery as easily as reviews of the latest blockbuster movie as easily as the latest news from the family reunion.

Other social networks took note of the engagement Twitter’s feed was driving and quickly integrated their own version into their platform. Some worked, many failed, but the social feed was here to stay. It has become a foundational piece of any and all social media platform and I believe we have Twitter to thank for it.

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 its 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 is 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 its 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 platform, they have all failed to center the user’s experience in their design process. When 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.