Author: Lisa

Did I miss something?!

I’ll admit that I was only halfway paying attention to Survivor tonight, but it sounds like some women lied about someone’s physical contact making them uncomfortable (exaggerated their discomfort?) and then lied about their lying. They discuss the harassment, bond over the shared (miserable) experience. And then I hear “You tell her how uncomfortable you are … like, you have a very open mom/daughter moment about how uncomfortable you are. Right now, that’s our only play.” Our only play?!?

After someone else got voted off the island, Janet explains to Dan why she “turned” on him. Reasonable move, and if (as the show claims) they had a group meeting about respecting personal boundaries and an individual meeting with Dan that included a warning about his behavior … I’m not sure how it’s news to the dude why people were voting for him. Dan talks to Missy and Elizabeth and is told that Janet is lying to him. I mean, I know that the narrative gets built in editing and all … but it’s not like they’re selectively including the three times someone mentioned it to make it seem like something that’s a constant topic of conversation and the person says “I mentioned it once or twice, but I wasn’t making a huge deal about it”. If you never said that … there wouldn’t be footage to include. I was glad that Janet got all four of them together instead of allowing the other women to tell different stories to different people, but the ultimate resolution of their discussion seemed to be “well, Janet, you misunderstood and it got blown out of proportion”. Not “yes, I lied about this”.

Now, I’d understand if they decided that, yeah, dude makes them uncomfortable. But they were going to suck it up to retain their position in the game. I don’t want my alliance to think I’m untrustworthy, so I cannot vote out “one of us”. That would have been a rare bit of actual reality in “reality tv”. I’ve endured uncomfortable situations because I wanted to keep getting a paycheque. But the discomfort was truth. And I didn’t band together with a group of women, agreeing to discuss the problem with HR, only to tell HR that I never saw anything inappropriate. Tthe entire situation was disgusting – gee, why are people hesitant to believe someone who claims to be harassed – and I have a bad feeling that the “drama” is meant to be a hook for the show.

The ethos (or lack there-of) in Survivor has been part of the game since the second episode. Once contestants realized how the game worked, they figured out how to work the game. While lying with integrity is difficult to conceptualize, there are different types of lies told during the game … there’s a significant difference between maintaining multiple alliances or telling someone they’re not mentioned for the vote tonight and claiming that someone is harassing you and then telling that person you never said it. Working the game seems to rely on other players not becoming privy to the information we, as viewers, have. And I wonder what impact it would have on the ethics of the game if the endgame was tweaked. Once the final contestants were selected, and the members of the jury are known … take a few days break before the vote. Allow the production team to do some rough editing for broadcast footage. And then allow the jury to watch the show. Sure, content editing creates a story for each person and it’s a skewed view of the individual. But the final vote would more-or-less be cast with the same information viewers have. The jury thinks it is a shrewd move to use sexual harassment as a ‘play’ in the game and still votes for one of those women? That’s a lot different than jurors thinking Janet blew it out of proportion and only one contestant had complained about the guy.

Tortellini Soup

Tortellini Soup

Recipe by LisaCourse: DinnerCuisine: ItalianDifficulty: Easy
Servings

6

servings
Prep time

10

minutes
Cooking time

15

minutes

Ingredients

  • 1 T butter

  • 1 T olive oil

  • 1 medium onion, diced

  • 2 cloves garlic, minced

  • 2 t Italian seasoning

  • 1/2 t red pepper flakes

  • 1/4 c. flour

  • 4 c. vegetable stock

  • 1 (28-oz.) can diced tomatoes

  • 5 tbsp. tomato paste

  • 1 c. almond milk, reduced to 1/2 c.

  • 1/2 c. freshly grated Parmesan

  • 3 c. spinach, chiffonaded

  • 4 c. cheese tortellini, cooked

Method

  • In a large pot over medium heat, melt butter and add olive oil. Add onion and cook until translucent, about 3 minutes.
  • Add garlic and cook until fragrant, about 1 minute more. Add Italian seasoning, red pepper flakes, and flour and whisk to combine. Cook 1 more minute.
  • Add broth, tomatoes, tomato paste, and tortellini. Bring to a boil, and then simmer for 15 minutes.
  • Add the almond milk, Parmesan, and tortellini. Stir to combine. Remove from heat and stir in spinach.

Notes

  • Can use cream instead of reduced almond milk.

Microsoft Teams: Private Channels Arrive

WooHoo! When creating a channel, I have a privacy setting!!

Individuals who do not have access to the channel do not see it in their Teams listing, and posts made to a private channel cannot at-mention the Team or individuals who do not have access. I’m glad Microsoft landed on the side of privacy in their implementation here.

It would be awesome if MS would have added the ability to move channels into other Teams with this rollout so we could consolidate Teams that were set up to restrict access to content. But at least we’ll be able to consolidate general-access and restricted-access content in a single Teams space going forward.

 

Preventing erronious use of the master branch on development servers

One of the web servers at work uses a refspec in the “git pull” command to map the remote development branch to the local remote-tracking master branch. This is fairly confusing (and it looks like the dev server is using the master branch unless you dig into how the pull is performed), but I can see how this prevents someone from accidentally typing something like “git checkout master” and really messing up the development environment. I can also see a dozen ways someone can issue what is a completely reasonable git command 99% of the time and really mess up the development environment.

While it is simple enough to just checkout the development branch, doing so does open us up to the possibility that someone will erroneously  deliver the production code to the development server and halt all testing. While you cannot create shell aliases for multi-word commands (or, more accurately, alias expansion is performed for the first word of a simple command is checked to see if it has an alias … so you’ll never get the multi-word command), you can define a function to intercept git commands and avoid running unwanted commands:

function git() { 
     case $* in 
         "checkout master" ) command echo "This is a dev server, do not checkout the master branch!" ;; 
         "pull origin master" ) command echo "This is a dev server, do not pull the master branch" ;; 
         * ) command git "$@" ;; 
     esac
}

Or define the desired commands and avoid running any others:

function git(){
     if echo "$@" | grep -Eq '^checkout uat$'; then
          command git $@
     elif echo "$@" | grep -Eq '^pull .+ uat$'; then
          command git $@
     else
          echo "The command $@ needs to be whitelisted before it can be run"
     fi
}

Either approach mitigates the risk of someone incorrectly using the master branch on the development server.

Handling PHP Execution Timeout

There’s no straight-forward way to handle execution timeout in PHP 5.x — it’s not like you can try/except or something. The execution time-limit is exceeded, the program terminates. Which, thinking from the perspective of the person who maintains the server, is a Good Thing … bugger up the ‘except’ component and now that becomes an infinite loop.

But I’m looking to throw a “pretty” error to the end user and have them try again with a data set that will take less time to process. Turns out, you can use a shutdown function to display something other than the generic PHP time limit exceeded page.

<?php

function runOnShutdown(){
     $arrayError = error_get_last();

     if( substr($arrayError['message'], 0, strlen("Maximum execution time of")) === "Maximum execution time of"   ){
          echo "<P>Maximum execution time";
     }
     elseif($arrayError){
          print_r($arrayError);
     }
}

function noOp($iInteger){
     for($z = 0; $z < $iInteger; $z++){
          $a = $iInteger * $iInteger;
     }
     return $iInteger;
}

register_shutdown_function('runOnShutdown');
ini_set('display_errors', '0');
ini_set('max_execution_time', 2);

// for($i = 0; $i < 10; $i++){
for($i = 0; $i < 10000; $i++){
     $j = noOp($i);
     print "<P>$j</P>\n";
}
print "<P>Done</P>\n";

?>

And the web output includes a customized message because the max execution time has been exceeded.

 

Upcoming Features from Ignite 2019

  1. Private channels should be coming this week … not my tenant yet, but soon
  2. Multi-window functionality where chats, calls, and such can pop out into another window
  3. Live captioning should land later this year — this is an obvious great feature for people with reduced hearing or frequency loss, live “closed captioning” is awesome if you’re working from a noisy location too
  4. Microsoft Whiteboard moved into general availability — it’s been a preview for quite some time now
  5. “Attendee” roll will prevent people from inadvertently sharing their screen in the middle of a meeting
  6. My Staff portal that allows managers to perform password resets (and maybe unlocks) for their employees. This is something I’ve done as custom code in IDM platforms, but it’s nice to see Microsoft incorporating ideas that reduce down-time due to password challenges.
  7. I’ll be curious to see if the healthcare-specific features move into other verticals — MS rolled out a feature that allows you to designate a contact when you’re in surgery (basically redirect all of my messages to Bob because I’m busy right now) that seemed like it would be quite useful in enterprise or education uses. The “patient coordination” feature they talk about might work as a contact management tool out of the medical realm too.
  8. URLs in Teams will be protected like the links in other Office 365 programs — if you click on a link and see something about “Advanced Threat Protection” … that’d be why 🙂

Reverting a Single File with Git

Git revert is great for resetting the entire project to a particular state – I went down a bad path, really don’t want to do this, and resetting to the state I was in this morning is exactly what I want to do. Sometimes, though … that’s not the case. I added a couple of debugging lines to a file that I don’t really need. Or I’ve gone down a bad path here but have good work in a few other files too. In those cases, you can revert a single file to the latest committed version. Run “git status” and “git diff” to confirm that it is an uncommited change.

To revert a single file to its latest committed state, use “git checkout – filename” – you can see the added line has disappeared.

 

Extracting the Transcript from Microsoft Stream Videos

Updated script available at https://www.rushworth.us/lisa/?p=6854

While Microsoft does not provide a way to export the transcript from Stream videos (thus recorded Teams meetings), it is possible to get something a nicer than the select/copy/paste from the transcript box. Click the video settings and select “Show transcript”

Display the browser developer tools – In Firefox, select the “Web Developer” sub-menu from the browser menu and select “Web Console”

This console is often used for displaying errors in a website, but it can also be used to send commands to the browser. There’s a “>>” prompt – click next to it and you’ll have a flashing cursor.

Paste this into the console:

window.angular.element(window.document.querySelectorAll('.transcript-list')).scope().$ctrl.transcriptLines.map((t) => { return t.eventData.text; })

… and hit enter. Another line will appear below what you’ve entered. Right-click on that new entry and select “Copy Object”. Now paste into a text editor or Microsoft Word.

The output could use a little cleanup. You’ll see “\r\n” anywhere there’s a newline. This

Becomes “a new tip to make things quicker. So\r\nshare your knowledge” … you could replace “\r\n” with a space (I find the newlines to be superfluous) or use a regex replacement to replace “\\r\\n” (literal string, the backslash escapes the backslash to retain it) with “\n” (an actual newline)

Each time-stamped bit of the transcript is in a separate set of quotes – I’ve got a quick replacement that takes

",\n "

And replaces it with a newline … so

Becomes

Depending on the target audience … for me, that’s where I stop. To send the transcript to someone else, I manually clean up the spaces and quote before the first line and the quote-comma on the last line.

Android 10 Backup Issue

Pixel XL with Android 10 (build QP1A.191005.007.A1). Enabled Backup, selected a backup account (only one account on the device), and found the ‘Back up now’ button was grayed out. There is a strange work around — temporarily removing the security pin. The ‘Back up now’ button is active, and a backup can be performed successfully.

*But* I have to re-register my fingerprints when the pin is disabled / re-enabled. Which means I’ve got to type my long and complex banking password on the little phone keyboard. Not cool. I was able to back up my phone using ADB but needed to input a passphrase on the device to encrypt the backup. Not sure if there’s something about the screen lock security that requires the backup to be encrypted … which then precludes the magic to-the-cloud backup from proceeding?

To back up device from command line:

adb backup -apk -shared -all -f ./backup.ab

< on device, type a passphrase and approve the device backup>

 

Amazon Music

TL;DR: Lots of content, but UI/UX fail.

The user interface for Amazon Music is terrible and lacks basic functionality (and there’s a disparity of what functionality exists across platforms). The general usability is poor — it is difficult to navigate content, tool tips were not consistently displayed on mouseOver, and there’s no easy way to select a genre and see various artists/albums/releases.

There is no simple way to find and queue music. There is no way to sort albums by release date to identify the latest albums from an artist. There is minimal information about the album displayed when you ‘View album’. You cannot play music to other devices — the search/queue function on the web platform is far better than the functionality in the FireTV app, but I am then stuck streaming to my laptop.

Removing an item from ‘My Music” required too many clicks – the quick actions on the album say ‘Add to My Music’. To remove it required clicking the hamburger button, selecting ‘view album’, clicking another hamburger button, then selecting ‘Remove from My Music’.

We experienced many bugs on the web app when adding an album to ‘my music’ (the album did not appear at all. Or the album did not appear *but* the item count was incremented — so it said there were 6 albums but only five albums displayed. Or the album did not appear, the item count incremented, and one of the already-added albums was listed twice).

When searching for an artist, selecting them in the “artist” section does not list albums from the artist. You have to scroll *past* the ‘artists’ listing and select the artist under “Albums” to view their albums.

I have not been able to find a way to “train” the suggestion algorithm. While I expect the algorithm is trained as we listen to music and possibly skip songs, I would like to be able to select genres or bands that I do not like. There’s no reason to show me four different country music channels if I do not listen to country music.

On the FireTV app, a video history of Biggie Smalls was promoted. We could not find a “Video” section to see what other video content is available.